├── .swift-version ├── VRPicker ├── Assets │ └── .gitkeep ├── Classes │ ├── .gitkeep │ ├── Int+Extension.swift │ ├── UITapGestureRecognizer+Extension.swift │ ├── PickerItemCollectionViewCell.swift │ ├── VRPickerConfiguration.swift │ ├── VRPicker.swift │ └── PickerView.swift └── Resources │ └── PickerItemCollectionViewCell.xib ├── _Pods.xcodeproj ├── Example ├── .swiftlint.yml ├── Pods │ ├── Target Support Files │ │ ├── VRPicker │ │ │ ├── VRPicker.modulemap │ │ │ ├── VRPicker-dummy.m │ │ │ ├── VRPicker-prefix.pch │ │ │ ├── VRPicker-umbrella.h │ │ │ ├── VRPicker.xcconfig │ │ │ ├── ResourceBundle-VRPicker-Info.plist │ │ │ └── Info.plist │ │ ├── Pods-VRPicker_Tests │ │ │ ├── Pods-VRPicker_Tests.modulemap │ │ │ ├── Pods-VRPicker_Tests-dummy.m │ │ │ ├── Pods-VRPicker_Tests-acknowledgements.markdown │ │ │ ├── Pods-VRPicker_Tests-umbrella.h │ │ │ ├── Pods-VRPicker_Tests.debug.xcconfig │ │ │ ├── Pods-VRPicker_Tests.release.xcconfig │ │ │ ├── Info.plist │ │ │ ├── Pods-VRPicker_Tests-acknowledgements.plist │ │ │ ├── Pods-VRPicker_Tests-frameworks.sh │ │ │ └── Pods-VRPicker_Tests-resources.sh │ │ └── Pods-VRPicker_Example │ │ │ ├── Pods-VRPicker_Example.modulemap │ │ │ ├── Pods-VRPicker_Example-dummy.m │ │ │ ├── Pods-VRPicker_Example-umbrella.h │ │ │ ├── Pods-VRPicker_Example.debug.xcconfig │ │ │ ├── Pods-VRPicker_Example.release.xcconfig │ │ │ ├── Info.plist │ │ │ ├── Pods-VRPicker_Example-acknowledgements.markdown │ │ │ ├── Pods-VRPicker_Example-acknowledgements.plist │ │ │ ├── Pods-VRPicker_Example-frameworks.sh │ │ │ └── Pods-VRPicker_Example-resources.sh │ ├── Manifest.lock │ ├── Local Podspecs │ │ └── VRPicker.podspec.json │ └── Pods.xcodeproj │ │ └── project.pbxproj ├── VRPicker.xcodeproj │ ├── project.xcworkspace │ │ └── contents.xcworkspacedata │ ├── xcshareddata │ │ └── xcschemes │ │ │ └── VRPicker-Example.xcscheme │ └── project.pbxproj ├── VRPicker.xcworkspace │ └── contents.xcworkspacedata ├── Podfile.lock ├── Podfile ├── VRPicker │ ├── AppDelegate.swift │ ├── Images.xcassets │ │ └── AppIcon.appiconset │ │ │ └── Contents.json │ ├── Info.plist │ ├── ViewController.swift │ └── Base.lproj │ │ ├── Main.storyboard │ │ └── LaunchScreen.xib └── Tests │ ├── Info.plist │ └── Tests.swift ├── Assets └── example.gif ├── UIView+Extension.swift ├── .travis.yml ├── .gitignore ├── VRPicker.podspec ├── LICENSE └── README.md /.swift-version: -------------------------------------------------------------------------------- 1 | 4.1 2 | -------------------------------------------------------------------------------- /VRPicker/Assets/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /VRPicker/Classes/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /_Pods.xcodeproj: -------------------------------------------------------------------------------- 1 | Example/Pods/Pods.xcodeproj -------------------------------------------------------------------------------- /Example/.swiftlint.yml: -------------------------------------------------------------------------------- 1 | included: 2 | - ../Example 3 | - ../VRPicker 4 | -------------------------------------------------------------------------------- /Assets/example.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vrutberg/VRPicker/HEAD/Assets/example.gif -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/VRPicker/VRPicker.modulemap: -------------------------------------------------------------------------------- 1 | framework module VRPicker { 2 | umbrella header "VRPicker-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/VRPicker/VRPicker-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_VRPicker : NSObject 3 | @end 4 | @implementation PodsDummy_VRPicker 5 | @end 6 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-VRPicker_Tests/Pods-VRPicker_Tests.modulemap: -------------------------------------------------------------------------------- 1 | framework module Pods_VRPicker_Tests { 2 | umbrella header "Pods-VRPicker_Tests-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-VRPicker_Example/Pods-VRPicker_Example.modulemap: -------------------------------------------------------------------------------- 1 | framework module Pods_VRPicker_Example { 2 | umbrella header "Pods-VRPicker_Example-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-VRPicker_Tests/Pods-VRPicker_Tests-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Pods_VRPicker_Tests : NSObject 3 | @end 4 | @implementation PodsDummy_Pods_VRPicker_Tests 5 | @end 6 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-VRPicker_Tests/Pods-VRPicker_Tests-acknowledgements.markdown: -------------------------------------------------------------------------------- 1 | # Acknowledgements 2 | This application makes use of the following third party libraries: 3 | Generated by CocoaPods - https://cocoapods.org 4 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-VRPicker_Example/Pods-VRPicker_Example-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Pods_VRPicker_Example : NSObject 3 | @end 4 | @implementation PodsDummy_Pods_VRPicker_Example 5 | @end 6 | -------------------------------------------------------------------------------- /Example/VRPicker.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/VRPicker/VRPicker-prefix.pch: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | -------------------------------------------------------------------------------- /Example/VRPicker.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /VRPicker/Classes/Int+Extension.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Int+Extension.swift 3 | // VRPicker 4 | // 5 | // Created by Viktor Rutberg on 2018-06-09. 6 | // 7 | 8 | import Foundation 9 | 10 | extension Int { 11 | func bound(minVal: Int, maxVal: Int) -> Int { 12 | return Swift.max(Swift.min(self, maxVal), minVal) 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /Example/Podfile.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - VRPicker (4.1.0) 3 | 4 | DEPENDENCIES: 5 | - VRPicker (from `../`) 6 | 7 | EXTERNAL SOURCES: 8 | VRPicker: 9 | :path: ../ 10 | 11 | SPEC CHECKSUMS: 12 | VRPicker: 51c43cdf6fc65b850a35f68bf87e46508414c346 13 | 14 | PODFILE CHECKSUM: 1fc7a7a297984d99c779e7635858bfd552a03189 15 | 16 | COCOAPODS: 1.3.1 17 | -------------------------------------------------------------------------------- /Example/Pods/Manifest.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - VRPicker (4.1.0) 3 | 4 | DEPENDENCIES: 5 | - VRPicker (from `../`) 6 | 7 | EXTERNAL SOURCES: 8 | VRPicker: 9 | :path: ../ 10 | 11 | SPEC CHECKSUMS: 12 | VRPicker: 51c43cdf6fc65b850a35f68bf87e46508414c346 13 | 14 | PODFILE CHECKSUM: 1fc7a7a297984d99c779e7635858bfd552a03189 15 | 16 | COCOAPODS: 1.3.1 17 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/VRPicker/VRPicker-umbrella.h: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | 14 | FOUNDATION_EXPORT double VRPickerVersionNumber; 15 | FOUNDATION_EXPORT const unsigned char VRPickerVersionString[]; 16 | 17 | -------------------------------------------------------------------------------- /Example/Podfile: -------------------------------------------------------------------------------- 1 | use_frameworks! 2 | platform :ios, '9.0' 3 | 4 | post_install do |installer| 5 | installer.pods_project.targets.each do |target| 6 | target.build_configurations.each do |config| 7 | config.build_settings['SWIFT_VERSION'] = '3.0' 8 | end 9 | end 10 | end 11 | 12 | target 'VRPicker_Example' do 13 | pod 'VRPicker', :path => '../' 14 | 15 | target 'VRPicker_Tests' do 16 | inherit! :search_paths 17 | end 18 | end 19 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-VRPicker_Tests/Pods-VRPicker_Tests-umbrella.h: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | 14 | FOUNDATION_EXPORT double Pods_VRPicker_TestsVersionNumber; 15 | FOUNDATION_EXPORT const unsigned char Pods_VRPicker_TestsVersionString[]; 16 | 17 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-VRPicker_Example/Pods-VRPicker_Example-umbrella.h: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | 14 | FOUNDATION_EXPORT double Pods_VRPicker_ExampleVersionNumber; 15 | FOUNDATION_EXPORT const unsigned char Pods_VRPicker_ExampleVersionString[]; 16 | 17 | -------------------------------------------------------------------------------- /VRPicker/Classes/UITapGestureRecognizer+Extension.swift: -------------------------------------------------------------------------------- 1 | // 2 | // UITapGestureRecognizer+Extension.swift 3 | // VRPicker 4 | // 5 | // Created by Viktor Rutberg on 2018-06-09. 6 | // 7 | 8 | import Foundation 9 | 10 | extension UITapGestureRecognizer { 11 | static var singleTap: UITapGestureRecognizer { 12 | let gestureRecognizer = UITapGestureRecognizer() 13 | 14 | gestureRecognizer.numberOfTapsRequired = 1 15 | gestureRecognizer.isEnabled = true 16 | gestureRecognizer.cancelsTouchesInView = false 17 | 18 | return gestureRecognizer 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-VRPicker_Tests/Pods-VRPicker_Tests.debug.xcconfig: -------------------------------------------------------------------------------- 1 | FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/VRPicker" 2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 3 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' 4 | OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/VRPicker/VRPicker.framework/Headers" 5 | PODS_BUILD_DIR = $BUILD_DIR 6 | PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 7 | PODS_PODFILE_DIR_PATH = ${SRCROOT}/. 8 | PODS_ROOT = ${SRCROOT}/Pods 9 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-VRPicker_Tests/Pods-VRPicker_Tests.release.xcconfig: -------------------------------------------------------------------------------- 1 | FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/VRPicker" 2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 3 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' 4 | OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/VRPicker/VRPicker.framework/Headers" 5 | PODS_BUILD_DIR = $BUILD_DIR 6 | PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 7 | PODS_PODFILE_DIR_PATH = ${SRCROOT}/. 8 | PODS_ROOT = ${SRCROOT}/Pods 9 | -------------------------------------------------------------------------------- /VRPicker/Classes/PickerItemCollectionViewCell.swift: -------------------------------------------------------------------------------- 1 | // 2 | // PickerItemCollectionViewCell.swift 3 | // VRPicker 4 | // 5 | // Created by Viktor Rutberg on 2017-10-16. 6 | // 7 | 8 | import Foundation 9 | 10 | class PickerItemCollectionViewCell: UICollectionViewCell { 11 | @IBOutlet var label: UILabel! 12 | 13 | func update(model: Model) { 14 | label.text = model.text 15 | label.font = model.font 16 | label.textColor = model.fontColor 17 | } 18 | 19 | struct Model { 20 | let text: String 21 | let font: UIFont 22 | let fontColor: UIColor 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /UIView+Extension.swift: -------------------------------------------------------------------------------- 1 | // 2 | // UIView+Extension.swift 3 | // VRPicker 4 | // 5 | // Created by Viktor Rutberg on 2018-06-09. 6 | // 7 | 8 | import Foundation 9 | 10 | extension UIView { 11 | func matchSize(with otherView: UIView) { 12 | NSLayoutConstraint.activate([ 13 | topAnchor.constraint(equalTo: otherView.topAnchor), 14 | bottomAnchor.constraint(equalTo: otherView.bottomAnchor), 15 | leadingAnchor.constraint(equalTo: otherView.leadingAnchor), 16 | trailingAnchor.constraint(equalTo: otherView.trailingAnchor) 17 | ]) 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | # references: 2 | # * http://www.objc.io/issue-6/travis-ci.html 3 | # * https://github.com/supermarin/xcpretty#usage 4 | 5 | osx_image: xcode9 6 | xcode_sdk: iphonesimulator11.0 7 | language: objective-c 8 | cache: cocoapods 9 | podfile: Example/Podfile 10 | before_install: 11 | - gem install cocoapods 12 | - pod install --project-directory=Example 13 | script: 14 | - set -o pipefail && xcodebuild test -workspace Example/VRPicker.xcworkspace -scheme VRPicker-Example -sdk iphonesimulator11.0 ONLY_ACTIVE_ARCH=NO -destination "platform=iOS Simulator,name=iPhone 8,OS=11.0" | xcpretty 15 | - pod lib lint 16 | notifications: 17 | email: false 18 | -------------------------------------------------------------------------------- /Example/VRPicker/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.swift 3 | // VRPicker 4 | // 5 | // Created by Viktor Rutberg on 12/17/2016. 6 | // Copyright (c) 2016 Viktor Rutberg. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | @UIApplicationMain 12 | class AppDelegate: UIResponder, UIApplicationDelegate { 13 | 14 | var window: UIWindow? 15 | 16 | private func application(application: UIApplication, 17 | didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { 18 | // Override point for customization after application launch. 19 | return true 20 | } 21 | 22 | } 23 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/VRPicker/VRPicker.xcconfig: -------------------------------------------------------------------------------- 1 | CONFIGURATION_BUILD_DIR = $PODS_CONFIGURATION_BUILD_DIR/VRPicker 2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 3 | HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Public" 4 | OTHER_LDFLAGS = -framework "UIKit" 5 | OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" 6 | PODS_BUILD_DIR = $BUILD_DIR 7 | PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 8 | PODS_ROOT = ${SRCROOT} 9 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/../.. 10 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 11 | SKIP_INSTALL = YES 12 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # OS X 2 | .DS_Store 3 | 4 | # Xcode 5 | build/ 6 | *.pbxuser 7 | !default.pbxuser 8 | *.mode1v3 9 | !default.mode1v3 10 | *.mode2v3 11 | !default.mode2v3 12 | *.perspectivev3 13 | !default.perspectivev3 14 | xcuserdata/ 15 | *.xccheckout 16 | profile 17 | *.moved-aside 18 | DerivedData 19 | *.hmap 20 | *.ipa 21 | 22 | # Bundler 23 | .bundle 24 | 25 | Carthage 26 | # We recommend against adding the Pods directory to your .gitignore. However 27 | # you should judge for yourself, the pros and cons are mentioned at: 28 | # http://guides.cocoapods.org/using/using-cocoapods.html#should-i-ignore-the-pods-directory-in-source-control 29 | # 30 | # Note: if you ignore the Pods directory, make sure to uncomment 31 | # `pod install` in .travis.yml 32 | # 33 | # Pods/ 34 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-VRPicker_Example/Pods-VRPicker_Example.debug.xcconfig: -------------------------------------------------------------------------------- 1 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES 2 | FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/VRPicker" 3 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 4 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' 5 | OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/VRPicker/VRPicker.framework/Headers" 6 | OTHER_LDFLAGS = $(inherited) -framework "VRPicker" 7 | OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" 8 | PODS_BUILD_DIR = $BUILD_DIR 9 | PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 10 | PODS_PODFILE_DIR_PATH = ${SRCROOT}/. 11 | PODS_ROOT = ${SRCROOT}/Pods 12 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-VRPicker_Example/Pods-VRPicker_Example.release.xcconfig: -------------------------------------------------------------------------------- 1 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES 2 | FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/VRPicker" 3 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 4 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' 5 | OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/VRPicker/VRPicker.framework/Headers" 6 | OTHER_LDFLAGS = $(inherited) -framework "VRPicker" 7 | OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" 8 | PODS_BUILD_DIR = $BUILD_DIR 9 | PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 10 | PODS_PODFILE_DIR_PATH = ${SRCROOT}/. 11 | PODS_ROOT = ${SRCROOT}/Pods 12 | -------------------------------------------------------------------------------- /Example/Pods/Local Podspecs/VRPicker.podspec.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "VRPicker", 3 | "version": "4.1.0", 4 | "summary": "A configurable picker for iOS apps written in Swift", 5 | "description": "VRPicker is a configurable and simple horizontal picker for iOS apps written entirely in Swift.", 6 | "homepage": "https://github.com/vrutberg/VRPicker", 7 | "license": { 8 | "type": "MIT", 9 | "file": "LICENSE" 10 | }, 11 | "authors": { 12 | "Viktor Rutberg": "wishie@gmail.com" 13 | }, 14 | "source": { 15 | "git": "https://github.com/vrutberg/VRPicker.git", 16 | "tag": "4.1.0" 17 | }, 18 | "platforms": { 19 | "ios": "9.0" 20 | }, 21 | "source_files": "VRPicker/Classes/**/*", 22 | "resources": "VRPicker/Resources/**/*", 23 | "frameworks": "UIKit" 24 | } 25 | -------------------------------------------------------------------------------- /Example/VRPicker/Images.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "iphone", 5 | "size" : "29x29", 6 | "scale" : "2x" 7 | }, 8 | { 9 | "idiom" : "iphone", 10 | "size" : "29x29", 11 | "scale" : "3x" 12 | }, 13 | { 14 | "idiom" : "iphone", 15 | "size" : "40x40", 16 | "scale" : "2x" 17 | }, 18 | { 19 | "idiom" : "iphone", 20 | "size" : "40x40", 21 | "scale" : "3x" 22 | }, 23 | { 24 | "idiom" : "iphone", 25 | "size" : "60x60", 26 | "scale" : "2x" 27 | }, 28 | { 29 | "idiom" : "iphone", 30 | "size" : "60x60", 31 | "scale" : "3x" 32 | } 33 | ], 34 | "info" : { 35 | "version" : 1, 36 | "author" : "xcode" 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /Example/Tests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | 24 | 25 | -------------------------------------------------------------------------------- /VRPicker.podspec: -------------------------------------------------------------------------------- 1 | Pod::Spec.new do |s| 2 | s.name = 'VRPicker' 3 | s.version = '4.1.0' 4 | s.summary = 'A configurable picker for iOS apps written in Swift' 5 | 6 | s.description = <<-DESC 7 | VRPicker is a configurable and simple horizontal picker for iOS apps written entirely in Swift. 8 | DESC 9 | 10 | s.homepage = 'https://github.com/vrutberg/VRPicker' 11 | s.license = { :type => 'MIT', :file => 'LICENSE' } 12 | s.author = { 'Viktor Rutberg' => 'wishie@gmail.com' } 13 | s.source = { :git => 'https://github.com/vrutberg/VRPicker.git', :tag => s.version.to_s } 14 | 15 | s.ios.deployment_target = '9.0' 16 | 17 | s.source_files = 'VRPicker/Classes/**/*' 18 | s.resources = 'VRPicker/Resources/**/*' 19 | s.frameworks = 'UIKit' 20 | end 21 | -------------------------------------------------------------------------------- /Example/Tests/Tests.swift: -------------------------------------------------------------------------------- 1 | import UIKit 2 | import XCTest 3 | import VRPicker 4 | 5 | class Tests: XCTestCase { 6 | override func setUp() { 7 | super.setUp() 8 | // Put setup code here. This method is called before the invocation of each test method in the class. 9 | } 10 | 11 | override func tearDown() { 12 | // Put teardown code here. This method is called after the invocation of each test method in the class. 13 | super.tearDown() 14 | } 15 | 16 | func testExample() { 17 | // This is an example of a functional test case. 18 | XCTAssert(true, "Pass") 19 | } 20 | 21 | func testPerformanceExample() { 22 | // This is an example of a performance test case. 23 | self.measure { 24 | // Put the code you want to measure the time of here. 25 | } 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/VRPicker/ResourceBundle-VRPicker-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleIdentifier 8 | ${PRODUCT_BUNDLE_IDENTIFIER} 9 | CFBundleInfoDictionaryVersion 10 | 6.0 11 | CFBundleName 12 | ${PRODUCT_NAME} 13 | CFBundlePackageType 14 | BNDL 15 | CFBundleShortVersionString 16 | 4.0.0 17 | CFBundleSignature 18 | ???? 19 | CFBundleVersion 20 | 1 21 | NSPrincipalClass 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/VRPicker/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | ${PRODUCT_BUNDLE_IDENTIFIER} 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | ${PRODUCT_NAME} 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 4.1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-VRPicker_Tests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | ${PRODUCT_BUNDLE_IDENTIFIER} 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | ${PRODUCT_NAME} 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-VRPicker_Example/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | ${PRODUCT_BUNDLE_IDENTIFIER} 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | ${PRODUCT_NAME} 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-VRPicker_Tests/Pods-VRPicker_Tests-acknowledgements.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PreferenceSpecifiers 6 | 7 | 8 | FooterText 9 | This application makes use of the following third party libraries: 10 | Title 11 | Acknowledgements 12 | Type 13 | PSGroupSpecifier 14 | 15 | 16 | FooterText 17 | Generated by CocoaPods - https://cocoapods.org 18 | Title 19 | 20 | Type 21 | PSGroupSpecifier 22 | 23 | 24 | StringsTable 25 | Acknowledgements 26 | Title 27 | Acknowledgements 28 | 29 | 30 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2016 Viktor Rutberg 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy 4 | of this software and associated documentation files (the "Software"), to deal 5 | in the Software without restriction, including without limitation the rights 6 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | copies of the Software, and to permit persons to whom the Software is 8 | furnished to do so, subject to the following conditions: 9 | 10 | The above copyright notice and this permission notice shall be included in 11 | all copies or substantial portions of the Software. 12 | 13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 19 | THE SOFTWARE. 20 | -------------------------------------------------------------------------------- /Example/VRPicker/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | APPL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | LSRequiresIPhoneOS 24 | 25 | UILaunchStoryboardName 26 | LaunchScreen 27 | UIMainStoryboardFile 28 | Main 29 | UIRequiredDeviceCapabilities 30 | 31 | armv7 32 | 33 | UISupportedInterfaceOrientations 34 | 35 | UIInterfaceOrientationPortrait 36 | UIInterfaceOrientationLandscapeLeft 37 | 38 | 39 | 40 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-VRPicker_Example/Pods-VRPicker_Example-acknowledgements.markdown: -------------------------------------------------------------------------------- 1 | # Acknowledgements 2 | This application makes use of the following third party libraries: 3 | 4 | ## VRPicker 5 | 6 | Copyright (c) 2016 Viktor Rutberg 7 | 8 | Permission is hereby granted, free of charge, to any person obtaining a copy 9 | of this software and associated documentation files (the "Software"), to deal 10 | in the Software without restriction, including without limitation the rights 11 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 12 | copies of the Software, and to permit persons to whom the Software is 13 | furnished to do so, subject to the following conditions: 14 | 15 | The above copyright notice and this permission notice shall be included in 16 | all copies or substantial portions of the Software. 17 | 18 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 19 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 20 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 21 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 22 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 23 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 24 | THE SOFTWARE. 25 | 26 | Generated by CocoaPods - https://cocoapods.org 27 | -------------------------------------------------------------------------------- /Example/VRPicker/ViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.swift 3 | // VRPicker 4 | // 5 | // Created by Viktor Rutberg on 12/17/2016. 6 | // Copyright (c) 2016 Viktor Rutberg. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | import VRPicker 11 | 12 | struct PickerItem: VRPickerItem { 13 | let number: Int 14 | 15 | var description: String { 16 | return "\(number) yrs" 17 | } 18 | } 19 | 20 | class ViewController: UIViewController { 21 | override func viewDidLoad() { 22 | super.viewDidLoad() 23 | 24 | let config = VRPickerConfiguration(items: (1...100).map { PickerItem(number: $0) }, 25 | defaultSelectedIndex: 99, 26 | selectionRadiusInPercent: 0.5, 27 | itemWidth: 80) 28 | 29 | let pickerView = VRPicker(with: config, frame: .zero) 30 | 31 | pickerView.backgroundColor = .white 32 | pickerView.didSelectItem = self.pickerDidSelect 33 | pickerView.translatesAutoresizingMaskIntoConstraints = false 34 | 35 | view.addSubview(pickerView) 36 | 37 | let layoutMargins = view.layoutMarginsGuide 38 | 39 | NSLayoutConstraint.activate([pickerView.topAnchor.constraint(equalTo: layoutMargins.topAnchor), 40 | pickerView.leadingAnchor.constraint(equalTo: layoutMargins.leadingAnchor), 41 | pickerView.trailingAnchor.constraint(equalTo: layoutMargins.trailingAnchor), 42 | pickerView.heightAnchor.constraint(equalToConstant: 80)]) 43 | } 44 | 45 | func pickerDidSelect(_ item: PickerItem) { 46 | print("didSelectItem: \(item)") 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /Example/VRPicker/Base.lproj/Main.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-VRPicker_Example/Pods-VRPicker_Example-acknowledgements.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PreferenceSpecifiers 6 | 7 | 8 | FooterText 9 | This application makes use of the following third party libraries: 10 | Title 11 | Acknowledgements 12 | Type 13 | PSGroupSpecifier 14 | 15 | 16 | FooterText 17 | Copyright (c) 2016 Viktor Rutberg <wishie@gmail.com> 18 | 19 | Permission is hereby granted, free of charge, to any person obtaining a copy 20 | of this software and associated documentation files (the "Software"), to deal 21 | in the Software without restriction, including without limitation the rights 22 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 23 | copies of the Software, and to permit persons to whom the Software is 24 | furnished to do so, subject to the following conditions: 25 | 26 | The above copyright notice and this permission notice shall be included in 27 | all copies or substantial portions of the Software. 28 | 29 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 30 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 31 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 32 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 33 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 34 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 35 | THE SOFTWARE. 36 | 37 | License 38 | MIT 39 | Title 40 | VRPicker 41 | Type 42 | PSGroupSpecifier 43 | 44 | 45 | FooterText 46 | Generated by CocoaPods - https://cocoapods.org 47 | Title 48 | 49 | Type 50 | PSGroupSpecifier 51 | 52 | 53 | StringsTable 54 | Acknowledgements 55 | Title 56 | Acknowledgements 57 | 58 | 59 | -------------------------------------------------------------------------------- /VRPicker/Classes/VRPickerConfiguration.swift: -------------------------------------------------------------------------------- 1 | // 2 | // VRPickerConfiguration.swift 3 | // Pods 4 | // 5 | // Created by Viktor Rutberg on 2016-12-17. 6 | // 7 | // 8 | 9 | import Foundation 10 | 11 | public enum GradientPosition { 12 | case above 13 | case below 14 | } 15 | 16 | public protocol VRPickerItem: CustomStringConvertible {} 17 | 18 | public struct VRPickerConfiguration { 19 | let items: [T] 20 | let defaultSelectedIndex: Int 21 | 22 | let selectedFont: UIFont 23 | let selectedFontColor: UIColor 24 | let nonSelectedFont: UIFont 25 | let nonSelectedFontColor: UIColor 26 | 27 | let selectionRadiusInPercent: Double 28 | let selectionBackgroundColor: UIColor 29 | 30 | let gradientColors: [UIColor] 31 | let gradientWidthInPercent: Double 32 | let gradientPosition: GradientPosition 33 | 34 | let itemWidth: Int 35 | let sliderVelocityCoefficient: Double 36 | 37 | public init(items: [T], 38 | defaultSelectedIndex: Int = 0, 39 | 40 | selectedFont: UIFont = UIFont.boldSystemFont(ofSize: 20), 41 | selectedFontColor: UIColor = .white, 42 | nonSelectedFont: UIFont = UIFont.systemFont(ofSize: 14), 43 | nonSelectedFontColor: UIColor = .black, 44 | 45 | selectionRadiusInPercent: Double = 0.3, 46 | selectionBackgroundColor: UIColor = .green, 47 | 48 | gradientColors: [UIColor] = [UIColor.white.withAlphaComponent(0.8), 49 | UIColor.white.withAlphaComponent(0)], 50 | gradientWidthInPercent: Double = 0.4, 51 | gradientPosition: GradientPosition = .above, 52 | 53 | itemWidth: Int = 100, 54 | sliderVelocityCoefficient: Double = 60) { 55 | self.items = items 56 | self.defaultSelectedIndex = defaultSelectedIndex 57 | 58 | self.selectedFont = selectedFont 59 | self.selectedFontColor = selectedFontColor 60 | self.nonSelectedFont = nonSelectedFont 61 | self.nonSelectedFontColor = nonSelectedFontColor 62 | 63 | self.selectionRadiusInPercent = selectionRadiusInPercent 64 | self.selectionBackgroundColor = selectionBackgroundColor 65 | 66 | self.gradientColors = gradientColors 67 | self.gradientWidthInPercent = gradientWidthInPercent 68 | self.gradientPosition = gradientPosition 69 | 70 | self.itemWidth = itemWidth 71 | self.sliderVelocityCoefficient = sliderVelocityCoefficient 72 | } 73 | 74 | internal var itemsAsStrings: [String] { 75 | return items.map { $0.description } 76 | } 77 | } 78 | -------------------------------------------------------------------------------- /VRPicker/Resources/PickerItemCollectionViewCell.xib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | -------------------------------------------------------------------------------- /Example/VRPicker/Base.lproj/LaunchScreen.xib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 25 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # VRPicker 2 | 3 | [![CI Status](http://img.shields.io/travis/vrutberg/VRPicker.svg?style=flat)](https://travis-ci.org/vrutberg/VRPicker) 4 | [![Version](https://img.shields.io/cocoapods/v/VRPicker.svg?style=flat)](http://cocoapods.org/pods/VRPicker) 5 | [![License](https://img.shields.io/cocoapods/l/VRPicker.svg?style=flat)](http://cocoapods.org/pods/VRPicker) 6 | [![Platform](https://img.shields.io/cocoapods/p/VRPicker.svg?style=flat)](http://cocoapods.org/pods/VRPicker) 7 | 8 | ## Example 9 | 10 | ![Example](Assets/example.gif) 11 | 12 | To run the example project, clone the repo, and run `pod install` from the Example directory first. 13 | 14 | ## Installation 15 | 16 | VRPicker is available through [CocoaPods](http://cocoapods.org). To install 17 | it, simply add the following line to your Podfile: 18 | 19 | ```ruby 20 | pod "VRPicker" 21 | ``` 22 | 23 | ## Usage 24 | 25 | The `VRPicker` class is generic, and accepts one type parameter which must be a subclass of `VRPickerItem`. The type you pass in here will be your item class. `VRPicker` is instantiated with an instance of `VRPickerConfiguration` (which also accepts one type parameter), and a `CGRect` for frame: 26 | 27 | ```swift 28 | struct PickerItem: VRPickerItem { 29 | let number: Int 30 | 31 | var description: String { 32 | return "\(number) yrs" 33 | } 34 | } 35 | 36 | let config = VRPickerConfiguration(items: ...) 37 | let pickerView = VRPicker(with: config, frame: .zero) 38 | 39 | pickerView.didSelectItem = { item in 40 | print(item) 41 | } 42 | ``` 43 | 44 | As done in the example above, the `didSelectItem` function property should be set to receive updates about which item is currently selected. 45 | 46 | ### Configuration 47 | 48 | `VRPickerConfiguration`, which is used when instantiating an instance of `VRPicker`, holds the various properties which can be configured. 49 | 50 | All configuration properties have default values. 51 | 52 | #### `items: [T]` (no default value) 53 | 54 | The list of items to display in the picker. The items must conform to the protocol `VRPickerItem`, which extends `CustomStringConvertible`. 55 | 56 | #### `defaultSelectedIndex: Int` (default value: `0`) 57 | 58 | Which index should be selected when the picker is initialized. 59 | 60 | #### `selectedFont: UIFont` (default value: `UIFont.boldSystemFont(ofSize: 20)`) 61 | 62 | Which font to use for the currently selected item. 63 | 64 | #### `selectedFontColor: UIColor` (default value: `UIColor.white`) 65 | 66 | Which font color to use for the currently selected item. 67 | 68 | #### `nonSelectedFont: UIFont` (default value: `UIFont.systemFont(ofSize: 14)`) 69 | 70 | Which font to use for the non-selected items. 71 | 72 | #### `nonSelectedFontColor: UIColor` (default value: `UIColor.black`) 73 | 74 | Which font color to use for the non-selected items. 75 | 76 | #### `selectionRadiusInPercent: Double` (default value: `0.3`) 77 | 78 | The radius of the selection circle, in percent. (1.0 = 100 %) 79 | 80 | #### `selectionBackgroundColor: UIColor` (default value: `UIColor.green`) 81 | 82 | Which background color to use for the selection circle. 83 | 84 | #### `gradientColors: [UIColor]` (default value: `[UIColor.white.withAlphaComponent(0.8), UIColor.white.withAlphaComponent(0)]`) 85 | 86 | An array of gradient colors to use for the left and right sides. 87 | 88 | #### `gradientWidthInPercent: Double` (default value: `0.4`) 89 | 90 | The gradient width, in percent, of the entire picker width. (1.0 = 100 %) 91 | 92 | #### `gradientPosition: GradientPosition` (default value: `GradientPosition.above`) 93 | 94 | Which position to use for the gradients, above or below the items. 95 | 96 | #### `itemWidth: Int` (default value: `100`) 97 | 98 | Which width, in points, to use for the items. 99 | 100 | #### `sliderVelocityCoefficient: Double` (default value: `60`) 101 | 102 | Velocity coefficient for the scroll views. 103 | 104 | ## Author 105 | 106 | Viktor Rutberg, wishie@gmail.com 107 | 108 | ## License 109 | 110 | VRPicker is available under the MIT license. See the LICENSE file for more info. 111 | -------------------------------------------------------------------------------- /Example/VRPicker.xcodeproj/xcshareddata/xcschemes/VRPicker-Example.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 29 | 35 | 36 | 37 | 38 | 39 | 44 | 45 | 47 | 53 | 54 | 55 | 56 | 57 | 63 | 64 | 65 | 66 | 67 | 68 | 78 | 80 | 86 | 87 | 88 | 89 | 90 | 91 | 97 | 98 | 104 | 105 | 106 | 107 | 109 | 110 | 113 | 114 | 115 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-VRPicker_Tests/Pods-VRPicker_Tests-frameworks.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | set -e 3 | 4 | echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 5 | mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 6 | 7 | SWIFT_STDLIB_PATH="${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" 8 | 9 | # This protects against multiple targets copying the same framework dependency at the same time. The solution 10 | # was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html 11 | RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????") 12 | 13 | install_framework() 14 | { 15 | if [ -r "${BUILT_PRODUCTS_DIR}/$1" ]; then 16 | local source="${BUILT_PRODUCTS_DIR}/$1" 17 | elif [ -r "${BUILT_PRODUCTS_DIR}/$(basename "$1")" ]; then 18 | local source="${BUILT_PRODUCTS_DIR}/$(basename "$1")" 19 | elif [ -r "$1" ]; then 20 | local source="$1" 21 | fi 22 | 23 | local destination="${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 24 | 25 | if [ -L "${source}" ]; then 26 | echo "Symlinked..." 27 | source="$(readlink "${source}")" 28 | fi 29 | 30 | # Use filter instead of exclude so missing patterns don't throw errors. 31 | echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${destination}\"" 32 | rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${destination}" 33 | 34 | local basename 35 | basename="$(basename -s .framework "$1")" 36 | binary="${destination}/${basename}.framework/${basename}" 37 | if ! [ -r "$binary" ]; then 38 | binary="${destination}/${basename}" 39 | fi 40 | 41 | # Strip invalid architectures so "fat" simulator / device frameworks work on device 42 | if [[ "$(file "$binary")" == *"dynamically linked shared library"* ]]; then 43 | strip_invalid_archs "$binary" 44 | fi 45 | 46 | # Resign the code if required by the build settings to avoid unstable apps 47 | code_sign_if_enabled "${destination}/$(basename "$1")" 48 | 49 | # Embed linked Swift runtime libraries. No longer necessary as of Xcode 7. 50 | if [ "${XCODE_VERSION_MAJOR}" -lt 7 ]; then 51 | local swift_runtime_libs 52 | swift_runtime_libs=$(xcrun otool -LX "$binary" | grep --color=never @rpath/libswift | sed -E s/@rpath\\/\(.+dylib\).*/\\1/g | uniq -u && exit ${PIPESTATUS[0]}) 53 | for lib in $swift_runtime_libs; do 54 | echo "rsync -auv \"${SWIFT_STDLIB_PATH}/${lib}\" \"${destination}\"" 55 | rsync -auv "${SWIFT_STDLIB_PATH}/${lib}" "${destination}" 56 | code_sign_if_enabled "${destination}/${lib}" 57 | done 58 | fi 59 | } 60 | 61 | # Copies the dSYM of a vendored framework 62 | install_dsym() { 63 | local source="$1" 64 | if [ -r "$source" ]; then 65 | echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${DWARF_DSYM_FOLDER_PATH}\"" 66 | rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${DWARF_DSYM_FOLDER_PATH}" 67 | fi 68 | } 69 | 70 | # Signs a framework with the provided identity 71 | code_sign_if_enabled() { 72 | if [ -n "${EXPANDED_CODE_SIGN_IDENTITY}" -a "${CODE_SIGNING_REQUIRED}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then 73 | # Use the current code_sign_identitiy 74 | echo "Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}" 75 | local code_sign_cmd="/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS} --preserve-metadata=identifier,entitlements '$1'" 76 | 77 | if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then 78 | code_sign_cmd="$code_sign_cmd &" 79 | fi 80 | echo "$code_sign_cmd" 81 | eval "$code_sign_cmd" 82 | fi 83 | } 84 | 85 | # Strip invalid architectures 86 | strip_invalid_archs() { 87 | binary="$1" 88 | # Get architectures for current file 89 | archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | rev)" 90 | stripped="" 91 | for arch in $archs; do 92 | if ! [[ "${ARCHS}" == *"$arch"* ]]; then 93 | # Strip non-valid architectures in-place 94 | lipo -remove "$arch" -output "$binary" "$binary" || exit 1 95 | stripped="$stripped $arch" 96 | fi 97 | done 98 | if [[ "$stripped" ]]; then 99 | echo "Stripped $binary of architectures:$stripped" 100 | fi 101 | } 102 | 103 | if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then 104 | wait 105 | fi 106 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-VRPicker_Example/Pods-VRPicker_Example-frameworks.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | set -e 3 | 4 | echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 5 | mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 6 | 7 | SWIFT_STDLIB_PATH="${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" 8 | 9 | # This protects against multiple targets copying the same framework dependency at the same time. The solution 10 | # was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html 11 | RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????") 12 | 13 | install_framework() 14 | { 15 | if [ -r "${BUILT_PRODUCTS_DIR}/$1" ]; then 16 | local source="${BUILT_PRODUCTS_DIR}/$1" 17 | elif [ -r "${BUILT_PRODUCTS_DIR}/$(basename "$1")" ]; then 18 | local source="${BUILT_PRODUCTS_DIR}/$(basename "$1")" 19 | elif [ -r "$1" ]; then 20 | local source="$1" 21 | fi 22 | 23 | local destination="${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 24 | 25 | if [ -L "${source}" ]; then 26 | echo "Symlinked..." 27 | source="$(readlink "${source}")" 28 | fi 29 | 30 | # Use filter instead of exclude so missing patterns don't throw errors. 31 | echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${destination}\"" 32 | rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${destination}" 33 | 34 | local basename 35 | basename="$(basename -s .framework "$1")" 36 | binary="${destination}/${basename}.framework/${basename}" 37 | if ! [ -r "$binary" ]; then 38 | binary="${destination}/${basename}" 39 | fi 40 | 41 | # Strip invalid architectures so "fat" simulator / device frameworks work on device 42 | if [[ "$(file "$binary")" == *"dynamically linked shared library"* ]]; then 43 | strip_invalid_archs "$binary" 44 | fi 45 | 46 | # Resign the code if required by the build settings to avoid unstable apps 47 | code_sign_if_enabled "${destination}/$(basename "$1")" 48 | 49 | # Embed linked Swift runtime libraries. No longer necessary as of Xcode 7. 50 | if [ "${XCODE_VERSION_MAJOR}" -lt 7 ]; then 51 | local swift_runtime_libs 52 | swift_runtime_libs=$(xcrun otool -LX "$binary" | grep --color=never @rpath/libswift | sed -E s/@rpath\\/\(.+dylib\).*/\\1/g | uniq -u && exit ${PIPESTATUS[0]}) 53 | for lib in $swift_runtime_libs; do 54 | echo "rsync -auv \"${SWIFT_STDLIB_PATH}/${lib}\" \"${destination}\"" 55 | rsync -auv "${SWIFT_STDLIB_PATH}/${lib}" "${destination}" 56 | code_sign_if_enabled "${destination}/${lib}" 57 | done 58 | fi 59 | } 60 | 61 | # Copies the dSYM of a vendored framework 62 | install_dsym() { 63 | local source="$1" 64 | if [ -r "$source" ]; then 65 | echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${DWARF_DSYM_FOLDER_PATH}\"" 66 | rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${DWARF_DSYM_FOLDER_PATH}" 67 | fi 68 | } 69 | 70 | # Signs a framework with the provided identity 71 | code_sign_if_enabled() { 72 | if [ -n "${EXPANDED_CODE_SIGN_IDENTITY}" -a "${CODE_SIGNING_REQUIRED}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then 73 | # Use the current code_sign_identitiy 74 | echo "Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}" 75 | local code_sign_cmd="/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS} --preserve-metadata=identifier,entitlements '$1'" 76 | 77 | if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then 78 | code_sign_cmd="$code_sign_cmd &" 79 | fi 80 | echo "$code_sign_cmd" 81 | eval "$code_sign_cmd" 82 | fi 83 | } 84 | 85 | # Strip invalid architectures 86 | strip_invalid_archs() { 87 | binary="$1" 88 | # Get architectures for current file 89 | archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | rev)" 90 | stripped="" 91 | for arch in $archs; do 92 | if ! [[ "${ARCHS}" == *"$arch"* ]]; then 93 | # Strip non-valid architectures in-place 94 | lipo -remove "$arch" -output "$binary" "$binary" || exit 1 95 | stripped="$stripped $arch" 96 | fi 97 | done 98 | if [[ "$stripped" ]]; then 99 | echo "Stripped $binary of architectures:$stripped" 100 | fi 101 | } 102 | 103 | 104 | if [[ "$CONFIGURATION" == "Debug" ]]; then 105 | install_framework "${BUILT_PRODUCTS_DIR}/VRPicker/VRPicker.framework" 106 | fi 107 | if [[ "$CONFIGURATION" == "Release" ]]; then 108 | install_framework "${BUILT_PRODUCTS_DIR}/VRPicker/VRPicker.framework" 109 | fi 110 | if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then 111 | wait 112 | fi 113 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-VRPicker_Tests/Pods-VRPicker_Tests-resources.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | set -e 3 | 4 | mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 5 | 6 | RESOURCES_TO_COPY=${PODS_ROOT}/resources-to-copy-${TARGETNAME}.txt 7 | > "$RESOURCES_TO_COPY" 8 | 9 | XCASSET_FILES=() 10 | 11 | # This protects against multiple targets copying the same framework dependency at the same time. The solution 12 | # was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html 13 | RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????") 14 | 15 | case "${TARGETED_DEVICE_FAMILY}" in 16 | 1,2) 17 | TARGET_DEVICE_ARGS="--target-device ipad --target-device iphone" 18 | ;; 19 | 1) 20 | TARGET_DEVICE_ARGS="--target-device iphone" 21 | ;; 22 | 2) 23 | TARGET_DEVICE_ARGS="--target-device ipad" 24 | ;; 25 | 3) 26 | TARGET_DEVICE_ARGS="--target-device tv" 27 | ;; 28 | 4) 29 | TARGET_DEVICE_ARGS="--target-device watch" 30 | ;; 31 | *) 32 | TARGET_DEVICE_ARGS="--target-device mac" 33 | ;; 34 | esac 35 | 36 | install_resource() 37 | { 38 | if [[ "$1" = /* ]] ; then 39 | RESOURCE_PATH="$1" 40 | else 41 | RESOURCE_PATH="${PODS_ROOT}/$1" 42 | fi 43 | if [[ ! -e "$RESOURCE_PATH" ]] ; then 44 | cat << EOM 45 | error: Resource "$RESOURCE_PATH" not found. Run 'pod install' to update the copy resources script. 46 | EOM 47 | exit 1 48 | fi 49 | case $RESOURCE_PATH in 50 | *.storyboard) 51 | echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" || true 52 | ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS} 53 | ;; 54 | *.xib) 55 | echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" || true 56 | ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS} 57 | ;; 58 | *.framework) 59 | echo "mkdir -p ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" || true 60 | mkdir -p "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 61 | echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" $RESOURCE_PATH ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" || true 62 | rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 63 | ;; 64 | *.xcdatamodel) 65 | echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH"`.mom\"" || true 66 | xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodel`.mom" 67 | ;; 68 | *.xcdatamodeld) 69 | echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd\"" || true 70 | xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd" 71 | ;; 72 | *.xcmappingmodel) 73 | echo "xcrun mapc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm\"" || true 74 | xcrun mapc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm" 75 | ;; 76 | *.xcassets) 77 | ABSOLUTE_XCASSET_FILE="$RESOURCE_PATH" 78 | XCASSET_FILES+=("$ABSOLUTE_XCASSET_FILE") 79 | ;; 80 | *) 81 | echo "$RESOURCE_PATH" || true 82 | echo "$RESOURCE_PATH" >> "$RESOURCES_TO_COPY" 83 | ;; 84 | esac 85 | } 86 | 87 | mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 88 | rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 89 | if [[ "${ACTION}" == "install" ]] && [[ "${SKIP_INSTALL}" == "NO" ]]; then 90 | mkdir -p "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 91 | rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 92 | fi 93 | rm -f "$RESOURCES_TO_COPY" 94 | 95 | if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ -n "$XCASSET_FILES" ] 96 | then 97 | # Find all other xcassets (this unfortunately includes those of path pods and other targets). 98 | OTHER_XCASSETS=$(find "$PWD" -iname "*.xcassets" -type d) 99 | while read line; do 100 | if [[ $line != "${PODS_ROOT}*" ]]; then 101 | XCASSET_FILES+=("$line") 102 | fi 103 | done <<<"$OTHER_XCASSETS" 104 | 105 | printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 106 | fi 107 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-VRPicker_Example/Pods-VRPicker_Example-resources.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | set -e 3 | 4 | mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 5 | 6 | RESOURCES_TO_COPY=${PODS_ROOT}/resources-to-copy-${TARGETNAME}.txt 7 | > "$RESOURCES_TO_COPY" 8 | 9 | XCASSET_FILES=() 10 | 11 | # This protects against multiple targets copying the same framework dependency at the same time. The solution 12 | # was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html 13 | RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????") 14 | 15 | case "${TARGETED_DEVICE_FAMILY}" in 16 | 1,2) 17 | TARGET_DEVICE_ARGS="--target-device ipad --target-device iphone" 18 | ;; 19 | 1) 20 | TARGET_DEVICE_ARGS="--target-device iphone" 21 | ;; 22 | 2) 23 | TARGET_DEVICE_ARGS="--target-device ipad" 24 | ;; 25 | 3) 26 | TARGET_DEVICE_ARGS="--target-device tv" 27 | ;; 28 | 4) 29 | TARGET_DEVICE_ARGS="--target-device watch" 30 | ;; 31 | *) 32 | TARGET_DEVICE_ARGS="--target-device mac" 33 | ;; 34 | esac 35 | 36 | install_resource() 37 | { 38 | if [[ "$1" = /* ]] ; then 39 | RESOURCE_PATH="$1" 40 | else 41 | RESOURCE_PATH="${PODS_ROOT}/$1" 42 | fi 43 | if [[ ! -e "$RESOURCE_PATH" ]] ; then 44 | cat << EOM 45 | error: Resource "$RESOURCE_PATH" not found. Run 'pod install' to update the copy resources script. 46 | EOM 47 | exit 1 48 | fi 49 | case $RESOURCE_PATH in 50 | *.storyboard) 51 | echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" || true 52 | ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS} 53 | ;; 54 | *.xib) 55 | echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" || true 56 | ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS} 57 | ;; 58 | *.framework) 59 | echo "mkdir -p ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" || true 60 | mkdir -p "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 61 | echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" $RESOURCE_PATH ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" || true 62 | rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 63 | ;; 64 | *.xcdatamodel) 65 | echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH"`.mom\"" || true 66 | xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodel`.mom" 67 | ;; 68 | *.xcdatamodeld) 69 | echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd\"" || true 70 | xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd" 71 | ;; 72 | *.xcmappingmodel) 73 | echo "xcrun mapc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm\"" || true 74 | xcrun mapc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm" 75 | ;; 76 | *.xcassets) 77 | ABSOLUTE_XCASSET_FILE="$RESOURCE_PATH" 78 | XCASSET_FILES+=("$ABSOLUTE_XCASSET_FILE") 79 | ;; 80 | *) 81 | echo "$RESOURCE_PATH" || true 82 | echo "$RESOURCE_PATH" >> "$RESOURCES_TO_COPY" 83 | ;; 84 | esac 85 | } 86 | 87 | mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 88 | rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 89 | if [[ "${ACTION}" == "install" ]] && [[ "${SKIP_INSTALL}" == "NO" ]]; then 90 | mkdir -p "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 91 | rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 92 | fi 93 | rm -f "$RESOURCES_TO_COPY" 94 | 95 | if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ -n "$XCASSET_FILES" ] 96 | then 97 | # Find all other xcassets (this unfortunately includes those of path pods and other targets). 98 | OTHER_XCASSETS=$(find "$PWD" -iname "*.xcassets" -type d) 99 | while read line; do 100 | if [[ $line != "${PODS_ROOT}*" ]]; then 101 | XCASSET_FILES+=("$line") 102 | fi 103 | done <<<"$OTHER_XCASSETS" 104 | 105 | printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 106 | fi 107 | -------------------------------------------------------------------------------- /VRPicker/Classes/VRPicker.swift: -------------------------------------------------------------------------------- 1 | // 2 | // VRPicker.swift 3 | // Pods 4 | // 5 | // Created by Viktor Rutberg on 2016-12-17. 6 | // 7 | 8 | import Foundation 9 | import UIKit 10 | 11 | public class VRPicker: UIControl, PickerViewDelegate { 12 | private let configuration: VRPickerConfiguration 13 | 14 | private var maskingLayer: CAShapeLayer? 15 | private var circleLayer: CAShapeLayer? 16 | 17 | private(set) var selectedIndex: Int 18 | 19 | public var didSelectItem: (T) -> Void = { _ in } 20 | 21 | public init(with configuration: VRPickerConfiguration, frame: CGRect) { 22 | self.configuration = configuration 23 | selectedIndex = configuration.defaultSelectedIndex 24 | 25 | super.init(frame: frame) 26 | 27 | setupGradientContainerView() 28 | setupSelectionPickerView() 29 | setupPickerView() 30 | 31 | bringSubview(toFront: pickerView) 32 | 33 | switch configuration.gradientPosition { 34 | case .above: 35 | bringSubview(toFront: gradientContainerView) 36 | 37 | case .below: 38 | sendSubview(toBack: gradientContainerView) 39 | } 40 | } 41 | 42 | public required init?(coder aDecoder: NSCoder) { 43 | fatalError("init(coder:) has not been implemented") 44 | } 45 | 46 | private func updateSubviews() { 47 | let gradientWidth = Int(Double(frame.width) * configuration.gradientWidthInPercent) 48 | 49 | leftGradientLayer.frame = CGRect(x: 0, y: 0, width: gradientWidth, height: Int(frame.height)) 50 | rightGradientLayer.frame = CGRect(x: Int(frame.width) - gradientWidth, y: 0, 51 | width: gradientWidth, height: Int(frame.height)) 52 | 53 | maskingLayer?.removeFromSuperlayer() 54 | maskingLayer = nil 55 | 56 | let newMaskingLayer = createMaskingLayer() 57 | selectionPickerView.layer.addSublayer(newMaskingLayer) 58 | maskingLayer = newMaskingLayer 59 | 60 | selectionPickerView.layer.mask = createCircleLayer() 61 | pickerView.layer.mask = createMaskingLayer() 62 | } 63 | 64 | private lazy var selectionPickerView = self.createPickerView(selection: true) 65 | private lazy var pickerView = self.createPickerView(selection: false) 66 | 67 | private func createPickerView(selection: Bool) -> PickerView { 68 | let itemFont = selection ? configuration.selectedFont : configuration.nonSelectedFont 69 | let itemFontColor = selection ? configuration.selectedFontColor : configuration.nonSelectedFontColor 70 | 71 | let pickerView = PickerView(items: configuration.itemsAsStrings, 72 | itemWidth: configuration.itemWidth, 73 | itemFont: itemFont, 74 | itemFontColor: itemFontColor, 75 | sliderVelocityCoefficient: configuration.sliderVelocityCoefficient, 76 | defaultSelectedIndex: configuration.defaultSelectedIndex) 77 | 78 | pickerView.translatesAutoresizingMaskIntoConstraints = false 79 | 80 | return pickerView 81 | } 82 | 83 | private lazy var gradientContainerView: UIView = { 84 | let view = UIView(frame: .zero) 85 | view.translatesAutoresizingMaskIntoConstraints = false 86 | view.isUserInteractionEnabled = false 87 | return view 88 | }() 89 | 90 | private func createMaskingLayer() -> CAShapeLayer { 91 | let layer = CAShapeLayer() 92 | let roundedRect = CGRect(x: 0, y: 0, width: frame.width, height: frame.height) 93 | 94 | let path = UIBezierPath(roundedRect: roundedRect, cornerRadius: 0) 95 | path.append(createCirclePath()) 96 | path.usesEvenOddFillRule = true 97 | 98 | layer.path = path.cgPath 99 | layer.fillRule = kCAFillRuleEvenOdd 100 | layer.fillColor = backgroundColor?.cgColor 101 | 102 | return layer 103 | } 104 | 105 | private func createCircleLayer() -> CAShapeLayer { 106 | let layer = CAShapeLayer() 107 | layer.path = createCirclePath().cgPath 108 | return layer 109 | } 110 | 111 | private func createCirclePath() -> UIBezierPath { 112 | let radius = CGFloat(Double(self.configuration.itemWidth) * configuration.selectionRadiusInPercent) 113 | let rectX = (frame.width / CGFloat(2)) - radius 114 | let rectY = (frame.height / CGFloat(2)) - radius 115 | 116 | let roundedRect = CGRect(x: rectX, y: rectY, width: 2 * radius, height: 2 * radius) 117 | 118 | return UIBezierPath(roundedRect: roundedRect, cornerRadius: radius) 119 | } 120 | 121 | private lazy var leftGradientLayer: CALayer = self.createGradientLayer(ofType: .left) 122 | private lazy var rightGradientLayer: CALayer = self.createGradientLayer(ofType: .right) 123 | 124 | private func createGradientLayer(ofType type: GradientLayerType) -> CAGradientLayer { 125 | let layer = CAGradientLayer() 126 | 127 | layer.frame = .zero 128 | 129 | switch type { 130 | case .left: 131 | layer.startPoint = CGPoint(x: 0, y: 0) 132 | layer.endPoint = CGPoint(x: 1.0, y: 0) 133 | 134 | case .right: 135 | layer.startPoint = CGPoint(x: 1.0, y: 0) 136 | layer.endPoint = CGPoint(x: 0, y: 0) 137 | } 138 | 139 | layer.colors = configuration.gradientColors.map { $0.cgColor } 140 | layer.locations = [0.0, 1.0] 141 | 142 | return layer 143 | } 144 | 145 | private func setupSelectionPickerView() { 146 | addSubview(selectionPickerView) 147 | 148 | selectionPickerView.layer.backgroundColor = configuration.selectionBackgroundColor.cgColor 149 | 150 | selectionPickerView.matchSize(with: self) 151 | } 152 | 153 | private func setupPickerView() { 154 | addSubview(pickerView) 155 | 156 | pickerView.delegate = self 157 | 158 | pickerView.matchSize(with: self) 159 | } 160 | 161 | override public func layoutSubviews() { 162 | super.layoutSubviews() 163 | updateSubviews() 164 | } 165 | 166 | private func setupGradientContainerView() { 167 | gradientContainerView.layer.addSublayer(leftGradientLayer) 168 | gradientContainerView.layer.addSublayer(rightGradientLayer) 169 | 170 | addSubview(gradientContainerView) 171 | 172 | gradientContainerView.matchSize(with: self) 173 | } 174 | 175 | // MARK: PickerViewDelegate 176 | 177 | func picker(_ sender: PickerView, didSlideTo: CGPoint) { 178 | selectionPickerView.collectionView.contentOffset.x = didSlideTo.x 179 | } 180 | 181 | func picker(_ sender: PickerView, didSelectIndex index: Int) { 182 | selectedIndex = index 183 | didSelectItem(configuration.items[selectedIndex]) 184 | } 185 | 186 | private enum GradientLayerType { 187 | case left 188 | case right 189 | } 190 | } 191 | -------------------------------------------------------------------------------- /VRPicker/Classes/PickerView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // PickerView.swift 3 | // Pods 4 | // 5 | // Created by Viktor Rutberg on 2016-12-21. 6 | // 7 | // 8 | 9 | import Foundation 10 | import UIKit 11 | 12 | protocol PickerViewDelegate: class { 13 | func picker(_ sender: PickerView, didSelectIndex index: Int) 14 | func picker(_ sender: PickerView, didSlideTo: CGPoint) 15 | } 16 | 17 | final class PickerView: UIView, UIScrollViewDelegate, UICollectionViewDataSource, UICollectionViewDelegateFlowLayout { 18 | private let cellModels: [PickerItemCollectionViewCell.Model] 19 | private let itemWidth: Int 20 | private let sliderVelocityCoefficient: Double 21 | private let defaultSelectedIndex: Int 22 | private var didSetDefault = false 23 | 24 | weak var delegate: PickerViewDelegate? 25 | 26 | private(set) var selectedIndex: Int = 0 27 | 28 | init(items: [String], 29 | itemWidth: Int, 30 | itemFont: UIFont, 31 | itemFontColor: UIColor, 32 | sliderVelocityCoefficient: Double, 33 | defaultSelectedIndex: Int) { 34 | self.cellModels = items.map { 35 | PickerItemCollectionViewCell.Model(text: $0, font: itemFont, fontColor: itemFontColor) 36 | } 37 | self.itemWidth = itemWidth 38 | self.sliderVelocityCoefficient = sliderVelocityCoefficient 39 | self.defaultSelectedIndex = defaultSelectedIndex 40 | 41 | super.init(frame: .zero) 42 | 43 | setupCollectionView() 44 | } 45 | 46 | required init?(coder aDecoder: NSCoder) { 47 | fatalError("init(coder:) has not been implemented") 48 | } 49 | 50 | private var xContentInset: CGFloat { 51 | return (frame.width - CGFloat(itemWidth)) / 2.0 52 | } 53 | 54 | lazy var collectionView: UICollectionView = { 55 | let layout = UICollectionViewFlowLayout() 56 | 57 | layout.itemSize = CGSize(width: self.itemWidth, 58 | height: self.itemWidth) 59 | layout.minimumInteritemSpacing = 0 60 | layout.minimumLineSpacing = 0 61 | layout.scrollDirection = .horizontal 62 | 63 | let collectionView = UICollectionView(frame: .zero, collectionViewLayout: layout) 64 | 65 | collectionView.register(UINib(nibName: "PickerItemCollectionViewCell", 66 | bundle: Bundle(for: PickerView.self)), 67 | forCellWithReuseIdentifier: "PickerItemCollectionViewCell") 68 | 69 | collectionView.backgroundColor = .clear 70 | collectionView.translatesAutoresizingMaskIntoConstraints = false 71 | collectionView.showsHorizontalScrollIndicator = false 72 | 73 | // TODO(vikrut): break apart this into a separate class 74 | // and things will probably become much more nicely separated 75 | collectionView.dataSource = self 76 | collectionView.delegate = self 77 | 78 | return collectionView 79 | }() 80 | 81 | private lazy var singleTapGestureRecognizer = UITapGestureRecognizer.singleTap 82 | 83 | private func scroll(toIndex index: Int, animated: Bool = true) { 84 | let point = convert(indexToPoint: index) 85 | collectionView.setContentOffset(point, animated: animated) 86 | } 87 | 88 | public func set(selectedIndex index: Int, animated: Bool = true) { 89 | scroll(toIndex: index, animated: animated) 90 | markItemAsSelected(at: index) 91 | } 92 | 93 | private func markItemAsSelected(at index: Int) { 94 | guard selectedIndex != index else { 95 | return 96 | } 97 | 98 | selectedIndex = index 99 | 100 | delegate?.picker(self, didSelectIndex: selectedIndex) 101 | } 102 | 103 | private func convert(contentOffsetToIndex contentOffset: CGFloat) -> Int { 104 | let offsetX = contentOffset + xContentInset 105 | 106 | let itemIndex = Int(round(offsetX / CGFloat(itemWidth))).bound(minVal: 0, maxVal: cellModels.count - 1) 107 | 108 | return itemIndex 109 | } 110 | 111 | private func convert(indexToPoint index: Int) -> CGPoint { 112 | let itemX = CGFloat(itemWidth * index) 113 | return CGPoint(x: itemX - xContentInset, y: 0) 114 | } 115 | 116 | override func layoutSubviews() { 117 | super.layoutSubviews() 118 | 119 | collectionView.contentInset = UIEdgeInsets(top: 0, left: xContentInset, 120 | bottom: 0, right: xContentInset) 121 | 122 | if !didSetDefault { 123 | set(selectedIndex: defaultSelectedIndex, animated: false) 124 | didSetDefault = true 125 | } else { 126 | set(selectedIndex: selectedIndex, animated: false) 127 | } 128 | } 129 | 130 | @objc private func scrollViewWasTapped(_ sender: UITapGestureRecognizer) { 131 | let point = sender.location(in: collectionView) 132 | 133 | let itemIndex = Int(floor(point.x / CGFloat(itemWidth))).bound(minVal: 0, maxVal: cellModels.count - 1) 134 | 135 | set(selectedIndex: itemIndex) 136 | } 137 | 138 | private func setupCollectionView() { 139 | addSubview(collectionView) 140 | 141 | collectionView.addGestureRecognizer(singleTapGestureRecognizer) 142 | singleTapGestureRecognizer.addTarget(self, action: #selector(scrollViewWasTapped(_:))) 143 | 144 | collectionView.matchSize(with: self) 145 | } 146 | 147 | func collectionView(_ collectionView: UICollectionView, 148 | cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { 149 | let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "PickerItemCollectionViewCell", 150 | for: indexPath) 151 | 152 | if let cell = cell as? PickerItemCollectionViewCell { 153 | cell.update(model: cellModels[indexPath.row]) 154 | } 155 | 156 | return cell 157 | } 158 | 159 | func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { 160 | return cellModels.count 161 | } 162 | 163 | func numberOfSections(in collectionView: UICollectionView) -> Int { 164 | return 1 165 | } 166 | 167 | internal func scrollViewWillEndDragging(_ scrollView: UIScrollView, 168 | withVelocity velocity: CGPoint, 169 | targetContentOffset: UnsafeMutablePointer) { 170 | let targetOffset = scrollView.contentOffset.x + velocity.x * CGFloat(sliderVelocityCoefficient) 171 | let index = convert(contentOffsetToIndex: targetOffset) 172 | 173 | targetContentOffset.pointee = convert(indexToPoint: index) 174 | } 175 | 176 | internal func scrollViewDidScroll(_ scrollView: UIScrollView) { 177 | let index = convert(contentOffsetToIndex: scrollView.contentOffset.x) 178 | 179 | delegate?.picker(self, didSlideTo: scrollView.contentOffset) 180 | 181 | markItemAsSelected(at: index) 182 | } 183 | } 184 | -------------------------------------------------------------------------------- /Example/VRPicker.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 4023948D86EF696998305DC0 /* Pods_VRPicker_Example.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 45D7E6C030A1AF6A410878B0 /* Pods_VRPicker_Example.framework */; }; 11 | 440FE5489EA14C092F16A64A /* Pods_VRPicker_Tests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2AB5EE84005212D995735CA7 /* Pods_VRPicker_Tests.framework */; }; 12 | 607FACD61AFB9204008FA782 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 607FACD51AFB9204008FA782 /* AppDelegate.swift */; }; 13 | 607FACD81AFB9204008FA782 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 607FACD71AFB9204008FA782 /* ViewController.swift */; }; 14 | 607FACDB1AFB9204008FA782 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 607FACD91AFB9204008FA782 /* Main.storyboard */; }; 15 | 607FACDD1AFB9204008FA782 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 607FACDC1AFB9204008FA782 /* Images.xcassets */; }; 16 | 607FACE01AFB9204008FA782 /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 607FACDE1AFB9204008FA782 /* LaunchScreen.xib */; }; 17 | 607FACEC1AFB9204008FA782 /* Tests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 607FACEB1AFB9204008FA782 /* Tests.swift */; }; 18 | 7F550DC31E1703090069C273 /* VRPicker.podspec in Resources */ = {isa = PBXBuildFile; fileRef = 7F550DC21E1703090069C273 /* VRPicker.podspec */; }; 19 | /* End PBXBuildFile section */ 20 | 21 | /* Begin PBXContainerItemProxy section */ 22 | 607FACE61AFB9204008FA782 /* PBXContainerItemProxy */ = { 23 | isa = PBXContainerItemProxy; 24 | containerPortal = 607FACC81AFB9204008FA782 /* Project object */; 25 | proxyType = 1; 26 | remoteGlobalIDString = 607FACCF1AFB9204008FA782; 27 | remoteInfo = VRPicker; 28 | }; 29 | /* End PBXContainerItemProxy section */ 30 | 31 | /* Begin PBXFileReference section */ 32 | 2AB5EE84005212D995735CA7 /* Pods_VRPicker_Tests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_VRPicker_Tests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 33 | 45D7E6C030A1AF6A410878B0 /* Pods_VRPicker_Example.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_VRPicker_Example.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 34 | 607FACD01AFB9204008FA782 /* VRPicker_Example.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = VRPicker_Example.app; sourceTree = BUILT_PRODUCTS_DIR; }; 35 | 607FACD41AFB9204008FA782 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = Info.plist; path = ../VRPicker/Info.plist; sourceTree = ""; }; 36 | 607FACD51AFB9204008FA782 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = AppDelegate.swift; path = ../VRPicker/AppDelegate.swift; sourceTree = ""; }; 37 | 607FACD71AFB9204008FA782 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = ViewController.swift; path = ../VRPicker/ViewController.swift; sourceTree = ""; }; 38 | 607FACDA1AFB9204008FA782 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 39 | 607FACDC1AFB9204008FA782 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = ../VRPicker/Images.xcassets; sourceTree = ""; }; 40 | 607FACDF1AFB9204008FA782 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/LaunchScreen.xib; sourceTree = ""; }; 41 | 607FACE51AFB9204008FA782 /* VRPicker_Tests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = VRPicker_Tests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 42 | 607FACEA1AFB9204008FA782 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 43 | 607FACEB1AFB9204008FA782 /* Tests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Tests.swift; sourceTree = ""; }; 44 | 700161AE7D96D195B72641BF /* Pods-VRPicker_Tests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-VRPicker_Tests.release.xcconfig"; path = "Pods/Target Support Files/Pods-VRPicker_Tests/Pods-VRPicker_Tests.release.xcconfig"; sourceTree = ""; }; 45 | 7F550DC21E1703090069C273 /* VRPicker.podspec */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = VRPicker.podspec; path = ../VRPicker.podspec; sourceTree = ""; }; 46 | 7FC1334A5B212A501231E9DE /* Pods-VRPicker_Example.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-VRPicker_Example.debug.xcconfig"; path = "Pods/Target Support Files/Pods-VRPicker_Example/Pods-VRPicker_Example.debug.xcconfig"; sourceTree = ""; }; 47 | 81076BDC6079B00B6E53BD9C /* Pods-VRPicker_Tests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-VRPicker_Tests.debug.xcconfig"; path = "Pods/Target Support Files/Pods-VRPicker_Tests/Pods-VRPicker_Tests.debug.xcconfig"; sourceTree = ""; }; 48 | 9EECF3F4A1CAC6023646DC0C /* Pods-VRPicker_Example.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-VRPicker_Example.release.xcconfig"; path = "Pods/Target Support Files/Pods-VRPicker_Example/Pods-VRPicker_Example.release.xcconfig"; sourceTree = ""; }; 49 | AED142A19AB27D6D62285F6F /* README.md */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = net.daringfireball.markdown; name = README.md; path = ../README.md; sourceTree = ""; }; 50 | C36962D6B774CBC7214BF93E /* LICENSE */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; name = LICENSE; path = ../LICENSE; sourceTree = ""; }; 51 | /* End PBXFileReference section */ 52 | 53 | /* Begin PBXFrameworksBuildPhase section */ 54 | 607FACCD1AFB9204008FA782 /* Frameworks */ = { 55 | isa = PBXFrameworksBuildPhase; 56 | buildActionMask = 2147483647; 57 | files = ( 58 | 4023948D86EF696998305DC0 /* Pods_VRPicker_Example.framework in Frameworks */, 59 | ); 60 | runOnlyForDeploymentPostprocessing = 0; 61 | }; 62 | 607FACE21AFB9204008FA782 /* Frameworks */ = { 63 | isa = PBXFrameworksBuildPhase; 64 | buildActionMask = 2147483647; 65 | files = ( 66 | 440FE5489EA14C092F16A64A /* Pods_VRPicker_Tests.framework in Frameworks */, 67 | ); 68 | runOnlyForDeploymentPostprocessing = 0; 69 | }; 70 | /* End PBXFrameworksBuildPhase section */ 71 | 72 | /* Begin PBXGroup section */ 73 | 066C0F62881946853D0284DF /* Pods */ = { 74 | isa = PBXGroup; 75 | children = ( 76 | 7FC1334A5B212A501231E9DE /* Pods-VRPicker_Example.debug.xcconfig */, 77 | 9EECF3F4A1CAC6023646DC0C /* Pods-VRPicker_Example.release.xcconfig */, 78 | 81076BDC6079B00B6E53BD9C /* Pods-VRPicker_Tests.debug.xcconfig */, 79 | 700161AE7D96D195B72641BF /* Pods-VRPicker_Tests.release.xcconfig */, 80 | ); 81 | name = Pods; 82 | sourceTree = ""; 83 | }; 84 | 607FACC71AFB9204008FA782 = { 85 | isa = PBXGroup; 86 | children = ( 87 | 607FACF51AFB993E008FA782 /* Podspec Metadata */, 88 | 607FACD21AFB9204008FA782 /* Example for VRPicker */, 89 | 607FACE81AFB9204008FA782 /* Tests */, 90 | 607FACD11AFB9204008FA782 /* Products */, 91 | 066C0F62881946853D0284DF /* Pods */, 92 | 7A460873726DC56E5C3C88E2 /* Frameworks */, 93 | ); 94 | sourceTree = ""; 95 | }; 96 | 607FACD11AFB9204008FA782 /* Products */ = { 97 | isa = PBXGroup; 98 | children = ( 99 | 607FACD01AFB9204008FA782 /* VRPicker_Example.app */, 100 | 607FACE51AFB9204008FA782 /* VRPicker_Tests.xctest */, 101 | ); 102 | name = Products; 103 | sourceTree = ""; 104 | }; 105 | 607FACD21AFB9204008FA782 /* Example for VRPicker */ = { 106 | isa = PBXGroup; 107 | children = ( 108 | 607FACD51AFB9204008FA782 /* AppDelegate.swift */, 109 | 607FACD71AFB9204008FA782 /* ViewController.swift */, 110 | 607FACD91AFB9204008FA782 /* Main.storyboard */, 111 | 607FACDC1AFB9204008FA782 /* Images.xcassets */, 112 | 607FACDE1AFB9204008FA782 /* LaunchScreen.xib */, 113 | 607FACD31AFB9204008FA782 /* Supporting Files */, 114 | ); 115 | name = "Example for VRPicker"; 116 | path = VRPicker; 117 | sourceTree = ""; 118 | }; 119 | 607FACD31AFB9204008FA782 /* Supporting Files */ = { 120 | isa = PBXGroup; 121 | children = ( 122 | 607FACD41AFB9204008FA782 /* Info.plist */, 123 | ); 124 | name = "Supporting Files"; 125 | sourceTree = ""; 126 | }; 127 | 607FACE81AFB9204008FA782 /* Tests */ = { 128 | isa = PBXGroup; 129 | children = ( 130 | 607FACEB1AFB9204008FA782 /* Tests.swift */, 131 | 607FACE91AFB9204008FA782 /* Supporting Files */, 132 | ); 133 | path = Tests; 134 | sourceTree = ""; 135 | }; 136 | 607FACE91AFB9204008FA782 /* Supporting Files */ = { 137 | isa = PBXGroup; 138 | children = ( 139 | 607FACEA1AFB9204008FA782 /* Info.plist */, 140 | ); 141 | name = "Supporting Files"; 142 | sourceTree = ""; 143 | }; 144 | 607FACF51AFB993E008FA782 /* Podspec Metadata */ = { 145 | isa = PBXGroup; 146 | children = ( 147 | 7F550DC21E1703090069C273 /* VRPicker.podspec */, 148 | AED142A19AB27D6D62285F6F /* README.md */, 149 | C36962D6B774CBC7214BF93E /* LICENSE */, 150 | ); 151 | name = "Podspec Metadata"; 152 | sourceTree = ""; 153 | }; 154 | 7A460873726DC56E5C3C88E2 /* Frameworks */ = { 155 | isa = PBXGroup; 156 | children = ( 157 | 45D7E6C030A1AF6A410878B0 /* Pods_VRPicker_Example.framework */, 158 | 2AB5EE84005212D995735CA7 /* Pods_VRPicker_Tests.framework */, 159 | ); 160 | name = Frameworks; 161 | sourceTree = ""; 162 | }; 163 | /* End PBXGroup section */ 164 | 165 | /* Begin PBXNativeTarget section */ 166 | 607FACCF1AFB9204008FA782 /* VRPicker_Example */ = { 167 | isa = PBXNativeTarget; 168 | buildConfigurationList = 607FACEF1AFB9204008FA782 /* Build configuration list for PBXNativeTarget "VRPicker_Example" */; 169 | buildPhases = ( 170 | 56BF48447A6F3947ECB70E16 /* [CP] Check Pods Manifest.lock */, 171 | 607FACCC1AFB9204008FA782 /* Sources */, 172 | 607FACCD1AFB9204008FA782 /* Frameworks */, 173 | 607FACCE1AFB9204008FA782 /* Resources */, 174 | FDDAF684B529CAC1C0235F97 /* [CP] Embed Pods Frameworks */, 175 | 73CBBC9C73C7210F7E8C2C98 /* [CP] Copy Pods Resources */, 176 | ); 177 | buildRules = ( 178 | ); 179 | dependencies = ( 180 | ); 181 | name = VRPicker_Example; 182 | productName = VRPicker; 183 | productReference = 607FACD01AFB9204008FA782 /* VRPicker_Example.app */; 184 | productType = "com.apple.product-type.application"; 185 | }; 186 | 607FACE41AFB9204008FA782 /* VRPicker_Tests */ = { 187 | isa = PBXNativeTarget; 188 | buildConfigurationList = 607FACF21AFB9204008FA782 /* Build configuration list for PBXNativeTarget "VRPicker_Tests" */; 189 | buildPhases = ( 190 | 38C2619866BEDC337C9FFC9B /* [CP] Check Pods Manifest.lock */, 191 | 607FACE11AFB9204008FA782 /* Sources */, 192 | 607FACE21AFB9204008FA782 /* Frameworks */, 193 | 607FACE31AFB9204008FA782 /* Resources */, 194 | F7176B47038575E62987B675 /* [CP] Embed Pods Frameworks */, 195 | 09BE27C9ED40B8E10764ABB2 /* [CP] Copy Pods Resources */, 196 | 7F9685AC1F8EB595000E7978 /* ShellScript */, 197 | ); 198 | buildRules = ( 199 | ); 200 | dependencies = ( 201 | 607FACE71AFB9204008FA782 /* PBXTargetDependency */, 202 | ); 203 | name = VRPicker_Tests; 204 | productName = Tests; 205 | productReference = 607FACE51AFB9204008FA782 /* VRPicker_Tests.xctest */; 206 | productType = "com.apple.product-type.bundle.unit-test"; 207 | }; 208 | /* End PBXNativeTarget section */ 209 | 210 | /* Begin PBXProject section */ 211 | 607FACC81AFB9204008FA782 /* Project object */ = { 212 | isa = PBXProject; 213 | attributes = { 214 | LastSwiftUpdateCheck = 0720; 215 | LastUpgradeCheck = 0940; 216 | ORGANIZATIONNAME = CocoaPods; 217 | TargetAttributes = { 218 | 607FACCF1AFB9204008FA782 = { 219 | CreatedOnToolsVersion = 6.3.1; 220 | }; 221 | 607FACE41AFB9204008FA782 = { 222 | CreatedOnToolsVersion = 6.3.1; 223 | TestTargetID = 607FACCF1AFB9204008FA782; 224 | }; 225 | }; 226 | }; 227 | buildConfigurationList = 607FACCB1AFB9204008FA782 /* Build configuration list for PBXProject "VRPicker" */; 228 | compatibilityVersion = "Xcode 3.2"; 229 | developmentRegion = English; 230 | hasScannedForEncodings = 0; 231 | knownRegions = ( 232 | en, 233 | Base, 234 | ); 235 | mainGroup = 607FACC71AFB9204008FA782; 236 | productRefGroup = 607FACD11AFB9204008FA782 /* Products */; 237 | projectDirPath = ""; 238 | projectRoot = ""; 239 | targets = ( 240 | 607FACCF1AFB9204008FA782 /* VRPicker_Example */, 241 | 607FACE41AFB9204008FA782 /* VRPicker_Tests */, 242 | ); 243 | }; 244 | /* End PBXProject section */ 245 | 246 | /* Begin PBXResourcesBuildPhase section */ 247 | 607FACCE1AFB9204008FA782 /* Resources */ = { 248 | isa = PBXResourcesBuildPhase; 249 | buildActionMask = 2147483647; 250 | files = ( 251 | 607FACDB1AFB9204008FA782 /* Main.storyboard in Resources */, 252 | 607FACE01AFB9204008FA782 /* LaunchScreen.xib in Resources */, 253 | 7F550DC31E1703090069C273 /* VRPicker.podspec in Resources */, 254 | 607FACDD1AFB9204008FA782 /* Images.xcassets in Resources */, 255 | ); 256 | runOnlyForDeploymentPostprocessing = 0; 257 | }; 258 | 607FACE31AFB9204008FA782 /* Resources */ = { 259 | isa = PBXResourcesBuildPhase; 260 | buildActionMask = 2147483647; 261 | files = ( 262 | ); 263 | runOnlyForDeploymentPostprocessing = 0; 264 | }; 265 | /* End PBXResourcesBuildPhase section */ 266 | 267 | /* Begin PBXShellScriptBuildPhase section */ 268 | 09BE27C9ED40B8E10764ABB2 /* [CP] Copy Pods Resources */ = { 269 | isa = PBXShellScriptBuildPhase; 270 | buildActionMask = 2147483647; 271 | files = ( 272 | ); 273 | inputPaths = ( 274 | ); 275 | name = "[CP] Copy Pods Resources"; 276 | outputPaths = ( 277 | ); 278 | runOnlyForDeploymentPostprocessing = 0; 279 | shellPath = /bin/sh; 280 | shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-VRPicker_Tests/Pods-VRPicker_Tests-resources.sh\"\n"; 281 | showEnvVarsInLog = 0; 282 | }; 283 | 38C2619866BEDC337C9FFC9B /* [CP] Check Pods Manifest.lock */ = { 284 | isa = PBXShellScriptBuildPhase; 285 | buildActionMask = 2147483647; 286 | files = ( 287 | ); 288 | inputPaths = ( 289 | "${PODS_PODFILE_DIR_PATH}/Podfile.lock", 290 | "${PODS_ROOT}/Manifest.lock", 291 | ); 292 | name = "[CP] Check Pods Manifest.lock"; 293 | outputPaths = ( 294 | "$(DERIVED_FILE_DIR)/Pods-VRPicker_Tests-checkManifestLockResult.txt", 295 | ); 296 | runOnlyForDeploymentPostprocessing = 0; 297 | shellPath = /bin/sh; 298 | shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; 299 | showEnvVarsInLog = 0; 300 | }; 301 | 56BF48447A6F3947ECB70E16 /* [CP] Check Pods Manifest.lock */ = { 302 | isa = PBXShellScriptBuildPhase; 303 | buildActionMask = 2147483647; 304 | files = ( 305 | ); 306 | inputPaths = ( 307 | "${PODS_PODFILE_DIR_PATH}/Podfile.lock", 308 | "${PODS_ROOT}/Manifest.lock", 309 | ); 310 | name = "[CP] Check Pods Manifest.lock"; 311 | outputPaths = ( 312 | "$(DERIVED_FILE_DIR)/Pods-VRPicker_Example-checkManifestLockResult.txt", 313 | ); 314 | runOnlyForDeploymentPostprocessing = 0; 315 | shellPath = /bin/sh; 316 | shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; 317 | showEnvVarsInLog = 0; 318 | }; 319 | 73CBBC9C73C7210F7E8C2C98 /* [CP] Copy Pods Resources */ = { 320 | isa = PBXShellScriptBuildPhase; 321 | buildActionMask = 2147483647; 322 | files = ( 323 | ); 324 | inputPaths = ( 325 | ); 326 | name = "[CP] Copy Pods Resources"; 327 | outputPaths = ( 328 | ); 329 | runOnlyForDeploymentPostprocessing = 0; 330 | shellPath = /bin/sh; 331 | shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-VRPicker_Example/Pods-VRPicker_Example-resources.sh\"\n"; 332 | showEnvVarsInLog = 0; 333 | }; 334 | 7F9685AC1F8EB595000E7978 /* ShellScript */ = { 335 | isa = PBXShellScriptBuildPhase; 336 | buildActionMask = 2147483647; 337 | files = ( 338 | ); 339 | inputPaths = ( 340 | ); 341 | outputPaths = ( 342 | ); 343 | runOnlyForDeploymentPostprocessing = 0; 344 | shellPath = /bin/sh; 345 | shellScript = "if which swiftlint >/dev/null; then\nswiftlint\nelse\necho \"warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint\"\nfi"; 346 | }; 347 | F7176B47038575E62987B675 /* [CP] Embed Pods Frameworks */ = { 348 | isa = PBXShellScriptBuildPhase; 349 | buildActionMask = 2147483647; 350 | files = ( 351 | ); 352 | inputPaths = ( 353 | ); 354 | name = "[CP] Embed Pods Frameworks"; 355 | outputPaths = ( 356 | ); 357 | runOnlyForDeploymentPostprocessing = 0; 358 | shellPath = /bin/sh; 359 | shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-VRPicker_Tests/Pods-VRPicker_Tests-frameworks.sh\"\n"; 360 | showEnvVarsInLog = 0; 361 | }; 362 | FDDAF684B529CAC1C0235F97 /* [CP] Embed Pods Frameworks */ = { 363 | isa = PBXShellScriptBuildPhase; 364 | buildActionMask = 2147483647; 365 | files = ( 366 | ); 367 | inputPaths = ( 368 | "${SRCROOT}/Pods/Target Support Files/Pods-VRPicker_Example/Pods-VRPicker_Example-frameworks.sh", 369 | "${BUILT_PRODUCTS_DIR}/VRPicker/VRPicker.framework", 370 | ); 371 | name = "[CP] Embed Pods Frameworks"; 372 | outputPaths = ( 373 | "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/VRPicker.framework", 374 | ); 375 | runOnlyForDeploymentPostprocessing = 0; 376 | shellPath = /bin/sh; 377 | shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-VRPicker_Example/Pods-VRPicker_Example-frameworks.sh\"\n"; 378 | showEnvVarsInLog = 0; 379 | }; 380 | /* End PBXShellScriptBuildPhase section */ 381 | 382 | /* Begin PBXSourcesBuildPhase section */ 383 | 607FACCC1AFB9204008FA782 /* Sources */ = { 384 | isa = PBXSourcesBuildPhase; 385 | buildActionMask = 2147483647; 386 | files = ( 387 | 607FACD81AFB9204008FA782 /* ViewController.swift in Sources */, 388 | 607FACD61AFB9204008FA782 /* AppDelegate.swift in Sources */, 389 | ); 390 | runOnlyForDeploymentPostprocessing = 0; 391 | }; 392 | 607FACE11AFB9204008FA782 /* Sources */ = { 393 | isa = PBXSourcesBuildPhase; 394 | buildActionMask = 2147483647; 395 | files = ( 396 | 607FACEC1AFB9204008FA782 /* Tests.swift in Sources */, 397 | ); 398 | runOnlyForDeploymentPostprocessing = 0; 399 | }; 400 | /* End PBXSourcesBuildPhase section */ 401 | 402 | /* Begin PBXTargetDependency section */ 403 | 607FACE71AFB9204008FA782 /* PBXTargetDependency */ = { 404 | isa = PBXTargetDependency; 405 | target = 607FACCF1AFB9204008FA782 /* VRPicker_Example */; 406 | targetProxy = 607FACE61AFB9204008FA782 /* PBXContainerItemProxy */; 407 | }; 408 | /* End PBXTargetDependency section */ 409 | 410 | /* Begin PBXVariantGroup section */ 411 | 607FACD91AFB9204008FA782 /* Main.storyboard */ = { 412 | isa = PBXVariantGroup; 413 | children = ( 414 | 607FACDA1AFB9204008FA782 /* Base */, 415 | ); 416 | name = Main.storyboard; 417 | path = ../VRPicker; 418 | sourceTree = ""; 419 | }; 420 | 607FACDE1AFB9204008FA782 /* LaunchScreen.xib */ = { 421 | isa = PBXVariantGroup; 422 | children = ( 423 | 607FACDF1AFB9204008FA782 /* Base */, 424 | ); 425 | name = LaunchScreen.xib; 426 | sourceTree = ""; 427 | }; 428 | /* End PBXVariantGroup section */ 429 | 430 | /* Begin XCBuildConfiguration section */ 431 | 607FACED1AFB9204008FA782 /* Debug */ = { 432 | isa = XCBuildConfiguration; 433 | buildSettings = { 434 | ALWAYS_SEARCH_USER_PATHS = NO; 435 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 436 | CLANG_CXX_LIBRARY = "libc++"; 437 | CLANG_ENABLE_MODULES = YES; 438 | CLANG_ENABLE_OBJC_ARC = YES; 439 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 440 | CLANG_WARN_BOOL_CONVERSION = YES; 441 | CLANG_WARN_COMMA = YES; 442 | CLANG_WARN_CONSTANT_CONVERSION = YES; 443 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 444 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 445 | CLANG_WARN_EMPTY_BODY = YES; 446 | CLANG_WARN_ENUM_CONVERSION = YES; 447 | CLANG_WARN_INFINITE_RECURSION = YES; 448 | CLANG_WARN_INT_CONVERSION = YES; 449 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 450 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 451 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 452 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 453 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 454 | CLANG_WARN_STRICT_PROTOTYPES = YES; 455 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 456 | CLANG_WARN_UNREACHABLE_CODE = YES; 457 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 458 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 459 | COPY_PHASE_STRIP = NO; 460 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 461 | ENABLE_STRICT_OBJC_MSGSEND = YES; 462 | ENABLE_TESTABILITY = YES; 463 | GCC_C_LANGUAGE_STANDARD = gnu99; 464 | GCC_DYNAMIC_NO_PIC = NO; 465 | GCC_NO_COMMON_BLOCKS = YES; 466 | GCC_OPTIMIZATION_LEVEL = 0; 467 | GCC_PREPROCESSOR_DEFINITIONS = ( 468 | "DEBUG=1", 469 | "$(inherited)", 470 | ); 471 | GCC_SYMBOLS_PRIVATE_EXTERN = NO; 472 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 473 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 474 | GCC_WARN_UNDECLARED_SELECTOR = YES; 475 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 476 | GCC_WARN_UNUSED_FUNCTION = YES; 477 | GCC_WARN_UNUSED_VARIABLE = YES; 478 | IPHONEOS_DEPLOYMENT_TARGET = 9.0; 479 | MTL_ENABLE_DEBUG_INFO = YES; 480 | ONLY_ACTIVE_ARCH = YES; 481 | SDKROOT = iphoneos; 482 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 483 | SWIFT_VERSION = 4.0; 484 | }; 485 | name = Debug; 486 | }; 487 | 607FACEE1AFB9204008FA782 /* Release */ = { 488 | isa = XCBuildConfiguration; 489 | buildSettings = { 490 | ALWAYS_SEARCH_USER_PATHS = NO; 491 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 492 | CLANG_CXX_LIBRARY = "libc++"; 493 | CLANG_ENABLE_MODULES = YES; 494 | CLANG_ENABLE_OBJC_ARC = YES; 495 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 496 | CLANG_WARN_BOOL_CONVERSION = YES; 497 | CLANG_WARN_COMMA = YES; 498 | CLANG_WARN_CONSTANT_CONVERSION = YES; 499 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 500 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 501 | CLANG_WARN_EMPTY_BODY = YES; 502 | CLANG_WARN_ENUM_CONVERSION = YES; 503 | CLANG_WARN_INFINITE_RECURSION = YES; 504 | CLANG_WARN_INT_CONVERSION = YES; 505 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 506 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 507 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 508 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 509 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 510 | CLANG_WARN_STRICT_PROTOTYPES = YES; 511 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 512 | CLANG_WARN_UNREACHABLE_CODE = YES; 513 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 514 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 515 | COPY_PHASE_STRIP = NO; 516 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 517 | ENABLE_NS_ASSERTIONS = NO; 518 | ENABLE_STRICT_OBJC_MSGSEND = YES; 519 | GCC_C_LANGUAGE_STANDARD = gnu99; 520 | GCC_NO_COMMON_BLOCKS = YES; 521 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 522 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 523 | GCC_WARN_UNDECLARED_SELECTOR = YES; 524 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 525 | GCC_WARN_UNUSED_FUNCTION = YES; 526 | GCC_WARN_UNUSED_VARIABLE = YES; 527 | IPHONEOS_DEPLOYMENT_TARGET = 9.0; 528 | MTL_ENABLE_DEBUG_INFO = NO; 529 | SDKROOT = iphoneos; 530 | SWIFT_COMPILATION_MODE = wholemodule; 531 | SWIFT_VERSION = 4.0; 532 | VALIDATE_PRODUCT = YES; 533 | }; 534 | name = Release; 535 | }; 536 | 607FACF01AFB9204008FA782 /* Debug */ = { 537 | isa = XCBuildConfiguration; 538 | baseConfigurationReference = 7FC1334A5B212A501231E9DE /* Pods-VRPicker_Example.debug.xcconfig */; 539 | buildSettings = { 540 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 541 | INFOPLIST_FILE = "$(SRCROOT)/VRPicker/Info.plist"; 542 | IPHONEOS_DEPLOYMENT_TARGET = 9.0; 543 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 544 | MODULE_NAME = ExampleApp; 545 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.demo.$(PRODUCT_NAME:rfc1034identifier)"; 546 | PRODUCT_NAME = "$(TARGET_NAME)"; 547 | SWIFT_VERSION = 4.0; 548 | }; 549 | name = Debug; 550 | }; 551 | 607FACF11AFB9204008FA782 /* Release */ = { 552 | isa = XCBuildConfiguration; 553 | baseConfigurationReference = 9EECF3F4A1CAC6023646DC0C /* Pods-VRPicker_Example.release.xcconfig */; 554 | buildSettings = { 555 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 556 | INFOPLIST_FILE = "$(SRCROOT)/VRPicker/Info.plist"; 557 | IPHONEOS_DEPLOYMENT_TARGET = 9.0; 558 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 559 | MODULE_NAME = ExampleApp; 560 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.demo.$(PRODUCT_NAME:rfc1034identifier)"; 561 | PRODUCT_NAME = "$(TARGET_NAME)"; 562 | SWIFT_VERSION = 4.0; 563 | }; 564 | name = Release; 565 | }; 566 | 607FACF31AFB9204008FA782 /* Debug */ = { 567 | isa = XCBuildConfiguration; 568 | baseConfigurationReference = 81076BDC6079B00B6E53BD9C /* Pods-VRPicker_Tests.debug.xcconfig */; 569 | buildSettings = { 570 | FRAMEWORK_SEARCH_PATHS = ( 571 | "$(SDKROOT)/Developer/Library/Frameworks", 572 | "$(inherited)", 573 | ); 574 | GCC_PREPROCESSOR_DEFINITIONS = ( 575 | "DEBUG=1", 576 | "$(inherited)", 577 | ); 578 | INFOPLIST_FILE = Tests/Info.plist; 579 | IPHONEOS_DEPLOYMENT_TARGET = 9.3; 580 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 581 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.$(PRODUCT_NAME:rfc1034identifier)"; 582 | PRODUCT_NAME = "$(TARGET_NAME)"; 583 | SWIFT_VERSION = 4.0; 584 | }; 585 | name = Debug; 586 | }; 587 | 607FACF41AFB9204008FA782 /* Release */ = { 588 | isa = XCBuildConfiguration; 589 | baseConfigurationReference = 700161AE7D96D195B72641BF /* Pods-VRPicker_Tests.release.xcconfig */; 590 | buildSettings = { 591 | FRAMEWORK_SEARCH_PATHS = ( 592 | "$(SDKROOT)/Developer/Library/Frameworks", 593 | "$(inherited)", 594 | ); 595 | INFOPLIST_FILE = Tests/Info.plist; 596 | IPHONEOS_DEPLOYMENT_TARGET = 9.3; 597 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 598 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.$(PRODUCT_NAME:rfc1034identifier)"; 599 | PRODUCT_NAME = "$(TARGET_NAME)"; 600 | SWIFT_VERSION = 4.0; 601 | }; 602 | name = Release; 603 | }; 604 | /* End XCBuildConfiguration section */ 605 | 606 | /* Begin XCConfigurationList section */ 607 | 607FACCB1AFB9204008FA782 /* Build configuration list for PBXProject "VRPicker" */ = { 608 | isa = XCConfigurationList; 609 | buildConfigurations = ( 610 | 607FACED1AFB9204008FA782 /* Debug */, 611 | 607FACEE1AFB9204008FA782 /* Release */, 612 | ); 613 | defaultConfigurationIsVisible = 0; 614 | defaultConfigurationName = Release; 615 | }; 616 | 607FACEF1AFB9204008FA782 /* Build configuration list for PBXNativeTarget "VRPicker_Example" */ = { 617 | isa = XCConfigurationList; 618 | buildConfigurations = ( 619 | 607FACF01AFB9204008FA782 /* Debug */, 620 | 607FACF11AFB9204008FA782 /* Release */, 621 | ); 622 | defaultConfigurationIsVisible = 0; 623 | defaultConfigurationName = Release; 624 | }; 625 | 607FACF21AFB9204008FA782 /* Build configuration list for PBXNativeTarget "VRPicker_Tests" */ = { 626 | isa = XCConfigurationList; 627 | buildConfigurations = ( 628 | 607FACF31AFB9204008FA782 /* Debug */, 629 | 607FACF41AFB9204008FA782 /* Release */, 630 | ); 631 | defaultConfigurationIsVisible = 0; 632 | defaultConfigurationName = Release; 633 | }; 634 | /* End XCConfigurationList section */ 635 | }; 636 | rootObject = 607FACC81AFB9204008FA782 /* Project object */; 637 | } 638 | -------------------------------------------------------------------------------- /Example/Pods/Pods.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 378DF2D0A51958A42FFBECCCC5D30855 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D88AAE1F92055A60CC2FC970D7D34634 /* Foundation.framework */; }; 11 | 437D9091E74F2FE5BB912ED7CE96BA08 /* Pods-VRPicker_Tests-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 9EDC017A09B31EDD971EDDD037F8F763 /* Pods-VRPicker_Tests-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; 12 | 4C8C16D0076B578D0535F221369BCAA5 /* VRPicker.swift in Sources */ = {isa = PBXBuildFile; fileRef = EDF0B8F2E3696B99F18EE1F29A41549C /* VRPicker.swift */; }; 13 | 5ED9A289373D7D4F5064AC2C39E6E656 /* VRPickerConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 087CE06D492A237E5201F61F8BA63A7D /* VRPickerConfiguration.swift */; }; 14 | 6E4770974F4ACEDF8EB535D28C455F53 /* Pods-VRPicker_Tests-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 117BC05E892481F94A9543D6A10C8DA2 /* Pods-VRPicker_Tests-dummy.m */; }; 15 | 7B2A42BD9E7E36C11BA1F6730BB220A6 /* VRPicker-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 6DB57596A2B87EEAB27D26A1021364C6 /* VRPicker-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; 16 | 7F50F2EC20CC48C700020E9D /* UITapGestureRecognizer+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F50F2EA20CC48BE00020E9D /* UITapGestureRecognizer+Extension.swift */; }; 17 | 7F50F2EE20CC4C2A00020E9D /* UIView+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F50F2ED20CC4C2A00020E9D /* UIView+Extension.swift */; }; 18 | 7F50F2F020CC57CE00020E9D /* Int+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F50F2EF20CC57CE00020E9D /* Int+Extension.swift */; }; 19 | 971D91F72F175CC3BEAEE2C758A09A9B /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D88AAE1F92055A60CC2FC970D7D34634 /* Foundation.framework */; }; 20 | A404C57C0472EAF17712C79E0D3926B6 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B63C6A64CF66340668996F78DA6BB482 /* UIKit.framework */; }; 21 | A9A5137A2F1206860B89D56F148D5F76 /* PickerItemCollectionViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = B07380EE5C1CE30ED1732A5705216A23 /* PickerItemCollectionViewCell.swift */; }; 22 | C39DA9766C0C6102CE9C285C1DA1DDFD /* PickerItemCollectionViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 2269E9C8B08E3E3B0322D72CBD30697D /* PickerItemCollectionViewCell.xib */; }; 23 | C3AA75812294063182C34B823622F306 /* Pods-VRPicker_Example-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 8707B59FFA4DF8FA0E778B8B5E7D5F0A /* Pods-VRPicker_Example-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; 24 | C7E588F17CF135D806FA60888DFB0D79 /* PickerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5EB0791D856F41313BCC6A76F7EC99A6 /* PickerView.swift */; }; 25 | D45CD506A3EA14632BB7776DE0C39D5B /* VRPicker-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 4440F640AF479351679BD9B38A048A82 /* VRPicker-dummy.m */; }; 26 | DE3A7DA3BDA76B99D4FC1484048BEC58 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D88AAE1F92055A60CC2FC970D7D34634 /* Foundation.framework */; }; 27 | F449D5281623A4A3B420F4AD5641DCD9 /* Pods-VRPicker_Example-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = FF0ECF2373CE9BE15E5486420C1BDC50 /* Pods-VRPicker_Example-dummy.m */; }; 28 | /* End PBXBuildFile section */ 29 | 30 | /* Begin PBXContainerItemProxy section */ 31 | F31FEC478CE8ABF10C676E47876998BE /* PBXContainerItemProxy */ = { 32 | isa = PBXContainerItemProxy; 33 | containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; 34 | proxyType = 1; 35 | remoteGlobalIDString = 4F427503B5A9887E3A849B5F9B1A4B58; 36 | remoteInfo = VRPicker; 37 | }; 38 | /* End PBXContainerItemProxy section */ 39 | 40 | /* Begin PBXFileReference section */ 41 | 07BF5D03A05B809347895E24A1EB5CC1 /* Pods-VRPicker_Tests.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = "Pods-VRPicker_Tests.modulemap"; sourceTree = ""; }; 42 | 087CE06D492A237E5201F61F8BA63A7D /* VRPickerConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = VRPickerConfiguration.swift; path = VRPicker/Classes/VRPickerConfiguration.swift; sourceTree = ""; }; 43 | 117BC05E892481F94A9543D6A10C8DA2 /* Pods-VRPicker_Tests-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-VRPicker_Tests-dummy.m"; sourceTree = ""; }; 44 | 13CF3F1071BDEC425518F6A64E85CD6F /* VRPicker.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = VRPicker.xcconfig; sourceTree = ""; }; 45 | 14566570A7422FDBA360DC3EDEADD8AC /* VRPicker.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = VRPicker.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 46 | 21ACF011115164CCA157D425DDAA3FF4 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 47 | 2269E9C8B08E3E3B0322D72CBD30697D /* PickerItemCollectionViewCell.xib */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = file.xib; name = PickerItemCollectionViewCell.xib; path = VRPicker/Resources/PickerItemCollectionViewCell.xib; sourceTree = ""; }; 48 | 28895757C8FFF0AB70BE00969717B935 /* Pods-VRPicker_Tests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-VRPicker_Tests.debug.xcconfig"; sourceTree = ""; }; 49 | 2B6DFFCC0E69A2B8A916AC102B57C513 /* Pods-VRPicker_Example.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-VRPicker_Example.release.xcconfig"; sourceTree = ""; }; 50 | 319FBA9F0F87C448A88385FF23C6E66B /* VRPicker-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "VRPicker-prefix.pch"; sourceTree = ""; }; 51 | 3C0FBE9E68AEA4608403E6EDA17FD972 /* Pods-VRPicker_Example-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-VRPicker_Example-acknowledgements.plist"; sourceTree = ""; }; 52 | 4440F640AF479351679BD9B38A048A82 /* VRPicker-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "VRPicker-dummy.m"; sourceTree = ""; }; 53 | 5069BA7352147885DAA5635BB81C2BA4 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 54 | 5A391522D2089AAB72468FACAF73114F /* VRPicker.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = VRPicker.modulemap; sourceTree = ""; }; 55 | 5EB0791D856F41313BCC6A76F7EC99A6 /* PickerView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PickerView.swift; path = VRPicker/Classes/PickerView.swift; sourceTree = ""; }; 56 | 619A680AFD98306CF54C067738C01248 /* Pods-VRPicker_Tests-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-VRPicker_Tests-frameworks.sh"; sourceTree = ""; }; 57 | 6427A0CEF816269163F4820E88ECCA04 /* Pods_VRPicker_Tests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_VRPicker_Tests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 58 | 6647931DC36D0087764241AA13136A6B /* Pods-VRPicker_Example-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-VRPicker_Example-acknowledgements.markdown"; sourceTree = ""; }; 59 | 6DB57596A2B87EEAB27D26A1021364C6 /* VRPicker-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "VRPicker-umbrella.h"; sourceTree = ""; }; 60 | 7DF955934A7DD1B4805AFC7E30EF4542 /* Pods-VRPicker_Example.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-VRPicker_Example.debug.xcconfig"; sourceTree = ""; }; 61 | 7F50F2EA20CC48BE00020E9D /* UITapGestureRecognizer+Extension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = "UITapGestureRecognizer+Extension.swift"; path = "VRPicker/Classes/UITapGestureRecognizer+Extension.swift"; sourceTree = ""; }; 62 | 7F50F2ED20CC4C2A00020E9D /* UIView+Extension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIView+Extension.swift"; sourceTree = ""; }; 63 | 7F50F2EF20CC57CE00020E9D /* Int+Extension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = "Int+Extension.swift"; path = "VRPicker/Classes/Int+Extension.swift"; sourceTree = ""; }; 64 | 8707B59FFA4DF8FA0E778B8B5E7D5F0A /* Pods-VRPicker_Example-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-VRPicker_Example-umbrella.h"; sourceTree = ""; }; 65 | 8F76D80FA6761E202B0C39436F15D066 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 66 | 93A4A3777CF96A4AAC1D13BA6DCCEA73 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; 67 | 950763802FC9C6045F016F4BA4773A4A /* Pods_VRPicker_Example.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_VRPicker_Example.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 68 | 9BDF18DFDA00FA5F54BC55969906E52F /* Pods-VRPicker_Tests-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-VRPicker_Tests-resources.sh"; sourceTree = ""; }; 69 | 9EDC017A09B31EDD971EDDD037F8F763 /* Pods-VRPicker_Tests-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-VRPicker_Tests-umbrella.h"; sourceTree = ""; }; 70 | 9F7E8A25FEC84C8B05A9C73FC2EE45FC /* Pods-VRPicker_Example-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-VRPicker_Example-resources.sh"; sourceTree = ""; }; 71 | B07380EE5C1CE30ED1732A5705216A23 /* PickerItemCollectionViewCell.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PickerItemCollectionViewCell.swift; path = VRPicker/Classes/PickerItemCollectionViewCell.swift; sourceTree = ""; }; 72 | B63C6A64CF66340668996F78DA6BB482 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS10.3.sdk/System/Library/Frameworks/UIKit.framework; sourceTree = DEVELOPER_DIR; }; 73 | C6A4B33EA4942DF9B62365430C2837F5 /* Pods-VRPicker_Tests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-VRPicker_Tests.release.xcconfig"; sourceTree = ""; }; 74 | D5866FC6D0156D6771F8EB01ED526780 /* Pods-VRPicker_Example-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-VRPicker_Example-frameworks.sh"; sourceTree = ""; }; 75 | D88AAE1F92055A60CC2FC970D7D34634 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS10.3.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; 76 | D959C67BF08C8E852AC2AD25456BE3BD /* Pods-VRPicker_Tests-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-VRPicker_Tests-acknowledgements.markdown"; sourceTree = ""; }; 77 | E55C918333E0E1FAEC2895EC268EEB5C /* Pods-VRPicker_Tests-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-VRPicker_Tests-acknowledgements.plist"; sourceTree = ""; }; 78 | ED246D23539D919F88493B767E83E2B5 /* Pods-VRPicker_Example.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = "Pods-VRPicker_Example.modulemap"; sourceTree = ""; }; 79 | EDF0B8F2E3696B99F18EE1F29A41549C /* VRPicker.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = VRPicker.swift; path = VRPicker/Classes/VRPicker.swift; sourceTree = ""; }; 80 | FF0ECF2373CE9BE15E5486420C1BDC50 /* Pods-VRPicker_Example-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-VRPicker_Example-dummy.m"; sourceTree = ""; }; 81 | /* End PBXFileReference section */ 82 | 83 | /* Begin PBXFrameworksBuildPhase section */ 84 | 16C54AB3EFBB9A949701421D8CAB6ED6 /* Frameworks */ = { 85 | isa = PBXFrameworksBuildPhase; 86 | buildActionMask = 2147483647; 87 | files = ( 88 | 378DF2D0A51958A42FFBECCCC5D30855 /* Foundation.framework in Frameworks */, 89 | A404C57C0472EAF17712C79E0D3926B6 /* UIKit.framework in Frameworks */, 90 | ); 91 | runOnlyForDeploymentPostprocessing = 0; 92 | }; 93 | 232C7AF94A82B2DA8CD250E316BD4C6A /* Frameworks */ = { 94 | isa = PBXFrameworksBuildPhase; 95 | buildActionMask = 2147483647; 96 | files = ( 97 | DE3A7DA3BDA76B99D4FC1484048BEC58 /* Foundation.framework in Frameworks */, 98 | ); 99 | runOnlyForDeploymentPostprocessing = 0; 100 | }; 101 | BA5D107B090E17775BDF2EDCBC9B1E01 /* Frameworks */ = { 102 | isa = PBXFrameworksBuildPhase; 103 | buildActionMask = 2147483647; 104 | files = ( 105 | 971D91F72F175CC3BEAEE2C758A09A9B /* Foundation.framework in Frameworks */, 106 | ); 107 | runOnlyForDeploymentPostprocessing = 0; 108 | }; 109 | /* End PBXFrameworksBuildPhase section */ 110 | 111 | /* Begin PBXGroup section */ 112 | 2C8D7C56542835B3125052DA752BA112 /* VRPicker */ = { 113 | isa = PBXGroup; 114 | children = ( 115 | B07380EE5C1CE30ED1732A5705216A23 /* PickerItemCollectionViewCell.swift */, 116 | 5EB0791D856F41313BCC6A76F7EC99A6 /* PickerView.swift */, 117 | EDF0B8F2E3696B99F18EE1F29A41549C /* VRPicker.swift */, 118 | 087CE06D492A237E5201F61F8BA63A7D /* VRPickerConfiguration.swift */, 119 | E3861BD673D9E6A36C46791A6A3D29F5 /* Resources */, 120 | 71D730083972F188877753D6D5D17F42 /* Support Files */, 121 | 7F50F2EA20CC48BE00020E9D /* UITapGestureRecognizer+Extension.swift */, 122 | 7F50F2ED20CC4C2A00020E9D /* UIView+Extension.swift */, 123 | 7F50F2EF20CC57CE00020E9D /* Int+Extension.swift */, 124 | ); 125 | name = VRPicker; 126 | path = ../..; 127 | sourceTree = ""; 128 | }; 129 | 433CD3331B6C3787F473C941B61FC68F /* Frameworks */ = { 130 | isa = PBXGroup; 131 | children = ( 132 | 438B396F6B4147076630CAEFE34282C1 /* iOS */, 133 | ); 134 | name = Frameworks; 135 | sourceTree = ""; 136 | }; 137 | 438B396F6B4147076630CAEFE34282C1 /* iOS */ = { 138 | isa = PBXGroup; 139 | children = ( 140 | D88AAE1F92055A60CC2FC970D7D34634 /* Foundation.framework */, 141 | B63C6A64CF66340668996F78DA6BB482 /* UIKit.framework */, 142 | ); 143 | name = iOS; 144 | sourceTree = ""; 145 | }; 146 | 4BB90ED407C41CC6280937BD58855883 /* Targets Support Files */ = { 147 | isa = PBXGroup; 148 | children = ( 149 | 6FC8E9D60FE7FED8AFA92AF308D11CA7 /* Pods-VRPicker_Example */, 150 | FA484F61DE76744B3282E3CEBCEC4292 /* Pods-VRPicker_Tests */, 151 | ); 152 | name = "Targets Support Files"; 153 | sourceTree = ""; 154 | }; 155 | 530E6B22ECFEACFBBA44A1F091024653 /* Development Pods */ = { 156 | isa = PBXGroup; 157 | children = ( 158 | 2C8D7C56542835B3125052DA752BA112 /* VRPicker */, 159 | ); 160 | name = "Development Pods"; 161 | sourceTree = ""; 162 | }; 163 | 693A79308F4FCAE814952E714B0BCD8C /* Products */ = { 164 | isa = PBXGroup; 165 | children = ( 166 | 950763802FC9C6045F016F4BA4773A4A /* Pods_VRPicker_Example.framework */, 167 | 6427A0CEF816269163F4820E88ECCA04 /* Pods_VRPicker_Tests.framework */, 168 | 14566570A7422FDBA360DC3EDEADD8AC /* VRPicker.framework */, 169 | ); 170 | name = Products; 171 | sourceTree = ""; 172 | }; 173 | 6FC8E9D60FE7FED8AFA92AF308D11CA7 /* Pods-VRPicker_Example */ = { 174 | isa = PBXGroup; 175 | children = ( 176 | 8F76D80FA6761E202B0C39436F15D066 /* Info.plist */, 177 | ED246D23539D919F88493B767E83E2B5 /* Pods-VRPicker_Example.modulemap */, 178 | 6647931DC36D0087764241AA13136A6B /* Pods-VRPicker_Example-acknowledgements.markdown */, 179 | 3C0FBE9E68AEA4608403E6EDA17FD972 /* Pods-VRPicker_Example-acknowledgements.plist */, 180 | FF0ECF2373CE9BE15E5486420C1BDC50 /* Pods-VRPicker_Example-dummy.m */, 181 | D5866FC6D0156D6771F8EB01ED526780 /* Pods-VRPicker_Example-frameworks.sh */, 182 | 9F7E8A25FEC84C8B05A9C73FC2EE45FC /* Pods-VRPicker_Example-resources.sh */, 183 | 8707B59FFA4DF8FA0E778B8B5E7D5F0A /* Pods-VRPicker_Example-umbrella.h */, 184 | 7DF955934A7DD1B4805AFC7E30EF4542 /* Pods-VRPicker_Example.debug.xcconfig */, 185 | 2B6DFFCC0E69A2B8A916AC102B57C513 /* Pods-VRPicker_Example.release.xcconfig */, 186 | ); 187 | name = "Pods-VRPicker_Example"; 188 | path = "Target Support Files/Pods-VRPicker_Example"; 189 | sourceTree = ""; 190 | }; 191 | 71D730083972F188877753D6D5D17F42 /* Support Files */ = { 192 | isa = PBXGroup; 193 | children = ( 194 | 21ACF011115164CCA157D425DDAA3FF4 /* Info.plist */, 195 | 5A391522D2089AAB72468FACAF73114F /* VRPicker.modulemap */, 196 | 13CF3F1071BDEC425518F6A64E85CD6F /* VRPicker.xcconfig */, 197 | 4440F640AF479351679BD9B38A048A82 /* VRPicker-dummy.m */, 198 | 319FBA9F0F87C448A88385FF23C6E66B /* VRPicker-prefix.pch */, 199 | 6DB57596A2B87EEAB27D26A1021364C6 /* VRPicker-umbrella.h */, 200 | ); 201 | name = "Support Files"; 202 | path = "Example/Pods/Target Support Files/VRPicker"; 203 | sourceTree = ""; 204 | }; 205 | 7DB346D0F39D3F0E887471402A8071AB = { 206 | isa = PBXGroup; 207 | children = ( 208 | 93A4A3777CF96A4AAC1D13BA6DCCEA73 /* Podfile */, 209 | 530E6B22ECFEACFBBA44A1F091024653 /* Development Pods */, 210 | 433CD3331B6C3787F473C941B61FC68F /* Frameworks */, 211 | 693A79308F4FCAE814952E714B0BCD8C /* Products */, 212 | 4BB90ED407C41CC6280937BD58855883 /* Targets Support Files */, 213 | ); 214 | sourceTree = ""; 215 | }; 216 | E3861BD673D9E6A36C46791A6A3D29F5 /* Resources */ = { 217 | isa = PBXGroup; 218 | children = ( 219 | 2269E9C8B08E3E3B0322D72CBD30697D /* PickerItemCollectionViewCell.xib */, 220 | ); 221 | name = Resources; 222 | sourceTree = ""; 223 | }; 224 | FA484F61DE76744B3282E3CEBCEC4292 /* Pods-VRPicker_Tests */ = { 225 | isa = PBXGroup; 226 | children = ( 227 | 5069BA7352147885DAA5635BB81C2BA4 /* Info.plist */, 228 | 07BF5D03A05B809347895E24A1EB5CC1 /* Pods-VRPicker_Tests.modulemap */, 229 | D959C67BF08C8E852AC2AD25456BE3BD /* Pods-VRPicker_Tests-acknowledgements.markdown */, 230 | E55C918333E0E1FAEC2895EC268EEB5C /* Pods-VRPicker_Tests-acknowledgements.plist */, 231 | 117BC05E892481F94A9543D6A10C8DA2 /* Pods-VRPicker_Tests-dummy.m */, 232 | 619A680AFD98306CF54C067738C01248 /* Pods-VRPicker_Tests-frameworks.sh */, 233 | 9BDF18DFDA00FA5F54BC55969906E52F /* Pods-VRPicker_Tests-resources.sh */, 234 | 9EDC017A09B31EDD971EDDD037F8F763 /* Pods-VRPicker_Tests-umbrella.h */, 235 | 28895757C8FFF0AB70BE00969717B935 /* Pods-VRPicker_Tests.debug.xcconfig */, 236 | C6A4B33EA4942DF9B62365430C2837F5 /* Pods-VRPicker_Tests.release.xcconfig */, 237 | ); 238 | name = "Pods-VRPicker_Tests"; 239 | path = "Target Support Files/Pods-VRPicker_Tests"; 240 | sourceTree = ""; 241 | }; 242 | /* End PBXGroup section */ 243 | 244 | /* Begin PBXHeadersBuildPhase section */ 245 | 432C3171887A136D49B402E342CCA6D1 /* Headers */ = { 246 | isa = PBXHeadersBuildPhase; 247 | buildActionMask = 2147483647; 248 | files = ( 249 | 437D9091E74F2FE5BB912ED7CE96BA08 /* Pods-VRPicker_Tests-umbrella.h in Headers */, 250 | ); 251 | runOnlyForDeploymentPostprocessing = 0; 252 | }; 253 | 67D5A0ABE19E06131D6BA7F70225BBC4 /* Headers */ = { 254 | isa = PBXHeadersBuildPhase; 255 | buildActionMask = 2147483647; 256 | files = ( 257 | C3AA75812294063182C34B823622F306 /* Pods-VRPicker_Example-umbrella.h in Headers */, 258 | ); 259 | runOnlyForDeploymentPostprocessing = 0; 260 | }; 261 | DF74DF9D276605AC84793912467F4972 /* Headers */ = { 262 | isa = PBXHeadersBuildPhase; 263 | buildActionMask = 2147483647; 264 | files = ( 265 | 7B2A42BD9E7E36C11BA1F6730BB220A6 /* VRPicker-umbrella.h in Headers */, 266 | ); 267 | runOnlyForDeploymentPostprocessing = 0; 268 | }; 269 | /* End PBXHeadersBuildPhase section */ 270 | 271 | /* Begin PBXNativeTarget section */ 272 | 4F427503B5A9887E3A849B5F9B1A4B58 /* VRPicker */ = { 273 | isa = PBXNativeTarget; 274 | buildConfigurationList = 325CBF929996EAE9D33715B8E366D655 /* Build configuration list for PBXNativeTarget "VRPicker" */; 275 | buildPhases = ( 276 | 047E0F83EDE79D53AE784F8E9276A09F /* Sources */, 277 | 16C54AB3EFBB9A949701421D8CAB6ED6 /* Frameworks */, 278 | CA308FF289EB0A3FA1C883617985415F /* Resources */, 279 | DF74DF9D276605AC84793912467F4972 /* Headers */, 280 | ); 281 | buildRules = ( 282 | ); 283 | dependencies = ( 284 | ); 285 | name = VRPicker; 286 | productName = VRPicker; 287 | productReference = 14566570A7422FDBA360DC3EDEADD8AC /* VRPicker.framework */; 288 | productType = "com.apple.product-type.framework"; 289 | }; 290 | 9E815E50E5E7DF3AB857EB14178B740F /* Pods-VRPicker_Example */ = { 291 | isa = PBXNativeTarget; 292 | buildConfigurationList = 71A4B3C40CAEC658C32E28A6465787A3 /* Build configuration list for PBXNativeTarget "Pods-VRPicker_Example" */; 293 | buildPhases = ( 294 | 3B1936B3C7C8EFC4A1C4AF7FD627CCCF /* Sources */, 295 | BA5D107B090E17775BDF2EDCBC9B1E01 /* Frameworks */, 296 | 67D5A0ABE19E06131D6BA7F70225BBC4 /* Headers */, 297 | ); 298 | buildRules = ( 299 | ); 300 | dependencies = ( 301 | F9EDCB24F84911E237A4A1F61519D18F /* PBXTargetDependency */, 302 | ); 303 | name = "Pods-VRPicker_Example"; 304 | productName = "Pods-VRPicker_Example"; 305 | productReference = 950763802FC9C6045F016F4BA4773A4A /* Pods_VRPicker_Example.framework */; 306 | productType = "com.apple.product-type.framework"; 307 | }; 308 | CC0FD3A1CEDE677F70F4053854F4DD10 /* Pods-VRPicker_Tests */ = { 309 | isa = PBXNativeTarget; 310 | buildConfigurationList = CBD3E101371F1AFF63974D38915DA022 /* Build configuration list for PBXNativeTarget "Pods-VRPicker_Tests" */; 311 | buildPhases = ( 312 | 522BCC6744377B91DF2F23D6B814FAF3 /* Sources */, 313 | 232C7AF94A82B2DA8CD250E316BD4C6A /* Frameworks */, 314 | 432C3171887A136D49B402E342CCA6D1 /* Headers */, 315 | ); 316 | buildRules = ( 317 | ); 318 | dependencies = ( 319 | ); 320 | name = "Pods-VRPicker_Tests"; 321 | productName = "Pods-VRPicker_Tests"; 322 | productReference = 6427A0CEF816269163F4820E88ECCA04 /* Pods_VRPicker_Tests.framework */; 323 | productType = "com.apple.product-type.framework"; 324 | }; 325 | /* End PBXNativeTarget section */ 326 | 327 | /* Begin PBXProject section */ 328 | D41D8CD98F00B204E9800998ECF8427E /* Project object */ = { 329 | isa = PBXProject; 330 | attributes = { 331 | LastSwiftUpdateCheck = 0830; 332 | LastUpgradeCheck = 0700; 333 | TargetAttributes = { 334 | 9E815E50E5E7DF3AB857EB14178B740F = { 335 | LastSwiftMigration = 0940; 336 | }; 337 | }; 338 | }; 339 | buildConfigurationList = 2D8E8EC45A3A1A1D94AE762CB5028504 /* Build configuration list for PBXProject "Pods" */; 340 | compatibilityVersion = "Xcode 3.2"; 341 | developmentRegion = English; 342 | hasScannedForEncodings = 0; 343 | knownRegions = ( 344 | en, 345 | ); 346 | mainGroup = 7DB346D0F39D3F0E887471402A8071AB; 347 | productRefGroup = 693A79308F4FCAE814952E714B0BCD8C /* Products */; 348 | projectDirPath = ""; 349 | projectRoot = ""; 350 | targets = ( 351 | 9E815E50E5E7DF3AB857EB14178B740F /* Pods-VRPicker_Example */, 352 | CC0FD3A1CEDE677F70F4053854F4DD10 /* Pods-VRPicker_Tests */, 353 | 4F427503B5A9887E3A849B5F9B1A4B58 /* VRPicker */, 354 | ); 355 | }; 356 | /* End PBXProject section */ 357 | 358 | /* Begin PBXResourcesBuildPhase section */ 359 | CA308FF289EB0A3FA1C883617985415F /* Resources */ = { 360 | isa = PBXResourcesBuildPhase; 361 | buildActionMask = 2147483647; 362 | files = ( 363 | C39DA9766C0C6102CE9C285C1DA1DDFD /* PickerItemCollectionViewCell.xib in Resources */, 364 | ); 365 | runOnlyForDeploymentPostprocessing = 0; 366 | }; 367 | /* End PBXResourcesBuildPhase section */ 368 | 369 | /* Begin PBXSourcesBuildPhase section */ 370 | 047E0F83EDE79D53AE784F8E9276A09F /* Sources */ = { 371 | isa = PBXSourcesBuildPhase; 372 | buildActionMask = 2147483647; 373 | files = ( 374 | 7F50F2EC20CC48C700020E9D /* UITapGestureRecognizer+Extension.swift in Sources */, 375 | 7F50F2F020CC57CE00020E9D /* Int+Extension.swift in Sources */, 376 | 7F50F2EE20CC4C2A00020E9D /* UIView+Extension.swift in Sources */, 377 | A9A5137A2F1206860B89D56F148D5F76 /* PickerItemCollectionViewCell.swift in Sources */, 378 | C7E588F17CF135D806FA60888DFB0D79 /* PickerView.swift in Sources */, 379 | D45CD506A3EA14632BB7776DE0C39D5B /* VRPicker-dummy.m in Sources */, 380 | 4C8C16D0076B578D0535F221369BCAA5 /* VRPicker.swift in Sources */, 381 | 5ED9A289373D7D4F5064AC2C39E6E656 /* VRPickerConfiguration.swift in Sources */, 382 | ); 383 | runOnlyForDeploymentPostprocessing = 0; 384 | }; 385 | 3B1936B3C7C8EFC4A1C4AF7FD627CCCF /* Sources */ = { 386 | isa = PBXSourcesBuildPhase; 387 | buildActionMask = 2147483647; 388 | files = ( 389 | F449D5281623A4A3B420F4AD5641DCD9 /* Pods-VRPicker_Example-dummy.m in Sources */, 390 | ); 391 | runOnlyForDeploymentPostprocessing = 0; 392 | }; 393 | 522BCC6744377B91DF2F23D6B814FAF3 /* Sources */ = { 394 | isa = PBXSourcesBuildPhase; 395 | buildActionMask = 2147483647; 396 | files = ( 397 | 6E4770974F4ACEDF8EB535D28C455F53 /* Pods-VRPicker_Tests-dummy.m in Sources */, 398 | ); 399 | runOnlyForDeploymentPostprocessing = 0; 400 | }; 401 | /* End PBXSourcesBuildPhase section */ 402 | 403 | /* Begin PBXTargetDependency section */ 404 | F9EDCB24F84911E237A4A1F61519D18F /* PBXTargetDependency */ = { 405 | isa = PBXTargetDependency; 406 | name = VRPicker; 407 | target = 4F427503B5A9887E3A849B5F9B1A4B58 /* VRPicker */; 408 | targetProxy = F31FEC478CE8ABF10C676E47876998BE /* PBXContainerItemProxy */; 409 | }; 410 | /* End PBXTargetDependency section */ 411 | 412 | /* Begin XCBuildConfiguration section */ 413 | 062BAB2835A32ED4E8DC53642C6220F9 /* Release */ = { 414 | isa = XCBuildConfiguration; 415 | baseConfigurationReference = C6A4B33EA4942DF9B62365430C2837F5 /* Pods-VRPicker_Tests.release.xcconfig */; 416 | buildSettings = { 417 | CODE_SIGN_IDENTITY = ""; 418 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; 419 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 420 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; 421 | CURRENT_PROJECT_VERSION = 1; 422 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 423 | DEFINES_MODULE = YES; 424 | DYLIB_COMPATIBILITY_VERSION = 1; 425 | DYLIB_CURRENT_VERSION = 1; 426 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 427 | ENABLE_STRICT_OBJC_MSGSEND = YES; 428 | GCC_NO_COMMON_BLOCKS = YES; 429 | INFOPLIST_FILE = "Target Support Files/Pods-VRPicker_Tests/Info.plist"; 430 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 431 | IPHONEOS_DEPLOYMENT_TARGET = 9.0; 432 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 433 | MACH_O_TYPE = staticlib; 434 | MODULEMAP_FILE = "Target Support Files/Pods-VRPicker_Tests/Pods-VRPicker_Tests.modulemap"; 435 | MTL_ENABLE_DEBUG_INFO = NO; 436 | OTHER_LDFLAGS = ""; 437 | OTHER_LIBTOOLFLAGS = ""; 438 | PODS_ROOT = "$(SRCROOT)"; 439 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; 440 | PRODUCT_NAME = Pods_VRPicker_Tests; 441 | SDKROOT = iphoneos; 442 | SKIP_INSTALL = YES; 443 | SWIFT_VERSION = 3.0; 444 | TARGETED_DEVICE_FAMILY = "1,2"; 445 | VERSIONING_SYSTEM = "apple-generic"; 446 | VERSION_INFO_PREFIX = ""; 447 | }; 448 | name = Release; 449 | }; 450 | 06AD4DC357557F05F55E0BD4FAB49DD5 /* Debug */ = { 451 | isa = XCBuildConfiguration; 452 | baseConfigurationReference = 28895757C8FFF0AB70BE00969717B935 /* Pods-VRPicker_Tests.debug.xcconfig */; 453 | buildSettings = { 454 | CODE_SIGN_IDENTITY = ""; 455 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; 456 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 457 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; 458 | CURRENT_PROJECT_VERSION = 1; 459 | DEBUG_INFORMATION_FORMAT = dwarf; 460 | DEFINES_MODULE = YES; 461 | DYLIB_COMPATIBILITY_VERSION = 1; 462 | DYLIB_CURRENT_VERSION = 1; 463 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 464 | ENABLE_STRICT_OBJC_MSGSEND = YES; 465 | GCC_NO_COMMON_BLOCKS = YES; 466 | INFOPLIST_FILE = "Target Support Files/Pods-VRPicker_Tests/Info.plist"; 467 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 468 | IPHONEOS_DEPLOYMENT_TARGET = 9.0; 469 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 470 | MACH_O_TYPE = staticlib; 471 | MODULEMAP_FILE = "Target Support Files/Pods-VRPicker_Tests/Pods-VRPicker_Tests.modulemap"; 472 | MTL_ENABLE_DEBUG_INFO = YES; 473 | OTHER_LDFLAGS = ""; 474 | OTHER_LIBTOOLFLAGS = ""; 475 | PODS_ROOT = "$(SRCROOT)"; 476 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; 477 | PRODUCT_NAME = Pods_VRPicker_Tests; 478 | SDKROOT = iphoneos; 479 | SKIP_INSTALL = YES; 480 | SWIFT_VERSION = 3.0; 481 | TARGETED_DEVICE_FAMILY = "1,2"; 482 | VERSIONING_SYSTEM = "apple-generic"; 483 | VERSION_INFO_PREFIX = ""; 484 | }; 485 | name = Debug; 486 | }; 487 | 16F55BD97CA2A074C918964DB241CC38 /* Debug */ = { 488 | isa = XCBuildConfiguration; 489 | baseConfigurationReference = 7DF955934A7DD1B4805AFC7E30EF4542 /* Pods-VRPicker_Example.debug.xcconfig */; 490 | buildSettings = { 491 | CLANG_ENABLE_MODULES = YES; 492 | CODE_SIGN_IDENTITY = ""; 493 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; 494 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 495 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; 496 | CURRENT_PROJECT_VERSION = 1; 497 | DEBUG_INFORMATION_FORMAT = dwarf; 498 | DEFINES_MODULE = YES; 499 | DYLIB_COMPATIBILITY_VERSION = 1; 500 | DYLIB_CURRENT_VERSION = 1; 501 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 502 | ENABLE_STRICT_OBJC_MSGSEND = YES; 503 | GCC_NO_COMMON_BLOCKS = YES; 504 | INFOPLIST_FILE = "Target Support Files/Pods-VRPicker_Example/Info.plist"; 505 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 506 | IPHONEOS_DEPLOYMENT_TARGET = 9.0; 507 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 508 | MACH_O_TYPE = staticlib; 509 | MODULEMAP_FILE = "Target Support Files/Pods-VRPicker_Example/Pods-VRPicker_Example.modulemap"; 510 | MTL_ENABLE_DEBUG_INFO = YES; 511 | OTHER_LDFLAGS = ""; 512 | OTHER_LIBTOOLFLAGS = ""; 513 | PODS_ROOT = "$(SRCROOT)"; 514 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; 515 | PRODUCT_NAME = Pods_VRPicker_Example; 516 | SDKROOT = iphoneos; 517 | SKIP_INSTALL = YES; 518 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; 519 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 520 | SWIFT_VERSION = 3.0; 521 | TARGETED_DEVICE_FAMILY = "1,2"; 522 | VERSIONING_SYSTEM = "apple-generic"; 523 | VERSION_INFO_PREFIX = ""; 524 | }; 525 | name = Debug; 526 | }; 527 | 1A865B837297DA9BC401105CB37D386E /* Release */ = { 528 | isa = XCBuildConfiguration; 529 | baseConfigurationReference = 13CF3F1071BDEC425518F6A64E85CD6F /* VRPicker.xcconfig */; 530 | buildSettings = { 531 | CODE_SIGN_IDENTITY = ""; 532 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; 533 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 534 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; 535 | CURRENT_PROJECT_VERSION = 1; 536 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 537 | DEFINES_MODULE = YES; 538 | DYLIB_COMPATIBILITY_VERSION = 1; 539 | DYLIB_CURRENT_VERSION = 1; 540 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 541 | ENABLE_STRICT_OBJC_MSGSEND = YES; 542 | GCC_NO_COMMON_BLOCKS = YES; 543 | GCC_PREFIX_HEADER = "Target Support Files/VRPicker/VRPicker-prefix.pch"; 544 | INFOPLIST_FILE = "Target Support Files/VRPicker/Info.plist"; 545 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 546 | IPHONEOS_DEPLOYMENT_TARGET = 9.0; 547 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 548 | MODULEMAP_FILE = "Target Support Files/VRPicker/VRPicker.modulemap"; 549 | MTL_ENABLE_DEBUG_INFO = NO; 550 | PRODUCT_NAME = VRPicker; 551 | SDKROOT = iphoneos; 552 | SKIP_INSTALL = YES; 553 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; 554 | SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; 555 | SWIFT_VERSION = 3.0; 556 | TARGETED_DEVICE_FAMILY = "1,2"; 557 | VERSIONING_SYSTEM = "apple-generic"; 558 | VERSION_INFO_PREFIX = ""; 559 | }; 560 | name = Release; 561 | }; 562 | 871A6C6DF54C88BC69529396A30DCD20 /* Debug */ = { 563 | isa = XCBuildConfiguration; 564 | baseConfigurationReference = 13CF3F1071BDEC425518F6A64E85CD6F /* VRPicker.xcconfig */; 565 | buildSettings = { 566 | CODE_SIGN_IDENTITY = ""; 567 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; 568 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 569 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; 570 | CURRENT_PROJECT_VERSION = 1; 571 | DEBUG_INFORMATION_FORMAT = dwarf; 572 | DEFINES_MODULE = YES; 573 | DYLIB_COMPATIBILITY_VERSION = 1; 574 | DYLIB_CURRENT_VERSION = 1; 575 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 576 | ENABLE_STRICT_OBJC_MSGSEND = YES; 577 | GCC_NO_COMMON_BLOCKS = YES; 578 | GCC_PREFIX_HEADER = "Target Support Files/VRPicker/VRPicker-prefix.pch"; 579 | INFOPLIST_FILE = "Target Support Files/VRPicker/Info.plist"; 580 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 581 | IPHONEOS_DEPLOYMENT_TARGET = 9.0; 582 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 583 | MODULEMAP_FILE = "Target Support Files/VRPicker/VRPicker.modulemap"; 584 | MTL_ENABLE_DEBUG_INFO = YES; 585 | PRODUCT_NAME = VRPicker; 586 | SDKROOT = iphoneos; 587 | SKIP_INSTALL = YES; 588 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; 589 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 590 | SWIFT_VERSION = 3.0; 591 | TARGETED_DEVICE_FAMILY = "1,2"; 592 | VERSIONING_SYSTEM = "apple-generic"; 593 | VERSION_INFO_PREFIX = ""; 594 | }; 595 | name = Debug; 596 | }; 597 | 97803B46811A9BDB5E70FA1303AFBFFE /* Debug */ = { 598 | isa = XCBuildConfiguration; 599 | buildSettings = { 600 | ALWAYS_SEARCH_USER_PATHS = NO; 601 | CLANG_ANALYZER_NONNULL = YES; 602 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES; 603 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 604 | CLANG_CXX_LIBRARY = "libc++"; 605 | CLANG_ENABLE_MODULES = YES; 606 | CLANG_ENABLE_OBJC_ARC = YES; 607 | CLANG_WARN_BOOL_CONVERSION = YES; 608 | CLANG_WARN_CONSTANT_CONVERSION = YES; 609 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES; 610 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 611 | CLANG_WARN_EMPTY_BODY = YES; 612 | CLANG_WARN_ENUM_CONVERSION = YES; 613 | CLANG_WARN_INFINITE_RECURSION = YES; 614 | CLANG_WARN_INT_CONVERSION = YES; 615 | CLANG_WARN_OBJC_ROOT_CLASS = YES; 616 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 617 | CLANG_WARN_UNREACHABLE_CODE = YES; 618 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 619 | CODE_SIGNING_REQUIRED = NO; 620 | COPY_PHASE_STRIP = NO; 621 | ENABLE_TESTABILITY = YES; 622 | GCC_C_LANGUAGE_STANDARD = gnu99; 623 | GCC_DYNAMIC_NO_PIC = NO; 624 | GCC_OPTIMIZATION_LEVEL = 0; 625 | GCC_PREPROCESSOR_DEFINITIONS = ( 626 | "POD_CONFIGURATION_DEBUG=1", 627 | "DEBUG=1", 628 | "$(inherited)", 629 | ); 630 | GCC_SYMBOLS_PRIVATE_EXTERN = NO; 631 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 632 | GCC_WARN_ABOUT_RETURN_TYPE = YES; 633 | GCC_WARN_UNDECLARED_SELECTOR = YES; 634 | GCC_WARN_UNINITIALIZED_AUTOS = YES; 635 | GCC_WARN_UNUSED_FUNCTION = YES; 636 | GCC_WARN_UNUSED_VARIABLE = YES; 637 | IPHONEOS_DEPLOYMENT_TARGET = 9.0; 638 | ONLY_ACTIVE_ARCH = YES; 639 | PROVISIONING_PROFILE_SPECIFIER = NO_SIGNING/; 640 | STRIP_INSTALLED_PRODUCT = NO; 641 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; 642 | SYMROOT = "${SRCROOT}/../build"; 643 | }; 644 | name = Debug; 645 | }; 646 | BDD0139D6EB93FA375F887ABD62DAB2E /* Release */ = { 647 | isa = XCBuildConfiguration; 648 | buildSettings = { 649 | ALWAYS_SEARCH_USER_PATHS = NO; 650 | CLANG_ANALYZER_NONNULL = YES; 651 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES; 652 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 653 | CLANG_CXX_LIBRARY = "libc++"; 654 | CLANG_ENABLE_MODULES = YES; 655 | CLANG_ENABLE_OBJC_ARC = YES; 656 | CLANG_WARN_BOOL_CONVERSION = YES; 657 | CLANG_WARN_CONSTANT_CONVERSION = YES; 658 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES; 659 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 660 | CLANG_WARN_EMPTY_BODY = YES; 661 | CLANG_WARN_ENUM_CONVERSION = YES; 662 | CLANG_WARN_INFINITE_RECURSION = YES; 663 | CLANG_WARN_INT_CONVERSION = YES; 664 | CLANG_WARN_OBJC_ROOT_CLASS = YES; 665 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 666 | CLANG_WARN_UNREACHABLE_CODE = YES; 667 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 668 | CODE_SIGNING_REQUIRED = NO; 669 | COPY_PHASE_STRIP = YES; 670 | ENABLE_NS_ASSERTIONS = NO; 671 | GCC_C_LANGUAGE_STANDARD = gnu99; 672 | GCC_PREPROCESSOR_DEFINITIONS = ( 673 | "POD_CONFIGURATION_RELEASE=1", 674 | "$(inherited)", 675 | ); 676 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 677 | GCC_WARN_ABOUT_RETURN_TYPE = YES; 678 | GCC_WARN_UNDECLARED_SELECTOR = YES; 679 | GCC_WARN_UNINITIALIZED_AUTOS = YES; 680 | GCC_WARN_UNUSED_FUNCTION = YES; 681 | GCC_WARN_UNUSED_VARIABLE = YES; 682 | IPHONEOS_DEPLOYMENT_TARGET = 9.0; 683 | PROVISIONING_PROFILE_SPECIFIER = NO_SIGNING/; 684 | STRIP_INSTALLED_PRODUCT = NO; 685 | SYMROOT = "${SRCROOT}/../build"; 686 | VALIDATE_PRODUCT = YES; 687 | }; 688 | name = Release; 689 | }; 690 | CF663E01F52A77CF883430C09399D8A6 /* Release */ = { 691 | isa = XCBuildConfiguration; 692 | baseConfigurationReference = 2B6DFFCC0E69A2B8A916AC102B57C513 /* Pods-VRPicker_Example.release.xcconfig */; 693 | buildSettings = { 694 | CLANG_ENABLE_MODULES = YES; 695 | CODE_SIGN_IDENTITY = ""; 696 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; 697 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 698 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; 699 | CURRENT_PROJECT_VERSION = 1; 700 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 701 | DEFINES_MODULE = YES; 702 | DYLIB_COMPATIBILITY_VERSION = 1; 703 | DYLIB_CURRENT_VERSION = 1; 704 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 705 | ENABLE_STRICT_OBJC_MSGSEND = YES; 706 | GCC_NO_COMMON_BLOCKS = YES; 707 | INFOPLIST_FILE = "Target Support Files/Pods-VRPicker_Example/Info.plist"; 708 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 709 | IPHONEOS_DEPLOYMENT_TARGET = 9.0; 710 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 711 | MACH_O_TYPE = staticlib; 712 | MODULEMAP_FILE = "Target Support Files/Pods-VRPicker_Example/Pods-VRPicker_Example.modulemap"; 713 | MTL_ENABLE_DEBUG_INFO = NO; 714 | OTHER_LDFLAGS = ""; 715 | OTHER_LIBTOOLFLAGS = ""; 716 | PODS_ROOT = "$(SRCROOT)"; 717 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; 718 | PRODUCT_NAME = Pods_VRPicker_Example; 719 | SDKROOT = iphoneos; 720 | SKIP_INSTALL = YES; 721 | SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; 722 | SWIFT_VERSION = 3.0; 723 | TARGETED_DEVICE_FAMILY = "1,2"; 724 | VERSIONING_SYSTEM = "apple-generic"; 725 | VERSION_INFO_PREFIX = ""; 726 | }; 727 | name = Release; 728 | }; 729 | /* End XCBuildConfiguration section */ 730 | 731 | /* Begin XCConfigurationList section */ 732 | 2D8E8EC45A3A1A1D94AE762CB5028504 /* Build configuration list for PBXProject "Pods" */ = { 733 | isa = XCConfigurationList; 734 | buildConfigurations = ( 735 | 97803B46811A9BDB5E70FA1303AFBFFE /* Debug */, 736 | BDD0139D6EB93FA375F887ABD62DAB2E /* Release */, 737 | ); 738 | defaultConfigurationIsVisible = 0; 739 | defaultConfigurationName = Release; 740 | }; 741 | 325CBF929996EAE9D33715B8E366D655 /* Build configuration list for PBXNativeTarget "VRPicker" */ = { 742 | isa = XCConfigurationList; 743 | buildConfigurations = ( 744 | 871A6C6DF54C88BC69529396A30DCD20 /* Debug */, 745 | 1A865B837297DA9BC401105CB37D386E /* Release */, 746 | ); 747 | defaultConfigurationIsVisible = 0; 748 | defaultConfigurationName = Release; 749 | }; 750 | 71A4B3C40CAEC658C32E28A6465787A3 /* Build configuration list for PBXNativeTarget "Pods-VRPicker_Example" */ = { 751 | isa = XCConfigurationList; 752 | buildConfigurations = ( 753 | 16F55BD97CA2A074C918964DB241CC38 /* Debug */, 754 | CF663E01F52A77CF883430C09399D8A6 /* Release */, 755 | ); 756 | defaultConfigurationIsVisible = 0; 757 | defaultConfigurationName = Release; 758 | }; 759 | CBD3E101371F1AFF63974D38915DA022 /* Build configuration list for PBXNativeTarget "Pods-VRPicker_Tests" */ = { 760 | isa = XCConfigurationList; 761 | buildConfigurations = ( 762 | 06AD4DC357557F05F55E0BD4FAB49DD5 /* Debug */, 763 | 062BAB2835A32ED4E8DC53642C6220F9 /* Release */, 764 | ); 765 | defaultConfigurationIsVisible = 0; 766 | defaultConfigurationName = Release; 767 | }; 768 | /* End XCConfigurationList section */ 769 | }; 770 | rootObject = D41D8CD98F00B204E9800998ECF8427E /* Project object */; 771 | } 772 | --------------------------------------------------------------------------------