├── .gitignore ├── .travis.yml ├── Example ├── Pikko.xcodeproj │ ├── project.pbxproj │ ├── project.xcworkspace │ │ └── contents.xcworkspacedata │ └── xcshareddata │ │ └── xcschemes │ │ └── Pikko-Example.xcscheme ├── Pikko.xcworkspace │ ├── contents.xcworkspacedata │ └── xcshareddata │ │ └── IDEWorkspaceChecks.plist ├── Pikko │ ├── AppDelegate.swift │ ├── Base.lproj │ │ ├── LaunchScreen.xib │ │ └── Main.storyboard │ ├── Images.xcassets │ │ └── AppIcon.appiconset │ │ │ └── Contents.json │ ├── Info.plist │ └── ViewController.swift ├── Podfile ├── Podfile.lock ├── Pods │ ├── Local Podspecs │ │ └── Pikko.podspec.json │ ├── Manifest.lock │ ├── Pods.xcodeproj │ │ ├── project.pbxproj │ │ └── xcshareddata │ │ │ └── xcschemes │ │ │ └── Pikko.xcscheme │ └── Target Support Files │ │ ├── Pikko │ │ ├── Pikko-Info.plist │ │ ├── Pikko-dummy.m │ │ ├── Pikko-prefix.pch │ │ ├── Pikko-umbrella.h │ │ ├── Pikko.modulemap │ │ └── Pikko.xcconfig │ │ ├── Pods-Pikko_Example │ │ ├── Pods-Pikko_Example-Info.plist │ │ ├── Pods-Pikko_Example-acknowledgements.markdown │ │ ├── Pods-Pikko_Example-acknowledgements.plist │ │ ├── Pods-Pikko_Example-dummy.m │ │ ├── Pods-Pikko_Example-frameworks.sh │ │ ├── Pods-Pikko_Example-umbrella.h │ │ ├── Pods-Pikko_Example.debug.xcconfig │ │ ├── Pods-Pikko_Example.modulemap │ │ └── Pods-Pikko_Example.release.xcconfig │ │ └── Pods-Pikko_Tests │ │ ├── Pods-Pikko_Tests-Info.plist │ │ ├── Pods-Pikko_Tests-acknowledgements.markdown │ │ ├── Pods-Pikko_Tests-acknowledgements.plist │ │ ├── Pods-Pikko_Tests-dummy.m │ │ ├── Pods-Pikko_Tests-umbrella.h │ │ ├── Pods-Pikko_Tests.debug.xcconfig │ │ ├── Pods-Pikko_Tests.modulemap │ │ └── Pods-Pikko_Tests.release.xcconfig └── Tests │ ├── Info.plist │ └── Tests.swift ├── LICENSE ├── Package.swift ├── Pikko.podspec ├── Pikko ├── .gitignore ├── .swiftpm │ └── xcode │ │ ├── package.xcworkspace │ │ └── contents.xcworkspacedata │ │ └── xcshareddata │ │ └── xcschemes │ │ ├── Pikko.xcscheme │ │ └── Scheme.xcscheme ├── Sources │ └── Pikko │ │ └── Classes │ │ ├── .gitkeep │ │ ├── Delegate │ │ ├── HueDelegate.swift │ │ └── PikkoDelegate.swift │ │ ├── UI │ │ ├── BrightnessSaturationView.swift │ │ ├── HueView.swift │ │ └── Pikko.swift │ │ └── Util │ │ ├── Animations.swift │ │ ├── ColorUtilities.swift │ │ └── UIColor+HSBAComponents.swift └── Tests │ ├── LinuxMain.swift │ └── PikkoTests │ ├── PikkoTests.swift │ └── XCTestManifests.swift ├── README.md ├── _Pods.xcodeproj ├── doc └── demo.gif └── src └── Example └── Pikko.xcworkspace └── xcshareddata └── IDEWorkspaceChecks.plist /.gitignore: -------------------------------------------------------------------------------- 1 | # OS X 2 | .DS_Store 3 | 4 | # Xcode 5 | # 6 | # gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore 7 | 8 | ## Build generated 9 | build/ 10 | DerivedData/ 11 | 12 | ## Various settings 13 | *.pbxuser 14 | !default.pbxuser 15 | *.mode1v3 16 | !default.mode1v3 17 | *.mode2v3 18 | !default.mode2v3 19 | *.perspectivev3 20 | !default.perspectivev3 21 | xcuserdata/ 22 | *.xccheckout 23 | profile 24 | *.moved-aside 25 | DerivedData 26 | *.hmap 27 | *.ipa 28 | 29 | # Bundler 30 | .bundle 31 | 32 | ## Other 33 | *.moved-aside 34 | *.xccheckout 35 | *.xcscmblueprint 36 | 37 | ## Obj-C/Swift specific 38 | *.hmap 39 | *.ipa 40 | *.dSYM.zip 41 | *.dSYM 42 | 43 | ## Playgrounds 44 | timeline.xctimeline 45 | playground.xcworkspace 46 | 47 | # Swift Package Manager 48 | # 49 | # Add this line if you want to avoid checking in source code from Swift Package Manager dependencies. 50 | # Packages/ 51 | # Package.pins 52 | # Package.resolved 53 | .build/ 54 | 55 | # CocoaPods 56 | # 57 | # We recommend against adding the Pods directory to your .gitignore. However 58 | # you should judge for yourself, the pros and cons are mentioned at: 59 | # https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control 60 | # 61 | # Pods/ 62 | 63 | # Carthage 64 | # 65 | # Add this line if you want to avoid checking in source code from Carthage dependencies. 66 | # Carthage/Checkouts 67 | 68 | Carthage/Build 69 | 70 | # We recommend against adding the Pods directory to your .gitignore. However 71 | # you should judge for yourself, the pros and cons are mentioned at: 72 | # https://guides.cocoapods.org/using/using-cocoapods.html#should-i-ignore-the-pods-directory-in-source-control 73 | # 74 | # Note: if you ignore the Pods directory, make sure to uncomment 75 | # `pod install` in .travis.yml 76 | # 77 | # Pods/ 78 | # fastlane 79 | # 80 | # It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the 81 | # screenshots whenever they are needed. 82 | # For more information about the recommended setup visit: 83 | # https://docs.fastlane.tools/best-practices/source-control/#source-control 84 | 85 | fastlane/report.xml 86 | fastlane/Preview.html 87 | fastlane/screenshots/**/*.png 88 | fastlane/test_output 89 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | osx_image: xcode10.1 2 | language: swift 3 | cache: cocoapods 4 | podfile: Example/Podfile 5 | before_install: 6 | - gem install cocoapods # Since Travis is not always on latest version 7 | - pod install --project-directory=Example 8 | script: 9 | - set -o pipefail && xcodebuild build -workspace Example/Pikko.xcworkspace -scheme Pikko-Example -sdk iphonesimulator CODE_SIGNING_REQUIRED=NO | xcpretty 10 | - pod lib lint 11 | -------------------------------------------------------------------------------- /Example/Pikko.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 30E8DF577A3BCDD46D3F4206 /* Pods_Pikko_Example.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6C363E4BCBB3B1B690A79487 /* Pods_Pikko_Example.framework */; }; 11 | 607FACD61AFB9204008FA782 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 607FACD51AFB9204008FA782 /* AppDelegate.swift */; }; 12 | 607FACD81AFB9204008FA782 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 607FACD71AFB9204008FA782 /* ViewController.swift */; }; 13 | 607FACDB1AFB9204008FA782 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 607FACD91AFB9204008FA782 /* Main.storyboard */; }; 14 | 607FACDD1AFB9204008FA782 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 607FACDC1AFB9204008FA782 /* Images.xcassets */; }; 15 | 607FACE01AFB9204008FA782 /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 607FACDE1AFB9204008FA782 /* LaunchScreen.xib */; }; 16 | 607FACEC1AFB9204008FA782 /* Tests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 607FACEB1AFB9204008FA782 /* Tests.swift */; }; 17 | 7FCB3BA7D2A0884FD5C2FEA3 /* Pods_Pikko_Tests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D1AA065DB4986AB04236B01C /* Pods_Pikko_Tests.framework */; }; 18 | /* End PBXBuildFile section */ 19 | 20 | /* Begin PBXContainerItemProxy section */ 21 | 607FACE61AFB9204008FA782 /* PBXContainerItemProxy */ = { 22 | isa = PBXContainerItemProxy; 23 | containerPortal = 607FACC81AFB9204008FA782 /* Project object */; 24 | proxyType = 1; 25 | remoteGlobalIDString = 607FACCF1AFB9204008FA782; 26 | remoteInfo = Pikko; 27 | }; 28 | /* End PBXContainerItemProxy section */ 29 | 30 | /* Begin PBXFileReference section */ 31 | 263A602C6D1AFE03941D37EA /* Pods-Pikko_Example.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Pikko_Example.release.xcconfig"; path = "Target Support Files/Pods-Pikko_Example/Pods-Pikko_Example.release.xcconfig"; sourceTree = ""; }; 32 | 5068D7A093398C4632900AD1 /* LICENSE */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; name = LICENSE; path = ../LICENSE; sourceTree = ""; }; 33 | 607FACD01AFB9204008FA782 /* Pikko_Example.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Pikko_Example.app; sourceTree = BUILT_PRODUCTS_DIR; }; 34 | 607FACD41AFB9204008FA782 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 35 | 607FACD51AFB9204008FA782 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 36 | 607FACD71AFB9204008FA782 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; 37 | 607FACDA1AFB9204008FA782 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 38 | 607FACDC1AFB9204008FA782 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = ""; }; 39 | 607FACDF1AFB9204008FA782 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/LaunchScreen.xib; sourceTree = ""; }; 40 | 607FACE51AFB9204008FA782 /* Pikko_Tests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Pikko_Tests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 41 | 607FACEA1AFB9204008FA782 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 42 | 607FACEB1AFB9204008FA782 /* Tests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Tests.swift; sourceTree = ""; }; 43 | 6C363E4BCBB3B1B690A79487 /* Pods_Pikko_Example.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Pikko_Example.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 44 | 9E7C95DBBE42B5B0B888AF02 /* Pods-Pikko_Tests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Pikko_Tests.debug.xcconfig"; path = "Target Support Files/Pods-Pikko_Tests/Pods-Pikko_Tests.debug.xcconfig"; sourceTree = ""; }; 45 | D1AA065DB4986AB04236B01C /* Pods_Pikko_Tests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Pikko_Tests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 46 | DC8311CAC476C576C53DAF57 /* Pods-Pikko_Tests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Pikko_Tests.release.xcconfig"; path = "Target Support Files/Pods-Pikko_Tests/Pods-Pikko_Tests.release.xcconfig"; sourceTree = ""; }; 47 | E60B7588F1812AFA869FEC36 /* Pikko.podspec */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; name = Pikko.podspec; path = ../Pikko.podspec; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; 48 | EE240BBFAE6B0E18FFF3C11A /* Pods-Pikko_Example.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Pikko_Example.debug.xcconfig"; path = "Target Support Files/Pods-Pikko_Example/Pods-Pikko_Example.debug.xcconfig"; sourceTree = ""; }; 49 | /* End PBXFileReference section */ 50 | 51 | /* Begin PBXFrameworksBuildPhase section */ 52 | 607FACCD1AFB9204008FA782 /* Frameworks */ = { 53 | isa = PBXFrameworksBuildPhase; 54 | buildActionMask = 2147483647; 55 | files = ( 56 | 30E8DF577A3BCDD46D3F4206 /* Pods_Pikko_Example.framework in Frameworks */, 57 | ); 58 | runOnlyForDeploymentPostprocessing = 0; 59 | }; 60 | 607FACE21AFB9204008FA782 /* Frameworks */ = { 61 | isa = PBXFrameworksBuildPhase; 62 | buildActionMask = 2147483647; 63 | files = ( 64 | 7FCB3BA7D2A0884FD5C2FEA3 /* Pods_Pikko_Tests.framework in Frameworks */, 65 | ); 66 | runOnlyForDeploymentPostprocessing = 0; 67 | }; 68 | /* End PBXFrameworksBuildPhase section */ 69 | 70 | /* Begin PBXGroup section */ 71 | 607FACC71AFB9204008FA782 = { 72 | isa = PBXGroup; 73 | children = ( 74 | 607FACF51AFB993E008FA782 /* Podspec Metadata */, 75 | 607FACD21AFB9204008FA782 /* Example for Pikko */, 76 | 607FACE81AFB9204008FA782 /* Tests */, 77 | 607FACD11AFB9204008FA782 /* Products */, 78 | 7434D7B327BD5B6079EE207C /* Pods */, 79 | 6C1812D78AC45E52F66B7490 /* Frameworks */, 80 | ); 81 | sourceTree = ""; 82 | }; 83 | 607FACD11AFB9204008FA782 /* Products */ = { 84 | isa = PBXGroup; 85 | children = ( 86 | 607FACD01AFB9204008FA782 /* Pikko_Example.app */, 87 | 607FACE51AFB9204008FA782 /* Pikko_Tests.xctest */, 88 | ); 89 | name = Products; 90 | sourceTree = ""; 91 | }; 92 | 607FACD21AFB9204008FA782 /* Example for Pikko */ = { 93 | isa = PBXGroup; 94 | children = ( 95 | 607FACD51AFB9204008FA782 /* AppDelegate.swift */, 96 | 607FACD71AFB9204008FA782 /* ViewController.swift */, 97 | 607FACD91AFB9204008FA782 /* Main.storyboard */, 98 | 607FACDE1AFB9204008FA782 /* LaunchScreen.xib */, 99 | 607FACDC1AFB9204008FA782 /* Images.xcassets */, 100 | 607FACD31AFB9204008FA782 /* Supporting Files */, 101 | ); 102 | name = "Example for Pikko"; 103 | path = Pikko; 104 | sourceTree = ""; 105 | }; 106 | 607FACD31AFB9204008FA782 /* Supporting Files */ = { 107 | isa = PBXGroup; 108 | children = ( 109 | 607FACD41AFB9204008FA782 /* Info.plist */, 110 | ); 111 | name = "Supporting Files"; 112 | sourceTree = ""; 113 | }; 114 | 607FACE81AFB9204008FA782 /* Tests */ = { 115 | isa = PBXGroup; 116 | children = ( 117 | 607FACEB1AFB9204008FA782 /* Tests.swift */, 118 | 607FACE91AFB9204008FA782 /* Supporting Files */, 119 | ); 120 | path = Tests; 121 | sourceTree = ""; 122 | }; 123 | 607FACE91AFB9204008FA782 /* Supporting Files */ = { 124 | isa = PBXGroup; 125 | children = ( 126 | 607FACEA1AFB9204008FA782 /* Info.plist */, 127 | ); 128 | name = "Supporting Files"; 129 | sourceTree = ""; 130 | }; 131 | 607FACF51AFB993E008FA782 /* Podspec Metadata */ = { 132 | isa = PBXGroup; 133 | children = ( 134 | E60B7588F1812AFA869FEC36 /* Pikko.podspec */, 135 | 5068D7A093398C4632900AD1 /* LICENSE */, 136 | ); 137 | name = "Podspec Metadata"; 138 | sourceTree = ""; 139 | }; 140 | 6C1812D78AC45E52F66B7490 /* Frameworks */ = { 141 | isa = PBXGroup; 142 | children = ( 143 | 6C363E4BCBB3B1B690A79487 /* Pods_Pikko_Example.framework */, 144 | D1AA065DB4986AB04236B01C /* Pods_Pikko_Tests.framework */, 145 | ); 146 | name = Frameworks; 147 | sourceTree = ""; 148 | }; 149 | 7434D7B327BD5B6079EE207C /* Pods */ = { 150 | isa = PBXGroup; 151 | children = ( 152 | EE240BBFAE6B0E18FFF3C11A /* Pods-Pikko_Example.debug.xcconfig */, 153 | 263A602C6D1AFE03941D37EA /* Pods-Pikko_Example.release.xcconfig */, 154 | 9E7C95DBBE42B5B0B888AF02 /* Pods-Pikko_Tests.debug.xcconfig */, 155 | DC8311CAC476C576C53DAF57 /* Pods-Pikko_Tests.release.xcconfig */, 156 | ); 157 | name = Pods; 158 | path = Pods; 159 | sourceTree = ""; 160 | }; 161 | /* End PBXGroup section */ 162 | 163 | /* Begin PBXNativeTarget section */ 164 | 607FACCF1AFB9204008FA782 /* Pikko_Example */ = { 165 | isa = PBXNativeTarget; 166 | buildConfigurationList = 607FACEF1AFB9204008FA782 /* Build configuration list for PBXNativeTarget "Pikko_Example" */; 167 | buildPhases = ( 168 | 16F1FB4E7529EE2CB9B97610 /* [CP] Check Pods Manifest.lock */, 169 | 607FACCC1AFB9204008FA782 /* Sources */, 170 | 607FACCD1AFB9204008FA782 /* Frameworks */, 171 | 607FACCE1AFB9204008FA782 /* Resources */, 172 | 99094416CFC2F1CB88B36EC7 /* [CP] Embed Pods Frameworks */, 173 | ); 174 | buildRules = ( 175 | ); 176 | dependencies = ( 177 | ); 178 | name = Pikko_Example; 179 | productName = Pikko; 180 | productReference = 607FACD01AFB9204008FA782 /* Pikko_Example.app */; 181 | productType = "com.apple.product-type.application"; 182 | }; 183 | 607FACE41AFB9204008FA782 /* Pikko_Tests */ = { 184 | isa = PBXNativeTarget; 185 | buildConfigurationList = 607FACF21AFB9204008FA782 /* Build configuration list for PBXNativeTarget "Pikko_Tests" */; 186 | buildPhases = ( 187 | 4CB2354AFF9C5D8305075718 /* [CP] Check Pods Manifest.lock */, 188 | 607FACE11AFB9204008FA782 /* Sources */, 189 | 607FACE21AFB9204008FA782 /* Frameworks */, 190 | 607FACE31AFB9204008FA782 /* Resources */, 191 | ); 192 | buildRules = ( 193 | ); 194 | dependencies = ( 195 | 607FACE71AFB9204008FA782 /* PBXTargetDependency */, 196 | ); 197 | name = Pikko_Tests; 198 | productName = Tests; 199 | productReference = 607FACE51AFB9204008FA782 /* Pikko_Tests.xctest */; 200 | productType = "com.apple.product-type.bundle.unit-test"; 201 | }; 202 | /* End PBXNativeTarget section */ 203 | 204 | /* Begin PBXProject section */ 205 | 607FACC81AFB9204008FA782 /* Project object */ = { 206 | isa = PBXProject; 207 | attributes = { 208 | LastSwiftUpdateCheck = 0830; 209 | LastUpgradeCheck = 0830; 210 | ORGANIZATIONNAME = CocoaPods; 211 | TargetAttributes = { 212 | 607FACCF1AFB9204008FA782 = { 213 | CreatedOnToolsVersion = 6.3.1; 214 | DevelopmentTeam = 45E39Y8V9N; 215 | LastSwiftMigration = 0900; 216 | }; 217 | 607FACE41AFB9204008FA782 = { 218 | CreatedOnToolsVersion = 6.3.1; 219 | LastSwiftMigration = 0900; 220 | TestTargetID = 607FACCF1AFB9204008FA782; 221 | }; 222 | }; 223 | }; 224 | buildConfigurationList = 607FACCB1AFB9204008FA782 /* Build configuration list for PBXProject "Pikko" */; 225 | compatibilityVersion = "Xcode 3.2"; 226 | developmentRegion = English; 227 | hasScannedForEncodings = 0; 228 | knownRegions = ( 229 | en, 230 | Base, 231 | ); 232 | mainGroup = 607FACC71AFB9204008FA782; 233 | productRefGroup = 607FACD11AFB9204008FA782 /* Products */; 234 | projectDirPath = ""; 235 | projectRoot = ""; 236 | targets = ( 237 | 607FACCF1AFB9204008FA782 /* Pikko_Example */, 238 | 607FACE41AFB9204008FA782 /* Pikko_Tests */, 239 | ); 240 | }; 241 | /* End PBXProject section */ 242 | 243 | /* Begin PBXResourcesBuildPhase section */ 244 | 607FACCE1AFB9204008FA782 /* Resources */ = { 245 | isa = PBXResourcesBuildPhase; 246 | buildActionMask = 2147483647; 247 | files = ( 248 | 607FACDB1AFB9204008FA782 /* Main.storyboard in Resources */, 249 | 607FACE01AFB9204008FA782 /* LaunchScreen.xib in Resources */, 250 | 607FACDD1AFB9204008FA782 /* Images.xcassets in Resources */, 251 | ); 252 | runOnlyForDeploymentPostprocessing = 0; 253 | }; 254 | 607FACE31AFB9204008FA782 /* Resources */ = { 255 | isa = PBXResourcesBuildPhase; 256 | buildActionMask = 2147483647; 257 | files = ( 258 | ); 259 | runOnlyForDeploymentPostprocessing = 0; 260 | }; 261 | /* End PBXResourcesBuildPhase section */ 262 | 263 | /* Begin PBXShellScriptBuildPhase section */ 264 | 16F1FB4E7529EE2CB9B97610 /* [CP] Check Pods Manifest.lock */ = { 265 | isa = PBXShellScriptBuildPhase; 266 | buildActionMask = 2147483647; 267 | files = ( 268 | ); 269 | inputFileListPaths = ( 270 | ); 271 | inputPaths = ( 272 | "${PODS_PODFILE_DIR_PATH}/Podfile.lock", 273 | "${PODS_ROOT}/Manifest.lock", 274 | ); 275 | name = "[CP] Check Pods Manifest.lock"; 276 | outputFileListPaths = ( 277 | ); 278 | outputPaths = ( 279 | "$(DERIVED_FILE_DIR)/Pods-Pikko_Example-checkManifestLockResult.txt", 280 | ); 281 | runOnlyForDeploymentPostprocessing = 0; 282 | shellPath = /bin/sh; 283 | shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; 284 | showEnvVarsInLog = 0; 285 | }; 286 | 4CB2354AFF9C5D8305075718 /* [CP] Check Pods Manifest.lock */ = { 287 | isa = PBXShellScriptBuildPhase; 288 | buildActionMask = 2147483647; 289 | files = ( 290 | ); 291 | inputFileListPaths = ( 292 | ); 293 | inputPaths = ( 294 | "${PODS_PODFILE_DIR_PATH}/Podfile.lock", 295 | "${PODS_ROOT}/Manifest.lock", 296 | ); 297 | name = "[CP] Check Pods Manifest.lock"; 298 | outputFileListPaths = ( 299 | ); 300 | outputPaths = ( 301 | "$(DERIVED_FILE_DIR)/Pods-Pikko_Tests-checkManifestLockResult.txt", 302 | ); 303 | runOnlyForDeploymentPostprocessing = 0; 304 | shellPath = /bin/sh; 305 | shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; 306 | showEnvVarsInLog = 0; 307 | }; 308 | 99094416CFC2F1CB88B36EC7 /* [CP] Embed Pods Frameworks */ = { 309 | isa = PBXShellScriptBuildPhase; 310 | buildActionMask = 2147483647; 311 | files = ( 312 | ); 313 | inputFileListPaths = ( 314 | ); 315 | inputPaths = ( 316 | "${PODS_ROOT}/Target Support Files/Pods-Pikko_Example/Pods-Pikko_Example-frameworks.sh", 317 | "${BUILT_PRODUCTS_DIR}/Pikko/Pikko.framework", 318 | ); 319 | name = "[CP] Embed Pods Frameworks"; 320 | outputFileListPaths = ( 321 | ); 322 | outputPaths = ( 323 | "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Pikko.framework", 324 | ); 325 | runOnlyForDeploymentPostprocessing = 0; 326 | shellPath = /bin/sh; 327 | shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Pikko_Example/Pods-Pikko_Example-frameworks.sh\"\n"; 328 | showEnvVarsInLog = 0; 329 | }; 330 | /* End PBXShellScriptBuildPhase section */ 331 | 332 | /* Begin PBXSourcesBuildPhase section */ 333 | 607FACCC1AFB9204008FA782 /* Sources */ = { 334 | isa = PBXSourcesBuildPhase; 335 | buildActionMask = 2147483647; 336 | files = ( 337 | 607FACD81AFB9204008FA782 /* ViewController.swift in Sources */, 338 | 607FACD61AFB9204008FA782 /* AppDelegate.swift in Sources */, 339 | ); 340 | runOnlyForDeploymentPostprocessing = 0; 341 | }; 342 | 607FACE11AFB9204008FA782 /* Sources */ = { 343 | isa = PBXSourcesBuildPhase; 344 | buildActionMask = 2147483647; 345 | files = ( 346 | 607FACEC1AFB9204008FA782 /* Tests.swift in Sources */, 347 | ); 348 | runOnlyForDeploymentPostprocessing = 0; 349 | }; 350 | /* End PBXSourcesBuildPhase section */ 351 | 352 | /* Begin PBXTargetDependency section */ 353 | 607FACE71AFB9204008FA782 /* PBXTargetDependency */ = { 354 | isa = PBXTargetDependency; 355 | target = 607FACCF1AFB9204008FA782 /* Pikko_Example */; 356 | targetProxy = 607FACE61AFB9204008FA782 /* PBXContainerItemProxy */; 357 | }; 358 | /* End PBXTargetDependency section */ 359 | 360 | /* Begin PBXVariantGroup section */ 361 | 607FACD91AFB9204008FA782 /* Main.storyboard */ = { 362 | isa = PBXVariantGroup; 363 | children = ( 364 | 607FACDA1AFB9204008FA782 /* Base */, 365 | ); 366 | name = Main.storyboard; 367 | sourceTree = ""; 368 | }; 369 | 607FACDE1AFB9204008FA782 /* LaunchScreen.xib */ = { 370 | isa = PBXVariantGroup; 371 | children = ( 372 | 607FACDF1AFB9204008FA782 /* Base */, 373 | ); 374 | name = LaunchScreen.xib; 375 | sourceTree = ""; 376 | }; 377 | /* End PBXVariantGroup section */ 378 | 379 | /* Begin XCBuildConfiguration section */ 380 | 607FACED1AFB9204008FA782 /* Debug */ = { 381 | isa = XCBuildConfiguration; 382 | buildSettings = { 383 | ALWAYS_SEARCH_USER_PATHS = NO; 384 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 385 | CLANG_CXX_LIBRARY = "libc++"; 386 | CLANG_ENABLE_MODULES = YES; 387 | CLANG_ENABLE_OBJC_ARC = YES; 388 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 389 | CLANG_WARN_BOOL_CONVERSION = YES; 390 | CLANG_WARN_COMMA = YES; 391 | CLANG_WARN_CONSTANT_CONVERSION = YES; 392 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 393 | CLANG_WARN_EMPTY_BODY = YES; 394 | CLANG_WARN_ENUM_CONVERSION = YES; 395 | CLANG_WARN_INFINITE_RECURSION = YES; 396 | CLANG_WARN_INT_CONVERSION = YES; 397 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 398 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 399 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 400 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 401 | CLANG_WARN_STRICT_PROTOTYPES = YES; 402 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 403 | CLANG_WARN_UNREACHABLE_CODE = YES; 404 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 405 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 406 | COPY_PHASE_STRIP = NO; 407 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 408 | ENABLE_STRICT_OBJC_MSGSEND = YES; 409 | ENABLE_TESTABILITY = YES; 410 | GCC_C_LANGUAGE_STANDARD = gnu99; 411 | GCC_DYNAMIC_NO_PIC = NO; 412 | GCC_NO_COMMON_BLOCKS = YES; 413 | GCC_OPTIMIZATION_LEVEL = 0; 414 | GCC_PREPROCESSOR_DEFINITIONS = ( 415 | "DEBUG=1", 416 | "$(inherited)", 417 | ); 418 | GCC_SYMBOLS_PRIVATE_EXTERN = NO; 419 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 420 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 421 | GCC_WARN_UNDECLARED_SELECTOR = YES; 422 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 423 | GCC_WARN_UNUSED_FUNCTION = YES; 424 | GCC_WARN_UNUSED_VARIABLE = YES; 425 | IPHONEOS_DEPLOYMENT_TARGET = 9.3; 426 | MTL_ENABLE_DEBUG_INFO = YES; 427 | ONLY_ACTIVE_ARCH = YES; 428 | SDKROOT = iphoneos; 429 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 430 | }; 431 | name = Debug; 432 | }; 433 | 607FACEE1AFB9204008FA782 /* Release */ = { 434 | isa = XCBuildConfiguration; 435 | buildSettings = { 436 | ALWAYS_SEARCH_USER_PATHS = NO; 437 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 438 | CLANG_CXX_LIBRARY = "libc++"; 439 | CLANG_ENABLE_MODULES = YES; 440 | CLANG_ENABLE_OBJC_ARC = YES; 441 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 442 | CLANG_WARN_BOOL_CONVERSION = YES; 443 | CLANG_WARN_COMMA = YES; 444 | CLANG_WARN_CONSTANT_CONVERSION = YES; 445 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 446 | CLANG_WARN_EMPTY_BODY = YES; 447 | CLANG_WARN_ENUM_CONVERSION = YES; 448 | CLANG_WARN_INFINITE_RECURSION = YES; 449 | CLANG_WARN_INT_CONVERSION = YES; 450 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 451 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 452 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 453 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 454 | CLANG_WARN_STRICT_PROTOTYPES = YES; 455 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 456 | CLANG_WARN_UNREACHABLE_CODE = YES; 457 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 458 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 459 | COPY_PHASE_STRIP = NO; 460 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 461 | ENABLE_NS_ASSERTIONS = NO; 462 | ENABLE_STRICT_OBJC_MSGSEND = YES; 463 | GCC_C_LANGUAGE_STANDARD = gnu99; 464 | GCC_NO_COMMON_BLOCKS = YES; 465 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 466 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 467 | GCC_WARN_UNDECLARED_SELECTOR = YES; 468 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 469 | GCC_WARN_UNUSED_FUNCTION = YES; 470 | GCC_WARN_UNUSED_VARIABLE = YES; 471 | IPHONEOS_DEPLOYMENT_TARGET = 9.3; 472 | MTL_ENABLE_DEBUG_INFO = NO; 473 | SDKROOT = iphoneos; 474 | SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; 475 | VALIDATE_PRODUCT = YES; 476 | }; 477 | name = Release; 478 | }; 479 | 607FACF01AFB9204008FA782 /* Debug */ = { 480 | isa = XCBuildConfiguration; 481 | baseConfigurationReference = EE240BBFAE6B0E18FFF3C11A /* Pods-Pikko_Example.debug.xcconfig */; 482 | buildSettings = { 483 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 484 | DEVELOPMENT_TEAM = 45E39Y8V9N; 485 | INFOPLIST_FILE = Pikko/Info.plist; 486 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 487 | MODULE_NAME = ExampleApp; 488 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.demo.$(PRODUCT_NAME:rfc1034identifier)"; 489 | PRODUCT_NAME = "$(TARGET_NAME)"; 490 | SWIFT_SWIFT3_OBJC_INFERENCE = Default; 491 | SWIFT_VERSION = 4.0; 492 | }; 493 | name = Debug; 494 | }; 495 | 607FACF11AFB9204008FA782 /* Release */ = { 496 | isa = XCBuildConfiguration; 497 | baseConfigurationReference = 263A602C6D1AFE03941D37EA /* Pods-Pikko_Example.release.xcconfig */; 498 | buildSettings = { 499 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 500 | DEVELOPMENT_TEAM = 45E39Y8V9N; 501 | INFOPLIST_FILE = Pikko/Info.plist; 502 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 503 | MODULE_NAME = ExampleApp; 504 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.demo.$(PRODUCT_NAME:rfc1034identifier)"; 505 | PRODUCT_NAME = "$(TARGET_NAME)"; 506 | SWIFT_SWIFT3_OBJC_INFERENCE = Default; 507 | SWIFT_VERSION = 4.0; 508 | }; 509 | name = Release; 510 | }; 511 | 607FACF31AFB9204008FA782 /* Debug */ = { 512 | isa = XCBuildConfiguration; 513 | baseConfigurationReference = 9E7C95DBBE42B5B0B888AF02 /* Pods-Pikko_Tests.debug.xcconfig */; 514 | buildSettings = { 515 | DEVELOPMENT_TEAM = ""; 516 | FRAMEWORK_SEARCH_PATHS = ( 517 | "$(SDKROOT)/Developer/Library/Frameworks", 518 | "$(inherited)", 519 | ); 520 | GCC_PREPROCESSOR_DEFINITIONS = ( 521 | "DEBUG=1", 522 | "$(inherited)", 523 | ); 524 | INFOPLIST_FILE = Tests/Info.plist; 525 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 526 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.$(PRODUCT_NAME:rfc1034identifier)"; 527 | PRODUCT_NAME = "$(TARGET_NAME)"; 528 | SWIFT_SWIFT3_OBJC_INFERENCE = Default; 529 | SWIFT_VERSION = 4.0; 530 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Pikko_Example.app/Pikko_Example"; 531 | }; 532 | name = Debug; 533 | }; 534 | 607FACF41AFB9204008FA782 /* Release */ = { 535 | isa = XCBuildConfiguration; 536 | baseConfigurationReference = DC8311CAC476C576C53DAF57 /* Pods-Pikko_Tests.release.xcconfig */; 537 | buildSettings = { 538 | DEVELOPMENT_TEAM = ""; 539 | FRAMEWORK_SEARCH_PATHS = ( 540 | "$(SDKROOT)/Developer/Library/Frameworks", 541 | "$(inherited)", 542 | ); 543 | INFOPLIST_FILE = Tests/Info.plist; 544 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 545 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.$(PRODUCT_NAME:rfc1034identifier)"; 546 | PRODUCT_NAME = "$(TARGET_NAME)"; 547 | SWIFT_SWIFT3_OBJC_INFERENCE = Default; 548 | SWIFT_VERSION = 4.0; 549 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Pikko_Example.app/Pikko_Example"; 550 | }; 551 | name = Release; 552 | }; 553 | /* End XCBuildConfiguration section */ 554 | 555 | /* Begin XCConfigurationList section */ 556 | 607FACCB1AFB9204008FA782 /* Build configuration list for PBXProject "Pikko" */ = { 557 | isa = XCConfigurationList; 558 | buildConfigurations = ( 559 | 607FACED1AFB9204008FA782 /* Debug */, 560 | 607FACEE1AFB9204008FA782 /* Release */, 561 | ); 562 | defaultConfigurationIsVisible = 0; 563 | defaultConfigurationName = Release; 564 | }; 565 | 607FACEF1AFB9204008FA782 /* Build configuration list for PBXNativeTarget "Pikko_Example" */ = { 566 | isa = XCConfigurationList; 567 | buildConfigurations = ( 568 | 607FACF01AFB9204008FA782 /* Debug */, 569 | 607FACF11AFB9204008FA782 /* Release */, 570 | ); 571 | defaultConfigurationIsVisible = 0; 572 | defaultConfigurationName = Release; 573 | }; 574 | 607FACF21AFB9204008FA782 /* Build configuration list for PBXNativeTarget "Pikko_Tests" */ = { 575 | isa = XCConfigurationList; 576 | buildConfigurations = ( 577 | 607FACF31AFB9204008FA782 /* Debug */, 578 | 607FACF41AFB9204008FA782 /* Release */, 579 | ); 580 | defaultConfigurationIsVisible = 0; 581 | defaultConfigurationName = Release; 582 | }; 583 | /* End XCConfigurationList section */ 584 | }; 585 | rootObject = 607FACC81AFB9204008FA782 /* Project object */; 586 | } 587 | -------------------------------------------------------------------------------- /Example/Pikko.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Example/Pikko.xcodeproj/xcshareddata/xcschemes/Pikko-Example.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 29 | 35 | 36 | 37 | 43 | 49 | 50 | 51 | 52 | 53 | 58 | 59 | 60 | 61 | 67 | 68 | 69 | 70 | 71 | 72 | 82 | 84 | 90 | 91 | 92 | 93 | 94 | 95 | 101 | 103 | 109 | 110 | 111 | 112 | 114 | 115 | 118 | 119 | 120 | -------------------------------------------------------------------------------- /Example/Pikko.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /Example/Pikko.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /Example/Pikko/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.swift 3 | // Pikko_Example 4 | // 5 | // Created by Sandra & Johannes 6 | // 7 | 8 | import UIKit 9 | 10 | @UIApplicationMain 11 | class AppDelegate: UIResponder, UIApplicationDelegate { 12 | 13 | var window: UIWindow? 14 | 15 | 16 | func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { 17 | // Override point for customization after application launch. 18 | return true 19 | } 20 | 21 | func applicationWillResignActive(_ application: UIApplication) { 22 | // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. 23 | // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game. 24 | } 25 | 26 | func applicationDidEnterBackground(_ application: UIApplication) { 27 | // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. 28 | // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. 29 | } 30 | 31 | func applicationWillEnterForeground(_ application: UIApplication) { 32 | // Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background. 33 | } 34 | 35 | func applicationDidBecomeActive(_ application: UIApplication) { 36 | // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. 37 | } 38 | 39 | func applicationWillTerminate(_ application: UIApplication) { 40 | // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. 41 | } 42 | 43 | 44 | } 45 | 46 | -------------------------------------------------------------------------------- /Example/Pikko/Base.lproj/LaunchScreen.xib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 25 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | -------------------------------------------------------------------------------- /Example/Pikko/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 | -------------------------------------------------------------------------------- /Example/Pikko/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 | "idiom" : "ios-marketing", 45 | "size" : "1024x1024", 46 | "scale" : "1x" 47 | } 48 | ], 49 | "info" : { 50 | "version" : 1, 51 | "author" : "xcode" 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /Example/Pikko/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | APPL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | LSRequiresIPhoneOS 24 | 25 | UILaunchStoryboardName 26 | LaunchScreen 27 | UIMainStoryboardFile 28 | Main 29 | UIRequiredDeviceCapabilities 30 | 31 | armv7 32 | 33 | UISupportedInterfaceOrientations 34 | 35 | UIInterfaceOrientationPortrait 36 | UIInterfaceOrientationLandscapeLeft 37 | 38 | 39 | 40 | -------------------------------------------------------------------------------- /Example/Pikko/ViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.swift 3 | // Pikko_Example 4 | // 5 | // Created by Sandra & Johannes 6 | // 7 | 8 | import UIKit 9 | import Pikko 10 | 11 | /// Example UIViewController that demonstrates Pikko. 12 | class ViewController: UIViewController { 13 | 14 | override func viewDidLoad() { 15 | super.viewDidLoad() 16 | view.backgroundColor = UIColor(red: 0.1176, green: 0.1176, blue: 0.1176, alpha: 1.0) 17 | 18 | // This is how you can set up Pikko without any constraints. 19 | // (Simplest) 20 | setUpPikko() 21 | 22 | // This is how you can set up Pikko with programmatically created 23 | // Autolayout constraints. 24 | setUpPikkoWithAutolayoutConstraints() 25 | } 26 | 27 | /// If you add Pikko via interface builder and you want to set 28 | /// a color on your picker, make sure to call it from this method, NOT the viewDidLoad. 29 | override func viewDidAppear(_ animated: Bool) { 30 | // For example: 31 | // PikkoView.setColor(.purple) 32 | } 33 | 34 | /// Simplest way to set up Pikko, without autoconstraints. 35 | private func setUpPikko() { 36 | // Initialize a new Pikko instance. 37 | let pikko = Pikko(dimension: 300, setToColor: .purple) 38 | 39 | // Set the PikkoDelegate to get notified on new color changes. 40 | pikko.delegate = self 41 | 42 | // Set Pikko center and add it to the main view. 43 | pikko.center.x = self.view.center.x 44 | pikko.center.y = self.view.center.y + 200 45 | self.view.addSubview(pikko) 46 | 47 | // Get the current color. 48 | _ = pikko.getColor() 49 | } 50 | 51 | // How to set up Pikko with programmatic constraints. 52 | private func setUpPikkoWithAutolayoutConstraints() { 53 | // Initialize a new Pikko instance. 54 | let pikko = Pikko(dimension: 300, setToColor: .purple) 55 | 56 | // Set the PikkoDelegate to get notified on new color changes. 57 | pikko.delegate = self 58 | 59 | // Set Pikko center and add it to the main view. 60 | self.view.addSubview(pikko) 61 | 62 | // Get the current color. 63 | _ = pikko.getColor() 64 | 65 | // Set autoconstraints. 66 | pikko.translatesAutoresizingMaskIntoConstraints = false 67 | pikko.centerXAnchor.constraint(equalTo: self.view.centerXAnchor).isActive = true 68 | pikko.centerYAnchor.constraint(equalTo: self.view.centerYAnchor, constant: -200).isActive = true 69 | 70 | } 71 | } 72 | 73 | // MARK: - PikkoDelegate methods. 74 | 75 | extension ViewController: PikkoDelegate { 76 | 77 | /// This method gets called whenever the pikko color was updated. 78 | func writeBackColor(color: UIColor) { 79 | print("New color: \(color)") 80 | } 81 | } 82 | -------------------------------------------------------------------------------- /Example/Podfile: -------------------------------------------------------------------------------- 1 | use_frameworks! 2 | 3 | target 'Pikko_Example' do 4 | pod 'Pikko', :path => '../' 5 | 6 | target 'Pikko_Tests' do 7 | inherit! :search_paths 8 | 9 | 10 | end 11 | end 12 | -------------------------------------------------------------------------------- /Example/Podfile.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - Pikko (1.0.3) 3 | 4 | DEPENDENCIES: 5 | - Pikko (from `../`) 6 | 7 | EXTERNAL SOURCES: 8 | Pikko: 9 | :path: "../" 10 | 11 | SPEC CHECKSUMS: 12 | Pikko: e986639fff915e45964d39ed1898499e2751848e 13 | 14 | PODFILE CHECKSUM: 35064edcdad9ceed6a4f2bfb9204f96fc3db38a6 15 | 16 | COCOAPODS: 1.6.2 17 | -------------------------------------------------------------------------------- /Example/Pods/Local Podspecs/Pikko.podspec.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Pikko", 3 | "version": "1.0.3", 4 | "summary": "Pikko - iOS color picker made with ❤️", 5 | "swift_version": "4.0", 6 | "description": "Pikko is a simple and beautiful color picker for iOS. It's inspired by conventional color pickers from popular graphics tools such as _Photoshop_, _Paint Tool Sai_, _Procreate_ and many others. Pikko allows the selection of hue, saturation and brightness in a more pleasant way than boring sliders.", 7 | "homepage": "https://github.com/melloskitten/pikko/", 8 | "license": { 9 | "type": "MIT" 10 | }, 11 | "authors": { 12 | "Sandra": "melloskitten@googlemail.com", 13 | "Johannes": "mail@johannesrohwer.com" 14 | }, 15 | "source": { 16 | "git": "https://github.com/melloskitten/pikko.git", 17 | "tag": "1.0.3" 18 | }, 19 | "platforms": { 20 | "ios": "8.0" 21 | }, 22 | "source_files": "Pikko/Sources/Pikko/Classes/**/*" 23 | } 24 | -------------------------------------------------------------------------------- /Example/Pods/Manifest.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - Pikko (1.0.3) 3 | 4 | DEPENDENCIES: 5 | - Pikko (from `../`) 6 | 7 | EXTERNAL SOURCES: 8 | Pikko: 9 | :path: "../" 10 | 11 | SPEC CHECKSUMS: 12 | Pikko: e986639fff915e45964d39ed1898499e2751848e 13 | 14 | PODFILE CHECKSUM: 35064edcdad9ceed6a4f2bfb9204f96fc3db38a6 15 | 16 | COCOAPODS: 1.6.2 17 | -------------------------------------------------------------------------------- /Example/Pods/Pods.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 305D0F6EF7F28796311F57AF4D07195C /* Animations.swift in Sources */ = {isa = PBXBuildFile; fileRef = C266F8B90554867B525F2682617B2AD6 /* Animations.swift */; }; 11 | 3C3C4CE61FF8BCE79D7C615BD11D43C6 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3212113385A8FBBDB272BD23C409FF61 /* Foundation.framework */; }; 12 | 3F459B9CDDE0998FFAA41796E0A948FC /* Pods-Pikko_Tests-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = ABF0F4726DFA1D3A289B3766637B015A /* Pods-Pikko_Tests-dummy.m */; }; 13 | 66D334ABF8A9868F43716E20419B4108 /* Pods-Pikko_Example-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 21B776F7C6D0E89F2C48ABF03327B90D /* Pods-Pikko_Example-dummy.m */; }; 14 | 7DF5EB2DCB10814383FEF74C004D4C5C /* PikkoDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 407DACB0927216963270105C74ADC17D /* PikkoDelegate.swift */; }; 15 | 842F08FE1D78B96AA38547978631D38A /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3212113385A8FBBDB272BD23C409FF61 /* Foundation.framework */; }; 16 | 875A73B7CE02D06B9EFC64D7829B4A59 /* BrightnessSaturationView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0957626C38B0E23E3C6098F85EAE83A4 /* BrightnessSaturationView.swift */; }; 17 | 8FA73D80C8C0193978A2112611808E17 /* ColorUtilities.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7915095B13FEE6AF6BF74815FA388185 /* ColorUtilities.swift */; }; 18 | 9A39D28281FEA34C9520D579DA3384F3 /* Pikko-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = C7F79B13E85EF250FB451F4FB6357DFA /* Pikko-dummy.m */; }; 19 | 9B2C0B67CF4860FB795115842E32454A /* Pods-Pikko_Example-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 482B670A4261FEBCADAA7B69B70DB51D /* Pods-Pikko_Example-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; 20 | AC58B8F765AB7B5C9C6AADD8EA6BA83C /* Pikko.swift in Sources */ = {isa = PBXBuildFile; fileRef = F78F3A383A140F2E461F5E94E3CAB5FD /* Pikko.swift */; }; 21 | AFD4C9BF4B6BB1441986CB43678C7EC3 /* HueView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 38710405651653329E29C06473D4CE9D /* HueView.swift */; }; 22 | BBF713A1A742AE7E90ABB36523152389 /* Pods-Pikko_Tests-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 3E3177FB27A1D17441DC6252D6310253 /* Pods-Pikko_Tests-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; 23 | C634CF5A633B495F308595C6FA8E0819 /* Pikko-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 3440C1EA76C988E48A215CC560B6EF9D /* Pikko-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; 24 | CEA52E5BF0A723FC5C83524203966E25 /* HueDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3AB25A7313737C9765740145F74DF3B8 /* HueDelegate.swift */; }; 25 | CEE2960D6D4C0ECD688E6538402A0021 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3212113385A8FBBDB272BD23C409FF61 /* Foundation.framework */; }; 26 | DB0BB921AD4EA7F3E9FB1FE3A3B7A15E /* UIColor+HSBAComponents.swift in Sources */ = {isa = PBXBuildFile; fileRef = 430B279317CC1038BE633518E803554D /* UIColor+HSBAComponents.swift */; }; 27 | /* End PBXBuildFile section */ 28 | 29 | /* Begin PBXContainerItemProxy section */ 30 | 33928268B1F9424DF9ED7FCF49DC0410 /* PBXContainerItemProxy */ = { 31 | isa = PBXContainerItemProxy; 32 | containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; 33 | proxyType = 1; 34 | remoteGlobalIDString = 1B37E03C0FC790A11B5D52B39864F766; 35 | remoteInfo = "Pods-Pikko_Example"; 36 | }; 37 | 6CB5E31623EBDF90E14161D2497EC897 /* PBXContainerItemProxy */ = { 38 | isa = PBXContainerItemProxy; 39 | containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; 40 | proxyType = 1; 41 | remoteGlobalIDString = 58417AAECAC0F3DDD95A324EDB397669; 42 | remoteInfo = Pikko; 43 | }; 44 | /* End PBXContainerItemProxy section */ 45 | 46 | /* Begin PBXFileReference section */ 47 | 027F5252A1AA915BF248CCF25B8BCA9B /* Pikko.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; path = Pikko.podspec; sourceTree = ""; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; 48 | 0957626C38B0E23E3C6098F85EAE83A4 /* BrightnessSaturationView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = BrightnessSaturationView.swift; sourceTree = ""; }; 49 | 0A81B24AF01D99E573BF17A7DB6DE657 /* Pods-Pikko_Example-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-Pikko_Example-Info.plist"; sourceTree = ""; }; 50 | 108F800DE973009BAAA6CC1562BB9EB2 /* README.md */ = {isa = PBXFileReference; includeInIndex = 1; path = README.md; sourceTree = ""; }; 51 | 1EDB1805F171B208289871A987D09B1D /* Pods-Pikko_Example-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-Pikko_Example-acknowledgements.markdown"; sourceTree = ""; }; 52 | 218A4D7EBA5D9C1BA04DD92B6F2CDA23 /* Pods-Pikko_Tests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Pikko_Tests.debug.xcconfig"; sourceTree = ""; }; 53 | 21B776F7C6D0E89F2C48ABF03327B90D /* Pods-Pikko_Example-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-Pikko_Example-dummy.m"; sourceTree = ""; }; 54 | 22451616EA9E85352EA84BCD8C4ACD94 /* Pods-Pikko_Tests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Pikko_Tests.release.xcconfig"; sourceTree = ""; }; 55 | 2F59662EE165EEA59D5BD5E6B47A33B2 /* LICENSE */ = {isa = PBXFileReference; includeInIndex = 1; path = LICENSE; sourceTree = ""; }; 56 | 2FE7AF952BC5DDDBB6571A0AE03BAC7C /* Pods-Pikko_Example.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-Pikko_Example.modulemap"; sourceTree = ""; }; 57 | 3212113385A8FBBDB272BD23C409FF61 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.2.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; 58 | 3440C1EA76C988E48A215CC560B6EF9D /* Pikko-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pikko-umbrella.h"; sourceTree = ""; }; 59 | 3836A92B9AC0BF1135CA9C06B1F58968 /* Pods-Pikko_Tests-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-Pikko_Tests-Info.plist"; sourceTree = ""; }; 60 | 38710405651653329E29C06473D4CE9D /* HueView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = HueView.swift; sourceTree = ""; }; 61 | 3AB25A7313737C9765740145F74DF3B8 /* HueDelegate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = HueDelegate.swift; sourceTree = ""; }; 62 | 3E3177FB27A1D17441DC6252D6310253 /* Pods-Pikko_Tests-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-Pikko_Tests-umbrella.h"; sourceTree = ""; }; 63 | 407DACB0927216963270105C74ADC17D /* PikkoDelegate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = PikkoDelegate.swift; sourceTree = ""; }; 64 | 430B279317CC1038BE633518E803554D /* UIColor+HSBAComponents.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "UIColor+HSBAComponents.swift"; sourceTree = ""; }; 65 | 482B670A4261FEBCADAA7B69B70DB51D /* Pods-Pikko_Example-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-Pikko_Example-umbrella.h"; sourceTree = ""; }; 66 | 786BC7D134636FC57321CE2998044A35 /* Pods_Pikko_Example.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Pods_Pikko_Example.framework; path = "Pods-Pikko_Example.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; 67 | 7915095B13FEE6AF6BF74815FA388185 /* ColorUtilities.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ColorUtilities.swift; sourceTree = ""; }; 68 | 7D813665D6EC7C3B0CACBCE3FDFAB606 /* Pods-Pikko_Example.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Pikko_Example.release.xcconfig"; sourceTree = ""; }; 69 | 90FC219232B4D9B4342796CBDBE4BF9D /* Pikko.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Pikko.xcconfig; sourceTree = ""; }; 70 | 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; 71 | ABF0F4726DFA1D3A289B3766637B015A /* Pods-Pikko_Tests-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-Pikko_Tests-dummy.m"; sourceTree = ""; }; 72 | AD53507EEE812C3EB91E67528C36BB28 /* Pikko.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Pikko.framework; path = Pikko.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 73 | C266F8B90554867B525F2682617B2AD6 /* Animations.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Animations.swift; sourceTree = ""; }; 74 | C795A5BCD3A56E3CDBCFAE7FE48C8A8E /* Pikko.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = Pikko.modulemap; sourceTree = ""; }; 75 | C7F79B13E85EF250FB451F4FB6357DFA /* Pikko-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pikko-dummy.m"; sourceTree = ""; }; 76 | CAB5606E38F81DDA00D0A82AFA5B50F2 /* Pikko-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pikko-Info.plist"; sourceTree = ""; }; 77 | CEBA7CDF930194E1FF1F2E3AF934C803 /* Pods-Pikko_Example-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-Pikko_Example-frameworks.sh"; sourceTree = ""; }; 78 | D658F79105527F8C435EB60F493A159A /* Pods-Pikko_Example-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-Pikko_Example-acknowledgements.plist"; sourceTree = ""; }; 79 | E4074E0EEA02AC82A529F29523B40514 /* Pikko-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pikko-prefix.pch"; sourceTree = ""; }; 80 | E5C31F163F32BBB285BE63BB5B2F5F4F /* Pods_Pikko_Tests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Pods_Pikko_Tests.framework; path = "Pods-Pikko_Tests.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; 81 | E6B4BCFD93A195EC08A6192AD1D0E40B /* Pods-Pikko_Example.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Pikko_Example.debug.xcconfig"; sourceTree = ""; }; 82 | E80D8372C7BD69FE76D59062F5C59AED /* Pods-Pikko_Tests-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-Pikko_Tests-acknowledgements.markdown"; sourceTree = ""; }; 83 | EC0B2CF0879A9BB579C4A8A2420F24C7 /* Pods-Pikko_Tests-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-Pikko_Tests-acknowledgements.plist"; sourceTree = ""; }; 84 | F78F3A383A140F2E461F5E94E3CAB5FD /* Pikko.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Pikko.swift; sourceTree = ""; }; 85 | F8379103FE0A594F3B6A8E9F69780F06 /* Pods-Pikko_Tests.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-Pikko_Tests.modulemap"; sourceTree = ""; }; 86 | /* End PBXFileReference section */ 87 | 88 | /* Begin PBXFrameworksBuildPhase section */ 89 | 4510B49BFA41FE6EB313FEAB99896B0E /* Frameworks */ = { 90 | isa = PBXFrameworksBuildPhase; 91 | buildActionMask = 2147483647; 92 | files = ( 93 | 842F08FE1D78B96AA38547978631D38A /* Foundation.framework in Frameworks */, 94 | ); 95 | runOnlyForDeploymentPostprocessing = 0; 96 | }; 97 | 4ABA2BD471537BDC7B1B0BCB428C190D /* Frameworks */ = { 98 | isa = PBXFrameworksBuildPhase; 99 | buildActionMask = 2147483647; 100 | files = ( 101 | CEE2960D6D4C0ECD688E6538402A0021 /* Foundation.framework in Frameworks */, 102 | ); 103 | runOnlyForDeploymentPostprocessing = 0; 104 | }; 105 | 8ED09B9942ED9DB47679D7BC8E316564 /* Frameworks */ = { 106 | isa = PBXFrameworksBuildPhase; 107 | buildActionMask = 2147483647; 108 | files = ( 109 | 3C3C4CE61FF8BCE79D7C615BD11D43C6 /* Foundation.framework in Frameworks */, 110 | ); 111 | runOnlyForDeploymentPostprocessing = 0; 112 | }; 113 | /* End PBXFrameworksBuildPhase section */ 114 | 115 | /* Begin PBXGroup section */ 116 | 4A16C11FA9AC613EE8EAEEFEEA2ABC7E /* Products */ = { 117 | isa = PBXGroup; 118 | children = ( 119 | AD53507EEE812C3EB91E67528C36BB28 /* Pikko.framework */, 120 | 786BC7D134636FC57321CE2998044A35 /* Pods_Pikko_Example.framework */, 121 | E5C31F163F32BBB285BE63BB5B2F5F4F /* Pods_Pikko_Tests.framework */, 122 | ); 123 | name = Products; 124 | sourceTree = ""; 125 | }; 126 | 4AD40B4C4F6BEC2C0BA8568CD075AE25 /* Pods-Pikko_Tests */ = { 127 | isa = PBXGroup; 128 | children = ( 129 | F8379103FE0A594F3B6A8E9F69780F06 /* Pods-Pikko_Tests.modulemap */, 130 | E80D8372C7BD69FE76D59062F5C59AED /* Pods-Pikko_Tests-acknowledgements.markdown */, 131 | EC0B2CF0879A9BB579C4A8A2420F24C7 /* Pods-Pikko_Tests-acknowledgements.plist */, 132 | ABF0F4726DFA1D3A289B3766637B015A /* Pods-Pikko_Tests-dummy.m */, 133 | 3836A92B9AC0BF1135CA9C06B1F58968 /* Pods-Pikko_Tests-Info.plist */, 134 | 3E3177FB27A1D17441DC6252D6310253 /* Pods-Pikko_Tests-umbrella.h */, 135 | 218A4D7EBA5D9C1BA04DD92B6F2CDA23 /* Pods-Pikko_Tests.debug.xcconfig */, 136 | 22451616EA9E85352EA84BCD8C4ACD94 /* Pods-Pikko_Tests.release.xcconfig */, 137 | ); 138 | name = "Pods-Pikko_Tests"; 139 | path = "Target Support Files/Pods-Pikko_Tests"; 140 | sourceTree = ""; 141 | }; 142 | 5B61D94AA4E43B731B314D33DFFAA019 /* Pikko */ = { 143 | isa = PBXGroup; 144 | children = ( 145 | BA2B3B0FEE8D86E9F88233F61EF1D0BC /* Delegate */, 146 | 698BC55D3CF4F73065E33D0283D93B96 /* Pod */, 147 | E73F7567A1DC98C137FED63A6515D138 /* Support Files */, 148 | 691DB637CAF5A10F6B8783F893412705 /* UI */, 149 | 64A41E2B37EDBD8CF53EFDBC42C43278 /* Util */, 150 | ); 151 | name = Pikko; 152 | path = ../..; 153 | sourceTree = ""; 154 | }; 155 | 64A41E2B37EDBD8CF53EFDBC42C43278 /* Util */ = { 156 | isa = PBXGroup; 157 | children = ( 158 | C266F8B90554867B525F2682617B2AD6 /* Animations.swift */, 159 | 7915095B13FEE6AF6BF74815FA388185 /* ColorUtilities.swift */, 160 | 430B279317CC1038BE633518E803554D /* UIColor+HSBAComponents.swift */, 161 | ); 162 | name = Util; 163 | path = Pikko/Sources/Pikko/Classes/Util; 164 | sourceTree = ""; 165 | }; 166 | 691DB637CAF5A10F6B8783F893412705 /* UI */ = { 167 | isa = PBXGroup; 168 | children = ( 169 | 0957626C38B0E23E3C6098F85EAE83A4 /* BrightnessSaturationView.swift */, 170 | 38710405651653329E29C06473D4CE9D /* HueView.swift */, 171 | F78F3A383A140F2E461F5E94E3CAB5FD /* Pikko.swift */, 172 | ); 173 | name = UI; 174 | path = Pikko/Sources/Pikko/Classes/UI; 175 | sourceTree = ""; 176 | }; 177 | 698BC55D3CF4F73065E33D0283D93B96 /* Pod */ = { 178 | isa = PBXGroup; 179 | children = ( 180 | 2F59662EE165EEA59D5BD5E6B47A33B2 /* LICENSE */, 181 | 027F5252A1AA915BF248CCF25B8BCA9B /* Pikko.podspec */, 182 | 108F800DE973009BAAA6CC1562BB9EB2 /* README.md */, 183 | ); 184 | name = Pod; 185 | sourceTree = ""; 186 | }; 187 | 9B08229BEAAA346E435896338726C72E /* Targets Support Files */ = { 188 | isa = PBXGroup; 189 | children = ( 190 | A4C6AFE083394253175AA6D413657FD6 /* Pods-Pikko_Example */, 191 | 4AD40B4C4F6BEC2C0BA8568CD075AE25 /* Pods-Pikko_Tests */, 192 | ); 193 | name = "Targets Support Files"; 194 | sourceTree = ""; 195 | }; 196 | A4C6AFE083394253175AA6D413657FD6 /* Pods-Pikko_Example */ = { 197 | isa = PBXGroup; 198 | children = ( 199 | 2FE7AF952BC5DDDBB6571A0AE03BAC7C /* Pods-Pikko_Example.modulemap */, 200 | 1EDB1805F171B208289871A987D09B1D /* Pods-Pikko_Example-acknowledgements.markdown */, 201 | D658F79105527F8C435EB60F493A159A /* Pods-Pikko_Example-acknowledgements.plist */, 202 | 21B776F7C6D0E89F2C48ABF03327B90D /* Pods-Pikko_Example-dummy.m */, 203 | CEBA7CDF930194E1FF1F2E3AF934C803 /* Pods-Pikko_Example-frameworks.sh */, 204 | 0A81B24AF01D99E573BF17A7DB6DE657 /* Pods-Pikko_Example-Info.plist */, 205 | 482B670A4261FEBCADAA7B69B70DB51D /* Pods-Pikko_Example-umbrella.h */, 206 | E6B4BCFD93A195EC08A6192AD1D0E40B /* Pods-Pikko_Example.debug.xcconfig */, 207 | 7D813665D6EC7C3B0CACBCE3FDFAB606 /* Pods-Pikko_Example.release.xcconfig */, 208 | ); 209 | name = "Pods-Pikko_Example"; 210 | path = "Target Support Files/Pods-Pikko_Example"; 211 | sourceTree = ""; 212 | }; 213 | BA2B3B0FEE8D86E9F88233F61EF1D0BC /* Delegate */ = { 214 | isa = PBXGroup; 215 | children = ( 216 | 3AB25A7313737C9765740145F74DF3B8 /* HueDelegate.swift */, 217 | 407DACB0927216963270105C74ADC17D /* PikkoDelegate.swift */, 218 | ); 219 | name = Delegate; 220 | path = Pikko/Sources/Pikko/Classes/Delegate; 221 | sourceTree = ""; 222 | }; 223 | C0834CEBB1379A84116EF29F93051C60 /* iOS */ = { 224 | isa = PBXGroup; 225 | children = ( 226 | 3212113385A8FBBDB272BD23C409FF61 /* Foundation.framework */, 227 | ); 228 | name = iOS; 229 | sourceTree = ""; 230 | }; 231 | CF1408CF629C7361332E53B88F7BD30C = { 232 | isa = PBXGroup; 233 | children = ( 234 | 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */, 235 | EC6D4729DF52E7DFAC1DE248112B8A97 /* Development Pods */, 236 | D210D550F4EA176C3123ED886F8F87F5 /* Frameworks */, 237 | 4A16C11FA9AC613EE8EAEEFEEA2ABC7E /* Products */, 238 | 9B08229BEAAA346E435896338726C72E /* Targets Support Files */, 239 | ); 240 | sourceTree = ""; 241 | }; 242 | D210D550F4EA176C3123ED886F8F87F5 /* Frameworks */ = { 243 | isa = PBXGroup; 244 | children = ( 245 | C0834CEBB1379A84116EF29F93051C60 /* iOS */, 246 | ); 247 | name = Frameworks; 248 | sourceTree = ""; 249 | }; 250 | E73F7567A1DC98C137FED63A6515D138 /* Support Files */ = { 251 | isa = PBXGroup; 252 | children = ( 253 | C795A5BCD3A56E3CDBCFAE7FE48C8A8E /* Pikko.modulemap */, 254 | 90FC219232B4D9B4342796CBDBE4BF9D /* Pikko.xcconfig */, 255 | C7F79B13E85EF250FB451F4FB6357DFA /* Pikko-dummy.m */, 256 | CAB5606E38F81DDA00D0A82AFA5B50F2 /* Pikko-Info.plist */, 257 | E4074E0EEA02AC82A529F29523B40514 /* Pikko-prefix.pch */, 258 | 3440C1EA76C988E48A215CC560B6EF9D /* Pikko-umbrella.h */, 259 | ); 260 | name = "Support Files"; 261 | path = "Example/Pods/Target Support Files/Pikko"; 262 | sourceTree = ""; 263 | }; 264 | EC6D4729DF52E7DFAC1DE248112B8A97 /* Development Pods */ = { 265 | isa = PBXGroup; 266 | children = ( 267 | 5B61D94AA4E43B731B314D33DFFAA019 /* Pikko */, 268 | ); 269 | name = "Development Pods"; 270 | sourceTree = ""; 271 | }; 272 | /* End PBXGroup section */ 273 | 274 | /* Begin PBXHeadersBuildPhase section */ 275 | 1089BBE760BBA7A15B3C235BED277101 /* Headers */ = { 276 | isa = PBXHeadersBuildPhase; 277 | buildActionMask = 2147483647; 278 | files = ( 279 | 9B2C0B67CF4860FB795115842E32454A /* Pods-Pikko_Example-umbrella.h in Headers */, 280 | ); 281 | runOnlyForDeploymentPostprocessing = 0; 282 | }; 283 | 176A579A3CC6F6E8377D3C04EBB2CD92 /* Headers */ = { 284 | isa = PBXHeadersBuildPhase; 285 | buildActionMask = 2147483647; 286 | files = ( 287 | C634CF5A633B495F308595C6FA8E0819 /* Pikko-umbrella.h in Headers */, 288 | ); 289 | runOnlyForDeploymentPostprocessing = 0; 290 | }; 291 | EF656B80702DF5FAF67DC735B992B3A5 /* Headers */ = { 292 | isa = PBXHeadersBuildPhase; 293 | buildActionMask = 2147483647; 294 | files = ( 295 | BBF713A1A742AE7E90ABB36523152389 /* Pods-Pikko_Tests-umbrella.h in Headers */, 296 | ); 297 | runOnlyForDeploymentPostprocessing = 0; 298 | }; 299 | /* End PBXHeadersBuildPhase section */ 300 | 301 | /* Begin PBXNativeTarget section */ 302 | 1B37E03C0FC790A11B5D52B39864F766 /* Pods-Pikko_Example */ = { 303 | isa = PBXNativeTarget; 304 | buildConfigurationList = D9578D1DAE0218E5D5801147A57E3783 /* Build configuration list for PBXNativeTarget "Pods-Pikko_Example" */; 305 | buildPhases = ( 306 | 1089BBE760BBA7A15B3C235BED277101 /* Headers */, 307 | 5BB8625A31E5EFBC1FA6D6F68B11008B /* Sources */, 308 | 4510B49BFA41FE6EB313FEAB99896B0E /* Frameworks */, 309 | 9A4AE7522AE5EA4411CA3DCFA54AD542 /* Resources */, 310 | ); 311 | buildRules = ( 312 | ); 313 | dependencies = ( 314 | 0A002C8692CCC26A6A2D0A40802207C6 /* PBXTargetDependency */, 315 | ); 316 | name = "Pods-Pikko_Example"; 317 | productName = "Pods-Pikko_Example"; 318 | productReference = 786BC7D134636FC57321CE2998044A35 /* Pods_Pikko_Example.framework */; 319 | productType = "com.apple.product-type.framework"; 320 | }; 321 | 58417AAECAC0F3DDD95A324EDB397669 /* Pikko */ = { 322 | isa = PBXNativeTarget; 323 | buildConfigurationList = 437847B04207ABC1BA335DD0356C9823 /* Build configuration list for PBXNativeTarget "Pikko" */; 324 | buildPhases = ( 325 | 176A579A3CC6F6E8377D3C04EBB2CD92 /* Headers */, 326 | E52A3BDFD3163CF97D1DA5537D49BF35 /* Sources */, 327 | 8ED09B9942ED9DB47679D7BC8E316564 /* Frameworks */, 328 | 670F4F3611BB740806CFFD243AB523EF /* Resources */, 329 | ); 330 | buildRules = ( 331 | ); 332 | dependencies = ( 333 | ); 334 | name = Pikko; 335 | productName = Pikko; 336 | productReference = AD53507EEE812C3EB91E67528C36BB28 /* Pikko.framework */; 337 | productType = "com.apple.product-type.framework"; 338 | }; 339 | 7D3CEB23895A971FAF0C5419BCEA391D /* Pods-Pikko_Tests */ = { 340 | isa = PBXNativeTarget; 341 | buildConfigurationList = 4E8A11295026DCE63DF735D9D5B6917E /* Build configuration list for PBXNativeTarget "Pods-Pikko_Tests" */; 342 | buildPhases = ( 343 | EF656B80702DF5FAF67DC735B992B3A5 /* Headers */, 344 | 572C537651895341ADF56C6D64B2475F /* Sources */, 345 | 4ABA2BD471537BDC7B1B0BCB428C190D /* Frameworks */, 346 | 02BD2C92D104780A1EA151467DF375B2 /* Resources */, 347 | ); 348 | buildRules = ( 349 | ); 350 | dependencies = ( 351 | 44628DCFC030AE5AB7BA3F0F2AD364C7 /* PBXTargetDependency */, 352 | ); 353 | name = "Pods-Pikko_Tests"; 354 | productName = "Pods-Pikko_Tests"; 355 | productReference = E5C31F163F32BBB285BE63BB5B2F5F4F /* Pods_Pikko_Tests.framework */; 356 | productType = "com.apple.product-type.framework"; 357 | }; 358 | /* End PBXNativeTarget section */ 359 | 360 | /* Begin PBXProject section */ 361 | BFDFE7DC352907FC980B868725387E98 /* Project object */ = { 362 | isa = PBXProject; 363 | attributes = { 364 | LastSwiftUpdateCheck = 1020; 365 | LastUpgradeCheck = 1020; 366 | }; 367 | buildConfigurationList = 4821239608C13582E20E6DA73FD5F1F9 /* Build configuration list for PBXProject "Pods" */; 368 | compatibilityVersion = "Xcode 3.2"; 369 | developmentRegion = en; 370 | hasScannedForEncodings = 0; 371 | knownRegions = ( 372 | en, 373 | ); 374 | mainGroup = CF1408CF629C7361332E53B88F7BD30C; 375 | productRefGroup = 4A16C11FA9AC613EE8EAEEFEEA2ABC7E /* Products */; 376 | projectDirPath = ""; 377 | projectRoot = ""; 378 | targets = ( 379 | 58417AAECAC0F3DDD95A324EDB397669 /* Pikko */, 380 | 1B37E03C0FC790A11B5D52B39864F766 /* Pods-Pikko_Example */, 381 | 7D3CEB23895A971FAF0C5419BCEA391D /* Pods-Pikko_Tests */, 382 | ); 383 | }; 384 | /* End PBXProject section */ 385 | 386 | /* Begin PBXResourcesBuildPhase section */ 387 | 02BD2C92D104780A1EA151467DF375B2 /* Resources */ = { 388 | isa = PBXResourcesBuildPhase; 389 | buildActionMask = 2147483647; 390 | files = ( 391 | ); 392 | runOnlyForDeploymentPostprocessing = 0; 393 | }; 394 | 670F4F3611BB740806CFFD243AB523EF /* Resources */ = { 395 | isa = PBXResourcesBuildPhase; 396 | buildActionMask = 2147483647; 397 | files = ( 398 | ); 399 | runOnlyForDeploymentPostprocessing = 0; 400 | }; 401 | 9A4AE7522AE5EA4411CA3DCFA54AD542 /* Resources */ = { 402 | isa = PBXResourcesBuildPhase; 403 | buildActionMask = 2147483647; 404 | files = ( 405 | ); 406 | runOnlyForDeploymentPostprocessing = 0; 407 | }; 408 | /* End PBXResourcesBuildPhase section */ 409 | 410 | /* Begin PBXSourcesBuildPhase section */ 411 | 572C537651895341ADF56C6D64B2475F /* Sources */ = { 412 | isa = PBXSourcesBuildPhase; 413 | buildActionMask = 2147483647; 414 | files = ( 415 | 3F459B9CDDE0998FFAA41796E0A948FC /* Pods-Pikko_Tests-dummy.m in Sources */, 416 | ); 417 | runOnlyForDeploymentPostprocessing = 0; 418 | }; 419 | 5BB8625A31E5EFBC1FA6D6F68B11008B /* Sources */ = { 420 | isa = PBXSourcesBuildPhase; 421 | buildActionMask = 2147483647; 422 | files = ( 423 | 66D334ABF8A9868F43716E20419B4108 /* Pods-Pikko_Example-dummy.m in Sources */, 424 | ); 425 | runOnlyForDeploymentPostprocessing = 0; 426 | }; 427 | E52A3BDFD3163CF97D1DA5537D49BF35 /* Sources */ = { 428 | isa = PBXSourcesBuildPhase; 429 | buildActionMask = 2147483647; 430 | files = ( 431 | 305D0F6EF7F28796311F57AF4D07195C /* Animations.swift in Sources */, 432 | 875A73B7CE02D06B9EFC64D7829B4A59 /* BrightnessSaturationView.swift in Sources */, 433 | 8FA73D80C8C0193978A2112611808E17 /* ColorUtilities.swift in Sources */, 434 | CEA52E5BF0A723FC5C83524203966E25 /* HueDelegate.swift in Sources */, 435 | AFD4C9BF4B6BB1441986CB43678C7EC3 /* HueView.swift in Sources */, 436 | 9A39D28281FEA34C9520D579DA3384F3 /* Pikko-dummy.m in Sources */, 437 | AC58B8F765AB7B5C9C6AADD8EA6BA83C /* Pikko.swift in Sources */, 438 | 7DF5EB2DCB10814383FEF74C004D4C5C /* PikkoDelegate.swift in Sources */, 439 | DB0BB921AD4EA7F3E9FB1FE3A3B7A15E /* UIColor+HSBAComponents.swift in Sources */, 440 | ); 441 | runOnlyForDeploymentPostprocessing = 0; 442 | }; 443 | /* End PBXSourcesBuildPhase section */ 444 | 445 | /* Begin PBXTargetDependency section */ 446 | 0A002C8692CCC26A6A2D0A40802207C6 /* PBXTargetDependency */ = { 447 | isa = PBXTargetDependency; 448 | name = Pikko; 449 | target = 58417AAECAC0F3DDD95A324EDB397669 /* Pikko */; 450 | targetProxy = 6CB5E31623EBDF90E14161D2497EC897 /* PBXContainerItemProxy */; 451 | }; 452 | 44628DCFC030AE5AB7BA3F0F2AD364C7 /* PBXTargetDependency */ = { 453 | isa = PBXTargetDependency; 454 | name = "Pods-Pikko_Example"; 455 | target = 1B37E03C0FC790A11B5D52B39864F766 /* Pods-Pikko_Example */; 456 | targetProxy = 33928268B1F9424DF9ED7FCF49DC0410 /* PBXContainerItemProxy */; 457 | }; 458 | /* End PBXTargetDependency section */ 459 | 460 | /* Begin XCBuildConfiguration section */ 461 | 47452331016522B1E67965B7674773A9 /* Debug */ = { 462 | isa = XCBuildConfiguration; 463 | baseConfigurationReference = 218A4D7EBA5D9C1BA04DD92B6F2CDA23 /* Pods-Pikko_Tests.debug.xcconfig */; 464 | buildSettings = { 465 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; 466 | CODE_SIGN_IDENTITY = ""; 467 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; 468 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 469 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; 470 | CURRENT_PROJECT_VERSION = 1; 471 | DEFINES_MODULE = YES; 472 | DYLIB_COMPATIBILITY_VERSION = 1; 473 | DYLIB_CURRENT_VERSION = 1; 474 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 475 | INFOPLIST_FILE = "Target Support Files/Pods-Pikko_Tests/Pods-Pikko_Tests-Info.plist"; 476 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 477 | IPHONEOS_DEPLOYMENT_TARGET = 9.3; 478 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 479 | MACH_O_TYPE = staticlib; 480 | MODULEMAP_FILE = "Target Support Files/Pods-Pikko_Tests/Pods-Pikko_Tests.modulemap"; 481 | OTHER_LDFLAGS = ""; 482 | OTHER_LIBTOOLFLAGS = ""; 483 | PODS_ROOT = "$(SRCROOT)"; 484 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; 485 | PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; 486 | SDKROOT = iphoneos; 487 | SKIP_INSTALL = YES; 488 | TARGETED_DEVICE_FAMILY = "1,2"; 489 | VERSIONING_SYSTEM = "apple-generic"; 490 | VERSION_INFO_PREFIX = ""; 491 | }; 492 | name = Debug; 493 | }; 494 | 7568AD44997CAB3A834E29994A79ED74 /* Release */ = { 495 | isa = XCBuildConfiguration; 496 | baseConfigurationReference = 7D813665D6EC7C3B0CACBCE3FDFAB606 /* Pods-Pikko_Example.release.xcconfig */; 497 | buildSettings = { 498 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; 499 | CODE_SIGN_IDENTITY = ""; 500 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; 501 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 502 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; 503 | CURRENT_PROJECT_VERSION = 1; 504 | DEFINES_MODULE = YES; 505 | DYLIB_COMPATIBILITY_VERSION = 1; 506 | DYLIB_CURRENT_VERSION = 1; 507 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 508 | INFOPLIST_FILE = "Target Support Files/Pods-Pikko_Example/Pods-Pikko_Example-Info.plist"; 509 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 510 | IPHONEOS_DEPLOYMENT_TARGET = 9.3; 511 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 512 | MACH_O_TYPE = staticlib; 513 | MODULEMAP_FILE = "Target Support Files/Pods-Pikko_Example/Pods-Pikko_Example.modulemap"; 514 | OTHER_LDFLAGS = ""; 515 | OTHER_LIBTOOLFLAGS = ""; 516 | PODS_ROOT = "$(SRCROOT)"; 517 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; 518 | PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; 519 | SDKROOT = iphoneos; 520 | SKIP_INSTALL = YES; 521 | TARGETED_DEVICE_FAMILY = "1,2"; 522 | VALIDATE_PRODUCT = YES; 523 | VERSIONING_SYSTEM = "apple-generic"; 524 | VERSION_INFO_PREFIX = ""; 525 | }; 526 | name = Release; 527 | }; 528 | B0087CB4594321EF41619F3181FE120E /* Release */ = { 529 | isa = XCBuildConfiguration; 530 | buildSettings = { 531 | ALWAYS_SEARCH_USER_PATHS = NO; 532 | CLANG_ANALYZER_NONNULL = YES; 533 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 534 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 535 | CLANG_CXX_LIBRARY = "libc++"; 536 | CLANG_ENABLE_MODULES = YES; 537 | CLANG_ENABLE_OBJC_ARC = YES; 538 | CLANG_ENABLE_OBJC_WEAK = YES; 539 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 540 | CLANG_WARN_BOOL_CONVERSION = YES; 541 | CLANG_WARN_COMMA = YES; 542 | CLANG_WARN_CONSTANT_CONVERSION = YES; 543 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 544 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 545 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 546 | CLANG_WARN_EMPTY_BODY = YES; 547 | CLANG_WARN_ENUM_CONVERSION = YES; 548 | CLANG_WARN_INFINITE_RECURSION = YES; 549 | CLANG_WARN_INT_CONVERSION = YES; 550 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 551 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 552 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 553 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 554 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 555 | CLANG_WARN_STRICT_PROTOTYPES = YES; 556 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 557 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 558 | CLANG_WARN_UNREACHABLE_CODE = YES; 559 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 560 | COPY_PHASE_STRIP = NO; 561 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 562 | ENABLE_NS_ASSERTIONS = NO; 563 | ENABLE_STRICT_OBJC_MSGSEND = YES; 564 | GCC_C_LANGUAGE_STANDARD = gnu11; 565 | GCC_NO_COMMON_BLOCKS = YES; 566 | GCC_PREPROCESSOR_DEFINITIONS = ( 567 | "POD_CONFIGURATION_RELEASE=1", 568 | "$(inherited)", 569 | ); 570 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 571 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 572 | GCC_WARN_UNDECLARED_SELECTOR = YES; 573 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 574 | GCC_WARN_UNUSED_FUNCTION = YES; 575 | GCC_WARN_UNUSED_VARIABLE = YES; 576 | IPHONEOS_DEPLOYMENT_TARGET = 9.3; 577 | MTL_ENABLE_DEBUG_INFO = NO; 578 | MTL_FAST_MATH = YES; 579 | PRODUCT_NAME = "$(TARGET_NAME)"; 580 | STRIP_INSTALLED_PRODUCT = NO; 581 | SWIFT_COMPILATION_MODE = wholemodule; 582 | SWIFT_OPTIMIZATION_LEVEL = "-O"; 583 | SWIFT_VERSION = 5.0; 584 | SYMROOT = "${SRCROOT}/../build"; 585 | }; 586 | name = Release; 587 | }; 588 | B2A6E0DDD7CF287855836BF36FBABA8A /* Release */ = { 589 | isa = XCBuildConfiguration; 590 | baseConfigurationReference = 22451616EA9E85352EA84BCD8C4ACD94 /* Pods-Pikko_Tests.release.xcconfig */; 591 | buildSettings = { 592 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; 593 | CODE_SIGN_IDENTITY = ""; 594 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; 595 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 596 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; 597 | CURRENT_PROJECT_VERSION = 1; 598 | DEFINES_MODULE = YES; 599 | DYLIB_COMPATIBILITY_VERSION = 1; 600 | DYLIB_CURRENT_VERSION = 1; 601 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 602 | INFOPLIST_FILE = "Target Support Files/Pods-Pikko_Tests/Pods-Pikko_Tests-Info.plist"; 603 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 604 | IPHONEOS_DEPLOYMENT_TARGET = 9.3; 605 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 606 | MACH_O_TYPE = staticlib; 607 | MODULEMAP_FILE = "Target Support Files/Pods-Pikko_Tests/Pods-Pikko_Tests.modulemap"; 608 | OTHER_LDFLAGS = ""; 609 | OTHER_LIBTOOLFLAGS = ""; 610 | PODS_ROOT = "$(SRCROOT)"; 611 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; 612 | PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; 613 | SDKROOT = iphoneos; 614 | SKIP_INSTALL = YES; 615 | TARGETED_DEVICE_FAMILY = "1,2"; 616 | VALIDATE_PRODUCT = YES; 617 | VERSIONING_SYSTEM = "apple-generic"; 618 | VERSION_INFO_PREFIX = ""; 619 | }; 620 | name = Release; 621 | }; 622 | B8BCBD0110C2658BB5DAADB9B7D97B92 /* Debug */ = { 623 | isa = XCBuildConfiguration; 624 | buildSettings = { 625 | ALWAYS_SEARCH_USER_PATHS = NO; 626 | CLANG_ANALYZER_NONNULL = YES; 627 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 628 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 629 | CLANG_CXX_LIBRARY = "libc++"; 630 | CLANG_ENABLE_MODULES = YES; 631 | CLANG_ENABLE_OBJC_ARC = YES; 632 | CLANG_ENABLE_OBJC_WEAK = YES; 633 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 634 | CLANG_WARN_BOOL_CONVERSION = YES; 635 | CLANG_WARN_COMMA = YES; 636 | CLANG_WARN_CONSTANT_CONVERSION = YES; 637 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 638 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 639 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 640 | CLANG_WARN_EMPTY_BODY = YES; 641 | CLANG_WARN_ENUM_CONVERSION = YES; 642 | CLANG_WARN_INFINITE_RECURSION = YES; 643 | CLANG_WARN_INT_CONVERSION = YES; 644 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 645 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 646 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 647 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 648 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 649 | CLANG_WARN_STRICT_PROTOTYPES = YES; 650 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 651 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 652 | CLANG_WARN_UNREACHABLE_CODE = YES; 653 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 654 | COPY_PHASE_STRIP = NO; 655 | DEBUG_INFORMATION_FORMAT = dwarf; 656 | ENABLE_STRICT_OBJC_MSGSEND = YES; 657 | ENABLE_TESTABILITY = YES; 658 | GCC_C_LANGUAGE_STANDARD = gnu11; 659 | GCC_DYNAMIC_NO_PIC = NO; 660 | GCC_NO_COMMON_BLOCKS = YES; 661 | GCC_OPTIMIZATION_LEVEL = 0; 662 | GCC_PREPROCESSOR_DEFINITIONS = ( 663 | "POD_CONFIGURATION_DEBUG=1", 664 | "DEBUG=1", 665 | "$(inherited)", 666 | ); 667 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 668 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 669 | GCC_WARN_UNDECLARED_SELECTOR = YES; 670 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 671 | GCC_WARN_UNUSED_FUNCTION = YES; 672 | GCC_WARN_UNUSED_VARIABLE = YES; 673 | IPHONEOS_DEPLOYMENT_TARGET = 9.3; 674 | MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; 675 | MTL_FAST_MATH = YES; 676 | ONLY_ACTIVE_ARCH = YES; 677 | PRODUCT_NAME = "$(TARGET_NAME)"; 678 | STRIP_INSTALLED_PRODUCT = NO; 679 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; 680 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 681 | SWIFT_VERSION = 5.0; 682 | SYMROOT = "${SRCROOT}/../build"; 683 | }; 684 | name = Debug; 685 | }; 686 | CB7489A7DE49653CAF26CF99A7B3CDD7 /* Debug */ = { 687 | isa = XCBuildConfiguration; 688 | baseConfigurationReference = E6B4BCFD93A195EC08A6192AD1D0E40B /* Pods-Pikko_Example.debug.xcconfig */; 689 | buildSettings = { 690 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; 691 | CODE_SIGN_IDENTITY = ""; 692 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; 693 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 694 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; 695 | CURRENT_PROJECT_VERSION = 1; 696 | DEFINES_MODULE = YES; 697 | DYLIB_COMPATIBILITY_VERSION = 1; 698 | DYLIB_CURRENT_VERSION = 1; 699 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 700 | INFOPLIST_FILE = "Target Support Files/Pods-Pikko_Example/Pods-Pikko_Example-Info.plist"; 701 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 702 | IPHONEOS_DEPLOYMENT_TARGET = 9.3; 703 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 704 | MACH_O_TYPE = staticlib; 705 | MODULEMAP_FILE = "Target Support Files/Pods-Pikko_Example/Pods-Pikko_Example.modulemap"; 706 | OTHER_LDFLAGS = ""; 707 | OTHER_LIBTOOLFLAGS = ""; 708 | PODS_ROOT = "$(SRCROOT)"; 709 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; 710 | PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; 711 | SDKROOT = iphoneos; 712 | SKIP_INSTALL = YES; 713 | TARGETED_DEVICE_FAMILY = "1,2"; 714 | VERSIONING_SYSTEM = "apple-generic"; 715 | VERSION_INFO_PREFIX = ""; 716 | }; 717 | name = Debug; 718 | }; 719 | D8106C116540E4066B8B20AA9FE96F39 /* Debug */ = { 720 | isa = XCBuildConfiguration; 721 | baseConfigurationReference = 90FC219232B4D9B4342796CBDBE4BF9D /* Pikko.xcconfig */; 722 | buildSettings = { 723 | CODE_SIGN_IDENTITY = ""; 724 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; 725 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 726 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; 727 | CURRENT_PROJECT_VERSION = 1; 728 | DEFINES_MODULE = YES; 729 | DYLIB_COMPATIBILITY_VERSION = 1; 730 | DYLIB_CURRENT_VERSION = 1; 731 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 732 | GCC_PREFIX_HEADER = "Target Support Files/Pikko/Pikko-prefix.pch"; 733 | INFOPLIST_FILE = "Target Support Files/Pikko/Pikko-Info.plist"; 734 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 735 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 736 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 737 | MODULEMAP_FILE = "Target Support Files/Pikko/Pikko.modulemap"; 738 | PRODUCT_MODULE_NAME = Pikko; 739 | PRODUCT_NAME = Pikko; 740 | SDKROOT = iphoneos; 741 | SKIP_INSTALL = YES; 742 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; 743 | SWIFT_VERSION = 4.0; 744 | TARGETED_DEVICE_FAMILY = "1,2"; 745 | VERSIONING_SYSTEM = "apple-generic"; 746 | VERSION_INFO_PREFIX = ""; 747 | }; 748 | name = Debug; 749 | }; 750 | FF75A2BA49858F8F869637E062B32EC3 /* Release */ = { 751 | isa = XCBuildConfiguration; 752 | baseConfigurationReference = 90FC219232B4D9B4342796CBDBE4BF9D /* Pikko.xcconfig */; 753 | buildSettings = { 754 | CODE_SIGN_IDENTITY = ""; 755 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; 756 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 757 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; 758 | CURRENT_PROJECT_VERSION = 1; 759 | DEFINES_MODULE = YES; 760 | DYLIB_COMPATIBILITY_VERSION = 1; 761 | DYLIB_CURRENT_VERSION = 1; 762 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 763 | GCC_PREFIX_HEADER = "Target Support Files/Pikko/Pikko-prefix.pch"; 764 | INFOPLIST_FILE = "Target Support Files/Pikko/Pikko-Info.plist"; 765 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 766 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 767 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 768 | MODULEMAP_FILE = "Target Support Files/Pikko/Pikko.modulemap"; 769 | PRODUCT_MODULE_NAME = Pikko; 770 | PRODUCT_NAME = Pikko; 771 | SDKROOT = iphoneos; 772 | SKIP_INSTALL = YES; 773 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; 774 | SWIFT_VERSION = 4.0; 775 | TARGETED_DEVICE_FAMILY = "1,2"; 776 | VALIDATE_PRODUCT = YES; 777 | VERSIONING_SYSTEM = "apple-generic"; 778 | VERSION_INFO_PREFIX = ""; 779 | }; 780 | name = Release; 781 | }; 782 | /* End XCBuildConfiguration section */ 783 | 784 | /* Begin XCConfigurationList section */ 785 | 437847B04207ABC1BA335DD0356C9823 /* Build configuration list for PBXNativeTarget "Pikko" */ = { 786 | isa = XCConfigurationList; 787 | buildConfigurations = ( 788 | D8106C116540E4066B8B20AA9FE96F39 /* Debug */, 789 | FF75A2BA49858F8F869637E062B32EC3 /* Release */, 790 | ); 791 | defaultConfigurationIsVisible = 0; 792 | defaultConfigurationName = Release; 793 | }; 794 | 4821239608C13582E20E6DA73FD5F1F9 /* Build configuration list for PBXProject "Pods" */ = { 795 | isa = XCConfigurationList; 796 | buildConfigurations = ( 797 | B8BCBD0110C2658BB5DAADB9B7D97B92 /* Debug */, 798 | B0087CB4594321EF41619F3181FE120E /* Release */, 799 | ); 800 | defaultConfigurationIsVisible = 0; 801 | defaultConfigurationName = Release; 802 | }; 803 | 4E8A11295026DCE63DF735D9D5B6917E /* Build configuration list for PBXNativeTarget "Pods-Pikko_Tests" */ = { 804 | isa = XCConfigurationList; 805 | buildConfigurations = ( 806 | 47452331016522B1E67965B7674773A9 /* Debug */, 807 | B2A6E0DDD7CF287855836BF36FBABA8A /* Release */, 808 | ); 809 | defaultConfigurationIsVisible = 0; 810 | defaultConfigurationName = Release; 811 | }; 812 | D9578D1DAE0218E5D5801147A57E3783 /* Build configuration list for PBXNativeTarget "Pods-Pikko_Example" */ = { 813 | isa = XCConfigurationList; 814 | buildConfigurations = ( 815 | CB7489A7DE49653CAF26CF99A7B3CDD7 /* Debug */, 816 | 7568AD44997CAB3A834E29994A79ED74 /* Release */, 817 | ); 818 | defaultConfigurationIsVisible = 0; 819 | defaultConfigurationName = Release; 820 | }; 821 | /* End XCConfigurationList section */ 822 | }; 823 | rootObject = BFDFE7DC352907FC980B868725387E98 /* Project object */; 824 | } 825 | -------------------------------------------------------------------------------- /Example/Pods/Pods.xcodeproj/xcshareddata/xcschemes/Pikko.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 43 | 44 | 50 | 51 | 57 | 58 | 59 | 60 | 62 | 63 | 66 | 67 | 68 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pikko/Pikko-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.3 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pikko/Pikko-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Pikko : NSObject 3 | @end 4 | @implementation PodsDummy_Pikko 5 | @end 6 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pikko/Pikko-prefix.pch: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pikko/Pikko-umbrella.h: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | 14 | FOUNDATION_EXPORT double PikkoVersionNumber; 15 | FOUNDATION_EXPORT const unsigned char PikkoVersionString[]; 16 | 17 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pikko/Pikko.modulemap: -------------------------------------------------------------------------------- 1 | framework module Pikko { 2 | umbrella header "Pikko-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pikko/Pikko.xcconfig: -------------------------------------------------------------------------------- 1 | CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/Pikko 2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 3 | OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS 4 | PODS_BUILD_DIR = ${BUILD_DIR} 5 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 6 | PODS_ROOT = ${SRCROOT} 7 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/../.. 8 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 9 | SKIP_INSTALL = YES 10 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-Pikko_Example/Pods-Pikko_Example-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | ${PRODUCT_BUNDLE_IDENTIFIER} 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | ${PRODUCT_NAME} 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-Pikko_Example/Pods-Pikko_Example-acknowledgements.markdown: -------------------------------------------------------------------------------- 1 | # Acknowledgements 2 | This application makes use of the following third party libraries: 3 | 4 | ## Pikko 5 | 6 | Copyright (c) 2018 Sandra , Johannes 7 | MIT License 8 | 9 | Permission is hereby granted, free of charge, to any person obtaining a copy 10 | of this software and associated documentation files (the "Software"), to deal 11 | in the Software without restriction, including without limitation the rights 12 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 13 | copies of the Software, and to permit persons to whom the Software is 14 | furnished to do so, subject to the following conditions: 15 | 16 | The above copyright notice and this permission notice shall be included in 17 | all copies or substantial portions of the Software. 18 | 19 | 20 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 21 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 22 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 23 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 24 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 25 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 26 | SOFTWARE. 27 | 28 | 29 | Generated by CocoaPods - https://cocoapods.org 30 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-Pikko_Example/Pods-Pikko_Example-acknowledgements.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PreferenceSpecifiers 6 | 7 | 8 | FooterText 9 | This application makes use of the following third party libraries: 10 | Title 11 | Acknowledgements 12 | Type 13 | PSGroupSpecifier 14 | 15 | 16 | FooterText 17 | Copyright (c) 2018 Sandra <melloskitten@googlemail.com>, Johannes <mail@johannesrohwer.com> 18 | MIT License 19 | 20 | Permission is hereby granted, free of charge, to any person obtaining a copy 21 | of this software and associated documentation files (the "Software"), to deal 22 | in the Software without restriction, including without limitation the rights 23 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 24 | copies of the Software, and to permit persons to whom the Software is 25 | furnished to do so, subject to the following conditions: 26 | 27 | The above copyright notice and this permission notice shall be included in 28 | all copies or substantial portions of the Software. 29 | 30 | 31 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 32 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 33 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 34 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 35 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 36 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 37 | SOFTWARE. 38 | 39 | 40 | License 41 | MIT 42 | Title 43 | Pikko 44 | Type 45 | PSGroupSpecifier 46 | 47 | 48 | FooterText 49 | Generated by CocoaPods - https://cocoapods.org 50 | Title 51 | 52 | Type 53 | PSGroupSpecifier 54 | 55 | 56 | StringsTable 57 | Acknowledgements 58 | Title 59 | Acknowledgements 60 | 61 | 62 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-Pikko_Example/Pods-Pikko_Example-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Pods_Pikko_Example : NSObject 3 | @end 4 | @implementation PodsDummy_Pods_Pikko_Example 5 | @end 6 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-Pikko_Example/Pods-Pikko_Example-frameworks.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | set -e 3 | set -u 4 | set -o pipefail 5 | 6 | function on_error { 7 | echo "$(realpath -mq "${0}"):$1: error: Unexpected failure" 8 | } 9 | trap 'on_error $LINENO' ERR 10 | 11 | if [ -z ${FRAMEWORKS_FOLDER_PATH+x} ]; then 12 | # If FRAMEWORKS_FOLDER_PATH is not set, then there's nowhere for us to copy 13 | # frameworks to, so exit 0 (signalling the script phase was successful). 14 | exit 0 15 | fi 16 | 17 | echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 18 | mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 19 | 20 | COCOAPODS_PARALLEL_CODE_SIGN="${COCOAPODS_PARALLEL_CODE_SIGN:-false}" 21 | SWIFT_STDLIB_PATH="${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" 22 | 23 | # Used as a return value for each invocation of `strip_invalid_archs` function. 24 | STRIP_BINARY_RETVAL=0 25 | 26 | # This protects against multiple targets copying the same framework dependency at the same time. The solution 27 | # was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html 28 | RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????") 29 | 30 | # Copies and strips a vendored framework 31 | install_framework() 32 | { 33 | if [ -r "${BUILT_PRODUCTS_DIR}/$1" ]; then 34 | local source="${BUILT_PRODUCTS_DIR}/$1" 35 | elif [ -r "${BUILT_PRODUCTS_DIR}/$(basename "$1")" ]; then 36 | local source="${BUILT_PRODUCTS_DIR}/$(basename "$1")" 37 | elif [ -r "$1" ]; then 38 | local source="$1" 39 | fi 40 | 41 | local destination="${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 42 | 43 | if [ -L "${source}" ]; then 44 | echo "Symlinked..." 45 | source="$(readlink "${source}")" 46 | fi 47 | 48 | # Use filter instead of exclude so missing patterns don't throw errors. 49 | echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${destination}\"" 50 | rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${destination}" 51 | 52 | local basename 53 | basename="$(basename -s .framework "$1")" 54 | binary="${destination}/${basename}.framework/${basename}" 55 | 56 | if ! [ -r "$binary" ]; then 57 | binary="${destination}/${basename}" 58 | elif [ -L "${binary}" ]; then 59 | echo "Destination binary is symlinked..." 60 | dirname="$(dirname "${binary}")" 61 | binary="${dirname}/$(readlink "${binary}")" 62 | fi 63 | 64 | # Strip invalid architectures so "fat" simulator / device frameworks work on device 65 | if [[ "$(file "$binary")" == *"dynamically linked shared library"* ]]; then 66 | strip_invalid_archs "$binary" 67 | fi 68 | 69 | # Resign the code if required by the build settings to avoid unstable apps 70 | code_sign_if_enabled "${destination}/$(basename "$1")" 71 | 72 | # Embed linked Swift runtime libraries. No longer necessary as of Xcode 7. 73 | if [ "${XCODE_VERSION_MAJOR}" -lt 7 ]; then 74 | local swift_runtime_libs 75 | swift_runtime_libs=$(xcrun otool -LX "$binary" | grep --color=never @rpath/libswift | sed -E s/@rpath\\/\(.+dylib\).*/\\1/g | uniq -u) 76 | for lib in $swift_runtime_libs; do 77 | echo "rsync -auv \"${SWIFT_STDLIB_PATH}/${lib}\" \"${destination}\"" 78 | rsync -auv "${SWIFT_STDLIB_PATH}/${lib}" "${destination}" 79 | code_sign_if_enabled "${destination}/${lib}" 80 | done 81 | fi 82 | } 83 | 84 | # Copies and strips a vendored dSYM 85 | install_dsym() { 86 | local source="$1" 87 | if [ -r "$source" ]; then 88 | # Copy the dSYM into a the targets temp dir. 89 | echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${DERIVED_FILES_DIR}\"" 90 | rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${DERIVED_FILES_DIR}" 91 | 92 | local basename 93 | basename="$(basename -s .framework.dSYM "$source")" 94 | binary="${DERIVED_FILES_DIR}/${basename}.framework.dSYM/Contents/Resources/DWARF/${basename}" 95 | 96 | # Strip invalid architectures so "fat" simulator / device frameworks work on device 97 | if [[ "$(file "$binary")" == *"Mach-O dSYM companion"* ]]; then 98 | strip_invalid_archs "$binary" 99 | fi 100 | 101 | if [[ $STRIP_BINARY_RETVAL == 1 ]]; then 102 | # Move the stripped file into its final destination. 103 | echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${DERIVED_FILES_DIR}/${basename}.framework.dSYM\" \"${DWARF_DSYM_FOLDER_PATH}\"" 104 | rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${DERIVED_FILES_DIR}/${basename}.framework.dSYM" "${DWARF_DSYM_FOLDER_PATH}" 105 | else 106 | # The dSYM was not stripped at all, in this case touch a fake folder so the input/output paths from Xcode do not reexecute this script because the file is missing. 107 | touch "${DWARF_DSYM_FOLDER_PATH}/${basename}.framework.dSYM" 108 | fi 109 | fi 110 | } 111 | 112 | # Signs a framework with the provided identity 113 | code_sign_if_enabled() { 114 | if [ -n "${EXPANDED_CODE_SIGN_IDENTITY:-}" -a "${CODE_SIGNING_REQUIRED:-}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then 115 | # Use the current code_sign_identity 116 | echo "Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}" 117 | local code_sign_cmd="/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS:-} --preserve-metadata=identifier,entitlements '$1'" 118 | 119 | if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then 120 | code_sign_cmd="$code_sign_cmd &" 121 | fi 122 | echo "$code_sign_cmd" 123 | eval "$code_sign_cmd" 124 | fi 125 | } 126 | 127 | # Strip invalid architectures 128 | strip_invalid_archs() { 129 | binary="$1" 130 | # Get architectures for current target binary 131 | binary_archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | awk '{$1=$1;print}' | rev)" 132 | # Intersect them with the architectures we are building for 133 | intersected_archs="$(echo ${ARCHS[@]} ${binary_archs[@]} | tr ' ' '\n' | sort | uniq -d)" 134 | # If there are no archs supported by this binary then warn the user 135 | if [[ -z "$intersected_archs" ]]; then 136 | echo "warning: [CP] Vendored binary '$binary' contains architectures ($binary_archs) none of which match the current build architectures ($ARCHS)." 137 | STRIP_BINARY_RETVAL=0 138 | return 139 | fi 140 | stripped="" 141 | for arch in $binary_archs; do 142 | if ! [[ "${ARCHS}" == *"$arch"* ]]; then 143 | # Strip non-valid architectures in-place 144 | lipo -remove "$arch" -output "$binary" "$binary" 145 | stripped="$stripped $arch" 146 | fi 147 | done 148 | if [[ "$stripped" ]]; then 149 | echo "Stripped $binary of architectures:$stripped" 150 | fi 151 | STRIP_BINARY_RETVAL=1 152 | } 153 | 154 | 155 | if [[ "$CONFIGURATION" == "Debug" ]]; then 156 | install_framework "${BUILT_PRODUCTS_DIR}/Pikko/Pikko.framework" 157 | fi 158 | if [[ "$CONFIGURATION" == "Release" ]]; then 159 | install_framework "${BUILT_PRODUCTS_DIR}/Pikko/Pikko.framework" 160 | fi 161 | if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then 162 | wait 163 | fi 164 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-Pikko_Example/Pods-Pikko_Example-umbrella.h: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | 14 | FOUNDATION_EXPORT double Pods_Pikko_ExampleVersionNumber; 15 | FOUNDATION_EXPORT const unsigned char Pods_Pikko_ExampleVersionString[]; 16 | 17 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-Pikko_Example/Pods-Pikko_Example.debug.xcconfig: -------------------------------------------------------------------------------- 1 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES 2 | FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Pikko" 3 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 4 | HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Pikko/Pikko.framework/Headers" 5 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' 6 | OTHER_LDFLAGS = $(inherited) -framework "Pikko" 7 | OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS 8 | PODS_BUILD_DIR = ${BUILD_DIR} 9 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 10 | PODS_PODFILE_DIR_PATH = ${SRCROOT}/. 11 | PODS_ROOT = ${SRCROOT}/Pods 12 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-Pikko_Example/Pods-Pikko_Example.modulemap: -------------------------------------------------------------------------------- 1 | framework module Pods_Pikko_Example { 2 | umbrella header "Pods-Pikko_Example-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-Pikko_Example/Pods-Pikko_Example.release.xcconfig: -------------------------------------------------------------------------------- 1 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES 2 | FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Pikko" 3 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 4 | HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Pikko/Pikko.framework/Headers" 5 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' 6 | OTHER_LDFLAGS = $(inherited) -framework "Pikko" 7 | OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS 8 | PODS_BUILD_DIR = ${BUILD_DIR} 9 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 10 | PODS_PODFILE_DIR_PATH = ${SRCROOT}/. 11 | PODS_ROOT = ${SRCROOT}/Pods 12 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-Pikko_Tests/Pods-Pikko_Tests-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | ${PRODUCT_BUNDLE_IDENTIFIER} 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | ${PRODUCT_NAME} 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-Pikko_Tests/Pods-Pikko_Tests-acknowledgements.markdown: -------------------------------------------------------------------------------- 1 | # Acknowledgements 2 | This application makes use of the following third party libraries: 3 | Generated by CocoaPods - https://cocoapods.org 4 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-Pikko_Tests/Pods-Pikko_Tests-acknowledgements.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PreferenceSpecifiers 6 | 7 | 8 | FooterText 9 | This application makes use of the following third party libraries: 10 | Title 11 | Acknowledgements 12 | Type 13 | PSGroupSpecifier 14 | 15 | 16 | FooterText 17 | Generated by CocoaPods - https://cocoapods.org 18 | Title 19 | 20 | Type 21 | PSGroupSpecifier 22 | 23 | 24 | StringsTable 25 | Acknowledgements 26 | Title 27 | Acknowledgements 28 | 29 | 30 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-Pikko_Tests/Pods-Pikko_Tests-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Pods_Pikko_Tests : NSObject 3 | @end 4 | @implementation PodsDummy_Pods_Pikko_Tests 5 | @end 6 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-Pikko_Tests/Pods-Pikko_Tests-umbrella.h: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | 14 | FOUNDATION_EXPORT double Pods_Pikko_TestsVersionNumber; 15 | FOUNDATION_EXPORT const unsigned char Pods_Pikko_TestsVersionString[]; 16 | 17 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-Pikko_Tests/Pods-Pikko_Tests.debug.xcconfig: -------------------------------------------------------------------------------- 1 | FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Pikko" 2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 3 | HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Pikko/Pikko.framework/Headers" 4 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' 5 | OTHER_LDFLAGS = $(inherited) -framework "Pikko" 6 | PODS_BUILD_DIR = ${BUILD_DIR} 7 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 8 | PODS_PODFILE_DIR_PATH = ${SRCROOT}/. 9 | PODS_ROOT = ${SRCROOT}/Pods 10 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-Pikko_Tests/Pods-Pikko_Tests.modulemap: -------------------------------------------------------------------------------- 1 | framework module Pods_Pikko_Tests { 2 | umbrella header "Pods-Pikko_Tests-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-Pikko_Tests/Pods-Pikko_Tests.release.xcconfig: -------------------------------------------------------------------------------- 1 | FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Pikko" 2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 3 | HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Pikko/Pikko.framework/Headers" 4 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' 5 | OTHER_LDFLAGS = $(inherited) -framework "Pikko" 6 | PODS_BUILD_DIR = ${BUILD_DIR} 7 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 8 | PODS_PODFILE_DIR_PATH = ${SRCROOT}/. 9 | PODS_ROOT = ${SRCROOT}/Pods 10 | -------------------------------------------------------------------------------- /Example/Tests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | 24 | 25 | -------------------------------------------------------------------------------- /Example/Tests/Tests.swift: -------------------------------------------------------------------------------- 1 | import XCTest 2 | import Pikko 3 | 4 | class Tests: XCTestCase { 5 | 6 | override func setUp() { 7 | super.setUp() 8 | // Put setup code here. This method is called before the invocation of each test method in the class. 9 | } 10 | 11 | override func tearDown() { 12 | // Put teardown code here. This method is called after the invocation of each test method in the class. 13 | super.tearDown() 14 | } 15 | 16 | func testExample() { 17 | // This is an example of a functional test case. 18 | XCTAssert(true, "Pass") 19 | } 20 | 21 | func testPerformanceExample() { 22 | // This is an example of a performance test case. 23 | self.measure() { 24 | // Put the code you want to measure the time of here. 25 | } 26 | } 27 | 28 | } 29 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2018 Sandra , Johannes 2 | MIT License 3 | 4 | Permission is hereby granted, free of charge, to any person obtaining a copy 5 | of this software and associated documentation files (the "Software"), to deal 6 | in the Software without restriction, including without limitation the rights 7 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 8 | copies of the Software, and to permit persons to whom the Software is 9 | furnished to do so, subject to the following conditions: 10 | 11 | The above copyright notice and this permission notice shall be included in 12 | all copies or substantial portions of the Software. 13 | 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | 23 | -------------------------------------------------------------------------------- /Package.swift: -------------------------------------------------------------------------------- 1 | // swift-tools-version:5.1 2 | // The swift-tools-version declares the minimum version of Swift required to build this package. 3 | 4 | import PackageDescription 5 | 6 | let package = Package( 7 | name: "Pikko", 8 | platforms: [ 9 | .iOS(.v13), 10 | ], 11 | products: [ 12 | // Products define the executables and libraries produced by a package, and make them visible to other packages. 13 | .library( 14 | name: "Pikko", 15 | targets: ["Pikko"]), 16 | ], 17 | dependencies: [ 18 | // Dependencies declare other packages that this package depends on. 19 | // .package(url: /* package url */, from: "1.0.0"), 20 | ], 21 | targets: [ 22 | // Targets are the basic building blocks of a package. A target can define a module or a test suite. 23 | // Targets can depend on other targets in this package, and on products in packages which this package depends on. 24 | .target( 25 | name: "Pikko", 26 | dependencies: [], 27 | path: "Pikko/Sources"), 28 | .testTarget( 29 | name: "PikkoTests", 30 | dependencies: ["Pikko"], 31 | path: "Pikko/Tests"), 32 | ] 33 | ) 34 | -------------------------------------------------------------------------------- /Pikko.podspec: -------------------------------------------------------------------------------- 1 | # 2 | Pod::Spec.new do |s| 3 | s.name = 'Pikko' 4 | s.version = '1.0.3' 5 | s.summary = 'Pikko - iOS color picker made with ❤️' 6 | s.swift_version = '4.0' 7 | 8 | 9 | s.description = <<-DESC 10 | Pikko is a simple and beautiful color picker for iOS. It's inspired by conventional color pickers from popular graphics tools such as _Photoshop_, _Paint Tool Sai_, _Procreate_ and many others. Pikko allows the selection of hue, saturation and brightness in a more pleasant way than boring sliders. 11 | DESC 12 | 13 | s.homepage = 'https://github.com/melloskitten/pikko/' 14 | s.license = { :type => 'MIT' } 15 | s.author = { 'Sandra' => 'melloskitten@googlemail.com', 'Johannes' => 'mail@johannesrohwer.com' } 16 | s.source = { :git => 'https://github.com/melloskitten/pikko.git', :tag => s.version.to_s } 17 | 18 | s.ios.deployment_target = '8.0' 19 | 20 | s.source_files = 'Pikko/Sources/Pikko/Classes/**/*' 21 | end 22 | -------------------------------------------------------------------------------- /Pikko/.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | /.build 3 | /Packages 4 | /*.xcodeproj 5 | xcuserdata/ 6 | -------------------------------------------------------------------------------- /Pikko/.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Pikko/.swiftpm/xcode/xcshareddata/xcschemes/Pikko.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 29 | 35 | 36 | 37 | 38 | 39 | 44 | 45 | 47 | 53 | 54 | 55 | 56 | 57 | 67 | 68 | 74 | 75 | 81 | 82 | 83 | 84 | 86 | 87 | 90 | 91 | 92 | -------------------------------------------------------------------------------- /Pikko/.swiftpm/xcode/xcshareddata/xcschemes/Scheme.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 14 | 15 | 16 | 17 | 27 | 28 | 34 | 35 | 37 | 38 | 41 | 42 | 43 | -------------------------------------------------------------------------------- /Pikko/Sources/Pikko/Classes/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/melloskitten/pikko/a412ab098d54cbc1f12a89aef12d45213f897fde/Pikko/Sources/Pikko/Classes/.gitkeep -------------------------------------------------------------------------------- /Pikko/Sources/Pikko/Classes/Delegate/HueDelegate.swift: -------------------------------------------------------------------------------- 1 | // 2 | // HueDelegate.swift 3 | // Pikko 4 | // 5 | // Created by Sandra & Johannes. 6 | // 7 | 8 | import Foundation 9 | #if os(iOS) 10 | import UIKit 11 | #endif 12 | 13 | 14 | /// Delegate used for writing back hue updates from the HueView. 15 | internal protocol HueDelegate { 16 | func didUpdateHue(hue: CGFloat) 17 | } 18 | -------------------------------------------------------------------------------- /Pikko/Sources/Pikko/Classes/Delegate/PikkoDelegate.swift: -------------------------------------------------------------------------------- 1 | // 2 | // PikkoDelegate.swift 3 | // Pikko 4 | // 5 | // Created by Sandra & Johannes. 6 | // 7 | 8 | import Foundation 9 | #if os(iOS) 10 | import UIKit 11 | 12 | /// Delegate which propagates color changes of the colorpicker to its delegate. 13 | public protocol PikkoDelegate { 14 | func writeBackColor(color: UIColor) 15 | } 16 | 17 | #endif 18 | -------------------------------------------------------------------------------- /Pikko/Sources/Pikko/Classes/UI/BrightnessSaturationView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // BrightnessSaturationView.swift 3 | // Pikko 4 | // 5 | // Created by Sandra & Johannes. 6 | // 7 | 8 | import Foundation 9 | #if os(iOS) 10 | import UIKit 11 | 12 | /// Square view representing brightness and saturation. 13 | internal class BrightnessSaturationView: UIView { 14 | 15 | // MARK: - Private attributes. 16 | 17 | /// Sampling rate for the 'steps' between the saturation / brightness values in terms of 18 | /// interpolation. 19 | /// - TODO: Make sampling rate parametric depending on size of canvas. 20 | private var samplingRate: CGFloat = 25.0 21 | 22 | /// Wrapper View holding the square UIView. 23 | private var brightnessSaturationView: UIView! 24 | 25 | /// Gradient layer for brightness transition (white to black). 26 | private var brightnessLayer: CAGradientLayer? 27 | 28 | /// Gradient layer for saturation transition (desaturated to saturated color). 29 | private var saturationLayer: CAGradientLayer? 30 | 31 | /// The circular UI control that can be dragged around. 32 | private var selector: UIView! 33 | 34 | /// The scale at which the selector enlargens when the user clicks on it and holds it. 35 | private var scale: CGFloat 36 | 37 | /// The current hue value. 38 | private var hue: CGFloat = 1.0 39 | 40 | // MARK: - Public attributes. 41 | 42 | /// Delegate method for writing back changes in the color selection. 43 | internal var delegate: PikkoDelegate? 44 | 45 | // MARK: - Initializer. 46 | 47 | /// Initializer for BrightnessSaturationView. 48 | /// 49 | /// - Parameters: 50 | /// - frame: the frame of the BrightnessSaturationView. 51 | /// - selectorDiameter: the selector diameter. 52 | /// - scale: the scale at which the selector should zoom in/zoom out when the user holds it. 53 | internal init(frame: CGRect, selectorDiameter: CGFloat, scale: CGFloat) { 54 | self.scale = scale 55 | super.init(frame: frame) 56 | createView(frame) 57 | createSelector(selectorDiameter, scale) 58 | } 59 | 60 | required init?(coder aDecoder: NSCoder) { 61 | fatalError("init(coder:) has not been implemented") 62 | } 63 | 64 | /// Creates all view based components including the saturation and brightness gradient layers. 65 | /// 66 | /// - Parameter 67 | /// - frame: the frame of the BrightnessSaturationView. 68 | private func createView(_ frame: CGRect) { 69 | brightnessSaturationView = UIView(frame: frame) 70 | 71 | // Create the layers. 72 | saturationLayer = createSaturationLayer(hue: 0.0) 73 | brightnessLayer = createBrightnessLayer() 74 | 75 | // Add to the wrapper view and then append to the UIView of the BrightnessSaturationView. 76 | brightnessSaturationView.layer.addSublayer(saturationLayer!) 77 | brightnessSaturationView.layer.addSublayer(brightnessLayer!) 78 | 79 | addSubview(brightnessSaturationView) 80 | } 81 | 82 | 83 | /// Creates the selector which can be dragged around by the user. 84 | /// 85 | /// - Parameters: 86 | /// - selectorDiameter: the selector diameter. 87 | /// - scale: the scale at which the selector should zoom in/zoom out when the user holds it. 88 | private func createSelector(_ selectorDiameter: CGFloat, _ scale: CGFloat) { 89 | 90 | selector = UIView(frame: CGRect(x: 0-selectorDiameter/2, 91 | y: 0-selectorDiameter/2, 92 | width: selectorDiameter, 93 | height: selectorDiameter)) 94 | 95 | selector.backgroundColor = .white 96 | selector.layer.cornerRadius = selectorDiameter/2 97 | selector.layer.borderColor = UIColor.white.cgColor 98 | selector.layer.borderWidth = 1 99 | selector.isUserInteractionEnabled = true 100 | 101 | setUpSelectorGestureRecognizer() 102 | addSubview(selector) 103 | } 104 | 105 | /// Creates and adds a longpress gesture recognizer to the selector. 106 | private func setUpSelectorGestureRecognizer() { 107 | let longPressGestureRecognizer = UILongPressGestureRecognizer(target: self, action: #selector(selectorPanned(_:))) 108 | longPressGestureRecognizer.minimumPressDuration = 0.0 109 | selector?.addGestureRecognizer(longPressGestureRecognizer) 110 | } 111 | 112 | /// Handles the panning of the selector and prohibits it to leave the frame of the 113 | /// BrightnessSaturationView. 114 | @objc func selectorPanned(_ gestureRecognizer: UILongPressGestureRecognizer) { 115 | 116 | var location = gestureRecognizer.location(in: self) 117 | 118 | // Check whether the user is about to scroll outside of the frame, if the frame is left 119 | // stop the movement in that particular direction. 120 | if location.x <= 0 { 121 | location.x = 0 122 | } 123 | 124 | if location.x >= frame.width - 1 { 125 | location.x = frame.width - 1 126 | } 127 | 128 | if location.y <= 0 { 129 | location.y = 0 130 | } 131 | 132 | if location.y >= frame.height - 1 { 133 | location.y = frame.height - 1 134 | } 135 | updateSelectorColor(point: location) 136 | selector.center = location 137 | animate(gestureRecognizer) 138 | } 139 | 140 | /// Animates the selector based on the current state of the gesture. Enlargens the 141 | /// selector when held and shrinks it after it has been released. 142 | private func animate(_ gestureRecognizer: UILongPressGestureRecognizer) { 143 | switch gestureRecognizer.state { 144 | case .began: 145 | Animations.animateScale(view: selector!, byScale: scale) 146 | case .ended: 147 | Animations.animateScaleReset(view: selector!) 148 | default: 149 | break 150 | } 151 | } 152 | 153 | /// Update the current color of the Selector according to a specific point. 154 | /// 155 | /// - Parameters: 156 | /// - point: the CGPoint at which the color should be taken from. 157 | private func updateSelectorColor(point: CGPoint) { 158 | var saturation = Double(point.x) / Double(frame.width) 159 | var brightness = (Double(frame.height) - Double(point.y)) / Double(frame.height) 160 | 161 | // HACK: Reduce floating point errors in the edge cases of the brightness / saturation view. 162 | saturation = saturation > 0.99 ? 1.0 : saturation 163 | saturation = saturation < 0.01 ? 0.0 : saturation 164 | 165 | brightness = brightness > 0.99 ? 1.0 : brightness 166 | brightness = brightness < 0.01 ? 0.0 : brightness 167 | 168 | selector.backgroundColor = UIColor.init(hue: self.hue, 169 | saturation: CGFloat(saturation), 170 | brightness: CGFloat(brightness), 171 | alpha: 1.0) 172 | 173 | if let color = selector.backgroundColor, let delegate = delegate { 174 | delegate.writeBackColor(color: color) 175 | } 176 | } 177 | 178 | // MARK: View setup methods. 179 | 180 | /// Creates the Saturation gradient color array for the given hue. 181 | /// 182 | /// - Parameters: 183 | /// - hue: the hue that should be used to generate the saturation gradient from. 184 | /// - Returns: array of interpolated color of the saturation gradient. 185 | private func generateSaturationInterpolationArray(hue: CGFloat) -> [CGColor] { 186 | var colorArray = [CGColor]() 187 | 188 | for i in 0.. CAGradientLayer { 207 | let gradientLayer = CAGradientLayer() 208 | 209 | gradientLayer.colors = generateSaturationInterpolationArray(hue: hue) 210 | gradientLayer.startPoint = CGPoint(x: 0.0, y: 0.5) 211 | gradientLayer.endPoint = CGPoint(x: 1.0, y: 0.5) 212 | gradientLayer.frame = frame 213 | 214 | return gradientLayer 215 | } 216 | 217 | /// Creates the Brightness gradient. 218 | /// 219 | /// - Returns: the brightness gradient layer. 220 | private func createBrightnessLayer() -> CAGradientLayer { 221 | let gradientLayer = CAGradientLayer() 222 | var colorArray = [CGColor]() 223 | 224 | for i in 0.. UIView? { 238 | let pointForTargetView = selector.convert(point, from: self) 239 | 240 | if self.selector.bounds.contains(pointForTargetView) { 241 | return selector.hitTest(pointForTargetView, with: event) 242 | } 243 | 244 | return super.hitTest(point, with: event) 245 | } 246 | 247 | /// Sets the brightness and saturation selector to a certain color. 248 | /// 249 | /// - Parameters: 250 | /// - color: UIColor for the selector position. 251 | func setColor(_ color: UIColor) { 252 | let saturation = color.saturation 253 | let brightness = color.brightness 254 | 255 | let width = self.frame.width 256 | let height = self.frame.height 257 | 258 | let position_x = width * saturation 259 | let position_y = height - (height * brightness) 260 | let newCenter = CGPoint(x: position_x, y: position_y) 261 | 262 | selector.center = newCenter 263 | updateSelectorColor(point: newCenter) 264 | } 265 | } 266 | 267 | // MARK: HueDelegate methods. 268 | 269 | extension BrightnessSaturationView: HueDelegate { 270 | internal func didUpdateHue(hue: CGFloat) { 271 | DispatchQueue.main.async { 272 | self.hue = hue 273 | self.updateSelectorColor(point: self.selector.center) 274 | } 275 | 276 | DispatchQueue.main.async { 277 | self.saturationLayer?.colors = self.generateSaturationInterpolationArray(hue: hue) 278 | } 279 | } 280 | } 281 | 282 | #endif 283 | -------------------------------------------------------------------------------- /Pikko/Sources/Pikko/Classes/UI/HueView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // HueView.swift 3 | // Pikko 4 | // 5 | // Created by Sandra & Johannes. 6 | // 7 | #if os(iOS) 8 | import UIKit 9 | 10 | /// Ring view representing the hue. 11 | internal class HueView: UIView { 12 | 13 | // MARK: - Private attributes. 14 | 15 | /// Horizontal offset for the start of the rectangle forming the hue ring. 16 | private var offset_x: CGFloat = 0.0 17 | 18 | /// Vertical offset for the start of the rectangle forming the hue ring. 19 | private var offset_y: CGFloat = 0.0 20 | 21 | /// Radius of the circular hue view. 22 | private var radius: CGFloat 23 | 24 | /// Width of the small rectangles that form the hue ring. 25 | private var borderWidth: CGFloat 26 | 27 | /// Height of the small rectangles that form the hue ring. 28 | private var borderHeight: CGFloat 29 | 30 | /// The circular UI control that can be dragged around. 31 | private var selector: UIView? 32 | 33 | /// Diameter of the selector. 34 | private var selectorDiameter: CGFloat 35 | 36 | /// The scale at which the selector enlargens when the user clicks on it and holds it. 37 | private var scale: CGFloat 38 | 39 | /// Wrapper View holding the ring UIView. 40 | private var hueRingView: UIView? 41 | 42 | // MARK: Public attributes. 43 | 44 | /// Delegate that writes back changes of the hue value. 45 | internal var delegate: HueDelegate? 46 | 47 | // MARK: - Initializer. 48 | 49 | /// Initializes a new hue ring view. 50 | /// 51 | /// - TODO: borderHeight is currently hardcoded. 52 | /// - Parameters: 53 | /// - frame: a CGRect that defines the dimensions of the view. 54 | /// - borderWidth: width of the hue ring. 55 | /// - selectorDiameter: diameter of the movable hue selector. 56 | /// - scale: the scale at which the selector enlargens when it is clicked. 57 | internal init(frame: CGRect, borderWidth: CGFloat, selectorDiameter: CGFloat, scale: CGFloat) { 58 | self.borderWidth = borderWidth 59 | self.borderHeight = 5 60 | self.radius = (frame.width-borderWidth)/2 61 | self.scale = scale 62 | self.offset_x = (frame.width-borderWidth)/2 63 | self.offset_y = (frame.height-borderHeight)/2 64 | self.selectorDiameter = selectorDiameter 65 | super.init(frame: frame) 66 | 67 | createHueRing() 68 | createSelector() 69 | } 70 | 71 | required init?(coder aDecoder: NSCoder) { 72 | fatalError("init(coder:) has not been implemented") 73 | } 74 | 75 | // MARK: - Helper methods. 76 | 77 | /// Creates the selector which can be dragged around by the user. 78 | private func createSelector() { 79 | selector = UIView(frame: CGRect(x: 0, 80 | y: 0, 81 | width: selectorDiameter, 82 | height: selectorDiameter)) 83 | 84 | selector?.center = CGPoint(x: (borderWidth)/2, y: offset_y) 85 | selector?.layer.cornerRadius = (selectorDiameter)/2 86 | selector?.isUserInteractionEnabled = true 87 | selector?.layer.borderWidth = 1 88 | selector?.layer.borderColor = UIColor.white.cgColor 89 | 90 | updateColor(point: (selector?.center)!) 91 | setUpGestureRecognizer() 92 | 93 | self.addSubview(selector!) 94 | } 95 | 96 | /// Creates and adds a longpress gesture recognizer to the selector. 97 | private func setUpGestureRecognizer() { 98 | let longPressGestureRecognizer = UILongPressGestureRecognizer(target: self, action: #selector(selectorPanned(_:))) 99 | longPressGestureRecognizer.minimumPressDuration = 0.0 100 | selector?.addGestureRecognizer(longPressGestureRecognizer) 101 | } 102 | 103 | /// Handles the panning of the selector and prohibits it to leave hue ring. 104 | @objc func selectorPanned(_ panGestureRecognizer: UIPanGestureRecognizer) { 105 | let location = panGestureRecognizer.location(in: self) 106 | 107 | let x = location.x - center.x 108 | let y = location.y - center.y 109 | let angle = atan2(x, y) - CGFloat.pi * 0.5 110 | 111 | let position_y = sin(-1.0 * angle) * radius + center.x 112 | let position_x = cos(-1.0 * angle) * radius + center.y 113 | 114 | selector?.center = CGPoint(x: position_x, y: position_y) 115 | updateColor(point: (selector?.center)!) 116 | animate(panGestureRecognizer) 117 | } 118 | 119 | /// Animates the selector based on the current state of the gesture. Enlargens the 120 | /// selector when held and shrinks it after it has been released. 121 | private func animate(_ panGestureRecognizer: UIPanGestureRecognizer) { 122 | switch panGestureRecognizer.state { 123 | case .began: 124 | Animations.animateScale(view: selector!, byScale: scale) 125 | case .ended: 126 | Animations.animateScaleReset(view: selector!) 127 | default: 128 | break 129 | } 130 | } 131 | 132 | /// Update the current color of the Selector according to a specific point. 133 | /// 134 | /// - Parameters: 135 | /// - point: the CGPoint at which the color should be taken from. 136 | private func updateColor(point: CGPoint) { 137 | var hue: CGFloat = 0 138 | 139 | if let color = ColorUtilities.getPixelColorAtPoint(point: point, sourceView: hueRingView!), 140 | let selector = selector { 141 | selector.backgroundColor = color 142 | color.getHue(&hue, saturation: nil, brightness: nil, alpha: nil) 143 | delegate?.didUpdateHue(hue: hue) 144 | } 145 | } 146 | 147 | // MARK: - UI setup methods. 148 | 149 | /// Creates the hue ring for the given hue. 150 | private func createHueRing() { 151 | hueRingView = UIView(frame: self.frame) 152 | 153 | for i in 0..<255 { 154 | let layer = CALayer() 155 | layer.backgroundColor = UIColor(hue: CGFloat(i)/255.0, 156 | saturation: 1.0, 157 | brightness: 1.0, 158 | alpha: 1.0).cgColor 159 | 160 | let position = (CGFloat(i) / 255.0) * 360.0 161 | let position_y = sin(position * CGFloat.pi / 180.0) * radius 162 | let position_x = cos(position * CGFloat.pi / 180.0) * radius 163 | 164 | layer.frame = CGRect(x: position_x+offset_x, 165 | y: position_y+offset_y, 166 | width: borderWidth, 167 | height: borderHeight) 168 | 169 | layer.transform = CATransform3DMakeRotation((position*CGFloat.pi) / 180.0, 0, 0, 1.0) 170 | layer.allowsEdgeAntialiasing = true 171 | 172 | hueRingView!.layer.addSublayer(layer) 173 | } 174 | 175 | addSubview(hueRingView!) 176 | } 177 | 178 | /// Sets the hue selector to a certain color. 179 | /// 180 | /// - Parameter color: UIColor for the selector position. 181 | internal func setColor(_ color: UIColor) { 182 | let angle = color.hue 183 | 184 | let position_y = sin(1.0 * angle * 2 * CGFloat.pi) * radius + center.x 185 | let position_x = cos(1.0 * angle * 2 * CGFloat.pi) * radius + center.y 186 | let newCenter = CGPoint(x: position_x, y: position_y) 187 | 188 | selector?.center = newCenter 189 | updateColor(point: newCenter) 190 | } 191 | } 192 | 193 | #endif 194 | -------------------------------------------------------------------------------- /Pikko/Sources/Pikko/Classes/UI/Pikko.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Pikko.swift 3 | // Pikko 4 | // 5 | // Created by Sandra & Johannes. 6 | // 7 | 8 | import Foundation 9 | #if os(iOS) 10 | import UIKit 11 | 12 | /// The Pikko colorpicker, holding the two subviews, namely the hue ring and brightness/saturation 13 | /// square picker. 14 | @IBDesignable 15 | @available(iOS 9.0, *) 16 | public class Pikko: UIView { 17 | 18 | private var hueView: HueView? 19 | private var brightnessSaturationView: BrightnessSaturationView? 20 | private var currentColor: UIColor = .white 21 | public var dimension: Int = 0 22 | 23 | 24 | /// The PikkoDelegate that is called whenever the color is updated. 25 | public var delegate: PikkoDelegate? 26 | 27 | // MARK: - Initializer. 28 | 29 | /// Initializes a new PikkoView. 30 | /// 31 | /// - Parameters: 32 | /// - dimension: width and heigth of the new color picker. 33 | /// - color: the color you want to initialise the picker to. If not set, the color picker 34 | /// is initialised to `UIColor.white`. 35 | public init(dimension: Int, setToColor color: UIColor = .white) { 36 | let frame = CGRect(x: 0, y: 0, width: dimension, height: dimension) 37 | super.init(frame: frame) 38 | self.dimension = dimension 39 | self.currentColor = color 40 | setUpColorPickerViews(frame) 41 | setColor(color) 42 | self.widthAnchor.constraint(equalToConstant: CGFloat(dimension)).isActive = true 43 | self.heightAnchor.constraint(equalToConstant: CGFloat(dimension)).isActive = true 44 | } 45 | 46 | /// This constructor is necessary for the interface builder rendering, 47 | /// and should not be called by application programmers. Use 48 | /// `init(dimension: Int, setToColor color: UIColor)` instead. 49 | override init(frame: CGRect) { 50 | super.init(frame: frame) 51 | self.dimension = Int(frame.width) 52 | setUpColorPickerViews(frame) 53 | } 54 | 55 | /// This method is called when resizing or moving the picker 56 | /// in the interface builder. 57 | public override func layoutSubviews() { 58 | super.layoutSubviews() 59 | self.brightnessSaturationView?.removeFromSuperview() 60 | self.hueView?.removeFromSuperview() 61 | let newFrame = CGRect(x: 0, y: 0, width: frame.width, height: frame.height) 62 | setUpColorPickerViews(newFrame) 63 | setColor(currentColor) 64 | } 65 | 66 | required init?(coder aDecoder: NSCoder) { 67 | super.init(coder: aDecoder) 68 | } 69 | 70 | // MARK: - Helper methods. 71 | 72 | /// Initialises both hueView and brightnessSaturationView. 73 | /// - TODO: Many constants are hardcoded. Make them adjustable with customised initialisers 74 | /// in the future. 75 | /// - TODO: Make borderwidth an adjustable parameter. 76 | /// - TODO: Explain magic constant that controls "margin" of the square. 77 | private func setUpColorPickerViews(_ frame: CGRect) { 78 | 79 | let borderWidth: CGFloat = 30.0 80 | let selectorDiameter: CGFloat = borderWidth * 1.5 81 | let radius = frame.width/2 82 | 83 | let customWidth: CGFloat = sqrt(2) * (radius - borderWidth) * 0.85 84 | let scale: CGFloat = 1.5 85 | 86 | hueView = HueView(frame: frame, borderWidth: borderWidth, 87 | selectorDiameter: selectorDiameter, 88 | scale: scale) 89 | 90 | brightnessSaturationView = BrightnessSaturationView(frame: CGRect(x: 0, 91 | y: 0, 92 | width: customWidth, 93 | height: customWidth), 94 | selectorDiameter: selectorDiameter, 95 | scale: 2) 96 | 97 | if let hue = hueView, let square = brightnessSaturationView { 98 | hue.delegate = self 99 | square.delegate = self 100 | square.center = hue.center 101 | self.addSubview(hue) 102 | self.addSubview(square) 103 | 104 | } 105 | } 106 | 107 | /// Gets the current color that is selected on the color picker. 108 | /// 109 | /// - Returns: the current color. 110 | public func getColor() -> UIColor { 111 | return currentColor 112 | } 113 | 114 | 115 | /// Sets the color picker to the specified color. 116 | /// 117 | /// - Parameter color: the color to set on the color picker. 118 | public func setColor(_ color: UIColor) { 119 | if let hue = hueView, let square = brightnessSaturationView { 120 | hue.setColor(color) 121 | square.setColor(color) 122 | } 123 | } 124 | } 125 | 126 | // MARK: HueDelegate methods. 127 | 128 | @available(iOS 9.0, *) 129 | extension Pikko: HueDelegate { 130 | func didUpdateHue(hue: CGFloat) { 131 | if let square = brightnessSaturationView { 132 | square.didUpdateHue(hue: hue) 133 | } 134 | } 135 | } 136 | 137 | // MARK: PikkoDelegate methods. 138 | 139 | @available(iOS 9.0, *) 140 | extension Pikko: PikkoDelegate { 141 | public func writeBackColor(color: UIColor) { 142 | currentColor = color 143 | if let delegate = delegate { 144 | delegate.writeBackColor(color: color) 145 | } 146 | } 147 | } 148 | 149 | #endif 150 | -------------------------------------------------------------------------------- /Pikko/Sources/Pikko/Classes/Util/Animations.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Animations.swift 3 | // Pikko 4 | // 5 | // Created by Sandra & Johannes. 6 | // 7 | 8 | import Foundation 9 | #if os(iOS) 10 | import UIKit 11 | 12 | /// Convenience class for animating our selectors. 13 | class Animations { 14 | 15 | internal static func animateScale(view: UIView, byScale: CGFloat) { 16 | UIView.animate(withDuration: 0.25) { 17 | view.transform = CGAffineTransform(scaleX: byScale,y: byScale) 18 | } 19 | } 20 | 21 | internal static func animateScaleReset(view: UIView) { 22 | UIView.animate(withDuration: 0.25) { 23 | view.transform = CGAffineTransform(scaleX: 1,y: 1) 24 | } 25 | } 26 | } 27 | 28 | #endif 29 | -------------------------------------------------------------------------------- /Pikko/Sources/Pikko/Classes/Util/ColorUtilities.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ColorUtilities.swift 3 | // Pikko 4 | // 5 | // Created by Sandra & Johannes. 6 | // 7 | 8 | import Foundation 9 | #if os(iOS) 10 | import UIKit 11 | 12 | /// Convenience class for UIColor assessment on UIViews. 13 | internal class ColorUtilities { 14 | 15 | /// Convenience method for getting the color of a specific CGpoint in a particular UIView. 16 | /// - Note: This part is taken from [Stackoverflow](https://stackoverflow.com/a/27746860/7217195). 17 | static func getPixelColorAtPoint(point: CGPoint, sourceView: UIView) -> UIColor? { 18 | 19 | let pixel = UnsafeMutablePointer.allocate(capacity: 4) 20 | let colorSpace = CGColorSpaceCreateDeviceRGB() 21 | let bitmapInfo = CGBitmapInfo(rawValue: CGImageAlphaInfo.premultipliedLast.rawValue) 22 | let context = CGContext(data: pixel, 23 | width: 1, 24 | height: 1, 25 | bitsPerComponent: 8, 26 | bytesPerRow: 4, 27 | space: colorSpace, 28 | bitmapInfo: bitmapInfo.rawValue) 29 | 30 | var color: UIColor? = nil 31 | 32 | if let context = context { 33 | context.translateBy(x: -point.x, y: -point.y) 34 | sourceView.layer.render(in: context) 35 | 36 | color = UIColor(red: CGFloat(pixel[0])/255.0, 37 | green: CGFloat(pixel[1])/255.0, 38 | blue: CGFloat(pixel[2])/255.0, 39 | alpha: CGFloat(pixel[3])/255.0) 40 | 41 | pixel.deallocate() 42 | 43 | return color 44 | } 45 | return nil 46 | } 47 | } 48 | 49 | #endif 50 | -------------------------------------------------------------------------------- /Pikko/Sources/Pikko/Classes/Util/UIColor+HSBAComponents.swift: -------------------------------------------------------------------------------- 1 | // 2 | // UIColor+HSBAComponents.swift 3 | // Pikko 4 | // 5 | // Created by Sandra & Johannes. 6 | // 7 | 8 | import Foundation 9 | #if os(iOS) 10 | import UIKit 11 | 12 | 13 | /// Convenience method for easy access of hue, saturation, brightness and alpha components 14 | /// of a UIColor. 15 | extension UIColor { 16 | 17 | fileprivate func getHSBAComponents(_ color: UIColor) -> (CGFloat, CGFloat, CGFloat, CGFloat) { 18 | var hue, saturation, brightness, alpha : CGFloat 19 | (hue, saturation, brightness, alpha) = (0.0, 0.0, 0.0, 0.0) 20 | color.getHue(&hue, saturation: &saturation, brightness: &brightness, alpha: &alpha) 21 | return (hue, saturation, brightness, alpha) 22 | } 23 | 24 | internal var hue: CGFloat { 25 | return getHSBAComponents(self).0 26 | } 27 | 28 | internal var saturation: CGFloat { 29 | return getHSBAComponents(self).1 30 | } 31 | 32 | internal var brightness: CGFloat { 33 | return getHSBAComponents(self).2 34 | } 35 | 36 | internal var alpha: CGFloat { 37 | return getHSBAComponents(self).3 38 | } 39 | } 40 | #endif 41 | -------------------------------------------------------------------------------- /Pikko/Tests/LinuxMain.swift: -------------------------------------------------------------------------------- 1 | import XCTest 2 | 3 | import PikkoTests 4 | 5 | var tests = [XCTestCaseEntry]() 6 | tests += PikkoTests.allTests() 7 | XCTMain(tests) 8 | -------------------------------------------------------------------------------- /Pikko/Tests/PikkoTests/PikkoTests.swift: -------------------------------------------------------------------------------- 1 | import XCTest 2 | @testable import Pikko 3 | 4 | final class PikkoTests: XCTestCase { 5 | func testExample() { 6 | } 7 | 8 | static var allTests = [ 9 | ("testExample", testExample), 10 | ] 11 | } 12 | -------------------------------------------------------------------------------- /Pikko/Tests/PikkoTests/XCTestManifests.swift: -------------------------------------------------------------------------------- 1 | import XCTest 2 | 3 | #if !canImport(ObjectiveC) 4 | public func allTests() -> [XCTestCaseEntry] { 5 | return [ 6 | testCase(PikkoTests.allTests), 7 | ] 8 | } 9 | #endif 10 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Pikko - iOS color picker made with ❤️ 2 | 3 | [![CI Status](https://img.shields.io/travis/melloskitten/pikko.svg?style=flat)](https://travis-ci.org/melloskitten/pikko) 4 | [![Version](https://img.shields.io/cocoapods/v/Pikko.svg?style=flat)](https://cocoapods.org/pods/Pikko) 5 | [![License](https://img.shields.io/github/license/melloskitten/pikko.svg?style=flat)](https://cocoapods.org/pods/Pikko) 6 | [![Platform](https://img.shields.io/cocoapods/p/Pikko.svg?style=flat)](https://cocoapods.org/pods/Pikko) 7 | 8 | ![Demo of pikko color picker](https://raw.githubusercontent.com/melloskitten/pikko/develop/doc/demo.gif) 9 | 10 | Pikko is a simple and beautiful color picker for iOS. It's inspired by conventional color pickers from popular graphics tools such as _Photoshop_, _Paint Tool Sai_, _Procreate_ and many others. Pikko allows the selection of hue, saturation and brightness in a more pleasant way than boring sliders. 11 | 12 | Feel free to use, modify and improve. ✌️ 13 | 14 | ## Quickstart 15 | 16 | To run the example project, clone the repo, and run `pod install` from the Example directory first. 17 | 18 | 19 | ### Initializing Pikko programmatically, without autoconstraints 20 | 21 | You can intialize a new color picker in the following way: 22 | 23 | ```swift 24 | // Initialize a new Pikko instance with width and height set to 300, and initialized to blue. 25 | let pikko = Pikko(dimension: 300, setToColor: .blue) 26 | ``` 27 | 28 | Make sure to set the Pikko delegate to get updates on color changes: 29 | 30 | ```swift 31 | // Set the PikkoDelegate to get notified on new color changes. 32 | pikko.delegate = self 33 | ``` 34 | Positioning Pikko: 35 | 36 | ```swift 37 | // Set Pikko center and add it to the main view. 38 | pikko.center = self.view.center 39 | self.view.addSubview(pikko) 40 | ``` 41 | 42 | Manually getting a color from Pikko and setting a color: 43 | ```swift 44 | // Getting Pikko color. 45 | let color = pikko.getColor() 46 | 47 | // Setting Pikko to a specific color. 48 | pikko.setColor(.blue) 49 | ``` 50 | 51 | ### Initializing Pikko programmatically, with autoconstraints 52 | 53 | ```swift 54 | 55 | // Initialize a new Pikko instance. 56 | let pikko = Pikko(dimension: 300, setToColor: .purple) 57 | 58 | // Set the PikkoDelegate to get notified on new color changes. 59 | pikko.delegate = self 60 | 61 | // Set Pikko center and add it to the main view. 62 | self.view.addSubview(pikko) 63 | 64 | // Get the current color. 65 | _ = pikko.getColor() 66 | 67 | // Set autoconstraints. 68 | pikko.translatesAutoresizingMaskIntoConstraints = false 69 | pikko.centerXAnchor.constraint(equalTo: self.view.centerXAnchor).isActive = true 70 | pikko.centerYAnchor.constraint(equalTo: self.view.centerYAnchor, constant: -200).isActive = true 71 | 72 | ``` 73 | 74 | ### Initializing Pikko via Storyboard 75 | 76 | Add a `UIView` to your Storyboard, then simply select `Pikko` as the class. You can add autoconstraints in the interface builder normally as you would with any other view. 77 | 78 | __NOTE:__ If you're using Pikko in the storyboard, you have to set the delegate and color in the `viewDidAppear` or `viewWillAppear` methods. 79 | 80 | ```swift 81 | @IBOutlet weak var PikkoView: Pikko! 82 | 83 | /// If you add Pikko via interface builder and you want to set 84 | /// a color on your picker or set the delegate, make sure to 85 | /// call it from this method, NOT the viewDidLoad. 86 | override func viewDidAppear(_ animated: Bool) { 87 | PikkoView.delegate = self 88 | PikkoView.setColor(.purple) 89 | } 90 | ``` 91 | 92 | ### Note 93 | 94 | Regardless how you are initializing Pikko, you will have to implement the `PikkoDelegate` protocol accordingly, which will look like something along these lines: 95 | 96 | ```swift 97 | 98 | class ViewController: UIViewController, PikkoDelegate { 99 | ... 100 | 101 | // Delegate method that lets you get updates on the currently 102 | // selected color. 103 | func writeBackColor(color: UIColor) { 104 | // TODO: Handle received color. 105 | } 106 | 107 | ``` 108 | 109 | ## Installation 110 | 111 | ### CocoaPods 112 | 113 | Pikko is available through [CocoaPods](https://cocoapods.org). To install 114 | it, simply add the following line to your Podfile: 115 | 116 | ```ruby 117 | pod 'Pikko' 118 | ``` 119 | 120 | ### Swift Package Manager 121 | 122 | You can also install Pikko via the [Swift Package Manager](https://swift.org/package-manager/). For this, follow the Apple tutorial on [how to add custom packages](https://developer.apple.com/documentation/xcode/adding_package_dependencies_to_your_app), with this repository link as the package Git URL: 123 | 124 | ``` 125 | https://github.com/melloskitten/pikko 126 | ``` 127 | 128 | ## Authors 129 | 130 | Sandra, melloskitten@googlemail.com 131 | 132 | Johannes, mail@johannesrohwer.com 133 | 134 | ## License 135 | 136 | __Pikko__ is available under the MIT license. See the LICENSE file for more info. 137 | -------------------------------------------------------------------------------- /_Pods.xcodeproj: -------------------------------------------------------------------------------- 1 | Example/Pods/Pods.xcodeproj -------------------------------------------------------------------------------- /doc/demo.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/melloskitten/pikko/a412ab098d54cbc1f12a89aef12d45213f897fde/doc/demo.gif -------------------------------------------------------------------------------- /src/Example/Pikko.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | --------------------------------------------------------------------------------