├── .DS_Store ├── .travis.yml ├── Demo ├── AppDelegate.h ├── AppDelegate.m ├── Assets.xcassets │ └── AppIcon.appiconset │ │ └── Contents.json ├── Base.lproj │ ├── LaunchScreen.storyboard │ └── Main.storyboard ├── Info.plist ├── ViewController.h ├── ViewController.m └── main.m ├── FTPickerView.podspec ├── FTPickerView.xcodeproj ├── project.pbxproj ├── project.xcworkspace │ ├── contents.xcworkspacedata │ ├── xcshareddata │ │ └── IDEWorkspaceChecks.plist │ └── xcuserdata │ │ ├── liu.xcuserdatad │ │ └── UserInterfaceState.xcuserstate │ │ └── liufengting.xcuserdatad │ │ └── UserInterfaceState.xcuserstate └── xcuserdata │ ├── liu.xcuserdatad │ └── xcschemes │ │ ├── FTPickerView.xcscheme │ │ └── xcschememanagement.plist │ └── liufengting.xcuserdatad │ └── xcschemes │ └── xcschememanagement.plist ├── FTPickerView ├── FTPickerView.h ├── FTPickerView.m └── Info.plist ├── FTPickerViewTests ├── FTPickerViewTests.m └── Info.plist ├── FTPickerViewUITests ├── FTPickerViewUITests.m └── Info.plist ├── ImageAssets ├── DatePicker.png └── SimplePicker.png ├── LICENSE ├── README.md └── SwiftDemo ├── Podfile ├── Podfile.lock ├── Pods ├── FTPickerView │ ├── FTPickerView │ │ ├── FTPickerView.h │ │ └── FTPickerView.m │ ├── LICENSE │ └── README.md ├── Manifest.lock ├── Pods.xcodeproj │ ├── project.pbxproj │ └── xcuserdata │ │ └── liu.xcuserdatad │ │ └── xcschemes │ │ ├── FTPickerView.xcscheme │ │ ├── Pods-SwiftDemo.xcscheme │ │ ├── Pods-SwiftDemoTests.xcscheme │ │ ├── Pods-SwiftDemoUITests.xcscheme │ │ └── xcschememanagement.plist └── Target Support Files │ ├── FTPickerView │ ├── FTPickerView-dummy.m │ ├── FTPickerView-prefix.pch │ ├── FTPickerView-umbrella.h │ ├── FTPickerView.modulemap │ ├── FTPickerView.xcconfig │ └── Info.plist │ ├── Pods-SwiftDemo │ ├── Info.plist │ ├── Pods-SwiftDemo-acknowledgements.markdown │ ├── Pods-SwiftDemo-acknowledgements.plist │ ├── Pods-SwiftDemo-dummy.m │ ├── Pods-SwiftDemo-frameworks.sh │ ├── Pods-SwiftDemo-resources.sh │ ├── Pods-SwiftDemo-umbrella.h │ ├── Pods-SwiftDemo.debug.xcconfig │ ├── Pods-SwiftDemo.modulemap │ └── Pods-SwiftDemo.release.xcconfig │ ├── Pods-SwiftDemoTests │ ├── Info.plist │ ├── Pods-SwiftDemoTests-acknowledgements.markdown │ ├── Pods-SwiftDemoTests-acknowledgements.plist │ ├── Pods-SwiftDemoTests-dummy.m │ ├── Pods-SwiftDemoTests-frameworks.sh │ ├── Pods-SwiftDemoTests-resources.sh │ ├── Pods-SwiftDemoTests-umbrella.h │ ├── Pods-SwiftDemoTests.debug.xcconfig │ ├── Pods-SwiftDemoTests.modulemap │ └── Pods-SwiftDemoTests.release.xcconfig │ └── Pods-SwiftDemoUITests │ ├── Info.plist │ ├── Pods-SwiftDemoUITests-acknowledgements.markdown │ ├── Pods-SwiftDemoUITests-acknowledgements.plist │ ├── Pods-SwiftDemoUITests-dummy.m │ ├── Pods-SwiftDemoUITests-frameworks.sh │ ├── Pods-SwiftDemoUITests-resources.sh │ ├── Pods-SwiftDemoUITests-umbrella.h │ ├── Pods-SwiftDemoUITests.debug.xcconfig │ ├── Pods-SwiftDemoUITests.modulemap │ └── Pods-SwiftDemoUITests.release.xcconfig ├── SwiftDemo.xcodeproj ├── project.pbxproj ├── project.xcworkspace │ ├── contents.xcworkspacedata │ └── xcuserdata │ │ └── liu.xcuserdatad │ │ └── UserInterfaceState.xcuserstate └── xcuserdata │ └── liu.xcuserdatad │ └── xcschemes │ ├── SwiftDemo.xcscheme │ └── xcschememanagement.plist ├── SwiftDemo.xcworkspace ├── contents.xcworkspacedata └── xcuserdata │ └── liu.xcuserdatad │ └── UserInterfaceState.xcuserstate ├── SwiftDemo ├── AppDelegate.swift ├── Assets.xcassets │ └── AppIcon.appiconset │ │ └── Contents.json ├── Base.lproj │ ├── LaunchScreen.storyboard │ └── Main.storyboard ├── Info.plist └── ViewController.swift ├── SwiftDemoTests ├── Info.plist └── SwiftDemoTests.swift └── SwiftDemoUITests ├── Info.plist └── SwiftDemoUITests.swift /.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liufengting/FTPickerView/bd114e151d11044503ad81461b307c841cebe88c/.DS_Store -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: Objective-C 2 | -------------------------------------------------------------------------------- /Demo/AppDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.h 3 | // FTPickerView 4 | // 5 | // Created by liufengting https://github.com/liufengting on 15/12/3. 6 | // Copyright © 2015年 liufengting. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface AppDelegate : UIResponder 12 | 13 | @property (strong, nonatomic) UIWindow *window; 14 | 15 | 16 | @end 17 | 18 | -------------------------------------------------------------------------------- /Demo/AppDelegate.m: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.m 3 | // FTPickerView 4 | // 5 | // Created by liufengting https://github.com/liufengting on 15/12/3. 6 | // Copyright © 2015年 liufengting. All rights reserved. 7 | // 8 | 9 | #import "AppDelegate.h" 10 | 11 | @interface AppDelegate () 12 | 13 | @end 14 | 15 | @implementation AppDelegate 16 | 17 | 18 | - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 19 | // Override point for customization after application launch. 20 | return YES; 21 | } 22 | 23 | - (void)applicationWillResignActive:(UIApplication *)application { 24 | // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. 25 | // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game. 26 | } 27 | 28 | - (void)applicationDidEnterBackground:(UIApplication *)application { 29 | // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. 30 | // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. 31 | } 32 | 33 | - (void)applicationWillEnterForeground:(UIApplication *)application { 34 | // Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background. 35 | } 36 | 37 | - (void)applicationDidBecomeActive:(UIApplication *)application { 38 | // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. 39 | } 40 | 41 | - (void)applicationWillTerminate:(UIApplication *)application { 42 | // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. 43 | } 44 | 45 | @end 46 | -------------------------------------------------------------------------------- /Demo/Assets.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 | } -------------------------------------------------------------------------------- /Demo/Base.lproj/LaunchScreen.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 | -------------------------------------------------------------------------------- /Demo/Base.lproj/Main.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 30 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | -------------------------------------------------------------------------------- /Demo/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 | UIInterfaceOrientationLandscapeRight 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /Demo/ViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.h 3 | // FTPickerView 4 | // 5 | // Created by liufengting https://github.com/liufengting on 15/12/3. 6 | // Copyright © 2015年 liufengting. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface ViewController : UIViewController 12 | 13 | 14 | @end 15 | 16 | -------------------------------------------------------------------------------- /Demo/ViewController.m: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.m 3 | // FTPickerView 4 | // 5 | // Created by liufengting https://github.com/liufengting on 15/12/3. 6 | // Copyright © 2015年 liufengting. All rights reserved. 7 | // 8 | 9 | #import "ViewController.h" 10 | #import "FTPickerView.h" 11 | 12 | @interface ViewController () 13 | 14 | @property (nonatomic,strong)NSArray *optionArrayOne; 15 | 16 | 17 | @end 18 | 19 | @implementation ViewController 20 | 21 | - (void)viewDidLoad { 22 | [super viewDidLoad]; 23 | 24 | } 25 | 26 | -(NSArray *)optionArrayOne 27 | { 28 | if (!_optionArrayOne) { 29 | _optionArrayOne = @[@"Step 1",@"Step 2",@"Step 3",@"Step 4"]; 30 | } 31 | return _optionArrayOne; 32 | } 33 | 34 | 35 | - (IBAction)chooseOne:(UIButton *)sender { 36 | //simple picker 37 | [FTPickerView showWithTitle:@"Choose a step" 38 | nameArray:self.optionArrayOne 39 | doneBlock:^(NSInteger selectedIndex) { 40 | [sender setTitle:self.optionArrayOne[selectedIndex] forState:UIControlStateNormal]; 41 | } cancelBlock:^{ 42 | 43 | }]; 44 | 45 | } 46 | - (IBAction)chooseTwo:(UIButton *)sender { 47 | //date picker 48 | [FTDatePickerView showWithTitle:@"Choose a date" 49 | selectDate:nil 50 | datePickerMode:UIDatePickerModeDateAndTime 51 | doneBlock:^(NSDate *selectedDate) { 52 | NSDateFormatter *dateFormate = [[NSDateFormatter alloc]init]; 53 | [dateFormate setDateFormat:@"yyyy-MM-dd HH:mm:ss"]; 54 | [sender setTitle:[dateFormate stringFromDate:selectedDate] forState:UIControlStateNormal]; 55 | } cancelBlock:^{ 56 | 57 | }]; 58 | } 59 | 60 | @end 61 | -------------------------------------------------------------------------------- /Demo/main.m: -------------------------------------------------------------------------------- 1 | // 2 | // main.m 3 | // FTPickerView 4 | // 5 | // Created by liufengting https://github.com/liufengting on 15/12/3. 6 | // Copyright © 2015年 liufengting. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "AppDelegate.h" 11 | 12 | int main(int argc, char * argv[]) { 13 | @autoreleasepool { 14 | return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /FTPickerView.podspec: -------------------------------------------------------------------------------- 1 | Pod::Spec.new do |s| 2 | 3 | s.name = "FTPickerView" 4 | s.version = "1.0.2" 5 | s.summary = "A simple UIPickerView/UIDatePicker wapper." 6 | s.description = <<-DESC 7 | A UIPickerView/UIDatePicker wrapper which is maybe the easiest one to use. Using singleton and block callbacks. 8 | DESC 9 | s.author = { "liufengting" => "wo157121900@me.com" } 10 | s.homepage = "https://github.com/liufengting/FTPickerView" 11 | s.screenshots = "https://raw.githubusercontent.com/liufengting/FTPickerView/master/ImageAssets/SimplePicker.png","https://raw.githubusercontent.com/liufengting/FTPickerView/master/ImageAssets/DatePicker.png" 12 | s.license = { :type => "MIT", :file => "LICENSE" } 13 | s.platform = :ios 14 | s.source = { :git => "https://github.com/liufengting/FTPickerView.git", :tag => "#{s.version}" } 15 | s.source_files = "FTPickerView", "FTPickerView/*.{h,m}" 16 | s.requires_arc = true 17 | 18 | end -------------------------------------------------------------------------------- /FTPickerView.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 5A0FF41D1C10191A00D584D3 /* FTPickerViewTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 5A0FF41C1C10191A00D584D3 /* FTPickerViewTests.m */; }; 11 | 5A0FF4281C10191A00D584D3 /* FTPickerViewUITests.m in Sources */ = {isa = PBXBuildFile; fileRef = 5A0FF4271C10191A00D584D3 /* FTPickerViewUITests.m */; }; 12 | 5AECB17D1D1C18FF00CD8CB1 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 5AECB1791D1C18FF00CD8CB1 /* AppDelegate.m */; }; 13 | 5AECB17E1D1C18FF00CD8CB1 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 5AECB17A1D1C18FF00CD8CB1 /* Assets.xcassets */; }; 14 | 5AECB17F1D1C18FF00CD8CB1 /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 5AECB17C1D1C18FF00CD8CB1 /* ViewController.m */; }; 15 | 5AECB1811D1C191500CD8CB1 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 5AECB1801D1C191500CD8CB1 /* main.m */; }; 16 | 5AECB1861D1C193100CD8CB1 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 5AECB1821D1C193100CD8CB1 /* LaunchScreen.storyboard */; }; 17 | 5AECB1871D1C193100CD8CB1 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 5AECB1841D1C193100CD8CB1 /* Main.storyboard */; }; 18 | 5AECB18B1D1C196800CD8CB1 /* FTPickerView.m in Sources */ = {isa = PBXBuildFile; fileRef = 5AECB18A1D1C196800CD8CB1 /* FTPickerView.m */; }; 19 | /* End PBXBuildFile section */ 20 | 21 | /* Begin PBXContainerItemProxy section */ 22 | 5A0FF4191C10191A00D584D3 /* PBXContainerItemProxy */ = { 23 | isa = PBXContainerItemProxy; 24 | containerPortal = 5A0FF3F71C10191A00D584D3 /* Project object */; 25 | proxyType = 1; 26 | remoteGlobalIDString = 5A0FF3FE1C10191A00D584D3; 27 | remoteInfo = FTPickerView; 28 | }; 29 | 5A0FF4241C10191A00D584D3 /* PBXContainerItemProxy */ = { 30 | isa = PBXContainerItemProxy; 31 | containerPortal = 5A0FF3F71C10191A00D584D3 /* Project object */; 32 | proxyType = 1; 33 | remoteGlobalIDString = 5A0FF3FE1C10191A00D584D3; 34 | remoteInfo = FTPickerView; 35 | }; 36 | /* End PBXContainerItemProxy section */ 37 | 38 | /* Begin PBXFileReference section */ 39 | 5A0FF3FF1C10191A00D584D3 /* FTPickerView.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = FTPickerView.app; sourceTree = BUILT_PRODUCTS_DIR; }; 40 | 5A0FF4181C10191A00D584D3 /* FTPickerViewTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = FTPickerViewTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 41 | 5A0FF41C1C10191A00D584D3 /* FTPickerViewTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FTPickerViewTests.m; sourceTree = ""; }; 42 | 5A0FF41E1C10191A00D584D3 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 43 | 5A0FF4231C10191A00D584D3 /* FTPickerViewUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = FTPickerViewUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 44 | 5A0FF4271C10191A00D584D3 /* FTPickerViewUITests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FTPickerViewUITests.m; sourceTree = ""; }; 45 | 5A0FF4291C10191A00D584D3 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 46 | 5AECB1781D1C18FF00CD8CB1 /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AppDelegate.h; path = Demo/AppDelegate.h; sourceTree = SOURCE_ROOT; }; 47 | 5AECB1791D1C18FF00CD8CB1 /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AppDelegate.m; path = Demo/AppDelegate.m; sourceTree = SOURCE_ROOT; }; 48 | 5AECB17A1D1C18FF00CD8CB1 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = Demo/Assets.xcassets; sourceTree = SOURCE_ROOT; }; 49 | 5AECB17B1D1C18FF00CD8CB1 /* ViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ViewController.h; path = Demo/ViewController.h; sourceTree = SOURCE_ROOT; }; 50 | 5AECB17C1D1C18FF00CD8CB1 /* ViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = ViewController.m; path = Demo/ViewController.m; sourceTree = SOURCE_ROOT; }; 51 | 5AECB1801D1C191500CD8CB1 /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = Demo/main.m; sourceTree = SOURCE_ROOT; }; 52 | 5AECB1831D1C193100CD8CB1 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Demo/Base.lproj/LaunchScreen.storyboard; sourceTree = SOURCE_ROOT; }; 53 | 5AECB1851D1C193100CD8CB1 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Demo/Base.lproj/Main.storyboard; sourceTree = SOURCE_ROOT; }; 54 | 5AECB1891D1C196800CD8CB1 /* FTPickerView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FTPickerView.h; sourceTree = ""; }; 55 | 5AECB18A1D1C196800CD8CB1 /* FTPickerView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FTPickerView.m; sourceTree = ""; }; 56 | 5AECB18C1D1C198600CD8CB1 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 57 | /* End PBXFileReference section */ 58 | 59 | /* Begin PBXFrameworksBuildPhase section */ 60 | 5A0FF3FC1C10191A00D584D3 /* Frameworks */ = { 61 | isa = PBXFrameworksBuildPhase; 62 | buildActionMask = 2147483647; 63 | files = ( 64 | ); 65 | runOnlyForDeploymentPostprocessing = 0; 66 | }; 67 | 5A0FF4151C10191A00D584D3 /* Frameworks */ = { 68 | isa = PBXFrameworksBuildPhase; 69 | buildActionMask = 2147483647; 70 | files = ( 71 | ); 72 | runOnlyForDeploymentPostprocessing = 0; 73 | }; 74 | 5A0FF4201C10191A00D584D3 /* Frameworks */ = { 75 | isa = PBXFrameworksBuildPhase; 76 | buildActionMask = 2147483647; 77 | files = ( 78 | ); 79 | runOnlyForDeploymentPostprocessing = 0; 80 | }; 81 | /* End PBXFrameworksBuildPhase section */ 82 | 83 | /* Begin PBXGroup section */ 84 | 5A0FF3F61C10191A00D584D3 = { 85 | isa = PBXGroup; 86 | children = ( 87 | 5A0FF4011C10191A00D584D3 /* FTPickerView */, 88 | 5A0FF41B1C10191A00D584D3 /* FTPickerViewTests */, 89 | 5A0FF4261C10191A00D584D3 /* FTPickerViewUITests */, 90 | 5A0FF4001C10191A00D584D3 /* Products */, 91 | ); 92 | sourceTree = ""; 93 | }; 94 | 5A0FF4001C10191A00D584D3 /* Products */ = { 95 | isa = PBXGroup; 96 | children = ( 97 | 5A0FF3FF1C10191A00D584D3 /* FTPickerView.app */, 98 | 5A0FF4181C10191A00D584D3 /* FTPickerViewTests.xctest */, 99 | 5A0FF4231C10191A00D584D3 /* FTPickerViewUITests.xctest */, 100 | ); 101 | name = Products; 102 | sourceTree = ""; 103 | }; 104 | 5A0FF4011C10191A00D584D3 /* FTPickerView */ = { 105 | isa = PBXGroup; 106 | children = ( 107 | 5AECB1781D1C18FF00CD8CB1 /* AppDelegate.h */, 108 | 5AECB1791D1C18FF00CD8CB1 /* AppDelegate.m */, 109 | 5AECB17B1D1C18FF00CD8CB1 /* ViewController.h */, 110 | 5AECB17C1D1C18FF00CD8CB1 /* ViewController.m */, 111 | 5AECB1881D1C196800CD8CB1 /* FTPickerView */, 112 | 5AECB1841D1C193100CD8CB1 /* Main.storyboard */, 113 | 5AECB17A1D1C18FF00CD8CB1 /* Assets.xcassets */, 114 | 5AECB1821D1C193100CD8CB1 /* LaunchScreen.storyboard */, 115 | 5AECB18C1D1C198600CD8CB1 /* Info.plist */, 116 | 5A0FF4021C10191A00D584D3 /* Supporting Files */, 117 | ); 118 | path = FTPickerView; 119 | sourceTree = ""; 120 | }; 121 | 5A0FF4021C10191A00D584D3 /* Supporting Files */ = { 122 | isa = PBXGroup; 123 | children = ( 124 | 5AECB1801D1C191500CD8CB1 /* main.m */, 125 | ); 126 | name = "Supporting Files"; 127 | sourceTree = ""; 128 | }; 129 | 5A0FF41B1C10191A00D584D3 /* FTPickerViewTests */ = { 130 | isa = PBXGroup; 131 | children = ( 132 | 5A0FF41C1C10191A00D584D3 /* FTPickerViewTests.m */, 133 | 5A0FF41E1C10191A00D584D3 /* Info.plist */, 134 | ); 135 | path = FTPickerViewTests; 136 | sourceTree = ""; 137 | }; 138 | 5A0FF4261C10191A00D584D3 /* FTPickerViewUITests */ = { 139 | isa = PBXGroup; 140 | children = ( 141 | 5A0FF4271C10191A00D584D3 /* FTPickerViewUITests.m */, 142 | 5A0FF4291C10191A00D584D3 /* Info.plist */, 143 | ); 144 | path = FTPickerViewUITests; 145 | sourceTree = ""; 146 | }; 147 | 5AECB1881D1C196800CD8CB1 /* FTPickerView */ = { 148 | isa = PBXGroup; 149 | children = ( 150 | 5AECB1891D1C196800CD8CB1 /* FTPickerView.h */, 151 | 5AECB18A1D1C196800CD8CB1 /* FTPickerView.m */, 152 | ); 153 | name = FTPickerView; 154 | sourceTree = ""; 155 | }; 156 | /* End PBXGroup section */ 157 | 158 | /* Begin PBXNativeTarget section */ 159 | 5A0FF3FE1C10191A00D584D3 /* FTPickerView */ = { 160 | isa = PBXNativeTarget; 161 | buildConfigurationList = 5A0FF42C1C10191A00D584D3 /* Build configuration list for PBXNativeTarget "FTPickerView" */; 162 | buildPhases = ( 163 | 5A0FF3FB1C10191A00D584D3 /* Sources */, 164 | 5A0FF3FC1C10191A00D584D3 /* Frameworks */, 165 | 5A0FF3FD1C10191A00D584D3 /* Resources */, 166 | ); 167 | buildRules = ( 168 | ); 169 | dependencies = ( 170 | ); 171 | name = FTPickerView; 172 | productName = FTPickerView; 173 | productReference = 5A0FF3FF1C10191A00D584D3 /* FTPickerView.app */; 174 | productType = "com.apple.product-type.application"; 175 | }; 176 | 5A0FF4171C10191A00D584D3 /* FTPickerViewTests */ = { 177 | isa = PBXNativeTarget; 178 | buildConfigurationList = 5A0FF42F1C10191A00D584D3 /* Build configuration list for PBXNativeTarget "FTPickerViewTests" */; 179 | buildPhases = ( 180 | 5A0FF4141C10191A00D584D3 /* Sources */, 181 | 5A0FF4151C10191A00D584D3 /* Frameworks */, 182 | 5A0FF4161C10191A00D584D3 /* Resources */, 183 | ); 184 | buildRules = ( 185 | ); 186 | dependencies = ( 187 | 5A0FF41A1C10191A00D584D3 /* PBXTargetDependency */, 188 | ); 189 | name = FTPickerViewTests; 190 | productName = FTPickerViewTests; 191 | productReference = 5A0FF4181C10191A00D584D3 /* FTPickerViewTests.xctest */; 192 | productType = "com.apple.product-type.bundle.unit-test"; 193 | }; 194 | 5A0FF4221C10191A00D584D3 /* FTPickerViewUITests */ = { 195 | isa = PBXNativeTarget; 196 | buildConfigurationList = 5A0FF4321C10191A00D584D3 /* Build configuration list for PBXNativeTarget "FTPickerViewUITests" */; 197 | buildPhases = ( 198 | 5A0FF41F1C10191A00D584D3 /* Sources */, 199 | 5A0FF4201C10191A00D584D3 /* Frameworks */, 200 | 5A0FF4211C10191A00D584D3 /* Resources */, 201 | ); 202 | buildRules = ( 203 | ); 204 | dependencies = ( 205 | 5A0FF4251C10191A00D584D3 /* PBXTargetDependency */, 206 | ); 207 | name = FTPickerViewUITests; 208 | productName = FTPickerViewUITests; 209 | productReference = 5A0FF4231C10191A00D584D3 /* FTPickerViewUITests.xctest */; 210 | productType = "com.apple.product-type.bundle.ui-testing"; 211 | }; 212 | /* End PBXNativeTarget section */ 213 | 214 | /* Begin PBXProject section */ 215 | 5A0FF3F71C10191A00D584D3 /* Project object */ = { 216 | isa = PBXProject; 217 | attributes = { 218 | LastUpgradeCheck = 0930; 219 | ORGANIZATIONNAME = liufengting; 220 | TargetAttributes = { 221 | 5A0FF3FE1C10191A00D584D3 = { 222 | CreatedOnToolsVersion = 7.1.1; 223 | }; 224 | 5A0FF4171C10191A00D584D3 = { 225 | CreatedOnToolsVersion = 7.1.1; 226 | TestTargetID = 5A0FF3FE1C10191A00D584D3; 227 | }; 228 | 5A0FF4221C10191A00D584D3 = { 229 | CreatedOnToolsVersion = 7.1.1; 230 | TestTargetID = 5A0FF3FE1C10191A00D584D3; 231 | }; 232 | }; 233 | }; 234 | buildConfigurationList = 5A0FF3FA1C10191A00D584D3 /* Build configuration list for PBXProject "FTPickerView" */; 235 | compatibilityVersion = "Xcode 3.2"; 236 | developmentRegion = English; 237 | hasScannedForEncodings = 0; 238 | knownRegions = ( 239 | en, 240 | Base, 241 | ); 242 | mainGroup = 5A0FF3F61C10191A00D584D3; 243 | productRefGroup = 5A0FF4001C10191A00D584D3 /* Products */; 244 | projectDirPath = ""; 245 | projectRoot = ""; 246 | targets = ( 247 | 5A0FF3FE1C10191A00D584D3 /* FTPickerView */, 248 | 5A0FF4171C10191A00D584D3 /* FTPickerViewTests */, 249 | 5A0FF4221C10191A00D584D3 /* FTPickerViewUITests */, 250 | ); 251 | }; 252 | /* End PBXProject section */ 253 | 254 | /* Begin PBXResourcesBuildPhase section */ 255 | 5A0FF3FD1C10191A00D584D3 /* Resources */ = { 256 | isa = PBXResourcesBuildPhase; 257 | buildActionMask = 2147483647; 258 | files = ( 259 | 5AECB1871D1C193100CD8CB1 /* Main.storyboard in Resources */, 260 | 5AECB17E1D1C18FF00CD8CB1 /* Assets.xcassets in Resources */, 261 | 5AECB1861D1C193100CD8CB1 /* LaunchScreen.storyboard in Resources */, 262 | ); 263 | runOnlyForDeploymentPostprocessing = 0; 264 | }; 265 | 5A0FF4161C10191A00D584D3 /* Resources */ = { 266 | isa = PBXResourcesBuildPhase; 267 | buildActionMask = 2147483647; 268 | files = ( 269 | ); 270 | runOnlyForDeploymentPostprocessing = 0; 271 | }; 272 | 5A0FF4211C10191A00D584D3 /* Resources */ = { 273 | isa = PBXResourcesBuildPhase; 274 | buildActionMask = 2147483647; 275 | files = ( 276 | ); 277 | runOnlyForDeploymentPostprocessing = 0; 278 | }; 279 | /* End PBXResourcesBuildPhase section */ 280 | 281 | /* Begin PBXSourcesBuildPhase section */ 282 | 5A0FF3FB1C10191A00D584D3 /* Sources */ = { 283 | isa = PBXSourcesBuildPhase; 284 | buildActionMask = 2147483647; 285 | files = ( 286 | 5AECB18B1D1C196800CD8CB1 /* FTPickerView.m in Sources */, 287 | 5AECB17F1D1C18FF00CD8CB1 /* ViewController.m in Sources */, 288 | 5AECB1811D1C191500CD8CB1 /* main.m in Sources */, 289 | 5AECB17D1D1C18FF00CD8CB1 /* AppDelegate.m in Sources */, 290 | ); 291 | runOnlyForDeploymentPostprocessing = 0; 292 | }; 293 | 5A0FF4141C10191A00D584D3 /* Sources */ = { 294 | isa = PBXSourcesBuildPhase; 295 | buildActionMask = 2147483647; 296 | files = ( 297 | 5A0FF41D1C10191A00D584D3 /* FTPickerViewTests.m in Sources */, 298 | ); 299 | runOnlyForDeploymentPostprocessing = 0; 300 | }; 301 | 5A0FF41F1C10191A00D584D3 /* Sources */ = { 302 | isa = PBXSourcesBuildPhase; 303 | buildActionMask = 2147483647; 304 | files = ( 305 | 5A0FF4281C10191A00D584D3 /* FTPickerViewUITests.m in Sources */, 306 | ); 307 | runOnlyForDeploymentPostprocessing = 0; 308 | }; 309 | /* End PBXSourcesBuildPhase section */ 310 | 311 | /* Begin PBXTargetDependency section */ 312 | 5A0FF41A1C10191A00D584D3 /* PBXTargetDependency */ = { 313 | isa = PBXTargetDependency; 314 | target = 5A0FF3FE1C10191A00D584D3 /* FTPickerView */; 315 | targetProxy = 5A0FF4191C10191A00D584D3 /* PBXContainerItemProxy */; 316 | }; 317 | 5A0FF4251C10191A00D584D3 /* PBXTargetDependency */ = { 318 | isa = PBXTargetDependency; 319 | target = 5A0FF3FE1C10191A00D584D3 /* FTPickerView */; 320 | targetProxy = 5A0FF4241C10191A00D584D3 /* PBXContainerItemProxy */; 321 | }; 322 | /* End PBXTargetDependency section */ 323 | 324 | /* Begin PBXVariantGroup section */ 325 | 5AECB1821D1C193100CD8CB1 /* LaunchScreen.storyboard */ = { 326 | isa = PBXVariantGroup; 327 | children = ( 328 | 5AECB1831D1C193100CD8CB1 /* Base */, 329 | ); 330 | name = LaunchScreen.storyboard; 331 | sourceTree = ""; 332 | }; 333 | 5AECB1841D1C193100CD8CB1 /* Main.storyboard */ = { 334 | isa = PBXVariantGroup; 335 | children = ( 336 | 5AECB1851D1C193100CD8CB1 /* Base */, 337 | ); 338 | name = Main.storyboard; 339 | sourceTree = ""; 340 | }; 341 | /* End PBXVariantGroup section */ 342 | 343 | /* Begin XCBuildConfiguration section */ 344 | 5A0FF42A1C10191A00D584D3 /* Debug */ = { 345 | isa = XCBuildConfiguration; 346 | buildSettings = { 347 | ALWAYS_SEARCH_USER_PATHS = NO; 348 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 349 | CLANG_CXX_LIBRARY = "libc++"; 350 | CLANG_ENABLE_MODULES = YES; 351 | CLANG_ENABLE_OBJC_ARC = YES; 352 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 353 | CLANG_WARN_BOOL_CONVERSION = YES; 354 | CLANG_WARN_COMMA = YES; 355 | CLANG_WARN_CONSTANT_CONVERSION = YES; 356 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 357 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 358 | CLANG_WARN_EMPTY_BODY = YES; 359 | CLANG_WARN_ENUM_CONVERSION = YES; 360 | CLANG_WARN_INFINITE_RECURSION = YES; 361 | CLANG_WARN_INT_CONVERSION = YES; 362 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 363 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 364 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 365 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 366 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 367 | CLANG_WARN_STRICT_PROTOTYPES = YES; 368 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 369 | CLANG_WARN_UNREACHABLE_CODE = YES; 370 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 371 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 372 | COPY_PHASE_STRIP = NO; 373 | DEBUG_INFORMATION_FORMAT = dwarf; 374 | ENABLE_STRICT_OBJC_MSGSEND = YES; 375 | ENABLE_TESTABILITY = YES; 376 | GCC_C_LANGUAGE_STANDARD = gnu99; 377 | GCC_DYNAMIC_NO_PIC = NO; 378 | GCC_NO_COMMON_BLOCKS = YES; 379 | GCC_OPTIMIZATION_LEVEL = 0; 380 | GCC_PREPROCESSOR_DEFINITIONS = ( 381 | "DEBUG=1", 382 | "$(inherited)", 383 | ); 384 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 385 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 386 | GCC_WARN_UNDECLARED_SELECTOR = YES; 387 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 388 | GCC_WARN_UNUSED_FUNCTION = YES; 389 | GCC_WARN_UNUSED_VARIABLE = YES; 390 | IPHONEOS_DEPLOYMENT_TARGET = 9.1; 391 | MTL_ENABLE_DEBUG_INFO = YES; 392 | ONLY_ACTIVE_ARCH = YES; 393 | SDKROOT = iphoneos; 394 | }; 395 | name = Debug; 396 | }; 397 | 5A0FF42B1C10191A00D584D3 /* Release */ = { 398 | isa = XCBuildConfiguration; 399 | buildSettings = { 400 | ALWAYS_SEARCH_USER_PATHS = NO; 401 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 402 | CLANG_CXX_LIBRARY = "libc++"; 403 | CLANG_ENABLE_MODULES = YES; 404 | CLANG_ENABLE_OBJC_ARC = YES; 405 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 406 | CLANG_WARN_BOOL_CONVERSION = YES; 407 | CLANG_WARN_COMMA = YES; 408 | CLANG_WARN_CONSTANT_CONVERSION = YES; 409 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 410 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 411 | CLANG_WARN_EMPTY_BODY = YES; 412 | CLANG_WARN_ENUM_CONVERSION = YES; 413 | CLANG_WARN_INFINITE_RECURSION = YES; 414 | CLANG_WARN_INT_CONVERSION = YES; 415 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 416 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 417 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 418 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 419 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 420 | CLANG_WARN_STRICT_PROTOTYPES = YES; 421 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 422 | CLANG_WARN_UNREACHABLE_CODE = YES; 423 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 424 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 425 | COPY_PHASE_STRIP = NO; 426 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 427 | ENABLE_NS_ASSERTIONS = NO; 428 | ENABLE_STRICT_OBJC_MSGSEND = YES; 429 | GCC_C_LANGUAGE_STANDARD = gnu99; 430 | GCC_NO_COMMON_BLOCKS = YES; 431 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 432 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 433 | GCC_WARN_UNDECLARED_SELECTOR = YES; 434 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 435 | GCC_WARN_UNUSED_FUNCTION = YES; 436 | GCC_WARN_UNUSED_VARIABLE = YES; 437 | IPHONEOS_DEPLOYMENT_TARGET = 9.1; 438 | MTL_ENABLE_DEBUG_INFO = NO; 439 | SDKROOT = iphoneos; 440 | VALIDATE_PRODUCT = YES; 441 | }; 442 | name = Release; 443 | }; 444 | 5A0FF42D1C10191A00D584D3 /* Debug */ = { 445 | isa = XCBuildConfiguration; 446 | buildSettings = { 447 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 448 | CODE_SIGN_IDENTITY = "iPhone Developer"; 449 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 450 | INFOPLIST_FILE = FTPickerView/Info.plist; 451 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 452 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 453 | PRODUCT_BUNDLE_IDENTIFIER = com.liufengting.FTPickerView; 454 | PRODUCT_NAME = "$(TARGET_NAME)"; 455 | PROVISIONING_PROFILE = ""; 456 | }; 457 | name = Debug; 458 | }; 459 | 5A0FF42E1C10191A00D584D3 /* Release */ = { 460 | isa = XCBuildConfiguration; 461 | buildSettings = { 462 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 463 | CODE_SIGN_IDENTITY = "iPhone Developer"; 464 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 465 | INFOPLIST_FILE = FTPickerView/Info.plist; 466 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 467 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 468 | PRODUCT_BUNDLE_IDENTIFIER = com.liufengting.FTPickerView; 469 | PRODUCT_NAME = "$(TARGET_NAME)"; 470 | PROVISIONING_PROFILE = ""; 471 | }; 472 | name = Release; 473 | }; 474 | 5A0FF4301C10191A00D584D3 /* Debug */ = { 475 | isa = XCBuildConfiguration; 476 | buildSettings = { 477 | BUNDLE_LOADER = "$(TEST_HOST)"; 478 | INFOPLIST_FILE = FTPickerViewTests/Info.plist; 479 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 480 | PRODUCT_BUNDLE_IDENTIFIER = com.liufengting.FTPickerViewTests; 481 | PRODUCT_NAME = "$(TARGET_NAME)"; 482 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/FTPickerView.app/FTPickerView"; 483 | }; 484 | name = Debug; 485 | }; 486 | 5A0FF4311C10191A00D584D3 /* Release */ = { 487 | isa = XCBuildConfiguration; 488 | buildSettings = { 489 | BUNDLE_LOADER = "$(TEST_HOST)"; 490 | INFOPLIST_FILE = FTPickerViewTests/Info.plist; 491 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 492 | PRODUCT_BUNDLE_IDENTIFIER = com.liufengting.FTPickerViewTests; 493 | PRODUCT_NAME = "$(TARGET_NAME)"; 494 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/FTPickerView.app/FTPickerView"; 495 | }; 496 | name = Release; 497 | }; 498 | 5A0FF4331C10191A00D584D3 /* Debug */ = { 499 | isa = XCBuildConfiguration; 500 | buildSettings = { 501 | INFOPLIST_FILE = FTPickerViewUITests/Info.plist; 502 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 503 | PRODUCT_BUNDLE_IDENTIFIER = com.liufengting.FTPickerViewUITests; 504 | PRODUCT_NAME = "$(TARGET_NAME)"; 505 | TEST_TARGET_NAME = FTPickerView; 506 | USES_XCTRUNNER = YES; 507 | }; 508 | name = Debug; 509 | }; 510 | 5A0FF4341C10191A00D584D3 /* Release */ = { 511 | isa = XCBuildConfiguration; 512 | buildSettings = { 513 | INFOPLIST_FILE = FTPickerViewUITests/Info.plist; 514 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 515 | PRODUCT_BUNDLE_IDENTIFIER = com.liufengting.FTPickerViewUITests; 516 | PRODUCT_NAME = "$(TARGET_NAME)"; 517 | TEST_TARGET_NAME = FTPickerView; 518 | USES_XCTRUNNER = YES; 519 | }; 520 | name = Release; 521 | }; 522 | /* End XCBuildConfiguration section */ 523 | 524 | /* Begin XCConfigurationList section */ 525 | 5A0FF3FA1C10191A00D584D3 /* Build configuration list for PBXProject "FTPickerView" */ = { 526 | isa = XCConfigurationList; 527 | buildConfigurations = ( 528 | 5A0FF42A1C10191A00D584D3 /* Debug */, 529 | 5A0FF42B1C10191A00D584D3 /* Release */, 530 | ); 531 | defaultConfigurationIsVisible = 0; 532 | defaultConfigurationName = Release; 533 | }; 534 | 5A0FF42C1C10191A00D584D3 /* Build configuration list for PBXNativeTarget "FTPickerView" */ = { 535 | isa = XCConfigurationList; 536 | buildConfigurations = ( 537 | 5A0FF42D1C10191A00D584D3 /* Debug */, 538 | 5A0FF42E1C10191A00D584D3 /* Release */, 539 | ); 540 | defaultConfigurationIsVisible = 0; 541 | defaultConfigurationName = Release; 542 | }; 543 | 5A0FF42F1C10191A00D584D3 /* Build configuration list for PBXNativeTarget "FTPickerViewTests" */ = { 544 | isa = XCConfigurationList; 545 | buildConfigurations = ( 546 | 5A0FF4301C10191A00D584D3 /* Debug */, 547 | 5A0FF4311C10191A00D584D3 /* Release */, 548 | ); 549 | defaultConfigurationIsVisible = 0; 550 | defaultConfigurationName = Release; 551 | }; 552 | 5A0FF4321C10191A00D584D3 /* Build configuration list for PBXNativeTarget "FTPickerViewUITests" */ = { 553 | isa = XCConfigurationList; 554 | buildConfigurations = ( 555 | 5A0FF4331C10191A00D584D3 /* Debug */, 556 | 5A0FF4341C10191A00D584D3 /* Release */, 557 | ); 558 | defaultConfigurationIsVisible = 0; 559 | defaultConfigurationName = Release; 560 | }; 561 | /* End XCConfigurationList section */ 562 | }; 563 | rootObject = 5A0FF3F71C10191A00D584D3 /* Project object */; 564 | } 565 | -------------------------------------------------------------------------------- /FTPickerView.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /FTPickerView.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /FTPickerView.xcodeproj/project.xcworkspace/xcuserdata/liu.xcuserdatad/UserInterfaceState.xcuserstate: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liufengting/FTPickerView/bd114e151d11044503ad81461b307c841cebe88c/FTPickerView.xcodeproj/project.xcworkspace/xcuserdata/liu.xcuserdatad/UserInterfaceState.xcuserstate -------------------------------------------------------------------------------- /FTPickerView.xcodeproj/project.xcworkspace/xcuserdata/liufengting.xcuserdatad/UserInterfaceState.xcuserstate: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liufengting/FTPickerView/bd114e151d11044503ad81461b307c841cebe88c/FTPickerView.xcodeproj/project.xcworkspace/xcuserdata/liufengting.xcuserdatad/UserInterfaceState.xcuserstate -------------------------------------------------------------------------------- /FTPickerView.xcodeproj/xcuserdata/liu.xcuserdatad/xcschemes/FTPickerView.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 33 | 39 | 40 | 41 | 43 | 49 | 50 | 51 | 52 | 53 | 59 | 60 | 61 | 62 | 63 | 64 | 74 | 76 | 82 | 83 | 84 | 85 | 86 | 87 | 93 | 95 | 101 | 102 | 103 | 104 | 106 | 107 | 110 | 111 | 112 | -------------------------------------------------------------------------------- /FTPickerView.xcodeproj/xcuserdata/liu.xcuserdatad/xcschemes/xcschememanagement.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SchemeUserState 6 | 7 | FTPickerView.xcscheme 8 | 9 | orderHint 10 | 0 11 | 12 | 13 | SuppressBuildableAutocreation 14 | 15 | 5A0FF3FE1C10191A00D584D3 16 | 17 | primary 18 | 19 | 20 | 5A0FF4171C10191A00D584D3 21 | 22 | primary 23 | 24 | 25 | 5A0FF4221C10191A00D584D3 26 | 27 | primary 28 | 29 | 30 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /FTPickerView.xcodeproj/xcuserdata/liufengting.xcuserdatad/xcschemes/xcschememanagement.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SchemeUserState 6 | 7 | FTPickerView.xcscheme 8 | 9 | orderHint 10 | 0 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /FTPickerView/FTPickerView.h: -------------------------------------------------------------------------------- 1 | // 2 | // FTPickerView.h 3 | // FTPickerView 4 | // 5 | // Created by liufengting https://github.com/liufengting on 15/12/3. 6 | // Copyright © 2015年 liufengting. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | typedef void (^ FTPickerDoneBlock )(NSInteger selectedIndex); 12 | typedef void (^ FTPickerCancelBlock )(void); 13 | typedef void (^ FTDatePickerDoneBlock )(NSDate *selectedDate); 14 | typedef void (^ FTDatePickerCancelBlock )(void); 15 | 16 | /** 17 | * FTPickerTitleView 18 | */ 19 | 20 | @interface FTPickerTitleView : UIView 21 | 22 | @end 23 | 24 | /** 25 | * FTPickerView 26 | */ 27 | 28 | @interface FTPickerView : NSObject 29 | 30 | /** 31 | * show method 32 | * 33 | * @param title title 34 | * @param nameArray nameArray 35 | * @param doneBlock FTPickerDoneBlock 36 | * @param cancelBlock FTPickerCancelBlock 37 | */ 38 | +(void)showWithTitle:(NSString *)title 39 | nameArray:(NSArray *)nameArray 40 | doneBlock :(FTPickerDoneBlock)doneBlock 41 | cancelBlock:(FTPickerCancelBlock)cancelBlock; 42 | /** 43 | * dismiss 44 | */ 45 | +(void)dismiss; 46 | 47 | @end 48 | 49 | /** 50 | * FTDatePickerView 51 | */ 52 | 53 | @interface FTDatePickerView : UIView 54 | 55 | /** 56 | * show method 57 | * 58 | * @param title title 59 | * @param doneBlock FTDatePickerDoneBlock 60 | * @param cancelBlock FTDatePickerCancelBlock 61 | */ 62 | +(void)showWithTitle:(NSString *)title 63 | doneBlock :(FTDatePickerDoneBlock)doneBlock 64 | cancelBlock:(FTDatePickerCancelBlock)cancelBlock; 65 | /** 66 | * show method 67 | * 68 | * @param title title 69 | * @param selectDate selectDate 70 | * @param datePickerMode datePickerMode 71 | * @param doneBlock FTDatePickerDoneBlock 72 | * @param cancelBlock FTDatePickerCancelBlock 73 | */ 74 | +(void)showWithTitle:(NSString *)title 75 | selectDate:(NSDate *)selectDate 76 | datePickerMode:(UIDatePickerMode )datePickerMode 77 | doneBlock :(FTDatePickerDoneBlock)doneBlock 78 | cancelBlock:(FTDatePickerCancelBlock)cancelBlock; 79 | /** 80 | * dismiss 81 | */ 82 | +(void)dismiss; 83 | 84 | @end 85 | -------------------------------------------------------------------------------- /FTPickerView/FTPickerView.m: -------------------------------------------------------------------------------- 1 | // 2 | // FTPickerView.m 3 | // FTPickerView 4 | // 5 | // Created by liufengting https://github.com/liufengting on 15/12/3. 6 | // Copyright © 2015年 liufengting. All rights reserved. 7 | // 8 | 9 | #import "FTPickerView.h" 10 | 11 | #define KSCREEN_WIDTH [[UIScreen mainScreen] bounds].size.width 12 | #define KSCREEN_HEIGHT [[UIScreen mainScreen] bounds].size.height 13 | #define PickerHeight 216.f 14 | #define BackgroundColor [[UIColor blackColor] colorWithAlphaComponent:0.2f] 15 | #define LineHeight 0.6f 16 | 17 | #pragma mark - 18 | #pragma mark - FTPickerTitleView 19 | 20 | @interface FTPickerTitleView () 21 | 22 | @property (nonatomic,strong)UIButton *cancelButton; 23 | @property (nonatomic,strong)UIButton *confirmButton; 24 | @property (nonatomic,strong)UILabel *titleLabel; 25 | @property (nonatomic,strong)UIView *bottomLine; 26 | 27 | @end 28 | 29 | @implementation FTPickerTitleView 30 | 31 | -(id)initWithFrame:(CGRect)frame withTitle:(NSString *)title 32 | { 33 | self = [super initWithFrame:frame]; 34 | if (self) { 35 | self.backgroundColor = [UIColor whiteColor]; 36 | 37 | _cancelButton = [UIButton buttonWithType:UIButtonTypeCustom]; 38 | _cancelButton.frame = CGRectMake(0, 0, 60, self.bounds.size.height); 39 | _cancelButton.backgroundColor = [UIColor clearColor]; 40 | _cancelButton.titleLabel.font = [UIFont systemFontOfSize:14]; 41 | [_cancelButton setTitle:@"取消" forState:UIControlStateNormal]; 42 | [_cancelButton setTitleColor:[UIColor grayColor] forState:UIControlStateNormal]; 43 | [self addSubview:_cancelButton]; 44 | 45 | 46 | _confirmButton = [UIButton buttonWithType:UIButtonTypeCustom]; 47 | _confirmButton.frame= CGRectMake(self.bounds.size.width - 60, 0, 60, self.bounds.size.height); 48 | _confirmButton.backgroundColor=[UIColor clearColor]; 49 | _confirmButton.titleLabel.font = [UIFont systemFontOfSize:14]; 50 | [_confirmButton setTitle:@"确认" forState:UIControlStateNormal]; 51 | [_confirmButton setTitleColor:[UIColor blackColor] forState:UIControlStateNormal]; 52 | [self addSubview:_confirmButton]; 53 | 54 | 55 | _titleLabel = [[UILabel alloc]initWithFrame:CGRectMake(60, 0, self.bounds.size.width - 120 , self.bounds.size.height )]; 56 | _titleLabel.backgroundColor=[UIColor clearColor]; 57 | _titleLabel.textColor=[UIColor blackColor]; 58 | _titleLabel.font=[UIFont boldSystemFontOfSize:15]; 59 | _titleLabel.textAlignment = NSTextAlignmentCenter; 60 | _titleLabel.text = title; 61 | [self addSubview:_titleLabel]; 62 | 63 | _bottomLine = [[UIView alloc] initWithFrame:CGRectMake(0, self.bounds.size.height - LineHeight, self.bounds.size.width, LineHeight)]; 64 | _bottomLine.backgroundColor = [UIColor lightGrayColor]; 65 | [self addSubview:_bottomLine]; 66 | } 67 | return self; 68 | } 69 | 70 | @end 71 | 72 | #pragma mark - 73 | #pragma mark - FTPickerView 74 | 75 | @interface FTPickerView() 76 | 77 | @property (nonatomic,strong)UIView *backgroundView; 78 | @property (nonatomic,strong)UIPickerView *pickerView; 79 | @property (nonatomic,strong)FTPickerTitleView *titleView; 80 | @property (nonatomic,strong)NSArray *titleArray; 81 | @property (nonatomic,assign)NSInteger pickerTag; 82 | @property (nonatomic,strong)FTPickerDoneBlock doneBlock; 83 | @property (nonatomic,strong)FTPickerCancelBlock cancelBlock; 84 | 85 | @end 86 | 87 | #pragma mark - FTPickerView 88 | 89 | @implementation FTPickerView 90 | 91 | #pragma mark - public methods 92 | 93 | + (FTPickerView *)sharedInstance 94 | { 95 | static dispatch_once_t once = 0; 96 | static FTPickerView *sharedView; 97 | dispatch_once(&once, ^{ sharedView = [[FTPickerView alloc] init]; }); 98 | return sharedView; 99 | } 100 | +(void)showWithTitle:(NSString *)title nameArray:(NSArray *)nameArray doneBlock :(FTPickerDoneBlock)doneBlock cancelBlock:(FTPickerCancelBlock)cancelBlock 101 | { 102 | [[self sharedInstance] showWithTitle:title nameArray:nameArray doneBlock:doneBlock cancelBlock:cancelBlock]; 103 | } 104 | +(void)dismiss 105 | { 106 | [[self sharedInstance] onCancel]; 107 | } 108 | 109 | #pragma mark - private methods 110 | -(void)showWithTitle:(NSString *)title nameArray:(NSArray *)nameArray doneBlock :(FTPickerDoneBlock)doneBlock cancelBlock:(FTPickerCancelBlock)cancelBlock 111 | { 112 | _titleArray = nameArray; 113 | _doneBlock = doneBlock; 114 | _cancelBlock = cancelBlock; 115 | 116 | if(!_backgroundView){ 117 | 118 | _backgroundView = [[UIView alloc] initWithFrame:CGRectMake(0, KSCREEN_HEIGHT, KSCREEN_WIDTH, KSCREEN_HEIGHT)]; 119 | [_backgroundView setBackgroundColor:[UIColor clearColor]]; 120 | [[UIApplication sharedApplication].keyWindow addSubview:_backgroundView]; 121 | 122 | UIView *blankView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, KSCREEN_WIDTH, KSCREEN_HEIGHT-PickerHeight-40)]; 123 | [blankView setBackgroundColor:[UIColor clearColor]]; 124 | [blankView addGestureRecognizer:[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(onBlankTouched)]]; 125 | [_backgroundView addSubview:blankView]; 126 | 127 | _titleView = [[FTPickerTitleView alloc]initWithFrame:CGRectMake(0, KSCREEN_HEIGHT-PickerHeight-40, KSCREEN_WIDTH, 40) 128 | withTitle:title]; 129 | [_titleView.cancelButton addTarget:self action:@selector(onCancel) forControlEvents:UIControlEventTouchUpInside]; 130 | [_titleView.confirmButton addTarget:self action:@selector(onConfirm) forControlEvents:UIControlEventTouchUpInside]; 131 | [_backgroundView addSubview:_titleView]; 132 | 133 | _pickerView = [[UIPickerView alloc]initWithFrame:CGRectMake(0, KSCREEN_HEIGHT-PickerHeight,KSCREEN_WIDTH, PickerHeight)]; 134 | _pickerView.backgroundColor = [UIColor whiteColor]; 135 | _pickerView.showsSelectionIndicator = YES; 136 | _pickerView.dataSource = self; 137 | _pickerView.delegate = self; 138 | [_backgroundView addSubview:_pickerView]; 139 | 140 | 141 | [_pickerView reloadAllComponents]; 142 | [_pickerView selectRow:0 inComponent:0 animated:YES]; 143 | [self open]; 144 | }else{ 145 | [[UIApplication sharedApplication].keyWindow addSubview:_backgroundView]; 146 | _titleView.titleLabel.text = title; 147 | [_pickerView reloadAllComponents]; 148 | [self open]; 149 | } 150 | } 151 | 152 | #pragma mark - onBlankTouched 153 | -(void)onBlankTouched 154 | { 155 | self.cancelBlock(); 156 | [self close]; 157 | } 158 | 159 | #pragma mark - cancel 160 | -(void)onCancel 161 | { 162 | self.cancelBlock(); 163 | 164 | [self close]; 165 | } 166 | #pragma mark - confirm 167 | -(void)onConfirm 168 | { 169 | 170 | self.doneBlock([_pickerView selectedRowInComponent:0]); 171 | 172 | [self close]; 173 | } 174 | #pragma mark - open 175 | -(void)open 176 | { 177 | [UIView animateWithDuration:0.3 178 | animations:^{ 179 | [self.backgroundView setFrame:CGRectMake(0, 0, KSCREEN_WIDTH, KSCREEN_HEIGHT)]; 180 | } 181 | completion:^(BOOL finished) { 182 | [UIView animateWithDuration:0.1 183 | animations:^{ 184 | self.backgroundView.backgroundColor = BackgroundColor; 185 | }]; 186 | }]; 187 | } 188 | #pragma mark - close 189 | -(void)close 190 | { 191 | [UIView animateWithDuration:0.1 192 | animations:^{ 193 | self.backgroundView.backgroundColor = [UIColor clearColor]; 194 | } 195 | completion:^(BOOL finished) { 196 | [UIView animateWithDuration:0.3 197 | animations:^{ 198 | [self.backgroundView setFrame:CGRectMake(0, KSCREEN_HEIGHT, KSCREEN_WIDTH, KSCREEN_HEIGHT)]; 199 | }]; 200 | }]; 201 | } 202 | 203 | #pragma mark - UIPicker delegate 204 | - (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView 205 | { 206 | return 1; 207 | } 208 | 209 | - (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component 210 | { 211 | return [_titleArray count]; 212 | } 213 | - (CGFloat)pickerView:(UIPickerView *)pickerView rowHeightForComponent:(NSInteger)component 214 | { 215 | return 40.0; 216 | } 217 | - (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view 218 | { 219 | UILabel *label = [[UILabel alloc]initWithFrame:CGRectMake(0, 0, pickerView.bounds.size.width,40 )]; 220 | label.backgroundColor=[UIColor clearColor]; 221 | label.textColor=[UIColor blackColor]; 222 | label.font=[UIFont systemFontOfSize:18]; 223 | label.textAlignment = NSTextAlignmentCenter; 224 | label.text = _titleArray[row]; 225 | return label; 226 | } 227 | - (CGFloat)pickerView:(UIPickerView *)pickerView widthForComponent:(NSInteger)component 228 | { 229 | return pickerView.bounds.size.width; 230 | } 231 | - (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component 232 | { 233 | 234 | } 235 | 236 | @end 237 | 238 | #pragma mark - FTDatePickerView 239 | 240 | @interface FTDatePickerView () 241 | 242 | @property (nonatomic,strong)UIView *backgroundView; 243 | @property (nonatomic,strong)UIDatePicker *datePicker; 244 | @property (nonatomic,strong)NSDate *selectedDate; 245 | @property (nonatomic,strong)FTPickerTitleView *titleView; 246 | @property (nonatomic,strong)FTDatePickerDoneBlock doneBlock; 247 | @property (nonatomic,strong)FTDatePickerCancelBlock cancelBlock; 248 | 249 | @end 250 | 251 | @implementation FTDatePickerView 252 | 253 | #pragma mark - public methods 254 | 255 | + (FTDatePickerView *)sharedInstance 256 | { 257 | static dispatch_once_t once = 0; 258 | static FTDatePickerView *sharedView; 259 | dispatch_once(&once, ^{ sharedView = [[FTDatePickerView alloc] init]; }); 260 | return sharedView; 261 | } 262 | 263 | +(void)showWithTitle:(NSString *)title doneBlock :(FTDatePickerDoneBlock)doneBlock cancelBlock:(FTDatePickerCancelBlock)cancelBlock 264 | { 265 | [[self sharedInstance] showWithTitle:title selectDate:nil datePickerMode:UIDatePickerModeDateAndTime doneBlock:doneBlock cancelBlock:cancelBlock]; 266 | 267 | } 268 | 269 | +(void)showWithTitle:(NSString *)title selectDate:(NSDate *)selectDate datePickerMode:(UIDatePickerMode )datePickerMode doneBlock :(FTDatePickerDoneBlock)doneBlock cancelBlock:(FTDatePickerCancelBlock)cancelBlock 270 | { 271 | [[self sharedInstance] showWithTitle:title selectDate:selectDate datePickerMode:datePickerMode doneBlock:doneBlock cancelBlock:cancelBlock]; 272 | } 273 | 274 | +(void)dismiss 275 | { 276 | [[self sharedInstance] onCancel]; 277 | } 278 | 279 | #pragma mark - private methods 280 | -(void)showWithTitle:(NSString *)title doneBlock :(FTDatePickerDoneBlock)doneBlock cancelBlock:(FTDatePickerCancelBlock)cancelBlock 281 | { 282 | [self showWithTitle:title selectDate:nil datePickerMode:UIDatePickerModeDateAndTime doneBlock:doneBlock cancelBlock:cancelBlock]; 283 | 284 | } 285 | 286 | -(void)showWithTitle:(NSString *)title selectDate:(NSDate *)selectDate datePickerMode:(UIDatePickerMode )datePickerMode doneBlock :(FTDatePickerDoneBlock)doneBlock cancelBlock:(FTDatePickerCancelBlock)cancelBlock 287 | { 288 | 289 | _doneBlock = doneBlock; 290 | _cancelBlock = cancelBlock; 291 | 292 | if (!_backgroundView) { 293 | _backgroundView = [[UIView alloc] initWithFrame:CGRectMake(0, KSCREEN_HEIGHT, KSCREEN_WIDTH, KSCREEN_HEIGHT)]; 294 | [_backgroundView setBackgroundColor:[UIColor clearColor]]; 295 | [[UIApplication sharedApplication].keyWindow addSubview:_backgroundView]; 296 | 297 | UIView *blankView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, KSCREEN_WIDTH, KSCREEN_HEIGHT-PickerHeight-40)]; 298 | [blankView setBackgroundColor:[UIColor clearColor]]; 299 | [blankView addGestureRecognizer:[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(onBlankTouched)]]; 300 | [_backgroundView addSubview:blankView]; 301 | 302 | 303 | _titleView = [[FTPickerTitleView alloc]initWithFrame:CGRectMake(0, KSCREEN_HEIGHT-PickerHeight-40, KSCREEN_WIDTH, 40) 304 | withTitle:title]; 305 | [_titleView.cancelButton addTarget:self action:@selector(onCancel) forControlEvents:UIControlEventTouchUpInside]; 306 | [_titleView.confirmButton addTarget:self action:@selector(onConfirm) forControlEvents:UIControlEventTouchUpInside]; 307 | [_backgroundView addSubview:_titleView]; 308 | 309 | 310 | _datePicker = [[UIDatePicker alloc]initWithFrame:CGRectMake(0, KSCREEN_HEIGHT-PickerHeight, KSCREEN_WIDTH, PickerHeight)]; 311 | _datePicker.backgroundColor = [UIColor whiteColor]; 312 | _datePicker.datePickerMode = datePickerMode; 313 | _datePicker.minuteInterval = 5; 314 | if (selectDate) { 315 | [_datePicker setDate:selectDate]; 316 | } 317 | [_backgroundView addSubview:_datePicker]; 318 | 319 | [self open]; 320 | }else{ 321 | [[UIApplication sharedApplication].keyWindow addSubview:_backgroundView]; 322 | 323 | _titleView.titleLabel.text = title; 324 | _datePicker.datePickerMode = datePickerMode; 325 | if (selectDate) { 326 | [_datePicker setDate:selectDate]; 327 | } 328 | [self open]; 329 | } 330 | } 331 | 332 | #pragma mark - cancel 333 | -(void)onCancel 334 | { 335 | _selectedDate = nil; 336 | [self close]; 337 | } 338 | #pragma mark - confirm 339 | -(void)onConfirm 340 | { 341 | _selectedDate = _datePicker.date; 342 | [self close]; 343 | } 344 | #pragma mark - onBlankTouched 345 | -(void)onBlankTouched 346 | { 347 | _selectedDate = nil; 348 | [self close]; 349 | } 350 | #pragma mark - open/close 351 | -(void)open 352 | { 353 | [UIView animateWithDuration:0.3 354 | animations:^{ 355 | [self.backgroundView setFrame:CGRectMake(0, 0, KSCREEN_WIDTH, KSCREEN_HEIGHT)]; 356 | } 357 | completion:^(BOOL finished) { 358 | [UIView animateWithDuration:0.1 359 | animations:^{ 360 | self.backgroundView.backgroundColor = BackgroundColor; 361 | }]; 362 | }]; 363 | } 364 | -(void)close 365 | { 366 | [UIView animateWithDuration:0.1 367 | animations:^{ 368 | self.backgroundView.backgroundColor = [UIColor clearColor]; 369 | } 370 | completion:^(BOOL finished) { 371 | [UIView animateWithDuration:0.3 372 | animations:^{ 373 | [self.backgroundView setFrame:CGRectMake(0, KSCREEN_HEIGHT, KSCREEN_WIDTH, KSCREEN_HEIGHT)]; 374 | }completion:^(BOOL finished) { 375 | if (self.selectedDate) { 376 | self.doneBlock(self.selectedDate); 377 | }else{ 378 | self.cancelBlock(); 379 | } 380 | }]; 381 | }]; 382 | } 383 | 384 | 385 | @end 386 | -------------------------------------------------------------------------------- /FTPickerView/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 | UIInterfaceOrientationLandscapeRight 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /FTPickerViewTests/FTPickerViewTests.m: -------------------------------------------------------------------------------- 1 | // 2 | // FTPickerViewTests.m 3 | // FTPickerViewTests 4 | // 5 | // Created by liufengting https://github.com/liufengting on 15/12/3. 6 | // Copyright © 2015年 liufengting. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface FTPickerViewTests : XCTestCase 12 | 13 | @end 14 | 15 | @implementation FTPickerViewTests 16 | 17 | - (void)setUp { 18 | [super setUp]; 19 | // Put setup code here. This method is called before the invocation of each test method in the class. 20 | } 21 | 22 | - (void)tearDown { 23 | // Put teardown code here. This method is called after the invocation of each test method in the class. 24 | [super tearDown]; 25 | } 26 | 27 | - (void)testExample { 28 | // This is an example of a functional test case. 29 | // Use XCTAssert and related functions to verify your tests produce the correct results. 30 | } 31 | 32 | - (void)testPerformanceExample { 33 | // This is an example of a performance test case. 34 | [self measureBlock:^{ 35 | // Put the code you want to measure the time of here. 36 | }]; 37 | } 38 | 39 | @end 40 | -------------------------------------------------------------------------------- /FTPickerViewTests/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 | -------------------------------------------------------------------------------- /FTPickerViewUITests/FTPickerViewUITests.m: -------------------------------------------------------------------------------- 1 | // 2 | // FTPickerViewUITests.m 3 | // FTPickerViewUITests 4 | // 5 | // Created by liufengting https://github.com/liufengting on 15/12/3. 6 | // Copyright © 2015年 liufengting. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface FTPickerViewUITests : XCTestCase 12 | 13 | @end 14 | 15 | @implementation FTPickerViewUITests 16 | 17 | - (void)setUp { 18 | [super setUp]; 19 | 20 | // Put setup code here. This method is called before the invocation of each test method in the class. 21 | 22 | // In UI tests it is usually best to stop immediately when a failure occurs. 23 | self.continueAfterFailure = NO; 24 | // UI tests must launch the application that they test. Doing this in setup will make sure it happens for each test method. 25 | [[[XCUIApplication alloc] init] launch]; 26 | 27 | // In UI tests it’s important to set the initial state - such as interface orientation - required for your tests before they run. The setUp method is a good place to do this. 28 | } 29 | 30 | - (void)tearDown { 31 | // Put teardown code here. This method is called after the invocation of each test method in the class. 32 | [super tearDown]; 33 | } 34 | 35 | - (void)testExample { 36 | // Use recording to get started writing UI tests. 37 | // Use XCTAssert and related functions to verify your tests produce the correct results. 38 | } 39 | 40 | @end 41 | -------------------------------------------------------------------------------- /FTPickerViewUITests/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 | -------------------------------------------------------------------------------- /ImageAssets/DatePicker.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liufengting/FTPickerView/bd114e151d11044503ad81461b307c841cebe88c/ImageAssets/DatePicker.png -------------------------------------------------------------------------------- /ImageAssets/SimplePicker.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liufengting/FTPickerView/bd114e151d11044503ad81461b307c841cebe88c/ImageAssets/SimplePicker.png -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2016 刘锋婷 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # FTPickerView 2 | [![Twitter](https://img.shields.io/badge/twitter-@liufengting-blue.svg?style=flat)](http://twitter.com/liufengting) 3 | [![GitHub license](https://img.shields.io/badge/license-MIT-blue.svg)](https://raw.githubusercontent.com/liufengting/FTPickerView/master/LICENSE) 4 | [![Version](https://img.shields.io/cocoapods/v/FTPickerView.svg?style=flat)](http://cocoapods.org/pods/FTPickerView) 5 | [![CI Status](http://img.shields.io/travis/liufengting/FTPickerView.svg?style=flat)](https://travis-ci.org/liufengting/FTPickerView) 6 | [![GitHub stars](https://img.shields.io/github/stars/liufengting/FTPickerView.svg)](https://github.com/liufengting/FTPickerView/stargazers) 7 | 8 | 9 | A simple UIPickerView/UIDatePicker wrapper. 10 | 11 | ## Features 12 | 13 | - singleton 14 | - block callbacks 15 | 16 | 17 | ## ScreenShots 18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | ## Useage 28 | 29 | * Simple Picker 30 | 31 | ```objective-c 32 | //simple picker 33 | [FTPickerView showWithTitle:@"Choose a step" 34 | nameArray:self.optionArrayOne 35 | doneBlock:^(NSInteger selectedIndex) { 36 | [sender setTitle:_optionArrayOne[selectedIndex] forState:UIControlStateNormal]; 37 | } cancelBlock:^{ 38 | 39 | }]; 40 | ``` 41 | 42 | * Date Picker 43 | 44 | 45 | ```objective-c 46 | //date picker 47 | [FTDatePickerView showWithTitle:@"Choose a date" 48 | selectDate:nil 49 | datePickerMode:UIDatePickerModeDateAndTime 50 | doneBlock:^(NSDate *selectedDate) { 51 | NSDateFormatter *dateFormate = [[NSDateFormatter alloc]init]; 52 | [dateFormate setDateFormat:@"yyyy-MM-dd HH:mm:ss"]; 53 | [sender setTitle:[dateFormate stringFromDate:selectedDate] forState:UIControlStateNormal]; 54 | } cancelBlock:^{ 55 | 56 | }]; 57 | ``` 58 | 59 | # Installation 60 | 61 | ## Manual 62 | * Drag 'FTPickerView' file to you project, 63 | * Import 'FTPickerView.h', 64 | * Enjoy! 🍺 65 | 66 | ## Cocoapods 67 | 68 | * add the following line to you podFile,then `pod update` 69 | 70 | ``` 71 | pod 'FTPickerView', '~> 0.1.1' 72 | ``` 73 | 74 | ## License 75 | 76 | FTPickerView is available under the MIT license. See the LICENSE file for more info. 77 | 78 | 79 | 80 | 81 | -------------------------------------------------------------------------------- /SwiftDemo/Podfile: -------------------------------------------------------------------------------- 1 | # Uncomment this line to define a global platform for your project 2 | # platform :ios, '9.0' 3 | 4 | target 'SwiftDemo' do 5 | # Comment this line if you're not using Swift and don't want to use dynamic frameworks 6 | use_frameworks! 7 | pod 'FTPickerView' 8 | 9 | # Pods for SwiftDemo 10 | 11 | target 'SwiftDemoTests' do 12 | inherit! :search_paths 13 | # Pods for testing 14 | end 15 | 16 | target 'SwiftDemoUITests' do 17 | inherit! :search_paths 18 | # Pods for testing 19 | end 20 | 21 | end 22 | -------------------------------------------------------------------------------- /SwiftDemo/Podfile.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - FTPickerView (1.0.1) 3 | 4 | DEPENDENCIES: 5 | - FTPickerView 6 | 7 | SPEC CHECKSUMS: 8 | FTPickerView: fd26852f56c352c777d1dafc87ed4c2138eeea4c 9 | 10 | PODFILE CHECKSUM: 9938e03bf41e05002587fb99533225d3dd350665 11 | 12 | COCOAPODS: 1.0.1 13 | -------------------------------------------------------------------------------- /SwiftDemo/Pods/FTPickerView/FTPickerView/FTPickerView.h: -------------------------------------------------------------------------------- 1 | // 2 | // FTPickerView.h 3 | // FTPickerView 4 | // 5 | // Created by liufengting on 15/12/3. 6 | // Copyright © 2015年 liufengting. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | typedef void (^ FTPickerDoneBlock )(NSInteger); 12 | typedef void (^ FTPickerCancelBlock )(); 13 | typedef void (^ FTDatePickerDoneBlock )(NSDate *); 14 | typedef void (^ FTDatePickerCancelBlock )(); 15 | 16 | /** 17 | * FTPickerTitleView 18 | */ 19 | 20 | @interface FTPickerTitleView : UIView 21 | 22 | @end 23 | 24 | /** 25 | * FTPickerView 26 | */ 27 | 28 | @interface FTPickerView : NSObject 29 | 30 | /** 31 | * show method 32 | * 33 | * @param title title 34 | * @param nameArray nameArray 35 | * @param doneBlock FTPickerDoneBlock 36 | * @param cancelBlock FTPickerCancelBlock 37 | */ 38 | +(void)showWithTitle:(NSString *)title 39 | nameArray:(NSArray *)nameArray 40 | doneBlock :(FTPickerDoneBlock)doneBlock 41 | cancelBlock:(FTPickerCancelBlock)cancelBlock; 42 | /** 43 | * dismiss 44 | */ 45 | +(void)dismiss; 46 | 47 | @end 48 | 49 | /** 50 | * FTDatePickerView 51 | */ 52 | 53 | @interface FTDatePickerView : UIView 54 | 55 | /** 56 | * show method 57 | * 58 | * @param title title 59 | * @param doneBlock FTDatePickerDoneBlock 60 | * @param cancelBlock FTDatePickerCancelBlock 61 | */ 62 | +(void)showWithTitle:(NSString *)title 63 | doneBlock :(FTDatePickerDoneBlock)doneBlock 64 | cancelBlock:(FTDatePickerCancelBlock)cancelBlock; 65 | /** 66 | * show method 67 | * 68 | * @param title title 69 | * @param selectDate selectDate 70 | * @param datePickerMode datePickerMode 71 | * @param doneBlock FTDatePickerDoneBlock 72 | * @param cancelBlock FTDatePickerCancelBlock 73 | */ 74 | +(void)showWithTitle:(NSString *)title 75 | selectDate:(NSDate *)selectDate 76 | datePickerMode:(UIDatePickerMode )datePickerMode 77 | doneBlock :(FTDatePickerDoneBlock)doneBlock 78 | cancelBlock:(FTDatePickerCancelBlock)cancelBlock; 79 | /** 80 | * dismiss 81 | */ 82 | +(void)dismiss; 83 | 84 | @end 85 | -------------------------------------------------------------------------------- /SwiftDemo/Pods/FTPickerView/FTPickerView/FTPickerView.m: -------------------------------------------------------------------------------- 1 | // 2 | // FTPickerView.m 3 | // FTPickerView 4 | // 5 | // Created by liufengting on 15/12/3. 6 | // Copyright © 2015年 liufengting. All rights reserved. 7 | // 8 | 9 | #import "FTPickerView.h" 10 | 11 | #define KSCREEN_WIDTH [[UIScreen mainScreen] bounds].size.width 12 | #define KSCREEN_HEIGHT [[UIScreen mainScreen] bounds].size.height 13 | #define PickerHeight 216 14 | #define BackgroundColor [[UIColor blackColor] colorWithAlphaComponent:0.2] 15 | #define LineHeight 0.6 16 | 17 | #pragma mark - 18 | #pragma mark - FTPickerTitleView 19 | 20 | @interface FTPickerTitleView () 21 | 22 | @property (nonatomic,strong)UIButton *cancelButton; 23 | @property (nonatomic,strong)UIButton *confirmButton; 24 | @property (nonatomic,strong)UILabel *titleLabel; 25 | @property (nonatomic,strong)UIView *bottomLine; 26 | 27 | @end 28 | 29 | @implementation FTPickerTitleView 30 | 31 | -(id)initWithFrame:(CGRect)frame withTitle:(NSString *)title 32 | { 33 | self = [super initWithFrame:frame]; 34 | if (self) { 35 | self.backgroundColor = [UIColor whiteColor]; 36 | 37 | _cancelButton = [UIButton buttonWithType:UIButtonTypeCustom]; 38 | _cancelButton.frame = CGRectMake(0, 0, 60, self.bounds.size.height); 39 | _cancelButton.backgroundColor = [UIColor clearColor]; 40 | _cancelButton.titleLabel.font = [UIFont systemFontOfSize:14]; 41 | [_cancelButton setTitle:@"取消" forState:UIControlStateNormal]; 42 | [_cancelButton setTitleColor:[UIColor grayColor] forState:UIControlStateNormal]; 43 | [self addSubview:_cancelButton]; 44 | 45 | 46 | _confirmButton = [UIButton buttonWithType:UIButtonTypeCustom]; 47 | _confirmButton.frame= CGRectMake(self.bounds.size.width - 60, 0, 60, self.bounds.size.height); 48 | _confirmButton.backgroundColor=[UIColor clearColor]; 49 | _confirmButton.titleLabel.font = [UIFont systemFontOfSize:14]; 50 | [_confirmButton setTitle:@"确认" forState:UIControlStateNormal]; 51 | [_confirmButton setTitleColor:[UIColor blackColor] forState:UIControlStateNormal]; 52 | [self addSubview:_confirmButton]; 53 | 54 | 55 | _titleLabel = [[UILabel alloc]initWithFrame:CGRectMake(60, 0, self.bounds.size.width - 120 , self.bounds.size.height )]; 56 | _titleLabel.backgroundColor=[UIColor clearColor]; 57 | _titleLabel.textColor=[UIColor blackColor]; 58 | _titleLabel.font=[UIFont boldSystemFontOfSize:15]; 59 | _titleLabel.textAlignment = NSTextAlignmentCenter; 60 | _titleLabel.text = title; 61 | [self addSubview:_titleLabel]; 62 | 63 | _bottomLine = [[UIView alloc] initWithFrame:CGRectMake(0, self.bounds.size.height - LineHeight, self.bounds.size.width, LineHeight)]; 64 | _bottomLine.backgroundColor = [UIColor lightGrayColor]; 65 | [self addSubview:_bottomLine]; 66 | } 67 | return self; 68 | } 69 | 70 | @end 71 | 72 | #pragma mark - 73 | #pragma mark - FTPickerView 74 | 75 | @interface FTPickerView() 76 | 77 | @property (nonatomic,strong)UIView *backgroundView; 78 | @property (nonatomic,strong)UIPickerView *pickerView; 79 | @property (nonatomic,strong)FTPickerTitleView *titleView; 80 | @property (nonatomic,strong)NSArray *titleArray; 81 | @property (nonatomic,assign)NSInteger pickerTag; 82 | @property (nonatomic,strong)FTPickerDoneBlock doneBlock; 83 | @property (nonatomic,strong)FTPickerCancelBlock cancelBlock; 84 | 85 | @end 86 | 87 | #pragma mark - FTPickerView 88 | 89 | @implementation FTPickerView 90 | 91 | #pragma mark - public methods 92 | 93 | + (FTPickerView *)sharedInstance 94 | { 95 | static dispatch_once_t once = 0; 96 | static FTPickerView *sharedView; 97 | dispatch_once(&once, ^{ sharedView = [[FTPickerView alloc] init]; }); 98 | return sharedView; 99 | } 100 | +(void)showWithTitle:(NSString *)title nameArray:(NSArray *)nameArray doneBlock :(FTPickerDoneBlock)doneBlock cancelBlock:(FTPickerCancelBlock)cancelBlock 101 | { 102 | [[self sharedInstance] showWithTitle:title nameArray:nameArray doneBlock:doneBlock cancelBlock:cancelBlock]; 103 | } 104 | +(void)dismiss 105 | { 106 | [[self sharedInstance] onCancel]; 107 | } 108 | 109 | #pragma mark - private methods 110 | -(void)showWithTitle:(NSString *)title nameArray:(NSArray *)nameArray doneBlock :(FTPickerDoneBlock)doneBlock cancelBlock:(FTPickerCancelBlock)cancelBlock 111 | { 112 | _titleArray = nameArray; 113 | _doneBlock = doneBlock; 114 | _cancelBlock = cancelBlock; 115 | 116 | if(!_backgroundView){ 117 | 118 | _backgroundView = [[UIView alloc] initWithFrame:CGRectMake(0, KSCREEN_HEIGHT, KSCREEN_WIDTH, KSCREEN_HEIGHT)]; 119 | [_backgroundView setBackgroundColor:[UIColor clearColor]]; 120 | [[UIApplication sharedApplication].keyWindow addSubview:_backgroundView]; 121 | 122 | UIView *blankView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, KSCREEN_WIDTH, KSCREEN_HEIGHT-PickerHeight-40)]; 123 | [blankView setBackgroundColor:[UIColor clearColor]]; 124 | [blankView addGestureRecognizer:[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(onBlankTouched)]]; 125 | [_backgroundView addSubview:blankView]; 126 | 127 | _titleView = [[FTPickerTitleView alloc]initWithFrame:CGRectMake(0, KSCREEN_HEIGHT-PickerHeight-40, KSCREEN_WIDTH, 40) 128 | withTitle:title]; 129 | [_titleView.cancelButton addTarget:self action:@selector(onCancel) forControlEvents:UIControlEventTouchUpInside]; 130 | [_titleView.confirmButton addTarget:self action:@selector(onConfirm) forControlEvents:UIControlEventTouchUpInside]; 131 | [_backgroundView addSubview:_titleView]; 132 | 133 | _pickerView = [[UIPickerView alloc]initWithFrame:CGRectMake(0, KSCREEN_HEIGHT-PickerHeight,KSCREEN_WIDTH, PickerHeight)]; 134 | _pickerView.backgroundColor = [UIColor whiteColor]; 135 | _pickerView.showsSelectionIndicator = YES; 136 | _pickerView.dataSource = self; 137 | _pickerView.delegate = self; 138 | [_backgroundView addSubview:_pickerView]; 139 | 140 | 141 | [_pickerView reloadAllComponents]; 142 | [_pickerView selectRow:0 inComponent:0 animated:YES]; 143 | [self open]; 144 | }else{ 145 | [[UIApplication sharedApplication].keyWindow addSubview:_backgroundView]; 146 | _titleView.titleLabel.text = title; 147 | [_pickerView reloadAllComponents]; 148 | [self open]; 149 | } 150 | } 151 | 152 | #pragma mark - onBlankTouched 153 | -(void)onBlankTouched 154 | { 155 | self.cancelBlock(); 156 | [self close]; 157 | } 158 | 159 | #pragma mark - cancel 160 | -(void)onCancel 161 | { 162 | self.cancelBlock(); 163 | 164 | [self close]; 165 | } 166 | #pragma mark - confirm 167 | -(void)onConfirm 168 | { 169 | 170 | self.doneBlock([_pickerView selectedRowInComponent:0]); 171 | 172 | [self close]; 173 | } 174 | #pragma mark - open 175 | -(void)open 176 | { 177 | [UIView animateWithDuration:0.3 178 | animations:^{ 179 | [_backgroundView setFrame:CGRectMake(0, 0, KSCREEN_WIDTH, KSCREEN_HEIGHT)]; 180 | } 181 | completion:^(BOOL finished) { 182 | [UIView animateWithDuration:0.1 183 | animations:^{ 184 | _backgroundView.backgroundColor = BackgroundColor; 185 | }]; 186 | }]; 187 | } 188 | #pragma mark - close 189 | -(void)close 190 | { 191 | [UIView animateWithDuration:0.1 192 | animations:^{ 193 | _backgroundView.backgroundColor = [UIColor clearColor]; 194 | } 195 | completion:^(BOOL finished) { 196 | [UIView animateWithDuration:0.3 197 | animations:^{ 198 | [_backgroundView setFrame:CGRectMake(0, KSCREEN_HEIGHT, KSCREEN_WIDTH, KSCREEN_HEIGHT)]; 199 | }]; 200 | }]; 201 | } 202 | 203 | #pragma mark - UIPicker delegate 204 | - (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView 205 | { 206 | return 1; 207 | } 208 | 209 | - (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component 210 | { 211 | return [_titleArray count]; 212 | } 213 | - (CGFloat)pickerView:(UIPickerView *)pickerView rowHeightForComponent:(NSInteger)component 214 | { 215 | return 40.0; 216 | } 217 | - (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view 218 | { 219 | UILabel *label = [[UILabel alloc]initWithFrame:CGRectMake(0, 0, pickerView.bounds.size.width,40 )]; 220 | label.backgroundColor=[UIColor clearColor]; 221 | label.textColor=[UIColor blackColor]; 222 | label.font=[UIFont systemFontOfSize:18]; 223 | label.textAlignment = NSTextAlignmentCenter; 224 | label.text = _titleArray[row]; 225 | return label; 226 | } 227 | - (CGFloat)pickerView:(UIPickerView *)pickerView widthForComponent:(NSInteger)component 228 | { 229 | return pickerView.bounds.size.width; 230 | } 231 | - (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component 232 | { 233 | 234 | } 235 | 236 | @end 237 | 238 | #pragma mark - FTDatePickerView 239 | 240 | @interface FTDatePickerView () 241 | 242 | @property (nonatomic,strong)UIView *backgroundView; 243 | @property (nonatomic,strong)UIDatePicker *datePicker; 244 | @property (nonatomic,strong)NSDate *selectedDate; 245 | @property (nonatomic,strong)FTPickerTitleView *titleView; 246 | @property (nonatomic,strong)FTDatePickerDoneBlock doneBlock; 247 | @property (nonatomic,strong)FTDatePickerCancelBlock cancelBlock; 248 | 249 | @end 250 | 251 | @implementation FTDatePickerView 252 | 253 | #pragma mark - public methods 254 | 255 | + (FTDatePickerView *)sharedInstance 256 | { 257 | static dispatch_once_t once = 0; 258 | static FTDatePickerView *sharedView; 259 | dispatch_once(&once, ^{ sharedView = [[FTDatePickerView alloc] init]; }); 260 | return sharedView; 261 | } 262 | 263 | +(void)showWithTitle:(NSString *)title doneBlock :(FTDatePickerDoneBlock)doneBlock cancelBlock:(FTDatePickerCancelBlock)cancelBlock 264 | { 265 | [[self sharedInstance] showWithTitle:title selectDate:nil datePickerMode:UIDatePickerModeDateAndTime doneBlock:doneBlock cancelBlock:cancelBlock]; 266 | 267 | } 268 | 269 | +(void)showWithTitle:(NSString *)title selectDate:(NSDate *)selectDate datePickerMode:(UIDatePickerMode )datePickerMode doneBlock :(FTDatePickerDoneBlock)doneBlock cancelBlock:(FTDatePickerCancelBlock)cancelBlock 270 | { 271 | [[self sharedInstance] showWithTitle:title selectDate:selectDate datePickerMode:datePickerMode doneBlock:doneBlock cancelBlock:cancelBlock]; 272 | } 273 | 274 | +(void)dismiss 275 | { 276 | [[self sharedInstance] onCancel]; 277 | } 278 | 279 | #pragma mark - private methods 280 | -(void)showWithTitle:(NSString *)title doneBlock :(FTDatePickerDoneBlock)doneBlock cancelBlock:(FTDatePickerCancelBlock)cancelBlock 281 | { 282 | [self showWithTitle:title selectDate:nil datePickerMode:UIDatePickerModeDateAndTime doneBlock:doneBlock cancelBlock:cancelBlock]; 283 | 284 | } 285 | 286 | -(void)showWithTitle:(NSString *)title selectDate:(NSDate *)selectDate datePickerMode:(UIDatePickerMode )datePickerMode doneBlock :(FTDatePickerDoneBlock)doneBlock cancelBlock:(FTDatePickerCancelBlock)cancelBlock 287 | { 288 | 289 | _doneBlock = doneBlock; 290 | _cancelBlock = cancelBlock; 291 | 292 | if (!_backgroundView) { 293 | _backgroundView = [[UIView alloc] initWithFrame:CGRectMake(0, KSCREEN_HEIGHT, KSCREEN_WIDTH, KSCREEN_HEIGHT)]; 294 | [_backgroundView setBackgroundColor:[UIColor clearColor]]; 295 | [[UIApplication sharedApplication].keyWindow addSubview:_backgroundView]; 296 | 297 | UIView *blankView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, KSCREEN_WIDTH, KSCREEN_HEIGHT-PickerHeight-40)]; 298 | [blankView setBackgroundColor:[UIColor clearColor]]; 299 | [blankView addGestureRecognizer:[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(onBlankTouched)]]; 300 | [_backgroundView addSubview:blankView]; 301 | 302 | 303 | _titleView = [[FTPickerTitleView alloc]initWithFrame:CGRectMake(0, KSCREEN_HEIGHT-PickerHeight-40, KSCREEN_WIDTH, 40) 304 | withTitle:title]; 305 | [_titleView.cancelButton addTarget:self action:@selector(onCancel) forControlEvents:UIControlEventTouchUpInside]; 306 | [_titleView.confirmButton addTarget:self action:@selector(onConfirm) forControlEvents:UIControlEventTouchUpInside]; 307 | [_backgroundView addSubview:_titleView]; 308 | 309 | 310 | _datePicker = [[UIDatePicker alloc]initWithFrame:CGRectMake(0, KSCREEN_HEIGHT-PickerHeight, KSCREEN_WIDTH, PickerHeight)]; 311 | _datePicker.backgroundColor = [UIColor whiteColor]; 312 | _datePicker.datePickerMode = datePickerMode; 313 | _datePicker.minuteInterval = 5; 314 | if (selectDate) { 315 | [_datePicker setDate:selectDate]; 316 | } 317 | [_backgroundView addSubview:_datePicker]; 318 | 319 | [self open]; 320 | }else{ 321 | [[UIApplication sharedApplication].keyWindow addSubview:_backgroundView]; 322 | 323 | _titleView.titleLabel.text = title; 324 | _datePicker.datePickerMode = datePickerMode; 325 | if (selectDate) { 326 | [_datePicker setDate:selectDate]; 327 | } 328 | [self open]; 329 | } 330 | } 331 | 332 | #pragma mark - cancel 333 | -(void)onCancel 334 | { 335 | _selectedDate = nil; 336 | [self close]; 337 | } 338 | #pragma mark - confirm 339 | -(void)onConfirm 340 | { 341 | _selectedDate = _datePicker.date; 342 | [self close]; 343 | } 344 | #pragma mark - onBlankTouched 345 | -(void)onBlankTouched 346 | { 347 | _selectedDate = nil; 348 | [self close]; 349 | } 350 | #pragma mark - open/close 351 | -(void)open 352 | { 353 | [UIView animateWithDuration:0.3 354 | animations:^{ 355 | [_backgroundView setFrame:CGRectMake(0, 0, KSCREEN_WIDTH, KSCREEN_HEIGHT)]; 356 | } 357 | completion:^(BOOL finished) { 358 | [UIView animateWithDuration:0.1 359 | animations:^{ 360 | _backgroundView.backgroundColor = BackgroundColor; 361 | }]; 362 | }]; 363 | } 364 | -(void)close 365 | { 366 | [UIView animateWithDuration:0.1 367 | animations:^{ 368 | _backgroundView.backgroundColor = [UIColor clearColor]; 369 | } 370 | completion:^(BOOL finished) { 371 | [UIView animateWithDuration:0.3 372 | animations:^{ 373 | [_backgroundView setFrame:CGRectMake(0, KSCREEN_HEIGHT, KSCREEN_WIDTH, KSCREEN_HEIGHT)]; 374 | }completion:^(BOOL finished) { 375 | if (_selectedDate) { 376 | self.doneBlock(_selectedDate); 377 | }else{ 378 | self.cancelBlock(); 379 | } 380 | }]; 381 | }]; 382 | } 383 | 384 | 385 | @end 386 | -------------------------------------------------------------------------------- /SwiftDemo/Pods/FTPickerView/LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2016 刘锋婷 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /SwiftDemo/Pods/FTPickerView/README.md: -------------------------------------------------------------------------------- 1 | # FTPickerView 2 | [![Twitter](https://img.shields.io/badge/twitter-@liufengting-blue.svg?style=flat)](http://twitter.com/liufengting) 3 | [![GitHub license](https://img.shields.io/badge/license-MIT-blue.svg)](https://raw.githubusercontent.com/liufengting/FTPickerView/master/LICENSE) 4 | [![Version](https://img.shields.io/cocoapods/v/FTPickerView.svg?style=flat)](http://cocoapods.org/pods/FTPickerView) 5 | [![CI Status](http://img.shields.io/travis/liufengting/FTPickerView.svg?style=flat)](https://travis-ci.org/liufengting/FTPickerView) 6 | [![GitHub stars](https://img.shields.io/github/stars/liufengting/FTPickerView.svg)](https://github.com/liufengting/FTPickerView/stargazers) 7 | 8 | 9 | A simple UIPickerView/UIDatePicker wrapper. 10 | 11 | ## Features 12 | 13 | - singleton 14 | - block callbacks 15 | 16 | 17 | ## ScreenShots 18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | ## Useage 28 | 29 | * Simple Picker 30 | 31 | ```objective-c 32 | //simple picker 33 | [FTPickerView showWithTitle:@"Choose a step" 34 | nameArray:self.optionArrayOne 35 | doneBlock:^(NSInteger selectedIndex) { 36 | [sender setTitle:_optionArrayOne[selectedIndex] forState:UIControlStateNormal]; 37 | } cancelBlock:^{ 38 | 39 | }]; 40 | ``` 41 | 42 | * Date Picker 43 | 44 | 45 | ```objective-c 46 | //date picker 47 | [FTDatePickerView showWithTitle:@"Choose a date" 48 | selectDate:nil 49 | datePickerMode:UIDatePickerModeDateAndTime 50 | doneBlock:^(NSDate *selectedDate) { 51 | NSDateFormatter *dateFormate = [[NSDateFormatter alloc]init]; 52 | [dateFormate setDateFormat:@"yyyy-MM-dd HH:mm:ss"]; 53 | [sender setTitle:[dateFormate stringFromDate:selectedDate] forState:UIControlStateNormal]; 54 | } cancelBlock:^{ 55 | 56 | }]; 57 | ``` 58 | 59 | # Installation 60 | 61 | ## Manual 62 | * Drag 'FTPickerView' file to you project, 63 | * Import 'FTPickerView.h', 64 | * Enjoy! 🍺 65 | 66 | ## Cocoapods 67 | 68 | * add the following line to you podFile,then `pod update` 69 | 70 | ``` 71 | pod 'FTPickerView', '~> 0.1.1' 72 | ``` 73 | 74 | ## License 75 | 76 | FTPickerView is available under the MIT license. See the LICENSE file for more info. 77 | 78 | 79 | 80 | 81 | -------------------------------------------------------------------------------- /SwiftDemo/Pods/Manifest.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - FTPickerView (1.0.1) 3 | 4 | DEPENDENCIES: 5 | - FTPickerView 6 | 7 | SPEC CHECKSUMS: 8 | FTPickerView: fd26852f56c352c777d1dafc87ed4c2138eeea4c 9 | 10 | PODFILE CHECKSUM: 9938e03bf41e05002587fb99533225d3dd350665 11 | 12 | COCOAPODS: 1.0.1 13 | -------------------------------------------------------------------------------- /SwiftDemo/Pods/Pods.xcodeproj/xcuserdata/liu.xcuserdatad/xcschemes/FTPickerView.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 43 | 44 | 45 | 46 | 52 | 53 | 55 | 56 | 59 | 60 | 61 | -------------------------------------------------------------------------------- /SwiftDemo/Pods/Pods.xcodeproj/xcuserdata/liu.xcuserdatad/xcschemes/Pods-SwiftDemo.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 34 | 35 | 45 | 46 | 52 | 53 | 54 | 55 | 56 | 57 | 63 | 64 | 66 | 67 | 70 | 71 | 72 | -------------------------------------------------------------------------------- /SwiftDemo/Pods/Pods.xcodeproj/xcuserdata/liu.xcuserdatad/xcschemes/Pods-SwiftDemoTests.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 34 | 35 | 45 | 46 | 52 | 53 | 54 | 55 | 56 | 57 | 63 | 64 | 66 | 67 | 70 | 71 | 72 | -------------------------------------------------------------------------------- /SwiftDemo/Pods/Pods.xcodeproj/xcuserdata/liu.xcuserdatad/xcschemes/Pods-SwiftDemoUITests.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 34 | 35 | 45 | 46 | 52 | 53 | 54 | 55 | 56 | 57 | 63 | 64 | 66 | 67 | 70 | 71 | 72 | -------------------------------------------------------------------------------- /SwiftDemo/Pods/Pods.xcodeproj/xcuserdata/liu.xcuserdatad/xcschemes/xcschememanagement.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SchemeUserState 6 | 7 | FTPickerView.xcscheme 8 | 9 | isShown 10 | 11 | 12 | Pods-SwiftDemo.xcscheme 13 | 14 | isShown 15 | 16 | 17 | Pods-SwiftDemoTests.xcscheme 18 | 19 | isShown 20 | 21 | 22 | Pods-SwiftDemoUITests.xcscheme 23 | 24 | isShown 25 | 26 | 27 | 28 | SuppressBuildableAutocreation 29 | 30 | 5A5097292BDF98B4B61651AE947D96CD 31 | 32 | primary 33 | 34 | 35 | 8E3498F23B6F767CB2D51A6C168AB68C 36 | 37 | primary 38 | 39 | 40 | CBB37FDA5F4F4305EADB28261D98834A 41 | 42 | primary 43 | 44 | 45 | FFBF04F5859CB55CFEBE9A24B292E3A0 46 | 47 | primary 48 | 49 | 50 | 51 | 52 | 53 | -------------------------------------------------------------------------------- /SwiftDemo/Pods/Target Support Files/FTPickerView/FTPickerView-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_FTPickerView : NSObject 3 | @end 4 | @implementation PodsDummy_FTPickerView 5 | @end 6 | -------------------------------------------------------------------------------- /SwiftDemo/Pods/Target Support Files/FTPickerView/FTPickerView-prefix.pch: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #endif 4 | 5 | -------------------------------------------------------------------------------- /SwiftDemo/Pods/Target Support Files/FTPickerView/FTPickerView-umbrella.h: -------------------------------------------------------------------------------- 1 | #import 2 | 3 | #import "FTPickerView.h" 4 | 5 | FOUNDATION_EXPORT double FTPickerViewVersionNumber; 6 | FOUNDATION_EXPORT const unsigned char FTPickerViewVersionString[]; 7 | 8 | -------------------------------------------------------------------------------- /SwiftDemo/Pods/Target Support Files/FTPickerView/FTPickerView.modulemap: -------------------------------------------------------------------------------- 1 | framework module FTPickerView { 2 | umbrella header "FTPickerView-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /SwiftDemo/Pods/Target Support Files/FTPickerView/FTPickerView.xcconfig: -------------------------------------------------------------------------------- 1 | CONFIGURATION_BUILD_DIR = $PODS_CONFIGURATION_BUILD_DIR/FTPickerView 2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 3 | HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Public" 4 | PODS_BUILD_DIR = $BUILD_DIR 5 | PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 6 | PODS_ROOT = ${SRCROOT} 7 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 8 | SKIP_INSTALL = YES 9 | -------------------------------------------------------------------------------- /SwiftDemo/Pods/Target Support Files/FTPickerView/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.1 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /SwiftDemo/Pods/Target Support Files/Pods-SwiftDemo/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 | -------------------------------------------------------------------------------- /SwiftDemo/Pods/Target Support Files/Pods-SwiftDemo/Pods-SwiftDemo-acknowledgements.markdown: -------------------------------------------------------------------------------- 1 | # Acknowledgements 2 | This application makes use of the following third party libraries: 3 | 4 | ## FTPickerView 5 | 6 | The MIT License (MIT) 7 | 8 | Copyright (c) 2016 刘锋婷 9 | 10 | Permission is hereby granted, free of charge, to any person obtaining a copy 11 | of this software and associated documentation files (the "Software"), to deal 12 | in the Software without restriction, including without limitation the rights 13 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 14 | copies of the Software, and to permit persons to whom the Software is 15 | furnished to do so, subject to the following conditions: 16 | 17 | The above copyright notice and this permission notice shall be included in all 18 | copies or substantial portions of the Software. 19 | 20 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 21 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 22 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 23 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 24 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 25 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 26 | SOFTWARE. 27 | 28 | Generated by CocoaPods - https://cocoapods.org 29 | -------------------------------------------------------------------------------- /SwiftDemo/Pods/Target Support Files/Pods-SwiftDemo/Pods-SwiftDemo-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 | The MIT License (MIT) 18 | 19 | Copyright (c) 2016 刘锋婷 20 | 21 | Permission is hereby granted, free of charge, to any person obtaining a copy 22 | of this software and associated documentation files (the "Software"), to deal 23 | in the Software without restriction, including without limitation the rights 24 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 25 | copies of the Software, and to permit persons to whom the Software is 26 | furnished to do so, subject to the following conditions: 27 | 28 | The above copyright notice and this permission notice shall be included in all 29 | copies or substantial portions of the Software. 30 | 31 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 32 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 33 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 34 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 35 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 36 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 37 | SOFTWARE. 38 | 39 | Title 40 | FTPickerView 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 | -------------------------------------------------------------------------------- /SwiftDemo/Pods/Target Support Files/Pods-SwiftDemo/Pods-SwiftDemo-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Pods_SwiftDemo : NSObject 3 | @end 4 | @implementation PodsDummy_Pods_SwiftDemo 5 | @end 6 | -------------------------------------------------------------------------------- /SwiftDemo/Pods/Target Support Files/Pods-SwiftDemo/Pods-SwiftDemo-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 | install_framework() 10 | { 11 | if [ -r "${BUILT_PRODUCTS_DIR}/$1" ]; then 12 | local source="${BUILT_PRODUCTS_DIR}/$1" 13 | elif [ -r "${BUILT_PRODUCTS_DIR}/$(basename "$1")" ]; then 14 | local source="${BUILT_PRODUCTS_DIR}/$(basename "$1")" 15 | elif [ -r "$1" ]; then 16 | local source="$1" 17 | fi 18 | 19 | local destination="${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 20 | 21 | if [ -L "${source}" ]; then 22 | echo "Symlinked..." 23 | source="$(readlink "${source}")" 24 | fi 25 | 26 | # use filter instead of exclude so missing patterns dont' throw errors 27 | echo "rsync -av --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${destination}\"" 28 | rsync -av --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${destination}" 29 | 30 | local basename 31 | basename="$(basename -s .framework "$1")" 32 | binary="${destination}/${basename}.framework/${basename}" 33 | if ! [ -r "$binary" ]; then 34 | binary="${destination}/${basename}" 35 | fi 36 | 37 | # Strip invalid architectures so "fat" simulator / device frameworks work on device 38 | if [[ "$(file "$binary")" == *"dynamically linked shared library"* ]]; then 39 | strip_invalid_archs "$binary" 40 | fi 41 | 42 | # Resign the code if required by the build settings to avoid unstable apps 43 | code_sign_if_enabled "${destination}/$(basename "$1")" 44 | 45 | # Embed linked Swift runtime libraries. No longer necessary as of Xcode 7. 46 | if [ "${XCODE_VERSION_MAJOR}" -lt 7 ]; then 47 | local swift_runtime_libs 48 | swift_runtime_libs=$(xcrun otool -LX "$binary" | grep --color=never @rpath/libswift | sed -E s/@rpath\\/\(.+dylib\).*/\\1/g | uniq -u && exit ${PIPESTATUS[0]}) 49 | for lib in $swift_runtime_libs; do 50 | echo "rsync -auv \"${SWIFT_STDLIB_PATH}/${lib}\" \"${destination}\"" 51 | rsync -auv "${SWIFT_STDLIB_PATH}/${lib}" "${destination}" 52 | code_sign_if_enabled "${destination}/${lib}" 53 | done 54 | fi 55 | } 56 | 57 | # Signs a framework with the provided identity 58 | code_sign_if_enabled() { 59 | if [ -n "${EXPANDED_CODE_SIGN_IDENTITY}" -a "${CODE_SIGNING_REQUIRED}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then 60 | # Use the current code_sign_identitiy 61 | echo "Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}" 62 | echo "/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS} --preserve-metadata=identifier,entitlements \"$1\"" 63 | /usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS} --preserve-metadata=identifier,entitlements "$1" 64 | fi 65 | } 66 | 67 | # Strip invalid architectures 68 | strip_invalid_archs() { 69 | binary="$1" 70 | # Get architectures for current file 71 | archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | rev)" 72 | stripped="" 73 | for arch in $archs; do 74 | if ! [[ "${VALID_ARCHS}" == *"$arch"* ]]; then 75 | # Strip non-valid architectures in-place 76 | lipo -remove "$arch" -output "$binary" "$binary" || exit 1 77 | stripped="$stripped $arch" 78 | fi 79 | done 80 | if [[ "$stripped" ]]; then 81 | echo "Stripped $binary of architectures:$stripped" 82 | fi 83 | } 84 | 85 | 86 | if [[ "$CONFIGURATION" == "Debug" ]]; then 87 | install_framework "$BUILT_PRODUCTS_DIR/FTPickerView/FTPickerView.framework" 88 | fi 89 | if [[ "$CONFIGURATION" == "Release" ]]; then 90 | install_framework "$BUILT_PRODUCTS_DIR/FTPickerView/FTPickerView.framework" 91 | fi 92 | -------------------------------------------------------------------------------- /SwiftDemo/Pods/Target Support Files/Pods-SwiftDemo/Pods-SwiftDemo-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 | case "${TARGETED_DEVICE_FAMILY}" in 12 | 1,2) 13 | TARGET_DEVICE_ARGS="--target-device ipad --target-device iphone" 14 | ;; 15 | 1) 16 | TARGET_DEVICE_ARGS="--target-device iphone" 17 | ;; 18 | 2) 19 | TARGET_DEVICE_ARGS="--target-device ipad" 20 | ;; 21 | *) 22 | TARGET_DEVICE_ARGS="--target-device mac" 23 | ;; 24 | esac 25 | 26 | realpath() { 27 | DIRECTORY="$(cd "${1%/*}" && pwd)" 28 | FILENAME="${1##*/}" 29 | echo "$DIRECTORY/$FILENAME" 30 | } 31 | 32 | install_resource() 33 | { 34 | if [[ "$1" = /* ]] ; then 35 | RESOURCE_PATH="$1" 36 | else 37 | RESOURCE_PATH="${PODS_ROOT}/$1" 38 | fi 39 | if [[ ! -e "$RESOURCE_PATH" ]] ; then 40 | cat << EOM 41 | error: Resource "$RESOURCE_PATH" not found. Run 'pod install' to update the copy resources script. 42 | EOM 43 | exit 1 44 | fi 45 | case $RESOURCE_PATH in 46 | *.storyboard) 47 | 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}" 48 | 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} 49 | ;; 50 | *.xib) 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\" .xib`.nib $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" 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\" .xib`.nib" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS} 53 | ;; 54 | *.framework) 55 | echo "mkdir -p ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 56 | mkdir -p "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 57 | echo "rsync -av $RESOURCE_PATH ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 58 | rsync -av "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 59 | ;; 60 | *.xcdatamodel) 61 | echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH"`.mom\"" 62 | xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodel`.mom" 63 | ;; 64 | *.xcdatamodeld) 65 | echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd\"" 66 | xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd" 67 | ;; 68 | *.xcmappingmodel) 69 | echo "xcrun mapc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm\"" 70 | xcrun mapc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm" 71 | ;; 72 | *.xcassets) 73 | ABSOLUTE_XCASSET_FILE=$(realpath "$RESOURCE_PATH") 74 | XCASSET_FILES+=("$ABSOLUTE_XCASSET_FILE") 75 | ;; 76 | *) 77 | echo "$RESOURCE_PATH" 78 | echo "$RESOURCE_PATH" >> "$RESOURCES_TO_COPY" 79 | ;; 80 | esac 81 | } 82 | 83 | mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 84 | rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 85 | if [[ "${ACTION}" == "install" ]] && [[ "${SKIP_INSTALL}" == "NO" ]]; then 86 | mkdir -p "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 87 | rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 88 | fi 89 | rm -f "$RESOURCES_TO_COPY" 90 | 91 | if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ -n "$XCASSET_FILES" ] 92 | then 93 | # Find all other xcassets (this unfortunately includes those of path pods and other targets). 94 | OTHER_XCASSETS=$(find "$PWD" -iname "*.xcassets" -type d) 95 | while read line; do 96 | if [[ $line != "`realpath $PODS_ROOT`*" ]]; then 97 | XCASSET_FILES+=("$line") 98 | fi 99 | done <<<"$OTHER_XCASSETS" 100 | 101 | 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}" 102 | fi 103 | -------------------------------------------------------------------------------- /SwiftDemo/Pods/Target Support Files/Pods-SwiftDemo/Pods-SwiftDemo-umbrella.h: -------------------------------------------------------------------------------- 1 | #import 2 | 3 | 4 | FOUNDATION_EXPORT double Pods_SwiftDemoVersionNumber; 5 | FOUNDATION_EXPORT const unsigned char Pods_SwiftDemoVersionString[]; 6 | 7 | -------------------------------------------------------------------------------- /SwiftDemo/Pods/Target Support Files/Pods-SwiftDemo/Pods-SwiftDemo.debug.xcconfig: -------------------------------------------------------------------------------- 1 | FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/FTPickerView" 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/FTPickerView/FTPickerView.framework/Headers" 5 | OTHER_LDFLAGS = $(inherited) -framework "FTPickerView" 6 | PODS_BUILD_DIR = $BUILD_DIR 7 | PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 8 | PODS_ROOT = ${SRCROOT}/Pods 9 | -------------------------------------------------------------------------------- /SwiftDemo/Pods/Target Support Files/Pods-SwiftDemo/Pods-SwiftDemo.modulemap: -------------------------------------------------------------------------------- 1 | framework module Pods_SwiftDemo { 2 | umbrella header "Pods-SwiftDemo-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /SwiftDemo/Pods/Target Support Files/Pods-SwiftDemo/Pods-SwiftDemo.release.xcconfig: -------------------------------------------------------------------------------- 1 | FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/FTPickerView" 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/FTPickerView/FTPickerView.framework/Headers" 5 | OTHER_LDFLAGS = $(inherited) -framework "FTPickerView" 6 | PODS_BUILD_DIR = $BUILD_DIR 7 | PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 8 | PODS_ROOT = ${SRCROOT}/Pods 9 | -------------------------------------------------------------------------------- /SwiftDemo/Pods/Target Support Files/Pods-SwiftDemoTests/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 | -------------------------------------------------------------------------------- /SwiftDemo/Pods/Target Support Files/Pods-SwiftDemoTests/Pods-SwiftDemoTests-acknowledgements.markdown: -------------------------------------------------------------------------------- 1 | # Acknowledgements 2 | This application makes use of the following third party libraries: 3 | Generated by CocoaPods - https://cocoapods.org 4 | -------------------------------------------------------------------------------- /SwiftDemo/Pods/Target Support Files/Pods-SwiftDemoTests/Pods-SwiftDemoTests-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 | -------------------------------------------------------------------------------- /SwiftDemo/Pods/Target Support Files/Pods-SwiftDemoTests/Pods-SwiftDemoTests-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Pods_SwiftDemoTests : NSObject 3 | @end 4 | @implementation PodsDummy_Pods_SwiftDemoTests 5 | @end 6 | -------------------------------------------------------------------------------- /SwiftDemo/Pods/Target Support Files/Pods-SwiftDemoTests/Pods-SwiftDemoTests-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 | install_framework() 10 | { 11 | if [ -r "${BUILT_PRODUCTS_DIR}/$1" ]; then 12 | local source="${BUILT_PRODUCTS_DIR}/$1" 13 | elif [ -r "${BUILT_PRODUCTS_DIR}/$(basename "$1")" ]; then 14 | local source="${BUILT_PRODUCTS_DIR}/$(basename "$1")" 15 | elif [ -r "$1" ]; then 16 | local source="$1" 17 | fi 18 | 19 | local destination="${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 20 | 21 | if [ -L "${source}" ]; then 22 | echo "Symlinked..." 23 | source="$(readlink "${source}")" 24 | fi 25 | 26 | # use filter instead of exclude so missing patterns dont' throw errors 27 | echo "rsync -av --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${destination}\"" 28 | rsync -av --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${destination}" 29 | 30 | local basename 31 | basename="$(basename -s .framework "$1")" 32 | binary="${destination}/${basename}.framework/${basename}" 33 | if ! [ -r "$binary" ]; then 34 | binary="${destination}/${basename}" 35 | fi 36 | 37 | # Strip invalid architectures so "fat" simulator / device frameworks work on device 38 | if [[ "$(file "$binary")" == *"dynamically linked shared library"* ]]; then 39 | strip_invalid_archs "$binary" 40 | fi 41 | 42 | # Resign the code if required by the build settings to avoid unstable apps 43 | code_sign_if_enabled "${destination}/$(basename "$1")" 44 | 45 | # Embed linked Swift runtime libraries. No longer necessary as of Xcode 7. 46 | if [ "${XCODE_VERSION_MAJOR}" -lt 7 ]; then 47 | local swift_runtime_libs 48 | swift_runtime_libs=$(xcrun otool -LX "$binary" | grep --color=never @rpath/libswift | sed -E s/@rpath\\/\(.+dylib\).*/\\1/g | uniq -u && exit ${PIPESTATUS[0]}) 49 | for lib in $swift_runtime_libs; do 50 | echo "rsync -auv \"${SWIFT_STDLIB_PATH}/${lib}\" \"${destination}\"" 51 | rsync -auv "${SWIFT_STDLIB_PATH}/${lib}" "${destination}" 52 | code_sign_if_enabled "${destination}/${lib}" 53 | done 54 | fi 55 | } 56 | 57 | # Signs a framework with the provided identity 58 | code_sign_if_enabled() { 59 | if [ -n "${EXPANDED_CODE_SIGN_IDENTITY}" -a "${CODE_SIGNING_REQUIRED}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then 60 | # Use the current code_sign_identitiy 61 | echo "Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}" 62 | echo "/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS} --preserve-metadata=identifier,entitlements \"$1\"" 63 | /usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS} --preserve-metadata=identifier,entitlements "$1" 64 | fi 65 | } 66 | 67 | # Strip invalid architectures 68 | strip_invalid_archs() { 69 | binary="$1" 70 | # Get architectures for current file 71 | archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | rev)" 72 | stripped="" 73 | for arch in $archs; do 74 | if ! [[ "${VALID_ARCHS}" == *"$arch"* ]]; then 75 | # Strip non-valid architectures in-place 76 | lipo -remove "$arch" -output "$binary" "$binary" || exit 1 77 | stripped="$stripped $arch" 78 | fi 79 | done 80 | if [[ "$stripped" ]]; then 81 | echo "Stripped $binary of architectures:$stripped" 82 | fi 83 | } 84 | 85 | -------------------------------------------------------------------------------- /SwiftDemo/Pods/Target Support Files/Pods-SwiftDemoTests/Pods-SwiftDemoTests-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 | case "${TARGETED_DEVICE_FAMILY}" in 12 | 1,2) 13 | TARGET_DEVICE_ARGS="--target-device ipad --target-device iphone" 14 | ;; 15 | 1) 16 | TARGET_DEVICE_ARGS="--target-device iphone" 17 | ;; 18 | 2) 19 | TARGET_DEVICE_ARGS="--target-device ipad" 20 | ;; 21 | *) 22 | TARGET_DEVICE_ARGS="--target-device mac" 23 | ;; 24 | esac 25 | 26 | realpath() { 27 | DIRECTORY="$(cd "${1%/*}" && pwd)" 28 | FILENAME="${1##*/}" 29 | echo "$DIRECTORY/$FILENAME" 30 | } 31 | 32 | install_resource() 33 | { 34 | if [[ "$1" = /* ]] ; then 35 | RESOURCE_PATH="$1" 36 | else 37 | RESOURCE_PATH="${PODS_ROOT}/$1" 38 | fi 39 | if [[ ! -e "$RESOURCE_PATH" ]] ; then 40 | cat << EOM 41 | error: Resource "$RESOURCE_PATH" not found. Run 'pod install' to update the copy resources script. 42 | EOM 43 | exit 1 44 | fi 45 | case $RESOURCE_PATH in 46 | *.storyboard) 47 | 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}" 48 | 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} 49 | ;; 50 | *.xib) 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\" .xib`.nib $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" 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\" .xib`.nib" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS} 53 | ;; 54 | *.framework) 55 | echo "mkdir -p ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 56 | mkdir -p "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 57 | echo "rsync -av $RESOURCE_PATH ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 58 | rsync -av "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 59 | ;; 60 | *.xcdatamodel) 61 | echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH"`.mom\"" 62 | xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodel`.mom" 63 | ;; 64 | *.xcdatamodeld) 65 | echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd\"" 66 | xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd" 67 | ;; 68 | *.xcmappingmodel) 69 | echo "xcrun mapc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm\"" 70 | xcrun mapc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm" 71 | ;; 72 | *.xcassets) 73 | ABSOLUTE_XCASSET_FILE=$(realpath "$RESOURCE_PATH") 74 | XCASSET_FILES+=("$ABSOLUTE_XCASSET_FILE") 75 | ;; 76 | *) 77 | echo "$RESOURCE_PATH" 78 | echo "$RESOURCE_PATH" >> "$RESOURCES_TO_COPY" 79 | ;; 80 | esac 81 | } 82 | 83 | mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 84 | rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 85 | if [[ "${ACTION}" == "install" ]] && [[ "${SKIP_INSTALL}" == "NO" ]]; then 86 | mkdir -p "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 87 | rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 88 | fi 89 | rm -f "$RESOURCES_TO_COPY" 90 | 91 | if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ -n "$XCASSET_FILES" ] 92 | then 93 | # Find all other xcassets (this unfortunately includes those of path pods and other targets). 94 | OTHER_XCASSETS=$(find "$PWD" -iname "*.xcassets" -type d) 95 | while read line; do 96 | if [[ $line != "`realpath $PODS_ROOT`*" ]]; then 97 | XCASSET_FILES+=("$line") 98 | fi 99 | done <<<"$OTHER_XCASSETS" 100 | 101 | 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}" 102 | fi 103 | -------------------------------------------------------------------------------- /SwiftDemo/Pods/Target Support Files/Pods-SwiftDemoTests/Pods-SwiftDemoTests-umbrella.h: -------------------------------------------------------------------------------- 1 | #import 2 | 3 | 4 | FOUNDATION_EXPORT double Pods_SwiftDemoTestsVersionNumber; 5 | FOUNDATION_EXPORT const unsigned char Pods_SwiftDemoTestsVersionString[]; 6 | 7 | -------------------------------------------------------------------------------- /SwiftDemo/Pods/Target Support Files/Pods-SwiftDemoTests/Pods-SwiftDemoTests.debug.xcconfig: -------------------------------------------------------------------------------- 1 | FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/FTPickerView" 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/FTPickerView/FTPickerView.framework/Headers" 5 | PODS_BUILD_DIR = $BUILD_DIR 6 | PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 7 | PODS_ROOT = ${SRCROOT}/Pods 8 | -------------------------------------------------------------------------------- /SwiftDemo/Pods/Target Support Files/Pods-SwiftDemoTests/Pods-SwiftDemoTests.modulemap: -------------------------------------------------------------------------------- 1 | framework module Pods_SwiftDemoTests { 2 | umbrella header "Pods-SwiftDemoTests-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /SwiftDemo/Pods/Target Support Files/Pods-SwiftDemoTests/Pods-SwiftDemoTests.release.xcconfig: -------------------------------------------------------------------------------- 1 | FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/FTPickerView" 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/FTPickerView/FTPickerView.framework/Headers" 5 | PODS_BUILD_DIR = $BUILD_DIR 6 | PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 7 | PODS_ROOT = ${SRCROOT}/Pods 8 | -------------------------------------------------------------------------------- /SwiftDemo/Pods/Target Support Files/Pods-SwiftDemoUITests/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 | -------------------------------------------------------------------------------- /SwiftDemo/Pods/Target Support Files/Pods-SwiftDemoUITests/Pods-SwiftDemoUITests-acknowledgements.markdown: -------------------------------------------------------------------------------- 1 | # Acknowledgements 2 | This application makes use of the following third party libraries: 3 | Generated by CocoaPods - https://cocoapods.org 4 | -------------------------------------------------------------------------------- /SwiftDemo/Pods/Target Support Files/Pods-SwiftDemoUITests/Pods-SwiftDemoUITests-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 | -------------------------------------------------------------------------------- /SwiftDemo/Pods/Target Support Files/Pods-SwiftDemoUITests/Pods-SwiftDemoUITests-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Pods_SwiftDemoUITests : NSObject 3 | @end 4 | @implementation PodsDummy_Pods_SwiftDemoUITests 5 | @end 6 | -------------------------------------------------------------------------------- /SwiftDemo/Pods/Target Support Files/Pods-SwiftDemoUITests/Pods-SwiftDemoUITests-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 | install_framework() 10 | { 11 | if [ -r "${BUILT_PRODUCTS_DIR}/$1" ]; then 12 | local source="${BUILT_PRODUCTS_DIR}/$1" 13 | elif [ -r "${BUILT_PRODUCTS_DIR}/$(basename "$1")" ]; then 14 | local source="${BUILT_PRODUCTS_DIR}/$(basename "$1")" 15 | elif [ -r "$1" ]; then 16 | local source="$1" 17 | fi 18 | 19 | local destination="${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 20 | 21 | if [ -L "${source}" ]; then 22 | echo "Symlinked..." 23 | source="$(readlink "${source}")" 24 | fi 25 | 26 | # use filter instead of exclude so missing patterns dont' throw errors 27 | echo "rsync -av --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${destination}\"" 28 | rsync -av --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${destination}" 29 | 30 | local basename 31 | basename="$(basename -s .framework "$1")" 32 | binary="${destination}/${basename}.framework/${basename}" 33 | if ! [ -r "$binary" ]; then 34 | binary="${destination}/${basename}" 35 | fi 36 | 37 | # Strip invalid architectures so "fat" simulator / device frameworks work on device 38 | if [[ "$(file "$binary")" == *"dynamically linked shared library"* ]]; then 39 | strip_invalid_archs "$binary" 40 | fi 41 | 42 | # Resign the code if required by the build settings to avoid unstable apps 43 | code_sign_if_enabled "${destination}/$(basename "$1")" 44 | 45 | # Embed linked Swift runtime libraries. No longer necessary as of Xcode 7. 46 | if [ "${XCODE_VERSION_MAJOR}" -lt 7 ]; then 47 | local swift_runtime_libs 48 | swift_runtime_libs=$(xcrun otool -LX "$binary" | grep --color=never @rpath/libswift | sed -E s/@rpath\\/\(.+dylib\).*/\\1/g | uniq -u && exit ${PIPESTATUS[0]}) 49 | for lib in $swift_runtime_libs; do 50 | echo "rsync -auv \"${SWIFT_STDLIB_PATH}/${lib}\" \"${destination}\"" 51 | rsync -auv "${SWIFT_STDLIB_PATH}/${lib}" "${destination}" 52 | code_sign_if_enabled "${destination}/${lib}" 53 | done 54 | fi 55 | } 56 | 57 | # Signs a framework with the provided identity 58 | code_sign_if_enabled() { 59 | if [ -n "${EXPANDED_CODE_SIGN_IDENTITY}" -a "${CODE_SIGNING_REQUIRED}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then 60 | # Use the current code_sign_identitiy 61 | echo "Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}" 62 | echo "/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS} --preserve-metadata=identifier,entitlements \"$1\"" 63 | /usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS} --preserve-metadata=identifier,entitlements "$1" 64 | fi 65 | } 66 | 67 | # Strip invalid architectures 68 | strip_invalid_archs() { 69 | binary="$1" 70 | # Get architectures for current file 71 | archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | rev)" 72 | stripped="" 73 | for arch in $archs; do 74 | if ! [[ "${VALID_ARCHS}" == *"$arch"* ]]; then 75 | # Strip non-valid architectures in-place 76 | lipo -remove "$arch" -output "$binary" "$binary" || exit 1 77 | stripped="$stripped $arch" 78 | fi 79 | done 80 | if [[ "$stripped" ]]; then 81 | echo "Stripped $binary of architectures:$stripped" 82 | fi 83 | } 84 | 85 | -------------------------------------------------------------------------------- /SwiftDemo/Pods/Target Support Files/Pods-SwiftDemoUITests/Pods-SwiftDemoUITests-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 | case "${TARGETED_DEVICE_FAMILY}" in 12 | 1,2) 13 | TARGET_DEVICE_ARGS="--target-device ipad --target-device iphone" 14 | ;; 15 | 1) 16 | TARGET_DEVICE_ARGS="--target-device iphone" 17 | ;; 18 | 2) 19 | TARGET_DEVICE_ARGS="--target-device ipad" 20 | ;; 21 | *) 22 | TARGET_DEVICE_ARGS="--target-device mac" 23 | ;; 24 | esac 25 | 26 | realpath() { 27 | DIRECTORY="$(cd "${1%/*}" && pwd)" 28 | FILENAME="${1##*/}" 29 | echo "$DIRECTORY/$FILENAME" 30 | } 31 | 32 | install_resource() 33 | { 34 | if [[ "$1" = /* ]] ; then 35 | RESOURCE_PATH="$1" 36 | else 37 | RESOURCE_PATH="${PODS_ROOT}/$1" 38 | fi 39 | if [[ ! -e "$RESOURCE_PATH" ]] ; then 40 | cat << EOM 41 | error: Resource "$RESOURCE_PATH" not found. Run 'pod install' to update the copy resources script. 42 | EOM 43 | exit 1 44 | fi 45 | case $RESOURCE_PATH in 46 | *.storyboard) 47 | 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}" 48 | 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} 49 | ;; 50 | *.xib) 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\" .xib`.nib $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" 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\" .xib`.nib" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS} 53 | ;; 54 | *.framework) 55 | echo "mkdir -p ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 56 | mkdir -p "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 57 | echo "rsync -av $RESOURCE_PATH ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 58 | rsync -av "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 59 | ;; 60 | *.xcdatamodel) 61 | echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH"`.mom\"" 62 | xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodel`.mom" 63 | ;; 64 | *.xcdatamodeld) 65 | echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd\"" 66 | xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd" 67 | ;; 68 | *.xcmappingmodel) 69 | echo "xcrun mapc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm\"" 70 | xcrun mapc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm" 71 | ;; 72 | *.xcassets) 73 | ABSOLUTE_XCASSET_FILE=$(realpath "$RESOURCE_PATH") 74 | XCASSET_FILES+=("$ABSOLUTE_XCASSET_FILE") 75 | ;; 76 | *) 77 | echo "$RESOURCE_PATH" 78 | echo "$RESOURCE_PATH" >> "$RESOURCES_TO_COPY" 79 | ;; 80 | esac 81 | } 82 | 83 | mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 84 | rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 85 | if [[ "${ACTION}" == "install" ]] && [[ "${SKIP_INSTALL}" == "NO" ]]; then 86 | mkdir -p "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 87 | rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 88 | fi 89 | rm -f "$RESOURCES_TO_COPY" 90 | 91 | if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ -n "$XCASSET_FILES" ] 92 | then 93 | # Find all other xcassets (this unfortunately includes those of path pods and other targets). 94 | OTHER_XCASSETS=$(find "$PWD" -iname "*.xcassets" -type d) 95 | while read line; do 96 | if [[ $line != "`realpath $PODS_ROOT`*" ]]; then 97 | XCASSET_FILES+=("$line") 98 | fi 99 | done <<<"$OTHER_XCASSETS" 100 | 101 | 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}" 102 | fi 103 | -------------------------------------------------------------------------------- /SwiftDemo/Pods/Target Support Files/Pods-SwiftDemoUITests/Pods-SwiftDemoUITests-umbrella.h: -------------------------------------------------------------------------------- 1 | #import 2 | 3 | 4 | FOUNDATION_EXPORT double Pods_SwiftDemoUITestsVersionNumber; 5 | FOUNDATION_EXPORT const unsigned char Pods_SwiftDemoUITestsVersionString[]; 6 | 7 | -------------------------------------------------------------------------------- /SwiftDemo/Pods/Target Support Files/Pods-SwiftDemoUITests/Pods-SwiftDemoUITests.debug.xcconfig: -------------------------------------------------------------------------------- 1 | FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/FTPickerView" 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/FTPickerView/FTPickerView.framework/Headers" 5 | PODS_BUILD_DIR = $BUILD_DIR 6 | PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 7 | PODS_ROOT = ${SRCROOT}/Pods 8 | -------------------------------------------------------------------------------- /SwiftDemo/Pods/Target Support Files/Pods-SwiftDemoUITests/Pods-SwiftDemoUITests.modulemap: -------------------------------------------------------------------------------- 1 | framework module Pods_SwiftDemoUITests { 2 | umbrella header "Pods-SwiftDemoUITests-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /SwiftDemo/Pods/Target Support Files/Pods-SwiftDemoUITests/Pods-SwiftDemoUITests.release.xcconfig: -------------------------------------------------------------------------------- 1 | FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/FTPickerView" 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/FTPickerView/FTPickerView.framework/Headers" 5 | PODS_BUILD_DIR = $BUILD_DIR 6 | PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 7 | PODS_ROOT = ${SRCROOT}/Pods 8 | -------------------------------------------------------------------------------- /SwiftDemo/SwiftDemo.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 0483112C7C1629C5A84603D9 /* Pods_SwiftDemo.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C4DC0995117E8851020E9DBF /* Pods_SwiftDemo.framework */; }; 11 | 5ACE9B921D857AC000BEEBF0 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5ACE9B911D857AC000BEEBF0 /* AppDelegate.swift */; }; 12 | 5ACE9B941D857AC000BEEBF0 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5ACE9B931D857AC000BEEBF0 /* ViewController.swift */; }; 13 | 5ACE9B971D857AC000BEEBF0 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 5ACE9B951D857AC000BEEBF0 /* Main.storyboard */; }; 14 | 5ACE9B991D857AC000BEEBF0 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 5ACE9B981D857AC000BEEBF0 /* Assets.xcassets */; }; 15 | 5ACE9B9C1D857AC000BEEBF0 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 5ACE9B9A1D857AC000BEEBF0 /* LaunchScreen.storyboard */; }; 16 | 5ACE9BA71D857AC000BEEBF0 /* SwiftDemoTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5ACE9BA61D857AC000BEEBF0 /* SwiftDemoTests.swift */; }; 17 | 5ACE9BB21D857AC000BEEBF0 /* SwiftDemoUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5ACE9BB11D857AC000BEEBF0 /* SwiftDemoUITests.swift */; }; 18 | 5C7F1259F4684CFDF538DE3D /* Pods_SwiftDemoUITests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 06C9CF64CDB78EF8EC8B5B83 /* Pods_SwiftDemoUITests.framework */; }; 19 | 990F4D0A7A946C2629D33DB4 /* Pods_SwiftDemoTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AEA0D211BAB75FCF00E91E5B /* Pods_SwiftDemoTests.framework */; }; 20 | /* End PBXBuildFile section */ 21 | 22 | /* Begin PBXContainerItemProxy section */ 23 | 5ACE9BA31D857AC000BEEBF0 /* PBXContainerItemProxy */ = { 24 | isa = PBXContainerItemProxy; 25 | containerPortal = 5ACE9B861D857AC000BEEBF0 /* Project object */; 26 | proxyType = 1; 27 | remoteGlobalIDString = 5ACE9B8D1D857AC000BEEBF0; 28 | remoteInfo = SwiftDemo; 29 | }; 30 | 5ACE9BAE1D857AC000BEEBF0 /* PBXContainerItemProxy */ = { 31 | isa = PBXContainerItemProxy; 32 | containerPortal = 5ACE9B861D857AC000BEEBF0 /* Project object */; 33 | proxyType = 1; 34 | remoteGlobalIDString = 5ACE9B8D1D857AC000BEEBF0; 35 | remoteInfo = SwiftDemo; 36 | }; 37 | /* End PBXContainerItemProxy section */ 38 | 39 | /* Begin PBXFileReference section */ 40 | 0012DF30999D8729ED4E4C37 /* Pods-SwiftDemo.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SwiftDemo.release.xcconfig"; path = "Pods/Target Support Files/Pods-SwiftDemo/Pods-SwiftDemo.release.xcconfig"; sourceTree = ""; }; 41 | 06C9CF64CDB78EF8EC8B5B83 /* Pods_SwiftDemoUITests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_SwiftDemoUITests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 42 | 0BED4F6ED664EE5A9C669A94 /* Pods-SwiftDemo.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SwiftDemo.debug.xcconfig"; path = "Pods/Target Support Files/Pods-SwiftDemo/Pods-SwiftDemo.debug.xcconfig"; sourceTree = ""; }; 43 | 22D63CA31891D0832D0689DB /* Pods-SwiftDemoUITests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SwiftDemoUITests.release.xcconfig"; path = "Pods/Target Support Files/Pods-SwiftDemoUITests/Pods-SwiftDemoUITests.release.xcconfig"; sourceTree = ""; }; 44 | 5341C3F29CAB524ED096A853 /* Pods-SwiftDemoTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SwiftDemoTests.release.xcconfig"; path = "Pods/Target Support Files/Pods-SwiftDemoTests/Pods-SwiftDemoTests.release.xcconfig"; sourceTree = ""; }; 45 | 5ACE9B8E1D857AC000BEEBF0 /* SwiftDemo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = SwiftDemo.app; sourceTree = BUILT_PRODUCTS_DIR; }; 46 | 5ACE9B911D857AC000BEEBF0 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 47 | 5ACE9B931D857AC000BEEBF0 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; 48 | 5ACE9B961D857AC000BEEBF0 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 49 | 5ACE9B981D857AC000BEEBF0 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 50 | 5ACE9B9B1D857AC000BEEBF0 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 51 | 5ACE9B9D1D857AC000BEEBF0 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 52 | 5ACE9BA21D857AC000BEEBF0 /* SwiftDemoTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = SwiftDemoTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 53 | 5ACE9BA61D857AC000BEEBF0 /* SwiftDemoTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SwiftDemoTests.swift; sourceTree = ""; }; 54 | 5ACE9BA81D857AC000BEEBF0 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 55 | 5ACE9BAD1D857AC000BEEBF0 /* SwiftDemoUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = SwiftDemoUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 56 | 5ACE9BB11D857AC000BEEBF0 /* SwiftDemoUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SwiftDemoUITests.swift; sourceTree = ""; }; 57 | 5ACE9BB31D857AC000BEEBF0 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 58 | A55ED85D7191FC683F639700 /* Pods-SwiftDemoTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SwiftDemoTests.debug.xcconfig"; path = "Pods/Target Support Files/Pods-SwiftDemoTests/Pods-SwiftDemoTests.debug.xcconfig"; sourceTree = ""; }; 59 | AEA0D211BAB75FCF00E91E5B /* Pods_SwiftDemoTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_SwiftDemoTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 60 | C4DC0995117E8851020E9DBF /* Pods_SwiftDemo.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_SwiftDemo.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 61 | F89EF05CD5B75F9485601772 /* Pods-SwiftDemoUITests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SwiftDemoUITests.debug.xcconfig"; path = "Pods/Target Support Files/Pods-SwiftDemoUITests/Pods-SwiftDemoUITests.debug.xcconfig"; sourceTree = ""; }; 62 | /* End PBXFileReference section */ 63 | 64 | /* Begin PBXFrameworksBuildPhase section */ 65 | 5ACE9B8B1D857AC000BEEBF0 /* Frameworks */ = { 66 | isa = PBXFrameworksBuildPhase; 67 | buildActionMask = 2147483647; 68 | files = ( 69 | 0483112C7C1629C5A84603D9 /* Pods_SwiftDemo.framework in Frameworks */, 70 | ); 71 | runOnlyForDeploymentPostprocessing = 0; 72 | }; 73 | 5ACE9B9F1D857AC000BEEBF0 /* Frameworks */ = { 74 | isa = PBXFrameworksBuildPhase; 75 | buildActionMask = 2147483647; 76 | files = ( 77 | 990F4D0A7A946C2629D33DB4 /* Pods_SwiftDemoTests.framework in Frameworks */, 78 | ); 79 | runOnlyForDeploymentPostprocessing = 0; 80 | }; 81 | 5ACE9BAA1D857AC000BEEBF0 /* Frameworks */ = { 82 | isa = PBXFrameworksBuildPhase; 83 | buildActionMask = 2147483647; 84 | files = ( 85 | 5C7F1259F4684CFDF538DE3D /* Pods_SwiftDemoUITests.framework in Frameworks */, 86 | ); 87 | runOnlyForDeploymentPostprocessing = 0; 88 | }; 89 | /* End PBXFrameworksBuildPhase section */ 90 | 91 | /* Begin PBXGroup section */ 92 | 5ACE9B851D857AC000BEEBF0 = { 93 | isa = PBXGroup; 94 | children = ( 95 | 5ACE9B901D857AC000BEEBF0 /* SwiftDemo */, 96 | 5ACE9BA51D857AC000BEEBF0 /* SwiftDemoTests */, 97 | 5ACE9BB01D857AC000BEEBF0 /* SwiftDemoUITests */, 98 | 5ACE9B8F1D857AC000BEEBF0 /* Products */, 99 | 8B33C9B20DF719B57A393902 /* Pods */, 100 | E8E2A395A4502EB90990BA2A /* Frameworks */, 101 | ); 102 | sourceTree = ""; 103 | }; 104 | 5ACE9B8F1D857AC000BEEBF0 /* Products */ = { 105 | isa = PBXGroup; 106 | children = ( 107 | 5ACE9B8E1D857AC000BEEBF0 /* SwiftDemo.app */, 108 | 5ACE9BA21D857AC000BEEBF0 /* SwiftDemoTests.xctest */, 109 | 5ACE9BAD1D857AC000BEEBF0 /* SwiftDemoUITests.xctest */, 110 | ); 111 | name = Products; 112 | sourceTree = ""; 113 | }; 114 | 5ACE9B901D857AC000BEEBF0 /* SwiftDemo */ = { 115 | isa = PBXGroup; 116 | children = ( 117 | 5ACE9B911D857AC000BEEBF0 /* AppDelegate.swift */, 118 | 5ACE9B931D857AC000BEEBF0 /* ViewController.swift */, 119 | 5ACE9B951D857AC000BEEBF0 /* Main.storyboard */, 120 | 5ACE9B981D857AC000BEEBF0 /* Assets.xcassets */, 121 | 5ACE9B9A1D857AC000BEEBF0 /* LaunchScreen.storyboard */, 122 | 5ACE9B9D1D857AC000BEEBF0 /* Info.plist */, 123 | ); 124 | path = SwiftDemo; 125 | sourceTree = ""; 126 | }; 127 | 5ACE9BA51D857AC000BEEBF0 /* SwiftDemoTests */ = { 128 | isa = PBXGroup; 129 | children = ( 130 | 5ACE9BA61D857AC000BEEBF0 /* SwiftDemoTests.swift */, 131 | 5ACE9BA81D857AC000BEEBF0 /* Info.plist */, 132 | ); 133 | path = SwiftDemoTests; 134 | sourceTree = ""; 135 | }; 136 | 5ACE9BB01D857AC000BEEBF0 /* SwiftDemoUITests */ = { 137 | isa = PBXGroup; 138 | children = ( 139 | 5ACE9BB11D857AC000BEEBF0 /* SwiftDemoUITests.swift */, 140 | 5ACE9BB31D857AC000BEEBF0 /* Info.plist */, 141 | ); 142 | path = SwiftDemoUITests; 143 | sourceTree = ""; 144 | }; 145 | 8B33C9B20DF719B57A393902 /* Pods */ = { 146 | isa = PBXGroup; 147 | children = ( 148 | 0BED4F6ED664EE5A9C669A94 /* Pods-SwiftDemo.debug.xcconfig */, 149 | 0012DF30999D8729ED4E4C37 /* Pods-SwiftDemo.release.xcconfig */, 150 | A55ED85D7191FC683F639700 /* Pods-SwiftDemoTests.debug.xcconfig */, 151 | 5341C3F29CAB524ED096A853 /* Pods-SwiftDemoTests.release.xcconfig */, 152 | F89EF05CD5B75F9485601772 /* Pods-SwiftDemoUITests.debug.xcconfig */, 153 | 22D63CA31891D0832D0689DB /* Pods-SwiftDemoUITests.release.xcconfig */, 154 | ); 155 | name = Pods; 156 | sourceTree = ""; 157 | }; 158 | E8E2A395A4502EB90990BA2A /* Frameworks */ = { 159 | isa = PBXGroup; 160 | children = ( 161 | C4DC0995117E8851020E9DBF /* Pods_SwiftDemo.framework */, 162 | AEA0D211BAB75FCF00E91E5B /* Pods_SwiftDemoTests.framework */, 163 | 06C9CF64CDB78EF8EC8B5B83 /* Pods_SwiftDemoUITests.framework */, 164 | ); 165 | name = Frameworks; 166 | sourceTree = ""; 167 | }; 168 | /* End PBXGroup section */ 169 | 170 | /* Begin PBXNativeTarget section */ 171 | 5ACE9B8D1D857AC000BEEBF0 /* SwiftDemo */ = { 172 | isa = PBXNativeTarget; 173 | buildConfigurationList = 5ACE9BB61D857AC000BEEBF0 /* Build configuration list for PBXNativeTarget "SwiftDemo" */; 174 | buildPhases = ( 175 | 7FFE1E9FD7739051541CBF94 /* [CP] Check Pods Manifest.lock */, 176 | 5ACE9B8A1D857AC000BEEBF0 /* Sources */, 177 | 5ACE9B8B1D857AC000BEEBF0 /* Frameworks */, 178 | 5ACE9B8C1D857AC000BEEBF0 /* Resources */, 179 | 57E3032E524E9F9F24541782 /* [CP] Embed Pods Frameworks */, 180 | 89A87C6DE6B7824A659F1586 /* [CP] Copy Pods Resources */, 181 | ); 182 | buildRules = ( 183 | ); 184 | dependencies = ( 185 | ); 186 | name = SwiftDemo; 187 | productName = SwiftDemo; 188 | productReference = 5ACE9B8E1D857AC000BEEBF0 /* SwiftDemo.app */; 189 | productType = "com.apple.product-type.application"; 190 | }; 191 | 5ACE9BA11D857AC000BEEBF0 /* SwiftDemoTests */ = { 192 | isa = PBXNativeTarget; 193 | buildConfigurationList = 5ACE9BB91D857AC000BEEBF0 /* Build configuration list for PBXNativeTarget "SwiftDemoTests" */; 194 | buildPhases = ( 195 | DE088ADD35EA382F9F1DC0B8 /* [CP] Check Pods Manifest.lock */, 196 | 5ACE9B9E1D857AC000BEEBF0 /* Sources */, 197 | 5ACE9B9F1D857AC000BEEBF0 /* Frameworks */, 198 | 5ACE9BA01D857AC000BEEBF0 /* Resources */, 199 | A73D430D336CCED056D53395 /* [CP] Embed Pods Frameworks */, 200 | 8D469D2D465EF8EE4A310A24 /* [CP] Copy Pods Resources */, 201 | ); 202 | buildRules = ( 203 | ); 204 | dependencies = ( 205 | 5ACE9BA41D857AC000BEEBF0 /* PBXTargetDependency */, 206 | ); 207 | name = SwiftDemoTests; 208 | productName = SwiftDemoTests; 209 | productReference = 5ACE9BA21D857AC000BEEBF0 /* SwiftDemoTests.xctest */; 210 | productType = "com.apple.product-type.bundle.unit-test"; 211 | }; 212 | 5ACE9BAC1D857AC000BEEBF0 /* SwiftDemoUITests */ = { 213 | isa = PBXNativeTarget; 214 | buildConfigurationList = 5ACE9BBC1D857AC000BEEBF0 /* Build configuration list for PBXNativeTarget "SwiftDemoUITests" */; 215 | buildPhases = ( 216 | D80BFFB8B230EFFC0523080F /* [CP] Check Pods Manifest.lock */, 217 | 5ACE9BA91D857AC000BEEBF0 /* Sources */, 218 | 5ACE9BAA1D857AC000BEEBF0 /* Frameworks */, 219 | 5ACE9BAB1D857AC000BEEBF0 /* Resources */, 220 | 73E3E48E03994369ADD8C949 /* [CP] Copy Pods Resources */, 221 | ); 222 | buildRules = ( 223 | ); 224 | dependencies = ( 225 | 5ACE9BAF1D857AC000BEEBF0 /* PBXTargetDependency */, 226 | ); 227 | name = SwiftDemoUITests; 228 | productName = SwiftDemoUITests; 229 | productReference = 5ACE9BAD1D857AC000BEEBF0 /* SwiftDemoUITests.xctest */; 230 | productType = "com.apple.product-type.bundle.ui-testing"; 231 | }; 232 | /* End PBXNativeTarget section */ 233 | 234 | /* Begin PBXProject section */ 235 | 5ACE9B861D857AC000BEEBF0 /* Project object */ = { 236 | isa = PBXProject; 237 | attributes = { 238 | LastSwiftUpdateCheck = 0730; 239 | LastUpgradeCheck = 0730; 240 | ORGANIZATIONNAME = liufengting; 241 | TargetAttributes = { 242 | 5ACE9B8D1D857AC000BEEBF0 = { 243 | CreatedOnToolsVersion = 7.3.1; 244 | }; 245 | 5ACE9BA11D857AC000BEEBF0 = { 246 | CreatedOnToolsVersion = 7.3.1; 247 | TestTargetID = 5ACE9B8D1D857AC000BEEBF0; 248 | }; 249 | 5ACE9BAC1D857AC000BEEBF0 = { 250 | CreatedOnToolsVersion = 7.3.1; 251 | TestTargetID = 5ACE9B8D1D857AC000BEEBF0; 252 | }; 253 | }; 254 | }; 255 | buildConfigurationList = 5ACE9B891D857AC000BEEBF0 /* Build configuration list for PBXProject "SwiftDemo" */; 256 | compatibilityVersion = "Xcode 3.2"; 257 | developmentRegion = English; 258 | hasScannedForEncodings = 0; 259 | knownRegions = ( 260 | en, 261 | Base, 262 | ); 263 | mainGroup = 5ACE9B851D857AC000BEEBF0; 264 | productRefGroup = 5ACE9B8F1D857AC000BEEBF0 /* Products */; 265 | projectDirPath = ""; 266 | projectRoot = ""; 267 | targets = ( 268 | 5ACE9B8D1D857AC000BEEBF0 /* SwiftDemo */, 269 | 5ACE9BA11D857AC000BEEBF0 /* SwiftDemoTests */, 270 | 5ACE9BAC1D857AC000BEEBF0 /* SwiftDemoUITests */, 271 | ); 272 | }; 273 | /* End PBXProject section */ 274 | 275 | /* Begin PBXResourcesBuildPhase section */ 276 | 5ACE9B8C1D857AC000BEEBF0 /* Resources */ = { 277 | isa = PBXResourcesBuildPhase; 278 | buildActionMask = 2147483647; 279 | files = ( 280 | 5ACE9B9C1D857AC000BEEBF0 /* LaunchScreen.storyboard in Resources */, 281 | 5ACE9B991D857AC000BEEBF0 /* Assets.xcassets in Resources */, 282 | 5ACE9B971D857AC000BEEBF0 /* Main.storyboard in Resources */, 283 | ); 284 | runOnlyForDeploymentPostprocessing = 0; 285 | }; 286 | 5ACE9BA01D857AC000BEEBF0 /* Resources */ = { 287 | isa = PBXResourcesBuildPhase; 288 | buildActionMask = 2147483647; 289 | files = ( 290 | ); 291 | runOnlyForDeploymentPostprocessing = 0; 292 | }; 293 | 5ACE9BAB1D857AC000BEEBF0 /* Resources */ = { 294 | isa = PBXResourcesBuildPhase; 295 | buildActionMask = 2147483647; 296 | files = ( 297 | ); 298 | runOnlyForDeploymentPostprocessing = 0; 299 | }; 300 | /* End PBXResourcesBuildPhase section */ 301 | 302 | /* Begin PBXShellScriptBuildPhase section */ 303 | 57E3032E524E9F9F24541782 /* [CP] Embed Pods Frameworks */ = { 304 | isa = PBXShellScriptBuildPhase; 305 | buildActionMask = 2147483647; 306 | files = ( 307 | ); 308 | inputPaths = ( 309 | ); 310 | name = "[CP] Embed Pods Frameworks"; 311 | outputPaths = ( 312 | ); 313 | runOnlyForDeploymentPostprocessing = 0; 314 | shellPath = /bin/sh; 315 | shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-SwiftDemo/Pods-SwiftDemo-frameworks.sh\"\n"; 316 | showEnvVarsInLog = 0; 317 | }; 318 | 73E3E48E03994369ADD8C949 /* [CP] Copy Pods Resources */ = { 319 | isa = PBXShellScriptBuildPhase; 320 | buildActionMask = 2147483647; 321 | files = ( 322 | ); 323 | inputPaths = ( 324 | ); 325 | name = "[CP] Copy Pods Resources"; 326 | outputPaths = ( 327 | ); 328 | runOnlyForDeploymentPostprocessing = 0; 329 | shellPath = /bin/sh; 330 | shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-SwiftDemoUITests/Pods-SwiftDemoUITests-resources.sh\"\n"; 331 | showEnvVarsInLog = 0; 332 | }; 333 | 7FFE1E9FD7739051541CBF94 /* [CP] Check Pods Manifest.lock */ = { 334 | isa = PBXShellScriptBuildPhase; 335 | buildActionMask = 2147483647; 336 | files = ( 337 | ); 338 | inputPaths = ( 339 | ); 340 | name = "[CP] Check Pods Manifest.lock"; 341 | outputPaths = ( 342 | ); 343 | runOnlyForDeploymentPostprocessing = 0; 344 | shellPath = /bin/sh; 345 | shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [[ $? != 0 ]] ; then\n cat << EOM\nerror: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\nEOM\n exit 1\nfi\n"; 346 | showEnvVarsInLog = 0; 347 | }; 348 | 89A87C6DE6B7824A659F1586 /* [CP] Copy Pods Resources */ = { 349 | isa = PBXShellScriptBuildPhase; 350 | buildActionMask = 2147483647; 351 | files = ( 352 | ); 353 | inputPaths = ( 354 | ); 355 | name = "[CP] Copy Pods Resources"; 356 | outputPaths = ( 357 | ); 358 | runOnlyForDeploymentPostprocessing = 0; 359 | shellPath = /bin/sh; 360 | shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-SwiftDemo/Pods-SwiftDemo-resources.sh\"\n"; 361 | showEnvVarsInLog = 0; 362 | }; 363 | 8D469D2D465EF8EE4A310A24 /* [CP] Copy Pods Resources */ = { 364 | isa = PBXShellScriptBuildPhase; 365 | buildActionMask = 2147483647; 366 | files = ( 367 | ); 368 | inputPaths = ( 369 | ); 370 | name = "[CP] Copy Pods Resources"; 371 | outputPaths = ( 372 | ); 373 | runOnlyForDeploymentPostprocessing = 0; 374 | shellPath = /bin/sh; 375 | shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-SwiftDemoTests/Pods-SwiftDemoTests-resources.sh\"\n"; 376 | showEnvVarsInLog = 0; 377 | }; 378 | A73D430D336CCED056D53395 /* [CP] Embed Pods Frameworks */ = { 379 | isa = PBXShellScriptBuildPhase; 380 | buildActionMask = 2147483647; 381 | files = ( 382 | ); 383 | inputPaths = ( 384 | ); 385 | name = "[CP] Embed Pods Frameworks"; 386 | outputPaths = ( 387 | ); 388 | runOnlyForDeploymentPostprocessing = 0; 389 | shellPath = /bin/sh; 390 | shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-SwiftDemoTests/Pods-SwiftDemoTests-frameworks.sh\"\n"; 391 | showEnvVarsInLog = 0; 392 | }; 393 | D80BFFB8B230EFFC0523080F /* [CP] Check Pods Manifest.lock */ = { 394 | isa = PBXShellScriptBuildPhase; 395 | buildActionMask = 2147483647; 396 | files = ( 397 | ); 398 | inputPaths = ( 399 | ); 400 | name = "[CP] Check Pods Manifest.lock"; 401 | outputPaths = ( 402 | ); 403 | runOnlyForDeploymentPostprocessing = 0; 404 | shellPath = /bin/sh; 405 | shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [[ $? != 0 ]] ; then\n cat << EOM\nerror: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\nEOM\n exit 1\nfi\n"; 406 | showEnvVarsInLog = 0; 407 | }; 408 | DE088ADD35EA382F9F1DC0B8 /* [CP] Check Pods Manifest.lock */ = { 409 | isa = PBXShellScriptBuildPhase; 410 | buildActionMask = 2147483647; 411 | files = ( 412 | ); 413 | inputPaths = ( 414 | ); 415 | name = "[CP] Check Pods Manifest.lock"; 416 | outputPaths = ( 417 | ); 418 | runOnlyForDeploymentPostprocessing = 0; 419 | shellPath = /bin/sh; 420 | shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [[ $? != 0 ]] ; then\n cat << EOM\nerror: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\nEOM\n exit 1\nfi\n"; 421 | showEnvVarsInLog = 0; 422 | }; 423 | /* End PBXShellScriptBuildPhase section */ 424 | 425 | /* Begin PBXSourcesBuildPhase section */ 426 | 5ACE9B8A1D857AC000BEEBF0 /* Sources */ = { 427 | isa = PBXSourcesBuildPhase; 428 | buildActionMask = 2147483647; 429 | files = ( 430 | 5ACE9B941D857AC000BEEBF0 /* ViewController.swift in Sources */, 431 | 5ACE9B921D857AC000BEEBF0 /* AppDelegate.swift in Sources */, 432 | ); 433 | runOnlyForDeploymentPostprocessing = 0; 434 | }; 435 | 5ACE9B9E1D857AC000BEEBF0 /* Sources */ = { 436 | isa = PBXSourcesBuildPhase; 437 | buildActionMask = 2147483647; 438 | files = ( 439 | 5ACE9BA71D857AC000BEEBF0 /* SwiftDemoTests.swift in Sources */, 440 | ); 441 | runOnlyForDeploymentPostprocessing = 0; 442 | }; 443 | 5ACE9BA91D857AC000BEEBF0 /* Sources */ = { 444 | isa = PBXSourcesBuildPhase; 445 | buildActionMask = 2147483647; 446 | files = ( 447 | 5ACE9BB21D857AC000BEEBF0 /* SwiftDemoUITests.swift in Sources */, 448 | ); 449 | runOnlyForDeploymentPostprocessing = 0; 450 | }; 451 | /* End PBXSourcesBuildPhase section */ 452 | 453 | /* Begin PBXTargetDependency section */ 454 | 5ACE9BA41D857AC000BEEBF0 /* PBXTargetDependency */ = { 455 | isa = PBXTargetDependency; 456 | target = 5ACE9B8D1D857AC000BEEBF0 /* SwiftDemo */; 457 | targetProxy = 5ACE9BA31D857AC000BEEBF0 /* PBXContainerItemProxy */; 458 | }; 459 | 5ACE9BAF1D857AC000BEEBF0 /* PBXTargetDependency */ = { 460 | isa = PBXTargetDependency; 461 | target = 5ACE9B8D1D857AC000BEEBF0 /* SwiftDemo */; 462 | targetProxy = 5ACE9BAE1D857AC000BEEBF0 /* PBXContainerItemProxy */; 463 | }; 464 | /* End PBXTargetDependency section */ 465 | 466 | /* Begin PBXVariantGroup section */ 467 | 5ACE9B951D857AC000BEEBF0 /* Main.storyboard */ = { 468 | isa = PBXVariantGroup; 469 | children = ( 470 | 5ACE9B961D857AC000BEEBF0 /* Base */, 471 | ); 472 | name = Main.storyboard; 473 | sourceTree = ""; 474 | }; 475 | 5ACE9B9A1D857AC000BEEBF0 /* LaunchScreen.storyboard */ = { 476 | isa = PBXVariantGroup; 477 | children = ( 478 | 5ACE9B9B1D857AC000BEEBF0 /* Base */, 479 | ); 480 | name = LaunchScreen.storyboard; 481 | sourceTree = ""; 482 | }; 483 | /* End PBXVariantGroup section */ 484 | 485 | /* Begin XCBuildConfiguration section */ 486 | 5ACE9BB41D857AC000BEEBF0 /* Debug */ = { 487 | isa = XCBuildConfiguration; 488 | buildSettings = { 489 | ALWAYS_SEARCH_USER_PATHS = NO; 490 | CLANG_ANALYZER_NONNULL = YES; 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_BOOL_CONVERSION = YES; 496 | CLANG_WARN_CONSTANT_CONVERSION = YES; 497 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 498 | CLANG_WARN_EMPTY_BODY = YES; 499 | CLANG_WARN_ENUM_CONVERSION = YES; 500 | CLANG_WARN_INT_CONVERSION = YES; 501 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 502 | CLANG_WARN_UNREACHABLE_CODE = YES; 503 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 504 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 505 | COPY_PHASE_STRIP = NO; 506 | DEBUG_INFORMATION_FORMAT = dwarf; 507 | ENABLE_STRICT_OBJC_MSGSEND = YES; 508 | ENABLE_TESTABILITY = YES; 509 | GCC_C_LANGUAGE_STANDARD = gnu99; 510 | GCC_DYNAMIC_NO_PIC = NO; 511 | GCC_NO_COMMON_BLOCKS = YES; 512 | GCC_OPTIMIZATION_LEVEL = 0; 513 | GCC_PREPROCESSOR_DEFINITIONS = ( 514 | "DEBUG=1", 515 | "$(inherited)", 516 | ); 517 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 518 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 519 | GCC_WARN_UNDECLARED_SELECTOR = YES; 520 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 521 | GCC_WARN_UNUSED_FUNCTION = YES; 522 | GCC_WARN_UNUSED_VARIABLE = YES; 523 | IPHONEOS_DEPLOYMENT_TARGET = 9.3; 524 | MTL_ENABLE_DEBUG_INFO = YES; 525 | ONLY_ACTIVE_ARCH = YES; 526 | SDKROOT = iphoneos; 527 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 528 | }; 529 | name = Debug; 530 | }; 531 | 5ACE9BB51D857AC000BEEBF0 /* Release */ = { 532 | isa = XCBuildConfiguration; 533 | buildSettings = { 534 | ALWAYS_SEARCH_USER_PATHS = NO; 535 | CLANG_ANALYZER_NONNULL = YES; 536 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 537 | CLANG_CXX_LIBRARY = "libc++"; 538 | CLANG_ENABLE_MODULES = YES; 539 | CLANG_ENABLE_OBJC_ARC = YES; 540 | CLANG_WARN_BOOL_CONVERSION = YES; 541 | CLANG_WARN_CONSTANT_CONVERSION = YES; 542 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 543 | CLANG_WARN_EMPTY_BODY = YES; 544 | CLANG_WARN_ENUM_CONVERSION = YES; 545 | CLANG_WARN_INT_CONVERSION = YES; 546 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 547 | CLANG_WARN_UNREACHABLE_CODE = YES; 548 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 549 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 550 | COPY_PHASE_STRIP = NO; 551 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 552 | ENABLE_NS_ASSERTIONS = NO; 553 | ENABLE_STRICT_OBJC_MSGSEND = YES; 554 | GCC_C_LANGUAGE_STANDARD = gnu99; 555 | GCC_NO_COMMON_BLOCKS = YES; 556 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 557 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 558 | GCC_WARN_UNDECLARED_SELECTOR = YES; 559 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 560 | GCC_WARN_UNUSED_FUNCTION = YES; 561 | GCC_WARN_UNUSED_VARIABLE = YES; 562 | IPHONEOS_DEPLOYMENT_TARGET = 9.3; 563 | MTL_ENABLE_DEBUG_INFO = NO; 564 | SDKROOT = iphoneos; 565 | VALIDATE_PRODUCT = YES; 566 | }; 567 | name = Release; 568 | }; 569 | 5ACE9BB71D857AC000BEEBF0 /* Debug */ = { 570 | isa = XCBuildConfiguration; 571 | baseConfigurationReference = 0BED4F6ED664EE5A9C669A94 /* Pods-SwiftDemo.debug.xcconfig */; 572 | buildSettings = { 573 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 574 | INFOPLIST_FILE = SwiftDemo/Info.plist; 575 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 576 | PRODUCT_BUNDLE_IDENTIFIER = com.liufengting.SwiftDemo; 577 | PRODUCT_NAME = "$(TARGET_NAME)"; 578 | }; 579 | name = Debug; 580 | }; 581 | 5ACE9BB81D857AC000BEEBF0 /* Release */ = { 582 | isa = XCBuildConfiguration; 583 | baseConfigurationReference = 0012DF30999D8729ED4E4C37 /* Pods-SwiftDemo.release.xcconfig */; 584 | buildSettings = { 585 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 586 | INFOPLIST_FILE = SwiftDemo/Info.plist; 587 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 588 | PRODUCT_BUNDLE_IDENTIFIER = com.liufengting.SwiftDemo; 589 | PRODUCT_NAME = "$(TARGET_NAME)"; 590 | }; 591 | name = Release; 592 | }; 593 | 5ACE9BBA1D857AC000BEEBF0 /* Debug */ = { 594 | isa = XCBuildConfiguration; 595 | baseConfigurationReference = A55ED85D7191FC683F639700 /* Pods-SwiftDemoTests.debug.xcconfig */; 596 | buildSettings = { 597 | BUNDLE_LOADER = "$(TEST_HOST)"; 598 | INFOPLIST_FILE = SwiftDemoTests/Info.plist; 599 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 600 | PRODUCT_BUNDLE_IDENTIFIER = com.liufengting.SwiftDemoTests; 601 | PRODUCT_NAME = "$(TARGET_NAME)"; 602 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/SwiftDemo.app/SwiftDemo"; 603 | }; 604 | name = Debug; 605 | }; 606 | 5ACE9BBB1D857AC000BEEBF0 /* Release */ = { 607 | isa = XCBuildConfiguration; 608 | baseConfigurationReference = 5341C3F29CAB524ED096A853 /* Pods-SwiftDemoTests.release.xcconfig */; 609 | buildSettings = { 610 | BUNDLE_LOADER = "$(TEST_HOST)"; 611 | INFOPLIST_FILE = SwiftDemoTests/Info.plist; 612 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 613 | PRODUCT_BUNDLE_IDENTIFIER = com.liufengting.SwiftDemoTests; 614 | PRODUCT_NAME = "$(TARGET_NAME)"; 615 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/SwiftDemo.app/SwiftDemo"; 616 | }; 617 | name = Release; 618 | }; 619 | 5ACE9BBD1D857AC000BEEBF0 /* Debug */ = { 620 | isa = XCBuildConfiguration; 621 | baseConfigurationReference = F89EF05CD5B75F9485601772 /* Pods-SwiftDemoUITests.debug.xcconfig */; 622 | buildSettings = { 623 | INFOPLIST_FILE = SwiftDemoUITests/Info.plist; 624 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 625 | PRODUCT_BUNDLE_IDENTIFIER = com.liufengting.SwiftDemoUITests; 626 | PRODUCT_NAME = "$(TARGET_NAME)"; 627 | TEST_TARGET_NAME = SwiftDemo; 628 | }; 629 | name = Debug; 630 | }; 631 | 5ACE9BBE1D857AC000BEEBF0 /* Release */ = { 632 | isa = XCBuildConfiguration; 633 | baseConfigurationReference = 22D63CA31891D0832D0689DB /* Pods-SwiftDemoUITests.release.xcconfig */; 634 | buildSettings = { 635 | INFOPLIST_FILE = SwiftDemoUITests/Info.plist; 636 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 637 | PRODUCT_BUNDLE_IDENTIFIER = com.liufengting.SwiftDemoUITests; 638 | PRODUCT_NAME = "$(TARGET_NAME)"; 639 | TEST_TARGET_NAME = SwiftDemo; 640 | }; 641 | name = Release; 642 | }; 643 | /* End XCBuildConfiguration section */ 644 | 645 | /* Begin XCConfigurationList section */ 646 | 5ACE9B891D857AC000BEEBF0 /* Build configuration list for PBXProject "SwiftDemo" */ = { 647 | isa = XCConfigurationList; 648 | buildConfigurations = ( 649 | 5ACE9BB41D857AC000BEEBF0 /* Debug */, 650 | 5ACE9BB51D857AC000BEEBF0 /* Release */, 651 | ); 652 | defaultConfigurationIsVisible = 0; 653 | defaultConfigurationName = Release; 654 | }; 655 | 5ACE9BB61D857AC000BEEBF0 /* Build configuration list for PBXNativeTarget "SwiftDemo" */ = { 656 | isa = XCConfigurationList; 657 | buildConfigurations = ( 658 | 5ACE9BB71D857AC000BEEBF0 /* Debug */, 659 | 5ACE9BB81D857AC000BEEBF0 /* Release */, 660 | ); 661 | defaultConfigurationIsVisible = 0; 662 | defaultConfigurationName = Release; 663 | }; 664 | 5ACE9BB91D857AC000BEEBF0 /* Build configuration list for PBXNativeTarget "SwiftDemoTests" */ = { 665 | isa = XCConfigurationList; 666 | buildConfigurations = ( 667 | 5ACE9BBA1D857AC000BEEBF0 /* Debug */, 668 | 5ACE9BBB1D857AC000BEEBF0 /* Release */, 669 | ); 670 | defaultConfigurationIsVisible = 0; 671 | defaultConfigurationName = Release; 672 | }; 673 | 5ACE9BBC1D857AC000BEEBF0 /* Build configuration list for PBXNativeTarget "SwiftDemoUITests" */ = { 674 | isa = XCConfigurationList; 675 | buildConfigurations = ( 676 | 5ACE9BBD1D857AC000BEEBF0 /* Debug */, 677 | 5ACE9BBE1D857AC000BEEBF0 /* Release */, 678 | ); 679 | defaultConfigurationIsVisible = 0; 680 | defaultConfigurationName = Release; 681 | }; 682 | /* End XCConfigurationList section */ 683 | }; 684 | rootObject = 5ACE9B861D857AC000BEEBF0 /* Project object */; 685 | } 686 | -------------------------------------------------------------------------------- /SwiftDemo/SwiftDemo.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /SwiftDemo/SwiftDemo.xcodeproj/project.xcworkspace/xcuserdata/liu.xcuserdatad/UserInterfaceState.xcuserstate: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liufengting/FTPickerView/bd114e151d11044503ad81461b307c841cebe88c/SwiftDemo/SwiftDemo.xcodeproj/project.xcworkspace/xcuserdata/liu.xcuserdatad/UserInterfaceState.xcuserstate -------------------------------------------------------------------------------- /SwiftDemo/SwiftDemo.xcodeproj/xcuserdata/liu.xcuserdatad/xcschemes/SwiftDemo.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 33 | 39 | 40 | 41 | 43 | 49 | 50 | 51 | 52 | 53 | 59 | 60 | 61 | 62 | 63 | 64 | 74 | 76 | 82 | 83 | 84 | 85 | 86 | 87 | 93 | 95 | 101 | 102 | 103 | 104 | 106 | 107 | 110 | 111 | 112 | -------------------------------------------------------------------------------- /SwiftDemo/SwiftDemo.xcodeproj/xcuserdata/liu.xcuserdatad/xcschemes/xcschememanagement.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SchemeUserState 6 | 7 | SwiftDemo.xcscheme 8 | 9 | orderHint 10 | 0 11 | 12 | 13 | SuppressBuildableAutocreation 14 | 15 | 5ACE9B8D1D857AC000BEEBF0 16 | 17 | primary 18 | 19 | 20 | 5ACE9BA11D857AC000BEEBF0 21 | 22 | primary 23 | 24 | 25 | 5ACE9BAC1D857AC000BEEBF0 26 | 27 | primary 28 | 29 | 30 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /SwiftDemo/SwiftDemo.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /SwiftDemo/SwiftDemo.xcworkspace/xcuserdata/liu.xcuserdatad/UserInterfaceState.xcuserstate: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liufengting/FTPickerView/bd114e151d11044503ad81461b307c841cebe88c/SwiftDemo/SwiftDemo.xcworkspace/xcuserdata/liu.xcuserdatad/UserInterfaceState.xcuserstate -------------------------------------------------------------------------------- /SwiftDemo/SwiftDemo/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.swift 3 | // SwiftDemo 4 | // 5 | // Created by liufengting on 16/9/11. 6 | // Copyright © 2016年 liufengting. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | @UIApplicationMain 12 | class AppDelegate: UIResponder, UIApplicationDelegate { 13 | 14 | var window: UIWindow? 15 | 16 | 17 | func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { 18 | // Override point for customization after application launch. 19 | return true 20 | } 21 | 22 | func applicationWillResignActive(application: UIApplication) { 23 | // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. 24 | // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game. 25 | } 26 | 27 | func applicationDidEnterBackground(application: UIApplication) { 28 | // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. 29 | // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. 30 | } 31 | 32 | func applicationWillEnterForeground(application: UIApplication) { 33 | // Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background. 34 | } 35 | 36 | func applicationDidBecomeActive(application: UIApplication) { 37 | // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. 38 | } 39 | 40 | func applicationWillTerminate(application: UIApplication) { 41 | // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. 42 | } 43 | 44 | 45 | } 46 | 47 | -------------------------------------------------------------------------------- /SwiftDemo/SwiftDemo/Assets.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 | } -------------------------------------------------------------------------------- /SwiftDemo/SwiftDemo/Base.lproj/LaunchScreen.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 | -------------------------------------------------------------------------------- /SwiftDemo/SwiftDemo/Base.lproj/Main.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | -------------------------------------------------------------------------------- /SwiftDemo/SwiftDemo/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 | UIInterfaceOrientationLandscapeRight 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /SwiftDemo/SwiftDemo/ViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.swift 3 | // SwiftDemo 4 | // 5 | // Created by liufengting on 16/9/11. 6 | // Copyright © 2016年 liufengting. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | import FTPickerView 11 | 12 | class ViewController: UIViewController { 13 | 14 | override func viewDidLoad() { 15 | super.viewDidLoad() 16 | } 17 | 18 | 19 | @IBAction func buttonTapped(sender: UIButton) { 20 | 21 | FTPickerView.showWithTitle("", nameArray: ["",""], doneBlock: { (selectedIndex) in 22 | 23 | print("Done! selectedIndex is \(selectedIndex)") 24 | 25 | }) { 26 | print("Canceled") 27 | } 28 | 29 | } 30 | 31 | 32 | 33 | } 34 | 35 | -------------------------------------------------------------------------------- /SwiftDemo/SwiftDemoTests/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 | -------------------------------------------------------------------------------- /SwiftDemo/SwiftDemoTests/SwiftDemoTests.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SwiftDemoTests.swift 3 | // SwiftDemoTests 4 | // 5 | // Created by liufengting on 16/9/11. 6 | // Copyright © 2016年 liufengting. All rights reserved. 7 | // 8 | 9 | import XCTest 10 | @testable import SwiftDemo 11 | 12 | class SwiftDemoTests: XCTestCase { 13 | 14 | override func setUp() { 15 | super.setUp() 16 | // Put setup code here. This method is called before the invocation of each test method in the class. 17 | } 18 | 19 | override func tearDown() { 20 | // Put teardown code here. This method is called after the invocation of each test method in the class. 21 | super.tearDown() 22 | } 23 | 24 | func testExample() { 25 | // This is an example of a functional test case. 26 | // Use XCTAssert and related functions to verify your tests produce the correct results. 27 | } 28 | 29 | func testPerformanceExample() { 30 | // This is an example of a performance test case. 31 | self.measureBlock { 32 | // Put the code you want to measure the time of here. 33 | } 34 | } 35 | 36 | } 37 | -------------------------------------------------------------------------------- /SwiftDemo/SwiftDemoUITests/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 | -------------------------------------------------------------------------------- /SwiftDemo/SwiftDemoUITests/SwiftDemoUITests.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SwiftDemoUITests.swift 3 | // SwiftDemoUITests 4 | // 5 | // Created by liufengting on 16/9/11. 6 | // Copyright © 2016年 liufengting. All rights reserved. 7 | // 8 | 9 | import XCTest 10 | 11 | class SwiftDemoUITests: XCTestCase { 12 | 13 | override func setUp() { 14 | super.setUp() 15 | 16 | // Put setup code here. This method is called before the invocation of each test method in the class. 17 | 18 | // In UI tests it is usually best to stop immediately when a failure occurs. 19 | continueAfterFailure = false 20 | // UI tests must launch the application that they test. Doing this in setup will make sure it happens for each test method. 21 | XCUIApplication().launch() 22 | 23 | // In UI tests it’s important to set the initial state - such as interface orientation - required for your tests before they run. The setUp method is a good place to do this. 24 | } 25 | 26 | override func tearDown() { 27 | // Put teardown code here. This method is called after the invocation of each test method in the class. 28 | super.tearDown() 29 | } 30 | 31 | func testExample() { 32 | // Use recording to get started writing UI tests. 33 | // Use XCTAssert and related functions to verify your tests produce the correct results. 34 | } 35 | 36 | } 37 | --------------------------------------------------------------------------------