├── .gitignore ├── .gitmodules ├── .travis.yml ├── CHANGELOG.md ├── Cartfile ├── LICENSE ├── README.md ├── RMPickerViewController-Demo-Tests ├── Info.plist └── RMPickerViewControllerTests.m ├── RMPickerViewController-Demo.xcodeproj ├── project.pbxproj ├── project.xcworkspace │ ├── contents.xcworkspacedata │ └── xcshareddata │ │ ├── RMPickerViewController-Demo.xccheckout │ │ └── RMPickerViewController-Demo.xcscmblueprint └── xcshareddata │ └── xcschemes │ ├── RMPickerViewController-Demo.xcscheme │ ├── RMPickerViewController-DemoExtension.xcscheme │ ├── RMPickerViewController-SwiftDemo.xcscheme │ └── RMPickerViewController.xcscheme ├── RMPickerViewController-Demo ├── Images.xcassets │ ├── AppIcon.appiconset │ │ └── Contents.json │ └── LaunchImage.launchimage │ │ └── Contents.json ├── Launch Screen.xib ├── Main.storyboard ├── RMAppDelegate.h ├── RMAppDelegate.m ├── RMPickerViewController-Demo-Info.plist ├── RMPickerViewController-Demo-Prefix.pch ├── RMViewController.h ├── RMViewController.m └── main.m ├── RMPickerViewController-DemoExtension ├── Info.plist └── MainInterface.storyboard ├── RMPickerViewController-SwiftDemo ├── AppDelegate.swift ├── Assets.xcassets │ └── AppIcon.appiconset │ │ └── Contents.json ├── Base.lproj │ ├── LaunchScreen.storyboard │ └── Main.storyboard ├── Info.plist └── ViewController.swift ├── RMPickerViewController.podspec └── RMPickerViewController ├── Info.plist ├── RMPickerViewController.h └── RMPickerViewController.m /.gitignore: -------------------------------------------------------------------------------- 1 | xcuserdata 2 | 3 | .DS_Store 4 | Pods 5 | -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "Extern/RMActionController"] 2 | path = Extern/RMActionController 3 | url = https://github.com/CooperRS/RMActionController.git 4 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: objective-c 2 | 3 | os: osx 4 | osx_image: xcode10.1 5 | 6 | env: 7 | matrix: 8 | - NAME='iPhone 6' OS=8.4 9 | - NAME='iPhone 6' OS=9.3 10 | - NAME='iPhone 6' OS=10.3.1 11 | - NAME='iPhone 6' OS=11.4 12 | - NAME='iPhone 6' OS=12.1 13 | 14 | script: 15 | - xcodebuild test -project RMPickerViewController-Demo.xcodeproj -scheme RMPickerViewController-Demo -sdk iphonesimulator -destination "platform=iOS Simulator,name=$NAME,OS=$OS" 16 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Change Log 2 | 3 | All notable changes to this project will be documented in this file. 4 | RMPickerViewController adheres to [Semantic Versioning](http://semver.org/). 5 | 6 | --- 7 | 8 | ## [2.3.1](https://github.com/CooperRS/RMPickerViewController/releases/tag/2.3.1) 9 | 10 | * Updated to RMActionController 1.3.1 11 | * Add support for iOS 11 GM 12 | * Add support for iPhone X 13 | * Xcode 9 is now required for building 14 | 15 | ## [2.3.0](https://github.com/CooperRS/RMPickerViewController/releases/tag/2.3.0) 16 | 17 | * Updated to RMActionController 1.3.0 18 | 19 | ## [2.2.1](https://github.com/CooperRS/RMPickerViewController/releases/tag/2.2.1) 20 | 21 | * Fix RMPickerViewController.podspec 22 | 23 | ## [2.2.0](https://github.com/CooperRS/RMPickerViewController/releases/tag/2.2.0) 24 | 25 | * Updated to RMActionController 1.2.0 26 | 27 | ## [2.1.0](https://github.com/CooperRS/RMPickerViewController/releases/tag/2.1.0) 28 | 29 | * Swift 3 compatible (required an API change, see Migration for more information on that) 30 | * Updated to RMActionController 1.1.0 31 | 32 | ## [2.0.3](https://github.com/CooperRS/RMPickerViewController/releases/tag/2.0.3) 33 | 34 | * Project cleanup 35 | * Swift demo project 36 | 37 | ## [2.0.2](https://github.com/CooperRS/RMPickerViewController/releases/tag/2.0.2) 38 | 39 | * Generics 40 | * Updated to RMActionController 1.0.5 41 | 42 | ## [2.0.1](https://github.com/CooperRS/RMPickerViewController/releases/tag/1.0.1) 43 | 44 | * Framework friendly import statements 45 | * Updated to RMActionController 1.0.1 46 | 47 | ## [2.0.0](https://github.com/CooperRS/RMPickerViewController/releases/tag/2.0.0) 48 | 49 | * Initial Release of Version 2 50 | -------------------------------------------------------------------------------- /Cartfile: -------------------------------------------------------------------------------- 1 | github "CooperRS/RMActionController" ~> 1.3.1 2 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2013-2017 Roland Moers 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy 4 | of this software and associated documentation files (the "Software"), to deal 5 | in the Software without restriction, including without limitation the rights 6 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | copies of the Software, and to permit persons to whom the Software is 8 | furnished to do so, subject to the following conditions: 9 | 10 | The above copyright notice and this permission notice shall be included in 11 | all copies or substantial portions of the Software. 12 | 13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 19 | THE SOFTWARE. 20 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | RMPickerViewController [![Build Status](https://travis-ci.org/CooperRS/RMPickerViewController.svg?branch=master)](https://travis-ci.org/CooperRS/RMPickerViewController/) [![Pod Version](https://img.shields.io/cocoapods/v/RMPickerViewController.svg)](https://cocoapods.org/pods/RMPickerViewController) [![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage) 2 | ============================= 3 | 4 | This framework allows you to pick something with a picker presented as an action sheet. In addition, it allows you to add actions arround the presented picker which behave like a button and can be tapped by the user. The result looks very much like an `UIActionSheet` or `UIAlertController` with a `UIPickerView` and some `UIActions` attached. 5 | 6 | Besides being a fully-usable project, `RMPickerViewController` also is an example for an use case of [RMActionController](https://github.com/CooperRS/RMActionController). You can use it to learn how to present a picker other than `UIPickerView`. 7 | 8 | ## Screenshots 9 | 10 | ### Portrait 11 | 12 | | White | Black | Sheet White | Sheet Black | 13 | |:-----:|:-----:|:---:|:---:| 14 | | ![White Version](https://raw.githubusercontent.com/CooperRS/RMPickerViewController/gh-pages/images/Blur-Portrait.png) | ![Black version](https://raw.githubusercontent.com/CooperRS/RMPickerViewController/gh-pages/images/Blur-Portrait-Black.png) | ![Sheet](https://raw.githubusercontent.com/CooperRS/RMPickerViewController/gh-pages/images/Blur-Portrait-Sheet.png) | ![Black Sheet](https://raw.githubusercontent.com/CooperRS/RMPickerViewController/gh-pages/images/Blur-Portrait-Sheet-Black.png) | 15 | 16 | ## Demo Project 17 | If you want to run the demo project do not forget to initialize submodules. 18 | 19 | ## Installation (CocoaPods) 20 | ```ruby 21 | platform :ios, '8.0' 22 | pod "RMPickerViewController", "~> 2.3.1" 23 | ``` 24 | 25 | ## Usage 26 | 27 | For a detailed description on how to use `RMPickerViewController` take a look at the [Wiki Pages](https://github.com/CooperRS/RMPickerViewController/wiki). The following four steps are a very short intro: 28 | 29 | * Import `RMPickerViewController`: 30 | 31 | ```objc 32 | #import 33 | ``` 34 | 35 | * Create select and cancel actions: 36 | 37 | ```objc 38 | RMAction *selectAction = [RMAction actionWithTitle:@"Select" style:RMActionStyleDone andHandler:^(RMActionController *controller) { 39 | NSMutableArray *selectedRows = [NSMutableArray array]; 40 | 41 | for(NSInteger i=0 ; i<[controller.contentView numberOfComponents] ; i++) { 42 | [selectedRows addObject:@([controller.contentView selectedRowInComponent:i])]; 43 | } 44 | 45 | NSLog(@"Successfully selected rows: %@", selectedRows); 46 | }]; 47 | 48 | RMAction *cancelAction = [RMAction actionWithTitle:@"Cancel" style:RMActionStyleCancel andHandler:^(RMActionController *controller) { 49 | NSLog(@"Row selection was canceled"); 50 | }]; 51 | ``` 52 | 53 | * Create and instance of `RMPickerViewController` and present it: 54 | 55 | ```objc 56 | RMPickerViewController *pickerController = [RMPickerViewController actionControllerWithStyle:style title:@"Test" message:@"This is a test message.\nPlease choose a row and press 'Select' or 'Cancel'." selectAction:selectAction andCancelAction:cancelAction]; 57 | pickerController.picker.dataSource = self; 58 | pickerController.picker.delegate = self; 59 | 60 | [self presentViewController:pickerController animated:YES completion:nil]; 61 | ``` 62 | 63 | * The following code block shows you a complete method: 64 | 65 | ```objc 66 | - (IBAction)openPickerController:(id)sender { 67 | RMAction *selectAction = [RMAction actionWithTitle:@"Select" style:RMActionStyleDone andHandler:^(RMActionController *controller) { 68 | NSMutableArray *selectedRows = [NSMutableArray array]; 69 | 70 | for(NSInteger i=0 ; i<[controller.contentView numberOfComponents] ; i++) { 71 | [selectedRows addObject:@([controller.contentView selectedRowInComponent:i])]; 72 | } 73 | 74 | NSLog(@"Successfully selected rows: %@", selectedRows); 75 | }]; 76 | 77 | RMAction *cancelAction = [RMAction actionWithTitle:@"Cancel" style:RMActionStyleCancel andHandler:^(RMActionController *controller) { 78 | NSLog(@"Row selection was canceled"); 79 | }]; 80 | 81 | RMPickerViewController *pickerController = [RMPickerViewController actionControllerWithStyle:style title:@"Test" message:@"This is a test message.\nPlease choose a row and press 'Select' or 'Cancel'." selectAction:selectAction andCancelAction:cancelAction]; 82 | pickerController.picker.dataSource = self; 83 | pickerController.picker.delegate = self; 84 | 85 | [self presentViewController:pickerController animated:YES completion:nil]; 86 | } 87 | ``` 88 | 89 | ## Migration 90 | 91 | See [Migration](https://github.com/CooperRS/RMPickerViewController/wiki/Migration) on how to migrate to the latest version of `RMPickerViewController`. 92 | 93 | ## Documentation 94 | There is an additional documentation available provided by the CocoaPods team. Take a look at [cocoadocs.org](http://cocoadocs.org/docsets/RMPickerViewController/). 95 | 96 | ## Requirements 97 | 98 | | Compile Time | Runtime | 99 | | :------------ | :------------ | 100 | | Xcode 7 | iOS 8 | 101 | | iOS 9 SDK | | 102 | | ARC | | 103 | 104 | Note: ARC can be turned on and off on a per file basis. 105 | 106 | Version 1.4.0 and above of `RMPickerViewController` use custom transitions for presenting the picker view controller. Custom transitions are a new feature introduced by Apple in iOS 7. Unfortunately, custom transitions are totally broken in landscape mode on iOS 7. This issue has been fixed with iOS 8. So if your application supports landscape mode (even on iPad), version 1.4.0 and above of this control require iOS 8. Otherwise, iOS 7 should be fine. In particular, iOS 7 is fine for version 1.3.3 and below. 107 | 108 | ## Further Info 109 | If you want to show an `UIDatePicker` instead of an `UIPickerView`, you may take a look at my other control called [RMDateSelectionViewController](https://github.com/CooperRS/RMDateSelectionViewController). 110 | 111 | If you want to show any other control you may want to take a look at [RMActionController](https://github.com/CooperRS/RMActionController). 112 | 113 | ## Credits 114 | Code contributions: 115 | * Denis Andrasec 116 | * Bugfixes 117 | * steveoleary 118 | * Bugfixes 119 | 120 | I want to thank everyone who has contributed code and/or time to this project! 121 | 122 | ## License (MIT License) 123 | 124 | ``` 125 | Copyright (c) 2013-2017 Roland Moers 126 | 127 | Permission is hereby granted, free of charge, to any person obtaining a copy 128 | of this software and associated documentation files (the "Software"), to deal 129 | in the Software without restriction, including without limitation the rights 130 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 131 | copies of the Software, and to permit persons to whom the Software is 132 | furnished to do so, subject to the following conditions: 133 | 134 | The above copyright notice and this permission notice shall be included in 135 | all copies or substantial portions of the Software. 136 | 137 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 138 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 139 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 140 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 141 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 142 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 143 | THE SOFTWARE. 144 | ``` 145 | -------------------------------------------------------------------------------- /RMPickerViewController-Demo-Tests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | 24 | 25 | -------------------------------------------------------------------------------- /RMPickerViewController-Demo-Tests/RMPickerViewControllerTests.m: -------------------------------------------------------------------------------- 1 | // 2 | // RMPickerViewController_Demo_Tests.m 3 | // RMPickerViewController-Demo-Tests 4 | // 5 | // Created by Roland Moers on 09.11.15. 6 | // Copyright © 2015 Roland Moers. All rights reserved. 7 | // 8 | 9 | #import 10 | #import 11 | 12 | #import "RMPickerViewController.h" 13 | 14 | @interface RMPickerViewControllerTests : XCTestCase 15 | 16 | @end 17 | 18 | @implementation RMPickerViewControllerTests 19 | 20 | #pragma mark - Helper 21 | - (RMPickerViewController *)createDateSelectionViewControllerWithStyle:(RMActionControllerStyle)aStyle { 22 | RMAction *selectAction = [RMAction actionWithTitle:@"Select" style:RMActionStyleDone andHandler:nil]; 23 | RMAction *cancelAction = [RMAction actionWithTitle:@"Cancel" style:RMActionStyleCancel andHandler:nil]; 24 | 25 | RMPickerViewController *dateSelectionController = [RMPickerViewController actionControllerWithStyle:aStyle]; 26 | dateSelectionController.title = @"Test"; 27 | dateSelectionController.message = @"This is a test message.\nPlease choose a date and press 'Select' or 'Cancel'."; 28 | 29 | [dateSelectionController addAction:selectAction]; 30 | [dateSelectionController addAction:cancelAction]; 31 | 32 | RMAction *nowAction = [RMAction actionWithTitle:@"Now" style:RMActionStyleAdditional andHandler:nil]; 33 | nowAction.dismissesActionController = NO; 34 | 35 | [dateSelectionController addAction:nowAction]; 36 | 37 | return dateSelectionController; 38 | } 39 | 40 | - (void)presentAndDismissController:(RMActionController *)aController { 41 | XCTestExpectation *expectation = [self expectationWithDescription:@"PresentationCompleted"]; 42 | 43 | BOOL catchedException = NO; 44 | @try { 45 | [[UIApplication sharedApplication].keyWindow.rootViewController presentViewController:aController animated:YES completion:^{ 46 | [expectation fulfill]; 47 | }]; 48 | } 49 | @catch (NSException *exception) { 50 | catchedException = YES; 51 | } 52 | @finally { 53 | XCTAssertFalse(catchedException); 54 | } 55 | 56 | [self waitForExpectationsWithTimeout:2 handler:nil]; 57 | 58 | expectation = [self expectationWithDescription:@"DismissalCompleted"]; 59 | 60 | [[UIApplication sharedApplication].keyWindow.rootViewController dismissViewControllerAnimated:YES completion:^{ 61 | [expectation fulfill]; 62 | }]; 63 | 64 | [self waitForExpectationsWithTimeout:2 handler:nil]; 65 | } 66 | 67 | #pragma mark - Tests 68 | - (void)testPresentingDateSelectionViewControllerWhite { 69 | RMPickerViewController *controller = [self createDateSelectionViewControllerWithStyle:RMActionControllerStyleWhite]; 70 | 71 | XCTAssertNotNil(controller.contentView); 72 | XCTAssertEqual(controller.contentView, controller.picker); 73 | XCTAssertTrue([controller.contentView isKindOfClass:[UIPickerView class]]); 74 | XCTAssertEqualObjects(controller.title, @"Test"); 75 | XCTAssertEqualObjects(controller.message, @"This is a test message.\nPlease choose a date and press 'Select' or 'Cancel'."); 76 | 77 | [self presentAndDismissController:controller]; 78 | } 79 | 80 | - (void)testPresentingDateSelectionViewControllerBlack { 81 | RMPickerViewController *controller = [self createDateSelectionViewControllerWithStyle:RMActionControllerStyleBlack]; 82 | 83 | XCTAssertNotNil(controller.contentView); 84 | XCTAssertEqual(controller.contentView, controller.picker); 85 | XCTAssertTrue([controller.contentView isKindOfClass:[UIPickerView class]]); 86 | XCTAssertEqualObjects(controller.title, @"Test"); 87 | XCTAssertEqualObjects(controller.message, @"This is a test message.\nPlease choose a date and press 'Select' or 'Cancel'."); 88 | 89 | [self presentAndDismissController:controller]; 90 | } 91 | 92 | @end 93 | -------------------------------------------------------------------------------- /RMPickerViewController-Demo.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | CA0D3ABC1DE1E5DE00DD6DCB /* RMActionController.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CA0D3AB91DE1E5A200DD6DCB /* RMActionController.framework */; }; 11 | CA0D3ABD1DE1E5F100DD6DCB /* RMActionController.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = CA0D3AB91DE1E5A200DD6DCB /* RMActionController.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; 12 | CA0D3ABF1DE1E60A00DD6DCB /* RMPickerViewController.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = CA2799651DC6B5910077712D /* RMPickerViewController.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; 13 | CA0D3AC01DE1E60F00DD6DCB /* RMActionController.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = CA0D3AB91DE1E5A200DD6DCB /* RMActionController.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; 14 | CA1E624B1A24D6840025A6A6 /* Launch Screen.xib in Resources */ = {isa = PBXBuildFile; fileRef = CA1E624A1A24D6840025A6A6 /* Launch Screen.xib */; }; 15 | CA27996C1DC6B5910077712D /* RMPickerViewController.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CA2799651DC6B5910077712D /* RMPickerViewController.framework */; }; 16 | CA27996D1DC6B5910077712D /* RMPickerViewController.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = CA2799651DC6B5910077712D /* RMPickerViewController.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; 17 | CA2799741DC6B5DC0077712D /* RMPickerViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = CA2799721DC6B5DC0077712D /* RMPickerViewController.h */; settings = {ATTRIBUTES = (Public, ); }; }; 18 | CA2799751DC6B5DC0077712D /* RMPickerViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = CA2799731DC6B5DC0077712D /* RMPickerViewController.m */; }; 19 | CA2799951DC6B7500077712D /* RMPickerViewController.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CA2799651DC6B5910077712D /* RMPickerViewController.framework */; }; 20 | CA27999F1DC6B7F30077712D /* RMPickerViewController.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CA2799651DC6B5910077712D /* RMPickerViewController.framework */; }; 21 | CA33E0811BF0D5EF003369F0 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = CA33E0801BF0D5EF003369F0 /* AppDelegate.swift */; }; 22 | CA33E0881BF0D5EF003369F0 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = CA33E0861BF0D5EF003369F0 /* Main.storyboard */; }; 23 | CA33E08A1BF0D5EF003369F0 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = CA33E0891BF0D5EF003369F0 /* Assets.xcassets */; }; 24 | CA33E08D1BF0D5EF003369F0 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = CA33E08B1BF0D5EF003369F0 /* LaunchScreen.storyboard */; }; 25 | CA33E0931BF0D627003369F0 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = CA33E0921BF0D627003369F0 /* ViewController.swift */; }; 26 | CAB580981BF0F2FF00563752 /* RMPickerViewControllerTests.m in Sources */ = {isa = PBXBuildFile; fileRef = CAB580971BF0F2FF00563752 /* RMPickerViewControllerTests.m */; }; 27 | CABBCD2A189520D50006213F /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CABBCD29189520D50006213F /* Foundation.framework */; }; 28 | CABBCD2C189520D50006213F /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CABBCD2B189520D50006213F /* CoreGraphics.framework */; }; 29 | CABBCD2E189520D50006213F /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CABBCD2D189520D50006213F /* UIKit.framework */; }; 30 | CABBCD36189520D50006213F /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = CABBCD35189520D50006213F /* main.m */; }; 31 | CABBCD3A189520D50006213F /* RMAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = CABBCD39189520D50006213F /* RMAppDelegate.m */; }; 32 | CABBCD45189520D50006213F /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = CABBCD44189520D50006213F /* Images.xcassets */; }; 33 | CABBCD82189521D10006213F /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = CABBCD7B189521D10006213F /* Main.storyboard */; }; 34 | CABBCD85189521D10006213F /* RMViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = CABBCD81189521D10006213F /* RMViewController.m */; }; 35 | CACEDE441AD15C7500A49ECF /* MainInterface.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = CACEDE431AD15C7500A49ECF /* MainInterface.storyboard */; }; 36 | CACEDE471AD15C7500A49ECF /* RMPickerViewController-DemoExtension.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = CACEDE3C1AD15C7500A49ECF /* RMPickerViewController-DemoExtension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; 37 | CACEDE4C1AD15C8200A49ECF /* RMViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = CABBCD81189521D10006213F /* RMViewController.m */; }; 38 | /* End PBXBuildFile section */ 39 | 40 | /* Begin PBXContainerItemProxy section */ 41 | CA0D3AAE1DE1E5A200DD6DCB /* PBXContainerItemProxy */ = { 42 | isa = PBXContainerItemProxy; 43 | containerPortal = CA0D3AA51DE1E5A200DD6DCB /* RMActionController-Demo.xcodeproj */; 44 | proxyType = 2; 45 | remoteGlobalIDString = CAD311A11B01507300D905F7; 46 | remoteInfo = "RMActionController-Demo"; 47 | }; 48 | CA0D3AB01DE1E5A200DD6DCB /* PBXContainerItemProxy */ = { 49 | isa = PBXContainerItemProxy; 50 | containerPortal = CA0D3AA51DE1E5A200DD6DCB /* RMActionController-Demo.xcodeproj */; 51 | proxyType = 2; 52 | remoteGlobalIDString = CAE78B041B850F5600CBB165; 53 | remoteInfo = "RMActionController-SwiftDemo"; 54 | }; 55 | CA0D3AB21DE1E5A200DD6DCB /* PBXContainerItemProxy */ = { 56 | isa = PBXContainerItemProxy; 57 | containerPortal = CA0D3AA51DE1E5A200DD6DCB /* RMActionController-Demo.xcodeproj */; 58 | proxyType = 2; 59 | remoteGlobalIDString = CAD311DB1B01517800D905F7; 60 | remoteInfo = "RMActionController-DemoExtension"; 61 | }; 62 | CA0D3AB41DE1E5A200DD6DCB /* PBXContainerItemProxy */ = { 63 | isa = PBXContainerItemProxy; 64 | containerPortal = CA0D3AA51DE1E5A200DD6DCB /* RMActionController-Demo.xcodeproj */; 65 | proxyType = 2; 66 | remoteGlobalIDString = CA3FDC9B1B35E1A700590165; 67 | remoteInfo = "RMActionController-Demo-Tests"; 68 | }; 69 | CA0D3AB61DE1E5A200DD6DCB /* PBXContainerItemProxy */ = { 70 | isa = PBXContainerItemProxy; 71 | containerPortal = CA0D3AA51DE1E5A200DD6DCB /* RMActionController-Demo.xcodeproj */; 72 | proxyType = 2; 73 | remoteGlobalIDString = CA55C7911B35E98E009CF003; 74 | remoteInfo = "RMActionController-Demo-UITests"; 75 | }; 76 | CA0D3AB81DE1E5A200DD6DCB /* PBXContainerItemProxy */ = { 77 | isa = PBXContainerItemProxy; 78 | containerPortal = CA0D3AA51DE1E5A200DD6DCB /* RMActionController-Demo.xcodeproj */; 79 | proxyType = 2; 80 | remoteGlobalIDString = CA5EFC281D8EAC5A0020C8A8; 81 | remoteInfo = RMActionController; 82 | }; 83 | CA0D3ABA1DE1E5D200DD6DCB /* PBXContainerItemProxy */ = { 84 | isa = PBXContainerItemProxy; 85 | containerPortal = CA0D3AA51DE1E5A200DD6DCB /* RMActionController-Demo.xcodeproj */; 86 | proxyType = 1; 87 | remoteGlobalIDString = CA5EFC271D8EAC5A0020C8A8; 88 | remoteInfo = RMActionController; 89 | }; 90 | CA27996A1DC6B5910077712D /* PBXContainerItemProxy */ = { 91 | isa = PBXContainerItemProxy; 92 | containerPortal = CABBCD1E189520D50006213F /* Project object */; 93 | proxyType = 1; 94 | remoteGlobalIDString = CA2799641DC6B5910077712D; 95 | remoteInfo = RMPickerViewController; 96 | }; 97 | CA2799921DC6B74B0077712D /* PBXContainerItemProxy */ = { 98 | isa = PBXContainerItemProxy; 99 | containerPortal = CABBCD1E189520D50006213F /* Project object */; 100 | proxyType = 1; 101 | remoteGlobalIDString = CA2799641DC6B5910077712D; 102 | remoteInfo = RMPickerViewController; 103 | }; 104 | CA27999C1DC6B7EE0077712D /* PBXContainerItemProxy */ = { 105 | isa = PBXContainerItemProxy; 106 | containerPortal = CABBCD1E189520D50006213F /* Project object */; 107 | proxyType = 1; 108 | remoteGlobalIDString = CA2799641DC6B5910077712D; 109 | remoteInfo = RMPickerViewController; 110 | }; 111 | CAB5809A1BF0F2FF00563752 /* PBXContainerItemProxy */ = { 112 | isa = PBXContainerItemProxy; 113 | containerPortal = CABBCD1E189520D50006213F /* Project object */; 114 | proxyType = 1; 115 | remoteGlobalIDString = CABBCD25189520D50006213F; 116 | remoteInfo = "RMPickerViewController-Demo"; 117 | }; 118 | CACEDE451AD15C7500A49ECF /* PBXContainerItemProxy */ = { 119 | isa = PBXContainerItemProxy; 120 | containerPortal = CABBCD1E189520D50006213F /* Project object */; 121 | proxyType = 1; 122 | remoteGlobalIDString = CACEDE3B1AD15C7500A49ECF; 123 | remoteInfo = "RMPickerViewController-DemoExtension"; 124 | }; 125 | /* End PBXContainerItemProxy section */ 126 | 127 | /* Begin PBXCopyFilesBuildPhase section */ 128 | CA0D3ABE1DE1E5F900DD6DCB /* Embed Frameworks */ = { 129 | isa = PBXCopyFilesBuildPhase; 130 | buildActionMask = 2147483647; 131 | dstPath = ""; 132 | dstSubfolderSpec = 10; 133 | files = ( 134 | CA0D3AC01DE1E60F00DD6DCB /* RMActionController.framework in Embed Frameworks */, 135 | CA0D3ABF1DE1E60A00DD6DCB /* RMPickerViewController.framework in Embed Frameworks */, 136 | ); 137 | name = "Embed Frameworks"; 138 | runOnlyForDeploymentPostprocessing = 0; 139 | }; 140 | CA2799711DC6B5910077712D /* Embed Frameworks */ = { 141 | isa = PBXCopyFilesBuildPhase; 142 | buildActionMask = 2147483647; 143 | dstPath = ""; 144 | dstSubfolderSpec = 10; 145 | files = ( 146 | CA0D3ABD1DE1E5F100DD6DCB /* RMActionController.framework in Embed Frameworks */, 147 | CA27996D1DC6B5910077712D /* RMPickerViewController.framework in Embed Frameworks */, 148 | ); 149 | name = "Embed Frameworks"; 150 | runOnlyForDeploymentPostprocessing = 0; 151 | }; 152 | CACEDE4B1AD15C7500A49ECF /* Embed App Extensions */ = { 153 | isa = PBXCopyFilesBuildPhase; 154 | buildActionMask = 2147483647; 155 | dstPath = ""; 156 | dstSubfolderSpec = 13; 157 | files = ( 158 | CACEDE471AD15C7500A49ECF /* RMPickerViewController-DemoExtension.appex in Embed App Extensions */, 159 | ); 160 | name = "Embed App Extensions"; 161 | runOnlyForDeploymentPostprocessing = 0; 162 | }; 163 | /* End PBXCopyFilesBuildPhase section */ 164 | 165 | /* Begin PBXFileReference section */ 166 | CA0D3AA51DE1E5A200DD6DCB /* RMActionController-Demo.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; path = "RMActionController-Demo.xcodeproj"; sourceTree = ""; }; 167 | CA1E624A1A24D6840025A6A6 /* Launch Screen.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = "Launch Screen.xib"; sourceTree = ""; }; 168 | CA2799651DC6B5910077712D /* RMPickerViewController.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = RMPickerViewController.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 169 | CA2799681DC6B5910077712D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 170 | CA2799721DC6B5DC0077712D /* RMPickerViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RMPickerViewController.h; sourceTree = ""; }; 171 | CA2799731DC6B5DC0077712D /* RMPickerViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RMPickerViewController.m; sourceTree = ""; }; 172 | CA33E07E1BF0D5EF003369F0 /* RMPickerViewController-SwiftDemo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "RMPickerViewController-SwiftDemo.app"; sourceTree = BUILT_PRODUCTS_DIR; }; 173 | CA33E0801BF0D5EF003369F0 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 174 | CA33E0871BF0D5EF003369F0 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 175 | CA33E0891BF0D5EF003369F0 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 176 | CA33E08C1BF0D5EF003369F0 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 177 | CA33E08E1BF0D5EF003369F0 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 178 | CA33E0921BF0D627003369F0 /* ViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; 179 | CAB580951BF0F2FF00563752 /* RMPickerViewController-Demo-Tests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "RMPickerViewController-Demo-Tests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; 180 | CAB580971BF0F2FF00563752 /* RMPickerViewControllerTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = RMPickerViewControllerTests.m; sourceTree = ""; }; 181 | CAB580991BF0F2FF00563752 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 182 | CABBCD26189520D50006213F /* RMPickerViewController-Demo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "RMPickerViewController-Demo.app"; sourceTree = BUILT_PRODUCTS_DIR; }; 183 | CABBCD29189520D50006213F /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; 184 | CABBCD2B189520D50006213F /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; }; 185 | CABBCD2D189520D50006213F /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; 186 | CABBCD35189520D50006213F /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; 187 | CABBCD38189520D50006213F /* RMAppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RMAppDelegate.h; sourceTree = ""; }; 188 | CABBCD39189520D50006213F /* RMAppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = RMAppDelegate.m; sourceTree = ""; }; 189 | CABBCD44189520D50006213F /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = ""; }; 190 | CABBCD7B189521D10006213F /* Main.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = Main.storyboard; sourceTree = ""; }; 191 | CABBCD7C189521D10006213F /* RMPickerViewController-Demo-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "RMPickerViewController-Demo-Info.plist"; sourceTree = ""; }; 192 | CABBCD7D189521D10006213F /* RMPickerViewController-Demo-Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "RMPickerViewController-Demo-Prefix.pch"; sourceTree = ""; }; 193 | CABBCD80189521D10006213F /* RMViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RMViewController.h; sourceTree = ""; }; 194 | CABBCD81189521D10006213F /* RMViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RMViewController.m; sourceTree = ""; }; 195 | CACEDE3C1AD15C7500A49ECF /* RMPickerViewController-DemoExtension.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = "RMPickerViewController-DemoExtension.appex"; sourceTree = BUILT_PRODUCTS_DIR; }; 196 | CACEDE3F1AD15C7500A49ECF /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 197 | CACEDE431AD15C7500A49ECF /* MainInterface.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = MainInterface.storyboard; sourceTree = ""; }; 198 | /* End PBXFileReference section */ 199 | 200 | /* Begin PBXFrameworksBuildPhase section */ 201 | CA2799611DC6B5910077712D /* Frameworks */ = { 202 | isa = PBXFrameworksBuildPhase; 203 | buildActionMask = 2147483647; 204 | files = ( 205 | CA0D3ABC1DE1E5DE00DD6DCB /* RMActionController.framework in Frameworks */, 206 | ); 207 | runOnlyForDeploymentPostprocessing = 0; 208 | }; 209 | CA33E07B1BF0D5EF003369F0 /* Frameworks */ = { 210 | isa = PBXFrameworksBuildPhase; 211 | buildActionMask = 2147483647; 212 | files = ( 213 | CA2799951DC6B7500077712D /* RMPickerViewController.framework in Frameworks */, 214 | ); 215 | runOnlyForDeploymentPostprocessing = 0; 216 | }; 217 | CAB580921BF0F2FF00563752 /* Frameworks */ = { 218 | isa = PBXFrameworksBuildPhase; 219 | buildActionMask = 2147483647; 220 | files = ( 221 | ); 222 | runOnlyForDeploymentPostprocessing = 0; 223 | }; 224 | CABBCD23189520D50006213F /* Frameworks */ = { 225 | isa = PBXFrameworksBuildPhase; 226 | buildActionMask = 2147483647; 227 | files = ( 228 | CA27996C1DC6B5910077712D /* RMPickerViewController.framework in Frameworks */, 229 | CABBCD2C189520D50006213F /* CoreGraphics.framework in Frameworks */, 230 | CABBCD2E189520D50006213F /* UIKit.framework in Frameworks */, 231 | CABBCD2A189520D50006213F /* Foundation.framework in Frameworks */, 232 | ); 233 | runOnlyForDeploymentPostprocessing = 0; 234 | }; 235 | CACEDE391AD15C7500A49ECF /* Frameworks */ = { 236 | isa = PBXFrameworksBuildPhase; 237 | buildActionMask = 2147483647; 238 | files = ( 239 | CA27999F1DC6B7F30077712D /* RMPickerViewController.framework in Frameworks */, 240 | ); 241 | runOnlyForDeploymentPostprocessing = 0; 242 | }; 243 | /* End PBXFrameworksBuildPhase section */ 244 | 245 | /* Begin PBXGroup section */ 246 | CA0D3AA61DE1E5A200DD6DCB /* Products */ = { 247 | isa = PBXGroup; 248 | children = ( 249 | CA0D3AAF1DE1E5A200DD6DCB /* RMActionController-Demo.app */, 250 | CA0D3AB11DE1E5A200DD6DCB /* RMActionController-SwiftDemo.app */, 251 | CA0D3AB31DE1E5A200DD6DCB /* RMActionController-DemoExtension.appex */, 252 | CA0D3AB51DE1E5A200DD6DCB /* RMActionController-Demo-Tests.xctest */, 253 | CA0D3AB71DE1E5A200DD6DCB /* RMActionController-Demo-UITests.xctest */, 254 | CA0D3AB91DE1E5A200DD6DCB /* RMActionController.framework */, 255 | ); 256 | name = Products; 257 | sourceTree = ""; 258 | }; 259 | CA2799661DC6B5910077712D /* RMPickerViewController */ = { 260 | isa = PBXGroup; 261 | children = ( 262 | CA2799721DC6B5DC0077712D /* RMPickerViewController.h */, 263 | CA2799731DC6B5DC0077712D /* RMPickerViewController.m */, 264 | CA2799681DC6B5910077712D /* Info.plist */, 265 | ); 266 | path = RMPickerViewController; 267 | sourceTree = ""; 268 | }; 269 | CA2799771DC6B6770077712D /* Extern */ = { 270 | isa = PBXGroup; 271 | children = ( 272 | CA2799781DC6B68C0077712D /* RMActionController */, 273 | ); 274 | path = Extern; 275 | sourceTree = ""; 276 | }; 277 | CA2799781DC6B68C0077712D /* RMActionController */ = { 278 | isa = PBXGroup; 279 | children = ( 280 | CA0D3AA51DE1E5A200DD6DCB /* RMActionController-Demo.xcodeproj */, 281 | ); 282 | path = RMActionController; 283 | sourceTree = ""; 284 | }; 285 | CA33E07F1BF0D5EF003369F0 /* RMPickerViewController-SwiftDemo */ = { 286 | isa = PBXGroup; 287 | children = ( 288 | CA33E08B1BF0D5EF003369F0 /* LaunchScreen.storyboard */, 289 | CA33E0861BF0D5EF003369F0 /* Main.storyboard */, 290 | CA33E0801BF0D5EF003369F0 /* AppDelegate.swift */, 291 | CA33E0921BF0D627003369F0 /* ViewController.swift */, 292 | CA33E0891BF0D5EF003369F0 /* Assets.xcassets */, 293 | CA33E08E1BF0D5EF003369F0 /* Info.plist */, 294 | ); 295 | path = "RMPickerViewController-SwiftDemo"; 296 | sourceTree = ""; 297 | }; 298 | CAB580961BF0F2FF00563752 /* RMPickerViewController-Demo-Tests */ = { 299 | isa = PBXGroup; 300 | children = ( 301 | CAB580971BF0F2FF00563752 /* RMPickerViewControllerTests.m */, 302 | CAB5809F1BF0F30E00563752 /* Supporting Files */, 303 | ); 304 | path = "RMPickerViewController-Demo-Tests"; 305 | sourceTree = ""; 306 | }; 307 | CAB5809F1BF0F30E00563752 /* Supporting Files */ = { 308 | isa = PBXGroup; 309 | children = ( 310 | CAB580991BF0F2FF00563752 /* Info.plist */, 311 | ); 312 | name = "Supporting Files"; 313 | sourceTree = ""; 314 | }; 315 | CABBCD1D189520D50006213F = { 316 | isa = PBXGroup; 317 | children = ( 318 | CA2799661DC6B5910077712D /* RMPickerViewController */, 319 | CABBCD2F189520D50006213F /* RMPickerViewController-Demo */, 320 | CACEDE3D1AD15C7500A49ECF /* RMPickerViewController-DemoExtension */, 321 | CA33E07F1BF0D5EF003369F0 /* RMPickerViewController-SwiftDemo */, 322 | CAB580961BF0F2FF00563752 /* RMPickerViewController-Demo-Tests */, 323 | CA2799771DC6B6770077712D /* Extern */, 324 | CABBCD28189520D50006213F /* Frameworks */, 325 | CABBCD27189520D50006213F /* Products */, 326 | ); 327 | sourceTree = ""; 328 | }; 329 | CABBCD27189520D50006213F /* Products */ = { 330 | isa = PBXGroup; 331 | children = ( 332 | CABBCD26189520D50006213F /* RMPickerViewController-Demo.app */, 333 | CACEDE3C1AD15C7500A49ECF /* RMPickerViewController-DemoExtension.appex */, 334 | CA33E07E1BF0D5EF003369F0 /* RMPickerViewController-SwiftDemo.app */, 335 | CAB580951BF0F2FF00563752 /* RMPickerViewController-Demo-Tests.xctest */, 336 | CA2799651DC6B5910077712D /* RMPickerViewController.framework */, 337 | ); 338 | name = Products; 339 | sourceTree = ""; 340 | }; 341 | CABBCD28189520D50006213F /* Frameworks */ = { 342 | isa = PBXGroup; 343 | children = ( 344 | CABBCD29189520D50006213F /* Foundation.framework */, 345 | CABBCD2B189520D50006213F /* CoreGraphics.framework */, 346 | CABBCD2D189520D50006213F /* UIKit.framework */, 347 | ); 348 | name = Frameworks; 349 | sourceTree = ""; 350 | }; 351 | CABBCD2F189520D50006213F /* RMPickerViewController-Demo */ = { 352 | isa = PBXGroup; 353 | children = ( 354 | CA1E624A1A24D6840025A6A6 /* Launch Screen.xib */, 355 | CABBCD7B189521D10006213F /* Main.storyboard */, 356 | CABBCD38189520D50006213F /* RMAppDelegate.h */, 357 | CABBCD39189520D50006213F /* RMAppDelegate.m */, 358 | CABBCD80189521D10006213F /* RMViewController.h */, 359 | CABBCD81189521D10006213F /* RMViewController.m */, 360 | CABBCD44189520D50006213F /* Images.xcassets */, 361 | CABBCD30189520D50006213F /* Supporting Files */, 362 | ); 363 | path = "RMPickerViewController-Demo"; 364 | sourceTree = ""; 365 | }; 366 | CABBCD30189520D50006213F /* Supporting Files */ = { 367 | isa = PBXGroup; 368 | children = ( 369 | CABBCD7C189521D10006213F /* RMPickerViewController-Demo-Info.plist */, 370 | CABBCD7D189521D10006213F /* RMPickerViewController-Demo-Prefix.pch */, 371 | CABBCD35189520D50006213F /* main.m */, 372 | ); 373 | name = "Supporting Files"; 374 | sourceTree = ""; 375 | }; 376 | CACEDE3D1AD15C7500A49ECF /* RMPickerViewController-DemoExtension */ = { 377 | isa = PBXGroup; 378 | children = ( 379 | CACEDE431AD15C7500A49ECF /* MainInterface.storyboard */, 380 | CACEDE3E1AD15C7500A49ECF /* Supporting Files */, 381 | ); 382 | path = "RMPickerViewController-DemoExtension"; 383 | sourceTree = ""; 384 | }; 385 | CACEDE3E1AD15C7500A49ECF /* Supporting Files */ = { 386 | isa = PBXGroup; 387 | children = ( 388 | CACEDE3F1AD15C7500A49ECF /* Info.plist */, 389 | ); 390 | name = "Supporting Files"; 391 | sourceTree = ""; 392 | }; 393 | /* End PBXGroup section */ 394 | 395 | /* Begin PBXHeadersBuildPhase section */ 396 | CA2799621DC6B5910077712D /* Headers */ = { 397 | isa = PBXHeadersBuildPhase; 398 | buildActionMask = 2147483647; 399 | files = ( 400 | CA2799741DC6B5DC0077712D /* RMPickerViewController.h in Headers */, 401 | ); 402 | runOnlyForDeploymentPostprocessing = 0; 403 | }; 404 | /* End PBXHeadersBuildPhase section */ 405 | 406 | /* Begin PBXNativeTarget section */ 407 | CA2799641DC6B5910077712D /* RMPickerViewController */ = { 408 | isa = PBXNativeTarget; 409 | buildConfigurationList = CA2799701DC6B5910077712D /* Build configuration list for PBXNativeTarget "RMPickerViewController" */; 410 | buildPhases = ( 411 | CA2799601DC6B5910077712D /* Sources */, 412 | CA2799611DC6B5910077712D /* Frameworks */, 413 | CA2799621DC6B5910077712D /* Headers */, 414 | CA2799631DC6B5910077712D /* Resources */, 415 | ); 416 | buildRules = ( 417 | ); 418 | dependencies = ( 419 | CA0D3ABB1DE1E5D200DD6DCB /* PBXTargetDependency */, 420 | ); 421 | name = RMPickerViewController; 422 | productName = RMPickerViewController; 423 | productReference = CA2799651DC6B5910077712D /* RMPickerViewController.framework */; 424 | productType = "com.apple.product-type.framework"; 425 | }; 426 | CA33E07D1BF0D5EF003369F0 /* RMPickerViewController-SwiftDemo */ = { 427 | isa = PBXNativeTarget; 428 | buildConfigurationList = CA33E0911BF0D5EF003369F0 /* Build configuration list for PBXNativeTarget "RMPickerViewController-SwiftDemo" */; 429 | buildPhases = ( 430 | CA33E07A1BF0D5EF003369F0 /* Sources */, 431 | CA33E07B1BF0D5EF003369F0 /* Frameworks */, 432 | CA33E07C1BF0D5EF003369F0 /* Resources */, 433 | CA0D3ABE1DE1E5F900DD6DCB /* Embed Frameworks */, 434 | ); 435 | buildRules = ( 436 | ); 437 | dependencies = ( 438 | CA2799931DC6B74B0077712D /* PBXTargetDependency */, 439 | ); 440 | name = "RMPickerViewController-SwiftDemo"; 441 | productName = "RMPickerViewController-SwiftDemo"; 442 | productReference = CA33E07E1BF0D5EF003369F0 /* RMPickerViewController-SwiftDemo.app */; 443 | productType = "com.apple.product-type.application"; 444 | }; 445 | CAB580941BF0F2FF00563752 /* RMPickerViewController-Demo-Tests */ = { 446 | isa = PBXNativeTarget; 447 | buildConfigurationList = CAB5809E1BF0F2FF00563752 /* Build configuration list for PBXNativeTarget "RMPickerViewController-Demo-Tests" */; 448 | buildPhases = ( 449 | CAB580911BF0F2FF00563752 /* Sources */, 450 | CAB580921BF0F2FF00563752 /* Frameworks */, 451 | CAB580931BF0F2FF00563752 /* Resources */, 452 | ); 453 | buildRules = ( 454 | ); 455 | dependencies = ( 456 | CAB5809B1BF0F2FF00563752 /* PBXTargetDependency */, 457 | ); 458 | name = "RMPickerViewController-Demo-Tests"; 459 | productName = "RMPickerViewController-Demo-Tests"; 460 | productReference = CAB580951BF0F2FF00563752 /* RMPickerViewController-Demo-Tests.xctest */; 461 | productType = "com.apple.product-type.bundle.unit-test"; 462 | }; 463 | CABBCD25189520D50006213F /* RMPickerViewController-Demo */ = { 464 | isa = PBXNativeTarget; 465 | buildConfigurationList = CABBCD5B189520D60006213F /* Build configuration list for PBXNativeTarget "RMPickerViewController-Demo" */; 466 | buildPhases = ( 467 | CABBCD22189520D50006213F /* Sources */, 468 | CABBCD23189520D50006213F /* Frameworks */, 469 | CABBCD24189520D50006213F /* Resources */, 470 | CACEDE4B1AD15C7500A49ECF /* Embed App Extensions */, 471 | CA2799711DC6B5910077712D /* Embed Frameworks */, 472 | ); 473 | buildRules = ( 474 | ); 475 | dependencies = ( 476 | CACEDE461AD15C7500A49ECF /* PBXTargetDependency */, 477 | CA27996B1DC6B5910077712D /* PBXTargetDependency */, 478 | ); 479 | name = "RMPickerViewController-Demo"; 480 | productName = "RMPickerViewController-Demo"; 481 | productReference = CABBCD26189520D50006213F /* RMPickerViewController-Demo.app */; 482 | productType = "com.apple.product-type.application"; 483 | }; 484 | CACEDE3B1AD15C7500A49ECF /* RMPickerViewController-DemoExtension */ = { 485 | isa = PBXNativeTarget; 486 | buildConfigurationList = CACEDE481AD15C7500A49ECF /* Build configuration list for PBXNativeTarget "RMPickerViewController-DemoExtension" */; 487 | buildPhases = ( 488 | CACEDE381AD15C7500A49ECF /* Sources */, 489 | CACEDE391AD15C7500A49ECF /* Frameworks */, 490 | CACEDE3A1AD15C7500A49ECF /* Resources */, 491 | ); 492 | buildRules = ( 493 | ); 494 | dependencies = ( 495 | CA27999D1DC6B7EE0077712D /* PBXTargetDependency */, 496 | ); 497 | name = "RMPickerViewController-DemoExtension"; 498 | productName = "RMPickerViewController-DemoExtension"; 499 | productReference = CACEDE3C1AD15C7500A49ECF /* RMPickerViewController-DemoExtension.appex */; 500 | productType = "com.apple.product-type.app-extension"; 501 | }; 502 | /* End PBXNativeTarget section */ 503 | 504 | /* Begin PBXProject section */ 505 | CABBCD1E189520D50006213F /* Project object */ = { 506 | isa = PBXProject; 507 | attributes = { 508 | CLASSPREFIX = RM; 509 | LastSwiftUpdateCheck = 0710; 510 | LastUpgradeCheck = 1020; 511 | ORGANIZATIONNAME = "Roland Moers"; 512 | TargetAttributes = { 513 | CA2799641DC6B5910077712D = { 514 | CreatedOnToolsVersion = 8.1; 515 | ProvisioningStyle = Automatic; 516 | }; 517 | CA33E07D1BF0D5EF003369F0 = { 518 | CreatedOnToolsVersion = 7.1; 519 | LastSwiftMigration = 1020; 520 | }; 521 | CAB580941BF0F2FF00563752 = { 522 | CreatedOnToolsVersion = 7.1; 523 | TestTargetID = CABBCD25189520D50006213F; 524 | }; 525 | CACEDE3B1AD15C7500A49ECF = { 526 | CreatedOnToolsVersion = 6.2; 527 | }; 528 | }; 529 | }; 530 | buildConfigurationList = CABBCD21189520D50006213F /* Build configuration list for PBXProject "RMPickerViewController-Demo" */; 531 | compatibilityVersion = "Xcode 3.2"; 532 | developmentRegion = English; 533 | hasScannedForEncodings = 0; 534 | knownRegions = ( 535 | English, 536 | en, 537 | Base, 538 | ); 539 | mainGroup = CABBCD1D189520D50006213F; 540 | productRefGroup = CABBCD27189520D50006213F /* Products */; 541 | projectDirPath = ""; 542 | projectReferences = ( 543 | { 544 | ProductGroup = CA0D3AA61DE1E5A200DD6DCB /* Products */; 545 | ProjectRef = CA0D3AA51DE1E5A200DD6DCB /* RMActionController-Demo.xcodeproj */; 546 | }, 547 | ); 548 | projectRoot = ""; 549 | targets = ( 550 | CA2799641DC6B5910077712D /* RMPickerViewController */, 551 | CABBCD25189520D50006213F /* RMPickerViewController-Demo */, 552 | CA33E07D1BF0D5EF003369F0 /* RMPickerViewController-SwiftDemo */, 553 | CACEDE3B1AD15C7500A49ECF /* RMPickerViewController-DemoExtension */, 554 | CAB580941BF0F2FF00563752 /* RMPickerViewController-Demo-Tests */, 555 | ); 556 | }; 557 | /* End PBXProject section */ 558 | 559 | /* Begin PBXReferenceProxy section */ 560 | CA0D3AAF1DE1E5A200DD6DCB /* RMActionController-Demo.app */ = { 561 | isa = PBXReferenceProxy; 562 | fileType = wrapper.application; 563 | path = "RMActionController-Demo.app"; 564 | remoteRef = CA0D3AAE1DE1E5A200DD6DCB /* PBXContainerItemProxy */; 565 | sourceTree = BUILT_PRODUCTS_DIR; 566 | }; 567 | CA0D3AB11DE1E5A200DD6DCB /* RMActionController-SwiftDemo.app */ = { 568 | isa = PBXReferenceProxy; 569 | fileType = wrapper.application; 570 | path = "RMActionController-SwiftDemo.app"; 571 | remoteRef = CA0D3AB01DE1E5A200DD6DCB /* PBXContainerItemProxy */; 572 | sourceTree = BUILT_PRODUCTS_DIR; 573 | }; 574 | CA0D3AB31DE1E5A200DD6DCB /* RMActionController-DemoExtension.appex */ = { 575 | isa = PBXReferenceProxy; 576 | fileType = "wrapper.app-extension"; 577 | path = "RMActionController-DemoExtension.appex"; 578 | remoteRef = CA0D3AB21DE1E5A200DD6DCB /* PBXContainerItemProxy */; 579 | sourceTree = BUILT_PRODUCTS_DIR; 580 | }; 581 | CA0D3AB51DE1E5A200DD6DCB /* RMActionController-Demo-Tests.xctest */ = { 582 | isa = PBXReferenceProxy; 583 | fileType = wrapper.cfbundle; 584 | path = "RMActionController-Demo-Tests.xctest"; 585 | remoteRef = CA0D3AB41DE1E5A200DD6DCB /* PBXContainerItemProxy */; 586 | sourceTree = BUILT_PRODUCTS_DIR; 587 | }; 588 | CA0D3AB71DE1E5A200DD6DCB /* RMActionController-Demo-UITests.xctest */ = { 589 | isa = PBXReferenceProxy; 590 | fileType = wrapper.cfbundle; 591 | path = "RMActionController-Demo-UITests.xctest"; 592 | remoteRef = CA0D3AB61DE1E5A200DD6DCB /* PBXContainerItemProxy */; 593 | sourceTree = BUILT_PRODUCTS_DIR; 594 | }; 595 | CA0D3AB91DE1E5A200DD6DCB /* RMActionController.framework */ = { 596 | isa = PBXReferenceProxy; 597 | fileType = wrapper.framework; 598 | path = RMActionController.framework; 599 | remoteRef = CA0D3AB81DE1E5A200DD6DCB /* PBXContainerItemProxy */; 600 | sourceTree = BUILT_PRODUCTS_DIR; 601 | }; 602 | /* End PBXReferenceProxy section */ 603 | 604 | /* Begin PBXResourcesBuildPhase section */ 605 | CA2799631DC6B5910077712D /* Resources */ = { 606 | isa = PBXResourcesBuildPhase; 607 | buildActionMask = 2147483647; 608 | files = ( 609 | ); 610 | runOnlyForDeploymentPostprocessing = 0; 611 | }; 612 | CA33E07C1BF0D5EF003369F0 /* Resources */ = { 613 | isa = PBXResourcesBuildPhase; 614 | buildActionMask = 2147483647; 615 | files = ( 616 | CA33E08D1BF0D5EF003369F0 /* LaunchScreen.storyboard in Resources */, 617 | CA33E08A1BF0D5EF003369F0 /* Assets.xcassets in Resources */, 618 | CA33E0881BF0D5EF003369F0 /* Main.storyboard in Resources */, 619 | ); 620 | runOnlyForDeploymentPostprocessing = 0; 621 | }; 622 | CAB580931BF0F2FF00563752 /* Resources */ = { 623 | isa = PBXResourcesBuildPhase; 624 | buildActionMask = 2147483647; 625 | files = ( 626 | ); 627 | runOnlyForDeploymentPostprocessing = 0; 628 | }; 629 | CABBCD24189520D50006213F /* Resources */ = { 630 | isa = PBXResourcesBuildPhase; 631 | buildActionMask = 2147483647; 632 | files = ( 633 | CA1E624B1A24D6840025A6A6 /* Launch Screen.xib in Resources */, 634 | CABBCD45189520D50006213F /* Images.xcassets in Resources */, 635 | CABBCD82189521D10006213F /* Main.storyboard in Resources */, 636 | ); 637 | runOnlyForDeploymentPostprocessing = 0; 638 | }; 639 | CACEDE3A1AD15C7500A49ECF /* Resources */ = { 640 | isa = PBXResourcesBuildPhase; 641 | buildActionMask = 2147483647; 642 | files = ( 643 | CACEDE441AD15C7500A49ECF /* MainInterface.storyboard in Resources */, 644 | ); 645 | runOnlyForDeploymentPostprocessing = 0; 646 | }; 647 | /* End PBXResourcesBuildPhase section */ 648 | 649 | /* Begin PBXSourcesBuildPhase section */ 650 | CA2799601DC6B5910077712D /* Sources */ = { 651 | isa = PBXSourcesBuildPhase; 652 | buildActionMask = 2147483647; 653 | files = ( 654 | CA2799751DC6B5DC0077712D /* RMPickerViewController.m in Sources */, 655 | ); 656 | runOnlyForDeploymentPostprocessing = 0; 657 | }; 658 | CA33E07A1BF0D5EF003369F0 /* Sources */ = { 659 | isa = PBXSourcesBuildPhase; 660 | buildActionMask = 2147483647; 661 | files = ( 662 | CA33E0931BF0D627003369F0 /* ViewController.swift in Sources */, 663 | CA33E0811BF0D5EF003369F0 /* AppDelegate.swift in Sources */, 664 | ); 665 | runOnlyForDeploymentPostprocessing = 0; 666 | }; 667 | CAB580911BF0F2FF00563752 /* Sources */ = { 668 | isa = PBXSourcesBuildPhase; 669 | buildActionMask = 2147483647; 670 | files = ( 671 | CAB580981BF0F2FF00563752 /* RMPickerViewControllerTests.m in Sources */, 672 | ); 673 | runOnlyForDeploymentPostprocessing = 0; 674 | }; 675 | CABBCD22189520D50006213F /* Sources */ = { 676 | isa = PBXSourcesBuildPhase; 677 | buildActionMask = 2147483647; 678 | files = ( 679 | CABBCD85189521D10006213F /* RMViewController.m in Sources */, 680 | CABBCD36189520D50006213F /* main.m in Sources */, 681 | CABBCD3A189520D50006213F /* RMAppDelegate.m in Sources */, 682 | ); 683 | runOnlyForDeploymentPostprocessing = 0; 684 | }; 685 | CACEDE381AD15C7500A49ECF /* Sources */ = { 686 | isa = PBXSourcesBuildPhase; 687 | buildActionMask = 2147483647; 688 | files = ( 689 | CACEDE4C1AD15C8200A49ECF /* RMViewController.m in Sources */, 690 | ); 691 | runOnlyForDeploymentPostprocessing = 0; 692 | }; 693 | /* End PBXSourcesBuildPhase section */ 694 | 695 | /* Begin PBXTargetDependency section */ 696 | CA0D3ABB1DE1E5D200DD6DCB /* PBXTargetDependency */ = { 697 | isa = PBXTargetDependency; 698 | name = RMActionController; 699 | targetProxy = CA0D3ABA1DE1E5D200DD6DCB /* PBXContainerItemProxy */; 700 | }; 701 | CA27996B1DC6B5910077712D /* PBXTargetDependency */ = { 702 | isa = PBXTargetDependency; 703 | target = CA2799641DC6B5910077712D /* RMPickerViewController */; 704 | targetProxy = CA27996A1DC6B5910077712D /* PBXContainerItemProxy */; 705 | }; 706 | CA2799931DC6B74B0077712D /* PBXTargetDependency */ = { 707 | isa = PBXTargetDependency; 708 | target = CA2799641DC6B5910077712D /* RMPickerViewController */; 709 | targetProxy = CA2799921DC6B74B0077712D /* PBXContainerItemProxy */; 710 | }; 711 | CA27999D1DC6B7EE0077712D /* PBXTargetDependency */ = { 712 | isa = PBXTargetDependency; 713 | target = CA2799641DC6B5910077712D /* RMPickerViewController */; 714 | targetProxy = CA27999C1DC6B7EE0077712D /* PBXContainerItemProxy */; 715 | }; 716 | CAB5809B1BF0F2FF00563752 /* PBXTargetDependency */ = { 717 | isa = PBXTargetDependency; 718 | target = CABBCD25189520D50006213F /* RMPickerViewController-Demo */; 719 | targetProxy = CAB5809A1BF0F2FF00563752 /* PBXContainerItemProxy */; 720 | }; 721 | CACEDE461AD15C7500A49ECF /* PBXTargetDependency */ = { 722 | isa = PBXTargetDependency; 723 | target = CACEDE3B1AD15C7500A49ECF /* RMPickerViewController-DemoExtension */; 724 | targetProxy = CACEDE451AD15C7500A49ECF /* PBXContainerItemProxy */; 725 | }; 726 | /* End PBXTargetDependency section */ 727 | 728 | /* Begin PBXVariantGroup section */ 729 | CA33E0861BF0D5EF003369F0 /* Main.storyboard */ = { 730 | isa = PBXVariantGroup; 731 | children = ( 732 | CA33E0871BF0D5EF003369F0 /* Base */, 733 | ); 734 | name = Main.storyboard; 735 | sourceTree = ""; 736 | }; 737 | CA33E08B1BF0D5EF003369F0 /* LaunchScreen.storyboard */ = { 738 | isa = PBXVariantGroup; 739 | children = ( 740 | CA33E08C1BF0D5EF003369F0 /* Base */, 741 | ); 742 | name = LaunchScreen.storyboard; 743 | sourceTree = ""; 744 | }; 745 | /* End PBXVariantGroup section */ 746 | 747 | /* Begin XCBuildConfiguration section */ 748 | CA27996E1DC6B5910077712D /* Debug */ = { 749 | isa = XCBuildConfiguration; 750 | buildSettings = { 751 | APPLICATION_EXTENSION_API_ONLY = YES; 752 | CLANG_ANALYZER_NONNULL = YES; 753 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 754 | CLANG_WARN_INFINITE_RECURSION = YES; 755 | CLANG_WARN_SUSPICIOUS_MOVES = YES; 756 | CLANG_WARN_UNREACHABLE_CODE = YES; 757 | CODE_SIGN_IDENTITY = ""; 758 | CURRENT_PROJECT_VERSION = 1; 759 | DEBUG_INFORMATION_FORMAT = dwarf; 760 | DEFINES_MODULE = YES; 761 | DYLIB_COMPATIBILITY_VERSION = 1; 762 | DYLIB_CURRENT_VERSION = 1; 763 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 764 | ENABLE_STRICT_OBJC_MSGSEND = YES; 765 | GCC_NO_COMMON_BLOCKS = YES; 766 | INFOPLIST_FILE = RMPickerViewController/Info.plist; 767 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 768 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 769 | MTL_ENABLE_DEBUG_INFO = YES; 770 | PRODUCT_BUNDLE_IDENTIFIER = de.cooperrs.RMPickerViewController; 771 | PRODUCT_NAME = "$(TARGET_NAME)"; 772 | SKIP_INSTALL = YES; 773 | TARGETED_DEVICE_FAMILY = "1,2"; 774 | VERSIONING_SYSTEM = "apple-generic"; 775 | VERSION_INFO_PREFIX = ""; 776 | }; 777 | name = Debug; 778 | }; 779 | CA27996F1DC6B5910077712D /* Release */ = { 780 | isa = XCBuildConfiguration; 781 | buildSettings = { 782 | APPLICATION_EXTENSION_API_ONLY = YES; 783 | CLANG_ANALYZER_NONNULL = YES; 784 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 785 | CLANG_WARN_INFINITE_RECURSION = YES; 786 | CLANG_WARN_SUSPICIOUS_MOVES = YES; 787 | CLANG_WARN_UNREACHABLE_CODE = YES; 788 | CODE_SIGN_IDENTITY = ""; 789 | COPY_PHASE_STRIP = NO; 790 | CURRENT_PROJECT_VERSION = 1; 791 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 792 | DEFINES_MODULE = YES; 793 | DYLIB_COMPATIBILITY_VERSION = 1; 794 | DYLIB_CURRENT_VERSION = 1; 795 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 796 | ENABLE_STRICT_OBJC_MSGSEND = YES; 797 | GCC_NO_COMMON_BLOCKS = YES; 798 | INFOPLIST_FILE = RMPickerViewController/Info.plist; 799 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 800 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 801 | MTL_ENABLE_DEBUG_INFO = NO; 802 | PRODUCT_BUNDLE_IDENTIFIER = de.cooperrs.RMPickerViewController; 803 | PRODUCT_NAME = "$(TARGET_NAME)"; 804 | SKIP_INSTALL = YES; 805 | TARGETED_DEVICE_FAMILY = "1,2"; 806 | VERSIONING_SYSTEM = "apple-generic"; 807 | VERSION_INFO_PREFIX = ""; 808 | }; 809 | name = Release; 810 | }; 811 | CA33E08F1BF0D5EF003369F0 /* Debug */ = { 812 | isa = XCBuildConfiguration; 813 | buildSettings = { 814 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 815 | CLANG_WARN_UNREACHABLE_CODE = YES; 816 | DEBUG_INFORMATION_FORMAT = dwarf; 817 | ENABLE_STRICT_OBJC_MSGSEND = YES; 818 | GCC_NO_COMMON_BLOCKS = YES; 819 | INFOPLIST_FILE = "RMPickerViewController-SwiftDemo/Info.plist"; 820 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 821 | MTL_ENABLE_DEBUG_INFO = YES; 822 | PRODUCT_BUNDLE_IDENTIFIER = "de.cooperrs.RMPickerViewController-SwiftDemo"; 823 | PRODUCT_NAME = "$(TARGET_NAME)"; 824 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 825 | SWIFT_VERSION = 5.0; 826 | TARGETED_DEVICE_FAMILY = "1,2"; 827 | }; 828 | name = Debug; 829 | }; 830 | CA33E0901BF0D5EF003369F0 /* Release */ = { 831 | isa = XCBuildConfiguration; 832 | buildSettings = { 833 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 834 | CLANG_WARN_UNREACHABLE_CODE = YES; 835 | COPY_PHASE_STRIP = NO; 836 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 837 | ENABLE_STRICT_OBJC_MSGSEND = YES; 838 | GCC_NO_COMMON_BLOCKS = YES; 839 | INFOPLIST_FILE = "RMPickerViewController-SwiftDemo/Info.plist"; 840 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 841 | MTL_ENABLE_DEBUG_INFO = NO; 842 | PRODUCT_BUNDLE_IDENTIFIER = "de.cooperrs.RMPickerViewController-SwiftDemo"; 843 | PRODUCT_NAME = "$(TARGET_NAME)"; 844 | SWIFT_VERSION = 5.0; 845 | TARGETED_DEVICE_FAMILY = "1,2"; 846 | }; 847 | name = Release; 848 | }; 849 | CAB5809C1BF0F2FF00563752 /* Debug */ = { 850 | isa = XCBuildConfiguration; 851 | buildSettings = { 852 | BUNDLE_LOADER = "$(TEST_HOST)"; 853 | CLANG_WARN_UNREACHABLE_CODE = YES; 854 | DEBUG_INFORMATION_FORMAT = dwarf; 855 | ENABLE_STRICT_OBJC_MSGSEND = YES; 856 | GCC_NO_COMMON_BLOCKS = YES; 857 | INFOPLIST_FILE = "RMPickerViewController-Demo-Tests/Info.plist"; 858 | IPHONEOS_DEPLOYMENT_TARGET = 9.1; 859 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 860 | MTL_ENABLE_DEBUG_INFO = YES; 861 | PRODUCT_BUNDLE_IDENTIFIER = "de.cooperrs.RMPickerViewController-Demo-Tests"; 862 | PRODUCT_NAME = "$(TARGET_NAME)"; 863 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/RMPickerViewController-Demo.app/RMPickerViewController-Demo"; 864 | }; 865 | name = Debug; 866 | }; 867 | CAB5809D1BF0F2FF00563752 /* Release */ = { 868 | isa = XCBuildConfiguration; 869 | buildSettings = { 870 | BUNDLE_LOADER = "$(TEST_HOST)"; 871 | CLANG_WARN_UNREACHABLE_CODE = YES; 872 | COPY_PHASE_STRIP = NO; 873 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 874 | ENABLE_STRICT_OBJC_MSGSEND = YES; 875 | GCC_NO_COMMON_BLOCKS = YES; 876 | INFOPLIST_FILE = "RMPickerViewController-Demo-Tests/Info.plist"; 877 | IPHONEOS_DEPLOYMENT_TARGET = 9.1; 878 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 879 | MTL_ENABLE_DEBUG_INFO = NO; 880 | PRODUCT_BUNDLE_IDENTIFIER = "de.cooperrs.RMPickerViewController-Demo-Tests"; 881 | PRODUCT_NAME = "$(TARGET_NAME)"; 882 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/RMPickerViewController-Demo.app/RMPickerViewController-Demo"; 883 | }; 884 | name = Release; 885 | }; 886 | CABBCD59189520D60006213F /* Debug */ = { 887 | isa = XCBuildConfiguration; 888 | buildSettings = { 889 | ALWAYS_SEARCH_USER_PATHS = NO; 890 | CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; 891 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 892 | CLANG_CXX_LIBRARY = "libc++"; 893 | CLANG_ENABLE_MODULES = YES; 894 | CLANG_ENABLE_OBJC_ARC = YES; 895 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 896 | CLANG_WARN_BOOL_CONVERSION = YES; 897 | CLANG_WARN_COMMA = YES; 898 | CLANG_WARN_CONSTANT_CONVERSION = YES; 899 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 900 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 901 | CLANG_WARN_EMPTY_BODY = YES; 902 | CLANG_WARN_ENUM_CONVERSION = YES; 903 | CLANG_WARN_INFINITE_RECURSION = YES; 904 | CLANG_WARN_INT_CONVERSION = YES; 905 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 906 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 907 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 908 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 909 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 910 | CLANG_WARN_STRICT_PROTOTYPES = YES; 911 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 912 | CLANG_WARN_UNREACHABLE_CODE = YES; 913 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 914 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 915 | COPY_PHASE_STRIP = NO; 916 | ENABLE_STRICT_OBJC_MSGSEND = YES; 917 | ENABLE_TESTABILITY = YES; 918 | GCC_C_LANGUAGE_STANDARD = gnu99; 919 | GCC_DYNAMIC_NO_PIC = NO; 920 | GCC_NO_COMMON_BLOCKS = YES; 921 | GCC_OPTIMIZATION_LEVEL = 0; 922 | GCC_PREPROCESSOR_DEFINITIONS = ( 923 | "DEBUG=1", 924 | "$(inherited)", 925 | ); 926 | GCC_SYMBOLS_PRIVATE_EXTERN = NO; 927 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 928 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 929 | GCC_WARN_UNDECLARED_SELECTOR = YES; 930 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 931 | GCC_WARN_UNUSED_FUNCTION = YES; 932 | GCC_WARN_UNUSED_VARIABLE = YES; 933 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 934 | ONLY_ACTIVE_ARCH = YES; 935 | SDKROOT = iphoneos; 936 | }; 937 | name = Debug; 938 | }; 939 | CABBCD5A189520D60006213F /* Release */ = { 940 | isa = XCBuildConfiguration; 941 | buildSettings = { 942 | ALWAYS_SEARCH_USER_PATHS = NO; 943 | CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; 944 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 945 | CLANG_CXX_LIBRARY = "libc++"; 946 | CLANG_ENABLE_MODULES = YES; 947 | CLANG_ENABLE_OBJC_ARC = YES; 948 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 949 | CLANG_WARN_BOOL_CONVERSION = YES; 950 | CLANG_WARN_COMMA = YES; 951 | CLANG_WARN_CONSTANT_CONVERSION = YES; 952 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 953 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 954 | CLANG_WARN_EMPTY_BODY = YES; 955 | CLANG_WARN_ENUM_CONVERSION = YES; 956 | CLANG_WARN_INFINITE_RECURSION = YES; 957 | CLANG_WARN_INT_CONVERSION = YES; 958 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 959 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 960 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 961 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 962 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 963 | CLANG_WARN_STRICT_PROTOTYPES = YES; 964 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 965 | CLANG_WARN_UNREACHABLE_CODE = YES; 966 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 967 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 968 | COPY_PHASE_STRIP = YES; 969 | ENABLE_NS_ASSERTIONS = NO; 970 | ENABLE_STRICT_OBJC_MSGSEND = YES; 971 | GCC_C_LANGUAGE_STANDARD = gnu99; 972 | GCC_NO_COMMON_BLOCKS = YES; 973 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 974 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 975 | GCC_WARN_UNDECLARED_SELECTOR = YES; 976 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 977 | GCC_WARN_UNUSED_FUNCTION = YES; 978 | GCC_WARN_UNUSED_VARIABLE = YES; 979 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 980 | SDKROOT = iphoneos; 981 | SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; 982 | VALIDATE_PRODUCT = YES; 983 | }; 984 | name = Release; 985 | }; 986 | CABBCD5C189520D60006213F /* Debug */ = { 987 | isa = XCBuildConfiguration; 988 | buildSettings = { 989 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 990 | ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; 991 | GCC_PRECOMPILE_PREFIX_HEADER = YES; 992 | GCC_PREFIX_HEADER = "RMPickerViewController-Demo/RMPickerViewController-Demo-Prefix.pch"; 993 | INFOPLIST_FILE = "RMPickerViewController-Demo/RMPickerViewController-Demo-Info.plist"; 994 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 995 | PRODUCT_BUNDLE_IDENTIFIER = "de.cooperrs.${PRODUCT_NAME:rfc1034identifier}"; 996 | PRODUCT_NAME = "$(TARGET_NAME)"; 997 | TARGETED_DEVICE_FAMILY = "1,2"; 998 | WRAPPER_EXTENSION = app; 999 | }; 1000 | name = Debug; 1001 | }; 1002 | CABBCD5D189520D60006213F /* Release */ = { 1003 | isa = XCBuildConfiguration; 1004 | buildSettings = { 1005 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 1006 | ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; 1007 | GCC_PRECOMPILE_PREFIX_HEADER = YES; 1008 | GCC_PREFIX_HEADER = "RMPickerViewController-Demo/RMPickerViewController-Demo-Prefix.pch"; 1009 | INFOPLIST_FILE = "RMPickerViewController-Demo/RMPickerViewController-Demo-Info.plist"; 1010 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 1011 | PRODUCT_BUNDLE_IDENTIFIER = "de.cooperrs.${PRODUCT_NAME:rfc1034identifier}"; 1012 | PRODUCT_NAME = "$(TARGET_NAME)"; 1013 | TARGETED_DEVICE_FAMILY = "1,2"; 1014 | WRAPPER_EXTENSION = app; 1015 | }; 1016 | name = Release; 1017 | }; 1018 | CACEDE491AD15C7500A49ECF /* Debug */ = { 1019 | isa = XCBuildConfiguration; 1020 | buildSettings = { 1021 | CLANG_WARN_UNREACHABLE_CODE = YES; 1022 | ENABLE_STRICT_OBJC_MSGSEND = YES; 1023 | GCC_PREPROCESSOR_DEFINITIONS = ( 1024 | "DEBUG=1", 1025 | "$(inherited)", 1026 | ); 1027 | INFOPLIST_FILE = "RMPickerViewController-DemoExtension/Info.plist"; 1028 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks"; 1029 | MTL_ENABLE_DEBUG_INFO = YES; 1030 | PRODUCT_BUNDLE_IDENTIFIER = "de.cooperrs.RMPickerViewController-Demo.$(PRODUCT_NAME:rfc1034identifier)"; 1031 | PRODUCT_NAME = "$(TARGET_NAME)"; 1032 | SKIP_INSTALL = YES; 1033 | }; 1034 | name = Debug; 1035 | }; 1036 | CACEDE4A1AD15C7500A49ECF /* Release */ = { 1037 | isa = XCBuildConfiguration; 1038 | buildSettings = { 1039 | CLANG_WARN_UNREACHABLE_CODE = YES; 1040 | COPY_PHASE_STRIP = NO; 1041 | ENABLE_STRICT_OBJC_MSGSEND = YES; 1042 | INFOPLIST_FILE = "RMPickerViewController-DemoExtension/Info.plist"; 1043 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks"; 1044 | MTL_ENABLE_DEBUG_INFO = NO; 1045 | PRODUCT_BUNDLE_IDENTIFIER = "de.cooperrs.RMPickerViewController-Demo.$(PRODUCT_NAME:rfc1034identifier)"; 1046 | PRODUCT_NAME = "$(TARGET_NAME)"; 1047 | SKIP_INSTALL = YES; 1048 | }; 1049 | name = Release; 1050 | }; 1051 | /* End XCBuildConfiguration section */ 1052 | 1053 | /* Begin XCConfigurationList section */ 1054 | CA2799701DC6B5910077712D /* Build configuration list for PBXNativeTarget "RMPickerViewController" */ = { 1055 | isa = XCConfigurationList; 1056 | buildConfigurations = ( 1057 | CA27996E1DC6B5910077712D /* Debug */, 1058 | CA27996F1DC6B5910077712D /* Release */, 1059 | ); 1060 | defaultConfigurationIsVisible = 0; 1061 | defaultConfigurationName = Release; 1062 | }; 1063 | CA33E0911BF0D5EF003369F0 /* Build configuration list for PBXNativeTarget "RMPickerViewController-SwiftDemo" */ = { 1064 | isa = XCConfigurationList; 1065 | buildConfigurations = ( 1066 | CA33E08F1BF0D5EF003369F0 /* Debug */, 1067 | CA33E0901BF0D5EF003369F0 /* Release */, 1068 | ); 1069 | defaultConfigurationIsVisible = 0; 1070 | defaultConfigurationName = Release; 1071 | }; 1072 | CAB5809E1BF0F2FF00563752 /* Build configuration list for PBXNativeTarget "RMPickerViewController-Demo-Tests" */ = { 1073 | isa = XCConfigurationList; 1074 | buildConfigurations = ( 1075 | CAB5809C1BF0F2FF00563752 /* Debug */, 1076 | CAB5809D1BF0F2FF00563752 /* Release */, 1077 | ); 1078 | defaultConfigurationIsVisible = 0; 1079 | defaultConfigurationName = Release; 1080 | }; 1081 | CABBCD21189520D50006213F /* Build configuration list for PBXProject "RMPickerViewController-Demo" */ = { 1082 | isa = XCConfigurationList; 1083 | buildConfigurations = ( 1084 | CABBCD59189520D60006213F /* Debug */, 1085 | CABBCD5A189520D60006213F /* Release */, 1086 | ); 1087 | defaultConfigurationIsVisible = 0; 1088 | defaultConfigurationName = Release; 1089 | }; 1090 | CABBCD5B189520D60006213F /* Build configuration list for PBXNativeTarget "RMPickerViewController-Demo" */ = { 1091 | isa = XCConfigurationList; 1092 | buildConfigurations = ( 1093 | CABBCD5C189520D60006213F /* Debug */, 1094 | CABBCD5D189520D60006213F /* Release */, 1095 | ); 1096 | defaultConfigurationIsVisible = 0; 1097 | defaultConfigurationName = Release; 1098 | }; 1099 | CACEDE481AD15C7500A49ECF /* Build configuration list for PBXNativeTarget "RMPickerViewController-DemoExtension" */ = { 1100 | isa = XCConfigurationList; 1101 | buildConfigurations = ( 1102 | CACEDE491AD15C7500A49ECF /* Debug */, 1103 | CACEDE4A1AD15C7500A49ECF /* Release */, 1104 | ); 1105 | defaultConfigurationIsVisible = 0; 1106 | defaultConfigurationName = Release; 1107 | }; 1108 | /* End XCConfigurationList section */ 1109 | }; 1110 | rootObject = CABBCD1E189520D50006213F /* Project object */; 1111 | } 1112 | -------------------------------------------------------------------------------- /RMPickerViewController-Demo.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /RMPickerViewController-Demo.xcodeproj/project.xcworkspace/xcshareddata/RMPickerViewController-Demo.xccheckout: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDESourceControlProjectFavoriteDictionaryKey 6 | 7 | IDESourceControlProjectIdentifier 8 | 060A4B42-C802-457C-A7BC-20694C68B07E 9 | IDESourceControlProjectName 10 | RMPickerViewController-Demo 11 | IDESourceControlProjectOriginsDictionary 12 | 13 | F13EA91197178158C39D998EC71C1E2FAFF4B15F 14 | ssh://cooperrs.de:222/home/git/rmpickerviewcontroller 15 | 16 | IDESourceControlProjectPath 17 | RMPickerViewController-Demo.xcodeproj 18 | IDESourceControlProjectRelativeInstallPathDictionary 19 | 20 | F13EA91197178158C39D998EC71C1E2FAFF4B15F 21 | ../.. 22 | 23 | IDESourceControlProjectURL 24 | ssh://cooperrs.de:222/home/git/rmpickerviewcontroller 25 | IDESourceControlProjectVersion 26 | 111 27 | IDESourceControlProjectWCCIdentifier 28 | F13EA91197178158C39D998EC71C1E2FAFF4B15F 29 | IDESourceControlProjectWCConfigurations 30 | 31 | 32 | IDESourceControlRepositoryExtensionIdentifierKey 33 | public.vcs.git 34 | IDESourceControlWCCIdentifierKey 35 | F13EA91197178158C39D998EC71C1E2FAFF4B15F 36 | IDESourceControlWCCName 37 | RMPickerViewController 38 | 39 | 40 | 41 | 42 | -------------------------------------------------------------------------------- /RMPickerViewController-Demo.xcodeproj/project.xcworkspace/xcshareddata/RMPickerViewController-Demo.xcscmblueprint: -------------------------------------------------------------------------------- 1 | { 2 | "DVTSourceControlWorkspaceBlueprintPrimaryRemoteRepositoryKey" : "F13EA91197178158C39D998EC71C1E2FAFF4B15F", 3 | "DVTSourceControlWorkspaceBlueprintWorkingCopyRepositoryLocationsKey" : { 4 | 5 | }, 6 | "DVTSourceControlWorkspaceBlueprintWorkingCopyStatesKey" : { 7 | "A654F83E1FA6913C62FA529D3AF00D1F869A6C7E" : 9223372036854775807, 8 | "F13EA91197178158C39D998EC71C1E2FAFF4B15F" : 0 9 | }, 10 | "DVTSourceControlWorkspaceBlueprintIdentifierKey" : "060A4B42-C802-457C-A7BC-20694C68B07E", 11 | "DVTSourceControlWorkspaceBlueprintWorkingCopyPathsKey" : { 12 | "A654F83E1FA6913C62FA529D3AF00D1F869A6C7E" : "RMPickerViewController\/Extern\/RMActionController\/", 13 | "F13EA91197178158C39D998EC71C1E2FAFF4B15F" : "RMPickerViewController\/" 14 | }, 15 | "DVTSourceControlWorkspaceBlueprintNameKey" : "RMPickerViewController-Demo", 16 | "DVTSourceControlWorkspaceBlueprintVersion" : 204, 17 | "DVTSourceControlWorkspaceBlueprintRelativePathToProjectKey" : "RMPickerViewController-Demo.xcodeproj", 18 | "DVTSourceControlWorkspaceBlueprintRemoteRepositoriesKey" : [ 19 | { 20 | "DVTSourceControlWorkspaceBlueprintRemoteRepositoryURLKey" : "https:\/\/github.com\/CooperRS\/RMActionController.git", 21 | "DVTSourceControlWorkspaceBlueprintRemoteRepositorySystemKey" : "com.apple.dt.Xcode.sourcecontrol.Git", 22 | "DVTSourceControlWorkspaceBlueprintRemoteRepositoryIdentifierKey" : "A654F83E1FA6913C62FA529D3AF00D1F869A6C7E" 23 | }, 24 | { 25 | "DVTSourceControlWorkspaceBlueprintRemoteRepositoryURLKey" : "ssh:\/\/cooperrs.de:222\/home\/git\/rmpickerviewcontroller", 26 | "DVTSourceControlWorkspaceBlueprintRemoteRepositorySystemKey" : "com.apple.dt.Xcode.sourcecontrol.Git", 27 | "DVTSourceControlWorkspaceBlueprintRemoteRepositoryIdentifierKey" : "F13EA91197178158C39D998EC71C1E2FAFF4B15F" 28 | } 29 | ] 30 | } -------------------------------------------------------------------------------- /RMPickerViewController-Demo.xcodeproj/xcshareddata/xcschemes/RMPickerViewController-Demo.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 33 | 39 | 40 | 41 | 42 | 43 | 49 | 50 | 51 | 52 | 53 | 54 | 64 | 66 | 72 | 73 | 74 | 75 | 76 | 77 | 83 | 85 | 91 | 92 | 93 | 94 | 96 | 97 | 100 | 101 | 102 | -------------------------------------------------------------------------------- /RMPickerViewController-Demo.xcodeproj/xcshareddata/xcschemes/RMPickerViewController-DemoExtension.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 6 | 9 | 10 | 16 | 22 | 23 | 24 | 30 | 36 | 37 | 38 | 39 | 40 | 45 | 46 | 48 | 54 | 55 | 56 | 57 | 58 | 64 | 65 | 66 | 67 | 68 | 69 | 80 | 82 | 88 | 89 | 90 | 91 | 92 | 93 | 100 | 102 | 108 | 109 | 110 | 111 | 113 | 114 | 117 | 118 | 119 | -------------------------------------------------------------------------------- /RMPickerViewController-Demo.xcodeproj/xcshareddata/xcschemes/RMPickerViewController-SwiftDemo.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 39 | 40 | 41 | 42 | 43 | 44 | 54 | 56 | 62 | 63 | 64 | 65 | 66 | 67 | 73 | 75 | 81 | 82 | 83 | 84 | 86 | 87 | 90 | 91 | 92 | -------------------------------------------------------------------------------- /RMPickerViewController-Demo.xcodeproj/xcshareddata/xcschemes/RMPickerViewController.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 | 70 | 71 | 72 | 73 | 75 | 76 | 79 | 80 | 81 | -------------------------------------------------------------------------------- /RMPickerViewController-Demo/Images.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "iphone", 5 | "size" : "20x20", 6 | "scale" : "2x" 7 | }, 8 | { 9 | "idiom" : "iphone", 10 | "size" : "20x20", 11 | "scale" : "3x" 12 | }, 13 | { 14 | "idiom" : "iphone", 15 | "size" : "29x29", 16 | "scale" : "2x" 17 | }, 18 | { 19 | "idiom" : "iphone", 20 | "size" : "29x29", 21 | "scale" : "3x" 22 | }, 23 | { 24 | "idiom" : "iphone", 25 | "size" : "40x40", 26 | "scale" : "2x" 27 | }, 28 | { 29 | "idiom" : "iphone", 30 | "size" : "40x40", 31 | "scale" : "3x" 32 | }, 33 | { 34 | "idiom" : "iphone", 35 | "size" : "60x60", 36 | "scale" : "2x" 37 | }, 38 | { 39 | "idiom" : "iphone", 40 | "size" : "60x60", 41 | "scale" : "3x" 42 | } 43 | ], 44 | "info" : { 45 | "version" : 1, 46 | "author" : "xcode" 47 | } 48 | } -------------------------------------------------------------------------------- /RMPickerViewController-Demo/Images.xcassets/LaunchImage.launchimage/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "orientation" : "portrait", 5 | "idiom" : "iphone", 6 | "extent" : "full-screen", 7 | "minimum-system-version" : "7.0", 8 | "scale" : "2x" 9 | }, 10 | { 11 | "orientation" : "portrait", 12 | "idiom" : "iphone", 13 | "subtype" : "retina4", 14 | "extent" : "full-screen", 15 | "minimum-system-version" : "7.0", 16 | "scale" : "2x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /RMPickerViewController-Demo/Launch Screen.xib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /RMPickerViewController-Demo/Main.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | 160 | 161 | 162 | 163 | 164 | 165 | 166 | 167 | 168 | 169 | 170 | 176 | 177 | 178 | 179 | 180 | 181 | 182 | 183 | 184 | 185 | 186 | 187 | 188 | 189 | 190 | 191 | 192 | 193 | 194 | 195 | 196 | 197 | 198 | 199 | 200 | 206 | 207 | 208 | 209 | 210 | 211 | 212 | 213 | 214 | 215 | 216 | 217 | 218 | 219 | 220 | 221 | 222 | 223 | 224 | 225 | 226 | 227 | 228 | 229 | 230 | 231 | 232 | 233 | 234 | 240 | 241 | 242 | 243 | 244 | 245 | 246 | 247 | 248 | 249 | 250 | 251 | 252 | 253 | 254 | 255 | 256 | 257 | 258 | 259 | 260 | 261 | 262 | 263 | 264 | 265 | 266 | 267 | 268 | 269 | 270 | 271 | 272 | 273 | 274 | -------------------------------------------------------------------------------- /RMPickerViewController-Demo/RMAppDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // RMAppDelegate.h 3 | // RMPickerViewController-Demo 4 | // 5 | // Created by Roland Moers on 26.10.13. 6 | // Copyright (c) 2013-2015 Roland Moers 7 | // 8 | // Permission is hereby granted, free of charge, to any person obtaining a copy 9 | // of this software and associated documentation files (the "Software"), to deal 10 | // in the Software without restriction, including without limitation the rights 11 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 12 | // copies of the Software, and to permit persons to whom the Software is 13 | // furnished to do so, subject to the following conditions: 14 | // 15 | // The above copyright notice and this permission notice shall be included in 16 | // all copies or substantial portions of the Software. 17 | // 18 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 19 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 20 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 21 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 22 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 23 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 24 | // THE SOFTWARE. 25 | // 26 | 27 | #import 28 | 29 | @interface RMAppDelegate : UIResponder 30 | 31 | @property (strong, nonatomic) UIWindow *window; 32 | 33 | @end 34 | -------------------------------------------------------------------------------- /RMPickerViewController-Demo/RMAppDelegate.m: -------------------------------------------------------------------------------- 1 | // 2 | // RMAppDelegate.m 3 | // RMPickerViewController-Demo 4 | // 5 | // Created by Roland Moers on 26.10.13. 6 | // Copyright (c) 2013-2015 Roland Moers 7 | // 8 | // Permission is hereby granted, free of charge, to any person obtaining a copy 9 | // of this software and associated documentation files (the "Software"), to deal 10 | // in the Software without restriction, including without limitation the rights 11 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 12 | // copies of the Software, and to permit persons to whom the Software is 13 | // furnished to do so, subject to the following conditions: 14 | // 15 | // The above copyright notice and this permission notice shall be included in 16 | // all copies or substantial portions of the Software. 17 | // 18 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 19 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 20 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 21 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 22 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 23 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 24 | // THE SOFTWARE. 25 | // 26 | 27 | #import "RMAppDelegate.h" 28 | 29 | @implementation RMAppDelegate 30 | 31 | - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 32 | return YES; 33 | } 34 | 35 | @end 36 | -------------------------------------------------------------------------------- /RMPickerViewController-Demo/RMPickerViewController-Demo-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleDisplayName 8 | ${PRODUCT_NAME} 9 | CFBundleExecutable 10 | ${EXECUTABLE_NAME} 11 | CFBundleIdentifier 12 | $(PRODUCT_BUNDLE_IDENTIFIER) 13 | CFBundleInfoDictionaryVersion 14 | 6.0 15 | CFBundleName 16 | ${PRODUCT_NAME} 17 | CFBundlePackageType 18 | APPL 19 | CFBundleShortVersionString 20 | 1.0 21 | CFBundleSignature 22 | ???? 23 | CFBundleVersion 24 | 1.0 25 | LSRequiresIPhoneOS 26 | 27 | UILaunchStoryboardName 28 | Launch Screen 29 | UIMainStoryboardFile 30 | Main 31 | UIMainStoryboardFile~ipad 32 | Main 33 | UIRequiredDeviceCapabilities 34 | 35 | armv7 36 | 37 | UISupportedInterfaceOrientations 38 | 39 | UIInterfaceOrientationPortrait 40 | UIInterfaceOrientationLandscapeLeft 41 | UIInterfaceOrientationLandscapeRight 42 | 43 | UISupportedInterfaceOrientations~ipad 44 | 45 | UIInterfaceOrientationPortrait 46 | UIInterfaceOrientationLandscapeRight 47 | UIInterfaceOrientationLandscapeLeft 48 | UIInterfaceOrientationPortraitUpsideDown 49 | 50 | 51 | 52 | -------------------------------------------------------------------------------- /RMPickerViewController-Demo/RMPickerViewController-Demo-Prefix.pch: -------------------------------------------------------------------------------- 1 | // 2 | // Prefix header 3 | // 4 | // The contents of this file are implicitly included at the beginning of every source file. 5 | // 6 | 7 | #import 8 | 9 | #ifndef __IPHONE_7_0 10 | #warning "This project uses features only available in iOS SDK 7.0 and later." 11 | #endif 12 | 13 | #ifdef __OBJC__ 14 | #import 15 | #import 16 | #endif 17 | -------------------------------------------------------------------------------- /RMPickerViewController-Demo/RMViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // RMViewController.h 3 | // RMPickerViewController-Demo 4 | // 5 | // Created by Roland Moers on 26.10.13. 6 | // Copyright (c) 2013-2015 Roland Moers 7 | // 8 | // Permission is hereby granted, free of charge, to any person obtaining a copy 9 | // of this software and associated documentation files (the "Software"), to deal 10 | // in the Software without restriction, including without limitation the rights 11 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 12 | // copies of the Software, and to permit persons to whom the Software is 13 | // furnished to do so, subject to the following conditions: 14 | // 15 | // The above copyright notice and this permission notice shall be included in 16 | // all copies or substantial portions of the Software. 17 | // 18 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 19 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 20 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 21 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 22 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 23 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 24 | // THE SOFTWARE. 25 | // 26 | 27 | #import 28 | 29 | #import "RMPickerViewController.h" 30 | 31 | @interface RMViewController : UITableViewController 32 | 33 | @end 34 | -------------------------------------------------------------------------------- /RMPickerViewController-Demo/RMViewController.m: -------------------------------------------------------------------------------- 1 | // 2 | // RMViewController.m 3 | // RMPickerViewController-Demo 4 | // 5 | // Created by Roland Moers on 26.10.13. 6 | // Copyright (c) 2013-2015 Roland Moers 7 | // 8 | // Permission is hereby granted, free of charge, to any person obtaining a copy 9 | // of this software and associated documentation files (the "Software"), to deal 10 | // in the Software without restriction, including without limitation the rights 11 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 12 | // copies of the Software, and to permit persons to whom the Software is 13 | // furnished to do so, subject to the following conditions: 14 | // 15 | // The above copyright notice and this permission notice shall be included in 16 | // all copies or substantial portions of the Software. 17 | // 18 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 19 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 20 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 21 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 22 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 23 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 24 | // THE SOFTWARE. 25 | // 26 | 27 | #import "RMViewController.h" 28 | 29 | @interface RMViewController () 30 | 31 | @property (nonatomic, weak) IBOutlet UISwitch *blackSwitch; 32 | @property (nonatomic, weak) IBOutlet UISwitch *blurSwitch; 33 | @property (nonatomic, weak) IBOutlet UISwitch *blurActionSwitch; 34 | @property (nonatomic, weak) IBOutlet UISwitch *motionSwitch; 35 | @property (nonatomic, weak) IBOutlet UISwitch *bouncingSwitch; 36 | 37 | @end 38 | 39 | @implementation RMViewController 40 | 41 | #pragma mark - Actions 42 | - (IBAction)openPickerController:(id)sender { 43 | RMActionControllerStyle style = RMActionControllerStyleWhite; 44 | if(self.blackSwitch.on) { 45 | style = RMActionControllerStyleBlack; 46 | } 47 | 48 | RMAction *selectAction = [RMAction actionWithTitle:@"Select" style:RMActionStyleDone andHandler:^(RMActionController *controller) { 49 | NSMutableArray *selectedRows = [NSMutableArray array]; 50 | 51 | for(NSInteger i=0 ; i<[controller.contentView numberOfComponents] ; i++) { 52 | [selectedRows addObject:@([controller.contentView selectedRowInComponent:i])]; 53 | } 54 | 55 | NSLog(@"Successfully selected rows: %@", selectedRows); 56 | }]; 57 | 58 | RMAction *cancelAction = [RMAction actionWithTitle:@"Cancel" style:RMActionStyleCancel andHandler:^(RMActionController *controller) { 59 | NSLog(@"Row selection was canceled"); 60 | }]; 61 | 62 | RMPickerViewController *pickerController = [RMPickerViewController actionControllerWithStyle:style]; 63 | pickerController.title = @"Test"; 64 | pickerController.message = @"This is a test message.\nPlease choose a row and press 'Select' or 'Cancel'."; 65 | pickerController.picker.dataSource = self; 66 | pickerController.picker.delegate = self; 67 | 68 | [pickerController addAction:selectAction]; 69 | [pickerController addAction:cancelAction]; 70 | 71 | //You can enable or disable blur, bouncing and motion effects 72 | pickerController.disableBouncingEffects = !self.bouncingSwitch.on; 73 | pickerController.disableMotionEffects = !self.motionSwitch.on; 74 | pickerController.disableBlurEffects = !self.blurSwitch.on; 75 | pickerController.disableBlurEffectsForActions = !self.blurActionSwitch.on; 76 | 77 | //On the iPad we want to show the picker view controller within a popover. Fortunately, we can use iOS 8 API for this! :) 78 | //(Of course only if we are running on iOS 8 or later) 79 | if([pickerController respondsToSelector:@selector(popoverPresentationController)] && [UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPad) { 80 | //First we set the modal presentation style to the popover style 81 | pickerController.modalPresentationStyle = UIModalPresentationPopover; 82 | 83 | //Then we tell the popover presentation controller, where the popover should appear 84 | pickerController.popoverPresentationController.sourceView = self.tableView; 85 | pickerController.popoverPresentationController.sourceRect = [self.tableView rectForRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0]]; 86 | } 87 | 88 | //Now just present the picker view controller using the standard iOS presentation method 89 | [self presentViewController:pickerController animated:YES completion:nil]; 90 | } 91 | 92 | #pragma mark - UITableView Delegates 93 | - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 94 | if(indexPath.section == 0 && indexPath.row == 0) { 95 | [self openPickerController:self]; 96 | } 97 | 98 | [self.tableView deselectRowAtIndexPath:indexPath animated:YES]; 99 | } 100 | 101 | #pragma mark - RMPickerViewController Delegates 102 | - (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView { 103 | return 1; 104 | } 105 | 106 | - (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component { 107 | return 5; 108 | } 109 | 110 | - (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component { 111 | return [NSString stringWithFormat:@"Row %lu", (long)row]; 112 | } 113 | 114 | @end 115 | -------------------------------------------------------------------------------- /RMPickerViewController-Demo/main.m: -------------------------------------------------------------------------------- 1 | // 2 | // main.m 3 | // RMPickerViewController-Demo 4 | // 5 | // Created by Roland Moers on 26.10.13. 6 | // Copyright (c) 2013 Roland Moers 7 | // 8 | // Permission is hereby granted, free of charge, to any person obtaining a copy 9 | // of this software and associated documentation files (the "Software"), to deal 10 | // in the Software without restriction, including without limitation the rights 11 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 12 | // copies of the Software, and to permit persons to whom the Software is 13 | // furnished to do so, subject to the following conditions: 14 | // 15 | // The above copyright notice and this permission notice shall be included in 16 | // all copies or substantial portions of the Software. 17 | // 18 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 19 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 20 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 21 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 22 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 23 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 24 | // THE SOFTWARE. 25 | // 26 | 27 | #import 28 | 29 | #import "RMAppDelegate.h" 30 | 31 | int main(int argc, char * argv[]) 32 | { 33 | @autoreleasepool { 34 | return UIApplicationMain(argc, argv, nil, NSStringFromClass([RMAppDelegate class])); 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /RMPickerViewController-DemoExtension/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleDisplayName 8 | RMPickerViewController-DemoExtension 9 | CFBundleExecutable 10 | $(EXECUTABLE_NAME) 11 | CFBundleIdentifier 12 | $(PRODUCT_BUNDLE_IDENTIFIER) 13 | CFBundleInfoDictionaryVersion 14 | 6.0 15 | CFBundleName 16 | $(PRODUCT_NAME) 17 | CFBundlePackageType 18 | XPC! 19 | CFBundleShortVersionString 20 | 1.0 21 | CFBundleSignature 22 | ???? 23 | CFBundleVersion 24 | 1 25 | NSExtension 26 | 27 | NSExtensionAttributes 28 | 29 | NSExtensionActivationRule 30 | TRUEPREDICATE 31 | 32 | NSExtensionMainStoryboard 33 | MainInterface 34 | NSExtensionPointIdentifier 35 | com.apple.ui-services 36 | 37 | 38 | 39 | -------------------------------------------------------------------------------- /RMPickerViewController-DemoExtension/MainInterface.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | 160 | 161 | 162 | 163 | 164 | 165 | 166 | 167 | 168 | 169 | 170 | 176 | 177 | 178 | 179 | 180 | 181 | 182 | 183 | 184 | 185 | 186 | 187 | 188 | 189 | 190 | 191 | 192 | 193 | 194 | 195 | 196 | 197 | 198 | 199 | 200 | 206 | 207 | 208 | 209 | 210 | 211 | 212 | 213 | 214 | 215 | 216 | 217 | 218 | 219 | 220 | 221 | 222 | 223 | 224 | 225 | 226 | 227 | 228 | 229 | 230 | 231 | 232 | 233 | 234 | 240 | 241 | 242 | 243 | 244 | 245 | 246 | 247 | 248 | 249 | 250 | 251 | 252 | 253 | 254 | 255 | 256 | 257 | 258 | 259 | 260 | 261 | 262 | 263 | 264 | 265 | 266 | 267 | 268 | 269 | 270 | 271 | 272 | 273 | 274 | -------------------------------------------------------------------------------- /RMPickerViewController-SwiftDemo/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.swift 3 | // RMPickerViewController-SwiftDemo 4 | // 5 | // Created by Roland Moers on 09.11.15. 6 | // Copyright © 2015 Roland Moers. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | @UIApplicationMain 12 | 13 | class AppDelegate: UIResponder, UIApplicationDelegate, UISplitViewControllerDelegate { 14 | 15 | var window: UIWindow? 16 | 17 | } 18 | 19 | -------------------------------------------------------------------------------- /RMPickerViewController-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 | "idiom" : "ipad", 35 | "size" : "29x29", 36 | "scale" : "1x" 37 | }, 38 | { 39 | "idiom" : "ipad", 40 | "size" : "29x29", 41 | "scale" : "2x" 42 | }, 43 | { 44 | "idiom" : "ipad", 45 | "size" : "40x40", 46 | "scale" : "1x" 47 | }, 48 | { 49 | "idiom" : "ipad", 50 | "size" : "40x40", 51 | "scale" : "2x" 52 | }, 53 | { 54 | "idiom" : "ipad", 55 | "size" : "76x76", 56 | "scale" : "1x" 57 | }, 58 | { 59 | "idiom" : "ipad", 60 | "size" : "76x76", 61 | "scale" : "2x" 62 | } 63 | ], 64 | "info" : { 65 | "version" : 1, 66 | "author" : "xcode" 67 | } 68 | } -------------------------------------------------------------------------------- /RMPickerViewController-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 | 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /RMPickerViewController-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 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | 160 | 161 | 162 | 163 | 164 | 165 | 166 | 167 | 168 | 169 | 170 | 176 | 177 | 178 | 179 | 180 | 181 | 182 | 183 | 184 | 185 | 186 | 187 | 188 | 189 | 190 | 191 | 192 | 193 | 194 | 195 | 196 | 197 | 198 | 199 | 200 | 206 | 207 | 208 | 209 | 210 | 211 | 212 | 213 | 214 | 215 | 216 | 217 | 218 | 219 | 220 | 221 | 222 | 223 | 224 | 225 | 226 | 227 | 228 | 229 | 230 | 231 | 232 | 233 | 234 | 240 | 241 | 242 | 243 | 244 | 245 | 246 | 247 | 248 | 249 | 250 | 251 | 252 | 253 | 254 | 255 | 256 | 257 | 258 | 259 | 260 | 261 | 262 | 263 | 264 | 265 | 266 | 267 | 268 | 269 | 270 | 271 | 272 | 273 | 274 | -------------------------------------------------------------------------------- /RMPickerViewController-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 | UIStatusBarTintParameters 34 | 35 | UINavigationBar 36 | 37 | Style 38 | UIBarStyleDefault 39 | Translucent 40 | 41 | 42 | 43 | UISupportedInterfaceOrientations 44 | 45 | UIInterfaceOrientationPortrait 46 | UIInterfaceOrientationLandscapeLeft 47 | UIInterfaceOrientationLandscapeRight 48 | 49 | UISupportedInterfaceOrientations~ipad 50 | 51 | UIInterfaceOrientationPortrait 52 | UIInterfaceOrientationPortraitUpsideDown 53 | UIInterfaceOrientationLandscapeLeft 54 | UIInterfaceOrientationLandscapeRight 55 | 56 | 57 | 58 | -------------------------------------------------------------------------------- /RMPickerViewController-SwiftDemo/ViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // MasterViewController.swift 3 | // RMActionController-SwiftDemo 4 | // 5 | // Created by Roland Moers on 19.08.15. 6 | // Copyright (c) 2015 Roland Moers. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | import RMPickerViewController 11 | 12 | class ViewController: UITableViewController, UIPickerViewDelegate, UIPickerViewDataSource { 13 | 14 | //MARK: Properties 15 | @IBOutlet weak var blackSwitch: UISwitch! 16 | @IBOutlet weak var blurSwitch: UISwitch! 17 | @IBOutlet weak var blurActionSwitch: UISwitch! 18 | @IBOutlet weak var motionSwitch: UISwitch! 19 | @IBOutlet weak var bouncingSwitch: UISwitch! 20 | 21 | // MARK: Actions 22 | func openPickerViewController() { 23 | var style = RMActionControllerStyle.white 24 | if self.blackSwitch.isOn { 25 | style = RMActionControllerStyle.black 26 | } 27 | 28 | let selectAction = RMAction(title: "Select", style: .done) { controller in 29 | let selectedRows = NSMutableArray(); 30 | for i in 0 ..< controller.contentView.numberOfComponents { 31 | selectedRows.add(controller.contentView.selectedRow(inComponent: i)); 32 | } 33 | print("Successfully selected rows: ", selectedRows); 34 | } 35 | 36 | let cancelAction = RMAction(title: "Cancel", style: .cancel) { _ in 37 | print("Row selection was canceled") 38 | } 39 | 40 | let actionController = RMPickerViewController(style: style, title: "Test", message: "This is a test message.\nPlease choose a row and press 'Select' or 'Cancel'.", select: selectAction, andCancel: cancelAction); 41 | 42 | //You can enable or disable blur, bouncing and motion effects 43 | actionController.disableBouncingEffects = !self.bouncingSwitch.isOn 44 | actionController.disableMotionEffects = !self.motionSwitch.isOn 45 | actionController.disableBlurEffects = !self.blurSwitch.isOn 46 | actionController.disableBlurEffectsForActions = !self.blurActionSwitch.isOn 47 | 48 | actionController.picker.delegate = self; 49 | actionController.picker.dataSource = self; 50 | 51 | //On the iPad we want to show the date selection view controller within a popover. Fortunately, we can use iOS 8 API for this! :) 52 | //(Of course only if we are running on iOS 8 or later) 53 | if actionController.responds(to: Selector(("popoverPresentationController:"))) && UIDevice.current.userInterfaceIdiom == UIUserInterfaceIdiom.pad { 54 | //First we set the modal presentation style to the popover style 55 | actionController.modalPresentationStyle = UIModalPresentationStyle.popover 56 | 57 | //Then we tell the popover presentation controller, where the popover should appear 58 | if let popoverPresentationController = actionController.popoverPresentationController { 59 | popoverPresentationController.sourceView = self.tableView 60 | popoverPresentationController.sourceRect = self.tableView.rectForRow(at: IndexPath(row: 0, section: 0)) 61 | } 62 | } 63 | 64 | //Now just present the date selection controller using the standard iOS presentation method 65 | present(actionController, animated: true, completion: nil) 66 | } 67 | 68 | // MARK: UITableView Delegates 69 | override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 70 | if indexPath.section == 0 && indexPath.row == 0 { 71 | openPickerViewController() 72 | } 73 | tableView.deselectRow(at: indexPath, animated: true) 74 | } 75 | 76 | // MARK: UIPickerView Delegates 77 | func numberOfComponents(in pickerView: UIPickerView) -> Int { 78 | return 1; 79 | } 80 | 81 | func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int { 82 | return 5; 83 | } 84 | 85 | func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? { 86 | return NSString(format: "Row %lu", row) as String; 87 | } 88 | 89 | } 90 | 91 | -------------------------------------------------------------------------------- /RMPickerViewController.podspec: -------------------------------------------------------------------------------- 1 | Pod::Spec.new do |s| 2 | s.name = "RMPickerViewController" 3 | s.version = "2.3.1" 4 | s.platform = :ios, "8.0" 5 | s.summary = "This is an iOS control for selecting something using UIPickerView in a UIAlertController like fashion" 6 | s.description = "This framework allows you to pick something with a picker presented as an action sheet. In addition, it allows you to add actions arround the presented picker which behave like a button and can be tapped by the user. The result looks very much like an UIActionSheet or UIAlertController with a UIPickerView and some UIActions attached." 7 | 8 | s.homepage = "https://github.com/CooperRS/RMPickerViewController" 9 | s.screenshots = "http://cooperrs.github.io/RMPickerViewController/images/Blur-Screen1.png", "http://cooperrs.github.io/RMPickerViewController/images/Blur-Screen2.png", "http://cooperrs.github.io/RMPickerViewController/images/Blur-Screen3.png" 10 | 11 | s.license = { :type => 'MIT', :file => 'LICENSE' } 12 | s.author = { "Roland Moers" => "rm@cooperrs.de" } 13 | 14 | s.source = { :git => "https://github.com/CooperRS/RMPickerViewController.git", :tag => "2.3.1" } 15 | s.source_files = 'RMPickerViewController/*.{h,m}' 16 | s.requires_arc = true 17 | 18 | s.dependency 'RMActionController', '~> 1.3.1' 19 | end 20 | -------------------------------------------------------------------------------- /RMPickerViewController/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 19 | CFBundleVersion 20 | $(CURRENT_PROJECT_VERSION) 21 | NSPrincipalClass 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /RMPickerViewController/RMPickerViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // RMPickerViewController.h 3 | // RMPickerViewController 4 | // 5 | // Created by Roland Moers on 26.10.13. 6 | // Copyright (c) 2013-2015 Roland Moers 7 | // 8 | // Permission is hereby granted, free of charge, to any person obtaining a copy 9 | // of this software and associated documentation files (the "Software"), to deal 10 | // in the Software without restriction, including without limitation the rights 11 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 12 | // copies of the Software, and to permit persons to whom the Software is 13 | // furnished to do so, subject to the following conditions: 14 | // 15 | // The above copyright notice and this permission notice shall be included in 16 | // all copies or substantial portions of the Software. 17 | // 18 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 19 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 20 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 21 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 22 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 23 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 24 | // THE SOFTWARE. 25 | // 26 | 27 | #import 28 | 29 | /** 30 | * RMPickerViewController is an iOS control for selecting a row using UIPickerView in a UIActionSheet like fashion. When a RMPickerViewController is shown the user gets the opportunity to select some rows using a UIPickerView. 31 | * 32 | * RMPickerViewController supports bouncing effects when animating the picker view controller. In addition, motion effects are supported while showing the picker view controller. Both effects can be disabled by using the properties called disableBouncingWhenShowing and disableMotionEffects. 33 | * 34 | * On iOS 8 and later Apple opened up their API for blurring the background of UIViews. RMPickerViewController makes use of this API. The type of the blur effect can be changed by using the blurEffectStyle property. If you want to disable the blur effect you can do so by using the disableBlurEffects property. 35 | * 36 | * @warning RMPickerViewController is not designed to be reused. Each time you want to display a RMPickerViewController a new instance should be created. If you want to select a specific row before displaying, you can do so by using the picker property. 37 | */ 38 | @interface RMPickerViewController : RMActionController 39 | 40 | /// @name User Interface 41 | 42 | /** 43 | * Will return the instance of UIPickerView that is used. 44 | */ 45 | @property (nonatomic, readonly) UIPickerView *picker; 46 | 47 | @end 48 | -------------------------------------------------------------------------------- /RMPickerViewController/RMPickerViewController.m: -------------------------------------------------------------------------------- 1 | // 2 | // RMPickerViewController.m 3 | // RMPickerViewController 4 | // 5 | // Created by Roland Moers on 26.10.13. 6 | // Copyright (c) 2013-2015 Roland Moers 7 | // 8 | // Permission is hereby granted, free of charge, to any person obtaining a copy 9 | // of this software and associated documentation files (the "Software"), to deal 10 | // in the Software without restriction, including without limitation the rights 11 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 12 | // copies of the Software, and to permit persons to whom the Software is 13 | // furnished to do so, subject to the following conditions: 14 | // 15 | // The above copyright notice and this permission notice shall be included in 16 | // all copies or substantial portions of the Software. 17 | // 18 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 19 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 20 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 21 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 22 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 23 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 24 | // THE SOFTWARE. 25 | // 26 | 27 | #import "RMPickerViewController.h" 28 | #import 29 | 30 | #define RM_PICKER_HEIGHT_PORTRAIT 216 31 | #define RM_PICKER_HEIGHT_LANDSCAPE 162 32 | 33 | #if !__has_feature(attribute_availability_app_extension) 34 | //Normal App 35 | #define RM_CURRENT_ORIENTATION_IS_LANDSCAPE_PREDICATE UIInterfaceOrientationIsLandscape([UIApplication sharedApplication].statusBarOrientation) 36 | #else 37 | //App Extension 38 | #define RM_CURRENT_ORIENTATION_IS_LANDSCAPE_PREDICATE [UIScreen mainScreen].bounds.size.height < [UIScreen mainScreen].bounds.size.width 39 | #endif 40 | 41 | @interface RMPickerViewController () 42 | 43 | @property (nonatomic, readwrite, strong) UIPickerView *picker; 44 | @property (nonatomic, weak) NSLayoutConstraint *pickerHeightConstraint; 45 | 46 | @end 47 | 48 | @implementation RMPickerViewController 49 | 50 | #pragma mark - Class 51 | - (instancetype)initWithStyle:(RMActionControllerStyle)style title:(NSString *)aTitle message:(NSString *)aMessage selectAction:(RMAction *)selectAction andCancelAction:(RMAction *)cancelAction { 52 | self = [super initWithStyle:style title:aTitle message:aMessage selectAction:selectAction andCancelAction:cancelAction]; 53 | if(self) { 54 | self.picker = [[UIPickerView alloc] initWithFrame:CGRectZero]; 55 | self.picker.translatesAutoresizingMaskIntoConstraints = NO; 56 | 57 | self.pickerHeightConstraint = [NSLayoutConstraint constraintWithItem:self.picker attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1 constant:0]; 58 | 59 | if(RM_CURRENT_ORIENTATION_IS_LANDSCAPE_PREDICATE) { 60 | self.pickerHeightConstraint.constant = RM_PICKER_HEIGHT_LANDSCAPE; 61 | } else { 62 | self.pickerHeightConstraint.constant = RM_PICKER_HEIGHT_PORTRAIT; 63 | } 64 | 65 | [self.picker addConstraint:self.pickerHeightConstraint]; 66 | } 67 | return self; 68 | } 69 | 70 | #pragma mark - Init and Dealloc 71 | - (void)viewDidAppear:(BOOL)animated { 72 | [super viewDidAppear:animated]; 73 | 74 | [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(didRotate) name:UIApplicationDidChangeStatusBarOrientationNotification object:nil]; 75 | } 76 | 77 | - (void)viewDidDisappear:(BOOL)animated { 78 | [[NSNotificationCenter defaultCenter] removeObserver:self name:UIApplicationDidChangeStatusBarOrientationNotification object:nil]; 79 | 80 | [super viewDidDisappear:animated]; 81 | } 82 | 83 | #pragma mark - Orientation 84 | - (void)didRotate { 85 | NSTimeInterval duration = 0.4; 86 | 87 | if([UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPhone) { 88 | duration = 0.3; 89 | 90 | if(RM_CURRENT_ORIENTATION_IS_LANDSCAPE_PREDICATE) { 91 | self.pickerHeightConstraint.constant = RM_PICKER_HEIGHT_LANDSCAPE; 92 | } else { 93 | self.pickerHeightConstraint.constant = RM_PICKER_HEIGHT_PORTRAIT; 94 | } 95 | 96 | [self.picker setNeedsUpdateConstraints]; 97 | [self.picker layoutIfNeeded]; 98 | } 99 | 100 | [self.view.superview setNeedsUpdateConstraints]; 101 | __weak RMPickerViewController *blockself = self; 102 | [UIView animateWithDuration:duration delay:0 options:UIViewAnimationOptionBeginFromCurrentState animations:^{ 103 | [blockself.view.superview layoutIfNeeded]; 104 | } completion:^(BOOL finished) { 105 | }]; 106 | } 107 | 108 | #pragma mark - Properties 109 | - (UIView *)contentView { 110 | return self.picker; 111 | } 112 | 113 | @end 114 | --------------------------------------------------------------------------------