├── .gitignore ├── .travis.yml ├── Example └── KOPinCodeView │ ├── KOPinCodeView.xcodeproj │ └── project.pbxproj │ ├── KOPinCodeView │ ├── AppDelegate.h │ ├── AppDelegate.m │ ├── Assets.xcassets │ │ └── AppIcon.appiconset │ │ │ └── Contents.json │ ├── Base.lproj │ │ ├── LaunchScreen.storyboard │ │ └── Main.storyboard │ ├── Info.plist │ ├── UI │ │ ├── FrameVC │ │ │ ├── FrameVC.h │ │ │ └── FrameVC.m │ │ └── OutletVC │ │ │ ├── OutletVC.h │ │ │ └── OutletVC.m │ └── main.m │ ├── KOPinCodeViewTests │ ├── Info.plist │ └── KOPinCodeViewTests.m │ ├── Podfile │ ├── Podfile.lock │ └── Pods │ ├── Headers │ ├── Private │ │ └── KOPinCodeView │ │ │ └── KOPinCodeView.h │ └── Public │ │ └── KOPinCodeView │ │ └── KOPinCodeView.h │ ├── KOPinCodeView │ ├── LICENSE │ ├── README.md │ └── Source │ │ └── Classes │ │ ├── KOPinCodeView.h │ │ └── KOPinCodeView.m │ ├── Manifest.lock │ ├── Pods.xcodeproj │ └── project.pbxproj │ └── Target Support Files │ ├── KOPinCodeView │ ├── KOPinCodeView-dummy.m │ ├── KOPinCodeView-prefix.pch │ └── KOPinCodeView.xcconfig │ ├── Pods-KOPinCodeView │ ├── Pods-KOPinCodeView-acknowledgements.markdown │ ├── Pods-KOPinCodeView-acknowledgements.plist │ ├── Pods-KOPinCodeView-dummy.m │ ├── Pods-KOPinCodeView-frameworks.sh │ ├── Pods-KOPinCodeView-resources.sh │ ├── Pods-KOPinCodeView.debug.xcconfig │ └── Pods-KOPinCodeView.release.xcconfig │ └── Pods-KOPinCodeViewTests │ ├── Pods-KOPinCodeViewTests-acknowledgements.markdown │ ├── Pods-KOPinCodeViewTests-acknowledgements.plist │ ├── Pods-KOPinCodeViewTests-dummy.m │ ├── Pods-KOPinCodeViewTests-frameworks.sh │ ├── Pods-KOPinCodeViewTests-resources.sh │ ├── Pods-KOPinCodeViewTests.debug.xcconfig │ └── Pods-KOPinCodeViewTests.release.xcconfig ├── KOPinCodeView.podspec ├── LICENSE ├── README.md └── Source ├── Assets ├── .gitkeep ├── pin_code_view.gif └── pin_code_view_confirm.gif └── Classes ├── .gitkeep ├── KOPinCodeView.h └── KOPinCodeView.m /.gitignore: -------------------------------------------------------------------------------- 1 | # Xcode 2 | .DS_Store 3 | build/ 4 | *.pbxuser 5 | !default.pbxuser 6 | *.mode1v3 7 | !default.mode1v3 8 | *.mode2v3 9 | !default.mode2v3 10 | *.perspectivev3 11 | !default.perspectivev3 12 | *.xcworkspace 13 | !default.xcworkspace 14 | xcuserdata 15 | profile 16 | *.moved-aside 17 | DerivedData 18 | .idea/ 19 | Tests/Pods 20 | Tests/Podfile.lock 21 | 22 | # Fastlane 23 | /fastlane/report.xml 24 | /fastlane/.env*private* 25 | fastlane/test-output/* 26 | 27 | Carthage/Build 28 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | # references: 2 | # * http://www.objc.io/issue-6/travis-ci.html 3 | # * https://github.com/supermarin/xcpretty#usage 4 | 5 | osx_image: xcode7.3 6 | language: objective-c 7 | # cache: cocoapods 8 | # podfile: Example/Podfile 9 | # before_install: 10 | # - gem install cocoapods # Since Travis is not always on latest version 11 | # - pod install --project-directory=Example 12 | script: 13 | - set -o pipefail && xcodebuild test -workspace Example/KOPinCodeView.xcworkspace -scheme KOPinCodeView-Example -sdk iphonesimulator9.3 ONLY_ACTIVE_ARCH=NO | xcpretty 14 | - pod lib lint 15 | -------------------------------------------------------------------------------- /Example/KOPinCodeView/KOPinCodeView.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 48; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 050DC0C1273409B9E97F08CA /* libPods-KOPinCodeViewTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = CE5C27082F52707750E6DFEE /* libPods-KOPinCodeViewTests.a */; }; 11 | 08E7CD711FE26B9E00B0F14A /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 08E7CD701FE26B9E00B0F14A /* AppDelegate.m */; }; 12 | 08E7CD771FE26B9E00B0F14A /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 08E7CD751FE26B9E00B0F14A /* Main.storyboard */; }; 13 | 08E7CD791FE26B9E00B0F14A /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 08E7CD781FE26B9E00B0F14A /* Assets.xcassets */; }; 14 | 08E7CD7C1FE26B9E00B0F14A /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 08E7CD7A1FE26B9E00B0F14A /* LaunchScreen.storyboard */; }; 15 | 08E7CD7F1FE26B9E00B0F14A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 08E7CD7E1FE26B9E00B0F14A /* main.m */; }; 16 | 08E7CD891FE26B9F00B0F14A /* KOPinCodeViewTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 08E7CD881FE26B9F00B0F14A /* KOPinCodeViewTests.m */; }; 17 | 08E7CD981FE26EAD00B0F14A /* OutletVC.m in Sources */ = {isa = PBXBuildFile; fileRef = 08E7CD971FE26EAD00B0F14A /* OutletVC.m */; }; 18 | 08E7CD991FE26EAD00B0F14A /* OutletVC.m in Sources */ = {isa = PBXBuildFile; fileRef = 08E7CD971FE26EAD00B0F14A /* OutletVC.m */; }; 19 | 08E7CD9C1FE26ECE00B0F14A /* FrameVC.m in Sources */ = {isa = PBXBuildFile; fileRef = 08E7CD9B1FE26ECE00B0F14A /* FrameVC.m */; }; 20 | 08E7CD9D1FE26ECE00B0F14A /* FrameVC.m in Sources */ = {isa = PBXBuildFile; fileRef = 08E7CD9B1FE26ECE00B0F14A /* FrameVC.m */; }; 21 | B1CF81C7F83BF93774BBE5A7 /* libPods-KOPinCodeView.a in Frameworks */ = {isa = PBXBuildFile; fileRef = E045C31FD322BBC8C7BD6EA4 /* libPods-KOPinCodeView.a */; }; 22 | /* End PBXBuildFile section */ 23 | 24 | /* Begin PBXContainerItemProxy section */ 25 | 08E7CD851FE26B9F00B0F14A /* PBXContainerItemProxy */ = { 26 | isa = PBXContainerItemProxy; 27 | containerPortal = 08E7CD641FE26B9E00B0F14A /* Project object */; 28 | proxyType = 1; 29 | remoteGlobalIDString = 08E7CD6B1FE26B9E00B0F14A; 30 | remoteInfo = KOPinCodeView; 31 | }; 32 | /* End PBXContainerItemProxy section */ 33 | 34 | /* Begin PBXFileReference section */ 35 | 08E7CD6C1FE26B9E00B0F14A /* KOPinCodeView.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = KOPinCodeView.app; sourceTree = BUILT_PRODUCTS_DIR; }; 36 | 08E7CD6F1FE26B9E00B0F14A /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; 37 | 08E7CD701FE26B9E00B0F14A /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; 38 | 08E7CD761FE26B9E00B0F14A /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 39 | 08E7CD781FE26B9E00B0F14A /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 40 | 08E7CD7B1FE26B9E00B0F14A /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 41 | 08E7CD7D1FE26B9E00B0F14A /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 42 | 08E7CD7E1FE26B9E00B0F14A /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; 43 | 08E7CD841FE26B9E00B0F14A /* KOPinCodeViewTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = KOPinCodeViewTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 44 | 08E7CD881FE26B9F00B0F14A /* KOPinCodeViewTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = KOPinCodeViewTests.m; sourceTree = ""; }; 45 | 08E7CD8A1FE26B9F00B0F14A /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 46 | 08E7CD961FE26EAD00B0F14A /* OutletVC.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = OutletVC.h; sourceTree = ""; }; 47 | 08E7CD971FE26EAD00B0F14A /* OutletVC.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = OutletVC.m; sourceTree = ""; }; 48 | 08E7CD9A1FE26ECE00B0F14A /* FrameVC.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FrameVC.h; sourceTree = ""; }; 49 | 08E7CD9B1FE26ECE00B0F14A /* FrameVC.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FrameVC.m; sourceTree = ""; }; 50 | 216773EF18F52D1B4F7E128D /* Pods-KOPinCodeViewTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-KOPinCodeViewTests.debug.xcconfig"; path = "Pods/Target Support Files/Pods-KOPinCodeViewTests/Pods-KOPinCodeViewTests.debug.xcconfig"; sourceTree = ""; }; 51 | 5B3B5D7A92EF4DD3E697F435 /* Pods-KOPinCodeView.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-KOPinCodeView.release.xcconfig"; path = "Pods/Target Support Files/Pods-KOPinCodeView/Pods-KOPinCodeView.release.xcconfig"; sourceTree = ""; }; 52 | 65768CB5492CA38FC10CEF35 /* Pods-KOPinCodeView.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-KOPinCodeView.debug.xcconfig"; path = "Pods/Target Support Files/Pods-KOPinCodeView/Pods-KOPinCodeView.debug.xcconfig"; sourceTree = ""; }; 53 | BF8DB09623B1981D6D205018 /* Pods-KOPinCodeViewTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-KOPinCodeViewTests.release.xcconfig"; path = "Pods/Target Support Files/Pods-KOPinCodeViewTests/Pods-KOPinCodeViewTests.release.xcconfig"; sourceTree = ""; }; 54 | CE5C27082F52707750E6DFEE /* libPods-KOPinCodeViewTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-KOPinCodeViewTests.a"; sourceTree = BUILT_PRODUCTS_DIR; }; 55 | E045C31FD322BBC8C7BD6EA4 /* libPods-KOPinCodeView.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-KOPinCodeView.a"; sourceTree = BUILT_PRODUCTS_DIR; }; 56 | /* End PBXFileReference section */ 57 | 58 | /* Begin PBXFrameworksBuildPhase section */ 59 | 08E7CD691FE26B9E00B0F14A /* Frameworks */ = { 60 | isa = PBXFrameworksBuildPhase; 61 | buildActionMask = 2147483647; 62 | files = ( 63 | B1CF81C7F83BF93774BBE5A7 /* libPods-KOPinCodeView.a in Frameworks */, 64 | ); 65 | runOnlyForDeploymentPostprocessing = 0; 66 | }; 67 | 08E7CD811FE26B9E00B0F14A /* Frameworks */ = { 68 | isa = PBXFrameworksBuildPhase; 69 | buildActionMask = 2147483647; 70 | files = ( 71 | 050DC0C1273409B9E97F08CA /* libPods-KOPinCodeViewTests.a in Frameworks */, 72 | ); 73 | runOnlyForDeploymentPostprocessing = 0; 74 | }; 75 | /* End PBXFrameworksBuildPhase section */ 76 | 77 | /* Begin PBXGroup section */ 78 | 01C2A1EF8C5AA7A734A03C38 /* Frameworks */ = { 79 | isa = PBXGroup; 80 | children = ( 81 | E045C31FD322BBC8C7BD6EA4 /* libPods-KOPinCodeView.a */, 82 | CE5C27082F52707750E6DFEE /* libPods-KOPinCodeViewTests.a */, 83 | ); 84 | name = Frameworks; 85 | sourceTree = ""; 86 | }; 87 | 08E7CD631FE26B9E00B0F14A = { 88 | isa = PBXGroup; 89 | children = ( 90 | 08E7CD6E1FE26B9E00B0F14A /* KOPinCodeView */, 91 | 08E7CD871FE26B9F00B0F14A /* KOPinCodeViewTests */, 92 | 08E7CD6D1FE26B9E00B0F14A /* Products */, 93 | C6FAE0C30FF0CB6D3DC53318 /* Pods */, 94 | 01C2A1EF8C5AA7A734A03C38 /* Frameworks */, 95 | ); 96 | sourceTree = ""; 97 | }; 98 | 08E7CD6D1FE26B9E00B0F14A /* Products */ = { 99 | isa = PBXGroup; 100 | children = ( 101 | 08E7CD6C1FE26B9E00B0F14A /* KOPinCodeView.app */, 102 | 08E7CD841FE26B9E00B0F14A /* KOPinCodeViewTests.xctest */, 103 | ); 104 | name = Products; 105 | sourceTree = ""; 106 | }; 107 | 08E7CD6E1FE26B9E00B0F14A /* KOPinCodeView */ = { 108 | isa = PBXGroup; 109 | children = ( 110 | 08E7CD6F1FE26B9E00B0F14A /* AppDelegate.h */, 111 | 08E7CD701FE26B9E00B0F14A /* AppDelegate.m */, 112 | 08E7CD931FE26E5000B0F14A /* UI */, 113 | 08E7CD751FE26B9E00B0F14A /* Main.storyboard */, 114 | 08E7CD781FE26B9E00B0F14A /* Assets.xcassets */, 115 | 08E7CD7A1FE26B9E00B0F14A /* LaunchScreen.storyboard */, 116 | 08E7CD7D1FE26B9E00B0F14A /* Info.plist */, 117 | 08E7CD7E1FE26B9E00B0F14A /* main.m */, 118 | ); 119 | path = KOPinCodeView; 120 | sourceTree = ""; 121 | }; 122 | 08E7CD871FE26B9F00B0F14A /* KOPinCodeViewTests */ = { 123 | isa = PBXGroup; 124 | children = ( 125 | 08E7CD881FE26B9F00B0F14A /* KOPinCodeViewTests.m */, 126 | 08E7CD8A1FE26B9F00B0F14A /* Info.plist */, 127 | ); 128 | path = KOPinCodeViewTests; 129 | sourceTree = ""; 130 | }; 131 | 08E7CD931FE26E5000B0F14A /* UI */ = { 132 | isa = PBXGroup; 133 | children = ( 134 | 08E7CD951FE26E7C00B0F14A /* OutletVC */, 135 | 08E7CD941FE26E6800B0F14A /* FrameVC */, 136 | ); 137 | path = UI; 138 | sourceTree = ""; 139 | }; 140 | 08E7CD941FE26E6800B0F14A /* FrameVC */ = { 141 | isa = PBXGroup; 142 | children = ( 143 | 08E7CD9A1FE26ECE00B0F14A /* FrameVC.h */, 144 | 08E7CD9B1FE26ECE00B0F14A /* FrameVC.m */, 145 | ); 146 | path = FrameVC; 147 | sourceTree = ""; 148 | }; 149 | 08E7CD951FE26E7C00B0F14A /* OutletVC */ = { 150 | isa = PBXGroup; 151 | children = ( 152 | 08E7CD961FE26EAD00B0F14A /* OutletVC.h */, 153 | 08E7CD971FE26EAD00B0F14A /* OutletVC.m */, 154 | ); 155 | path = OutletVC; 156 | sourceTree = ""; 157 | }; 158 | C6FAE0C30FF0CB6D3DC53318 /* Pods */ = { 159 | isa = PBXGroup; 160 | children = ( 161 | 65768CB5492CA38FC10CEF35 /* Pods-KOPinCodeView.debug.xcconfig */, 162 | 5B3B5D7A92EF4DD3E697F435 /* Pods-KOPinCodeView.release.xcconfig */, 163 | 216773EF18F52D1B4F7E128D /* Pods-KOPinCodeViewTests.debug.xcconfig */, 164 | BF8DB09623B1981D6D205018 /* Pods-KOPinCodeViewTests.release.xcconfig */, 165 | ); 166 | name = Pods; 167 | sourceTree = ""; 168 | }; 169 | /* End PBXGroup section */ 170 | 171 | /* Begin PBXNativeTarget section */ 172 | 08E7CD6B1FE26B9E00B0F14A /* KOPinCodeView */ = { 173 | isa = PBXNativeTarget; 174 | buildConfigurationList = 08E7CD8D1FE26B9F00B0F14A /* Build configuration list for PBXNativeTarget "KOPinCodeView" */; 175 | buildPhases = ( 176 | 09E5A12C2F26F6DF0ED1D38F /* [CP] Check Pods Manifest.lock */, 177 | 08E7CD681FE26B9E00B0F14A /* Sources */, 178 | 08E7CD691FE26B9E00B0F14A /* Frameworks */, 179 | 08E7CD6A1FE26B9E00B0F14A /* Resources */, 180 | D503EB51FB709BBF3922C7CA /* [CP] Embed Pods Frameworks */, 181 | 027F4CFB9894964E40D23DE9 /* [CP] Copy Pods Resources */, 182 | ); 183 | buildRules = ( 184 | ); 185 | dependencies = ( 186 | ); 187 | name = KOPinCodeView; 188 | productName = KOPinCodeView; 189 | productReference = 08E7CD6C1FE26B9E00B0F14A /* KOPinCodeView.app */; 190 | productType = "com.apple.product-type.application"; 191 | }; 192 | 08E7CD831FE26B9E00B0F14A /* KOPinCodeViewTests */ = { 193 | isa = PBXNativeTarget; 194 | buildConfigurationList = 08E7CD901FE26B9F00B0F14A /* Build configuration list for PBXNativeTarget "KOPinCodeViewTests" */; 195 | buildPhases = ( 196 | 7DFD3E78FF332EE81AEBEA95 /* [CP] Check Pods Manifest.lock */, 197 | 08E7CD801FE26B9E00B0F14A /* Sources */, 198 | 08E7CD811FE26B9E00B0F14A /* Frameworks */, 199 | 08E7CD821FE26B9E00B0F14A /* Resources */, 200 | 5557F65C21A4F77F43B9565F /* [CP] Embed Pods Frameworks */, 201 | 7A58D9C4689437BDF1D34E27 /* [CP] Copy Pods Resources */, 202 | ); 203 | buildRules = ( 204 | ); 205 | dependencies = ( 206 | 08E7CD861FE26B9F00B0F14A /* PBXTargetDependency */, 207 | ); 208 | name = KOPinCodeViewTests; 209 | productName = KOPinCodeViewTests; 210 | productReference = 08E7CD841FE26B9E00B0F14A /* KOPinCodeViewTests.xctest */; 211 | productType = "com.apple.product-type.bundle.unit-test"; 212 | }; 213 | /* End PBXNativeTarget section */ 214 | 215 | /* Begin PBXProject section */ 216 | 08E7CD641FE26B9E00B0F14A /* Project object */ = { 217 | isa = PBXProject; 218 | attributes = { 219 | LastUpgradeCheck = 0920; 220 | ORGANIZATIONNAME = "Oleksandr Khymych"; 221 | TargetAttributes = { 222 | 08E7CD6B1FE26B9E00B0F14A = { 223 | CreatedOnToolsVersion = 9.2; 224 | ProvisioningStyle = Automatic; 225 | }; 226 | 08E7CD831FE26B9E00B0F14A = { 227 | CreatedOnToolsVersion = 9.2; 228 | ProvisioningStyle = Automatic; 229 | TestTargetID = 08E7CD6B1FE26B9E00B0F14A; 230 | }; 231 | }; 232 | }; 233 | buildConfigurationList = 08E7CD671FE26B9E00B0F14A /* Build configuration list for PBXProject "KOPinCodeView" */; 234 | compatibilityVersion = "Xcode 8.0"; 235 | developmentRegion = en; 236 | hasScannedForEncodings = 0; 237 | knownRegions = ( 238 | en, 239 | Base, 240 | ); 241 | mainGroup = 08E7CD631FE26B9E00B0F14A; 242 | productRefGroup = 08E7CD6D1FE26B9E00B0F14A /* Products */; 243 | projectDirPath = ""; 244 | projectRoot = ""; 245 | targets = ( 246 | 08E7CD6B1FE26B9E00B0F14A /* KOPinCodeView */, 247 | 08E7CD831FE26B9E00B0F14A /* KOPinCodeViewTests */, 248 | ); 249 | }; 250 | /* End PBXProject section */ 251 | 252 | /* Begin PBXResourcesBuildPhase section */ 253 | 08E7CD6A1FE26B9E00B0F14A /* Resources */ = { 254 | isa = PBXResourcesBuildPhase; 255 | buildActionMask = 2147483647; 256 | files = ( 257 | 08E7CD7C1FE26B9E00B0F14A /* LaunchScreen.storyboard in Resources */, 258 | 08E7CD791FE26B9E00B0F14A /* Assets.xcassets in Resources */, 259 | 08E7CD771FE26B9E00B0F14A /* Main.storyboard in Resources */, 260 | ); 261 | runOnlyForDeploymentPostprocessing = 0; 262 | }; 263 | 08E7CD821FE26B9E00B0F14A /* Resources */ = { 264 | isa = PBXResourcesBuildPhase; 265 | buildActionMask = 2147483647; 266 | files = ( 267 | ); 268 | runOnlyForDeploymentPostprocessing = 0; 269 | }; 270 | /* End PBXResourcesBuildPhase section */ 271 | 272 | /* Begin PBXShellScriptBuildPhase section */ 273 | 027F4CFB9894964E40D23DE9 /* [CP] Copy Pods Resources */ = { 274 | isa = PBXShellScriptBuildPhase; 275 | buildActionMask = 2147483647; 276 | files = ( 277 | ); 278 | inputPaths = ( 279 | ); 280 | name = "[CP] Copy Pods Resources"; 281 | outputPaths = ( 282 | ); 283 | runOnlyForDeploymentPostprocessing = 0; 284 | shellPath = /bin/sh; 285 | shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-KOPinCodeView/Pods-KOPinCodeView-resources.sh\"\n"; 286 | showEnvVarsInLog = 0; 287 | }; 288 | 09E5A12C2F26F6DF0ED1D38F /* [CP] Check Pods Manifest.lock */ = { 289 | isa = PBXShellScriptBuildPhase; 290 | buildActionMask = 2147483647; 291 | files = ( 292 | ); 293 | inputPaths = ( 294 | "${PODS_PODFILE_DIR_PATH}/Podfile.lock", 295 | "${PODS_ROOT}/Manifest.lock", 296 | ); 297 | name = "[CP] Check Pods Manifest.lock"; 298 | outputPaths = ( 299 | "$(DERIVED_FILE_DIR)/Pods-KOPinCodeView-checkManifestLockResult.txt", 300 | ); 301 | runOnlyForDeploymentPostprocessing = 0; 302 | shellPath = /bin/sh; 303 | 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"; 304 | showEnvVarsInLog = 0; 305 | }; 306 | 5557F65C21A4F77F43B9565F /* [CP] Embed Pods Frameworks */ = { 307 | isa = PBXShellScriptBuildPhase; 308 | buildActionMask = 2147483647; 309 | files = ( 310 | ); 311 | inputPaths = ( 312 | ); 313 | name = "[CP] Embed Pods Frameworks"; 314 | outputPaths = ( 315 | ); 316 | runOnlyForDeploymentPostprocessing = 0; 317 | shellPath = /bin/sh; 318 | shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-KOPinCodeViewTests/Pods-KOPinCodeViewTests-frameworks.sh\"\n"; 319 | showEnvVarsInLog = 0; 320 | }; 321 | 7A58D9C4689437BDF1D34E27 /* [CP] Copy Pods Resources */ = { 322 | isa = PBXShellScriptBuildPhase; 323 | buildActionMask = 2147483647; 324 | files = ( 325 | ); 326 | inputPaths = ( 327 | ); 328 | name = "[CP] Copy Pods Resources"; 329 | outputPaths = ( 330 | ); 331 | runOnlyForDeploymentPostprocessing = 0; 332 | shellPath = /bin/sh; 333 | shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-KOPinCodeViewTests/Pods-KOPinCodeViewTests-resources.sh\"\n"; 334 | showEnvVarsInLog = 0; 335 | }; 336 | 7DFD3E78FF332EE81AEBEA95 /* [CP] Check Pods Manifest.lock */ = { 337 | isa = PBXShellScriptBuildPhase; 338 | buildActionMask = 2147483647; 339 | files = ( 340 | ); 341 | inputPaths = ( 342 | "${PODS_PODFILE_DIR_PATH}/Podfile.lock", 343 | "${PODS_ROOT}/Manifest.lock", 344 | ); 345 | name = "[CP] Check Pods Manifest.lock"; 346 | outputPaths = ( 347 | "$(DERIVED_FILE_DIR)/Pods-KOPinCodeViewTests-checkManifestLockResult.txt", 348 | ); 349 | runOnlyForDeploymentPostprocessing = 0; 350 | shellPath = /bin/sh; 351 | 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"; 352 | showEnvVarsInLog = 0; 353 | }; 354 | D503EB51FB709BBF3922C7CA /* [CP] Embed Pods Frameworks */ = { 355 | isa = PBXShellScriptBuildPhase; 356 | buildActionMask = 2147483647; 357 | files = ( 358 | ); 359 | inputPaths = ( 360 | ); 361 | name = "[CP] Embed Pods Frameworks"; 362 | outputPaths = ( 363 | ); 364 | runOnlyForDeploymentPostprocessing = 0; 365 | shellPath = /bin/sh; 366 | shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-KOPinCodeView/Pods-KOPinCodeView-frameworks.sh\"\n"; 367 | showEnvVarsInLog = 0; 368 | }; 369 | /* End PBXShellScriptBuildPhase section */ 370 | 371 | /* Begin PBXSourcesBuildPhase section */ 372 | 08E7CD681FE26B9E00B0F14A /* Sources */ = { 373 | isa = PBXSourcesBuildPhase; 374 | buildActionMask = 2147483647; 375 | files = ( 376 | 08E7CD7F1FE26B9E00B0F14A /* main.m in Sources */, 377 | 08E7CD711FE26B9E00B0F14A /* AppDelegate.m in Sources */, 378 | 08E7CD981FE26EAD00B0F14A /* OutletVC.m in Sources */, 379 | 08E7CD9C1FE26ECE00B0F14A /* FrameVC.m in Sources */, 380 | ); 381 | runOnlyForDeploymentPostprocessing = 0; 382 | }; 383 | 08E7CD801FE26B9E00B0F14A /* Sources */ = { 384 | isa = PBXSourcesBuildPhase; 385 | buildActionMask = 2147483647; 386 | files = ( 387 | 08E7CD9D1FE26ECE00B0F14A /* FrameVC.m in Sources */, 388 | 08E7CD891FE26B9F00B0F14A /* KOPinCodeViewTests.m in Sources */, 389 | 08E7CD991FE26EAD00B0F14A /* OutletVC.m in Sources */, 390 | ); 391 | runOnlyForDeploymentPostprocessing = 0; 392 | }; 393 | /* End PBXSourcesBuildPhase section */ 394 | 395 | /* Begin PBXTargetDependency section */ 396 | 08E7CD861FE26B9F00B0F14A /* PBXTargetDependency */ = { 397 | isa = PBXTargetDependency; 398 | target = 08E7CD6B1FE26B9E00B0F14A /* KOPinCodeView */; 399 | targetProxy = 08E7CD851FE26B9F00B0F14A /* PBXContainerItemProxy */; 400 | }; 401 | /* End PBXTargetDependency section */ 402 | 403 | /* Begin PBXVariantGroup section */ 404 | 08E7CD751FE26B9E00B0F14A /* Main.storyboard */ = { 405 | isa = PBXVariantGroup; 406 | children = ( 407 | 08E7CD761FE26B9E00B0F14A /* Base */, 408 | ); 409 | name = Main.storyboard; 410 | sourceTree = ""; 411 | }; 412 | 08E7CD7A1FE26B9E00B0F14A /* LaunchScreen.storyboard */ = { 413 | isa = PBXVariantGroup; 414 | children = ( 415 | 08E7CD7B1FE26B9E00B0F14A /* Base */, 416 | ); 417 | name = LaunchScreen.storyboard; 418 | sourceTree = ""; 419 | }; 420 | /* End PBXVariantGroup section */ 421 | 422 | /* Begin XCBuildConfiguration section */ 423 | 08E7CD8B1FE26B9F00B0F14A /* Debug */ = { 424 | isa = XCBuildConfiguration; 425 | buildSettings = { 426 | ALWAYS_SEARCH_USER_PATHS = NO; 427 | CLANG_ANALYZER_NONNULL = YES; 428 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 429 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 430 | CLANG_CXX_LIBRARY = "libc++"; 431 | CLANG_ENABLE_MODULES = YES; 432 | CLANG_ENABLE_OBJC_ARC = YES; 433 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 434 | CLANG_WARN_BOOL_CONVERSION = YES; 435 | CLANG_WARN_COMMA = YES; 436 | CLANG_WARN_CONSTANT_CONVERSION = YES; 437 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 438 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 439 | CLANG_WARN_EMPTY_BODY = YES; 440 | CLANG_WARN_ENUM_CONVERSION = YES; 441 | CLANG_WARN_INFINITE_RECURSION = YES; 442 | CLANG_WARN_INT_CONVERSION = YES; 443 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 444 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 445 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 446 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 447 | CLANG_WARN_STRICT_PROTOTYPES = YES; 448 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 449 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 450 | CLANG_WARN_UNREACHABLE_CODE = YES; 451 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 452 | CODE_SIGN_IDENTITY = "iPhone Developer"; 453 | COPY_PHASE_STRIP = NO; 454 | DEBUG_INFORMATION_FORMAT = dwarf; 455 | ENABLE_STRICT_OBJC_MSGSEND = YES; 456 | ENABLE_TESTABILITY = YES; 457 | GCC_C_LANGUAGE_STANDARD = gnu11; 458 | GCC_DYNAMIC_NO_PIC = NO; 459 | GCC_NO_COMMON_BLOCKS = YES; 460 | GCC_OPTIMIZATION_LEVEL = 0; 461 | GCC_PREPROCESSOR_DEFINITIONS = ( 462 | "DEBUG=1", 463 | "$(inherited)", 464 | ); 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 = 11.2; 472 | MTL_ENABLE_DEBUG_INFO = YES; 473 | ONLY_ACTIVE_ARCH = YES; 474 | SDKROOT = iphoneos; 475 | }; 476 | name = Debug; 477 | }; 478 | 08E7CD8C1FE26B9F00B0F14A /* Release */ = { 479 | isa = XCBuildConfiguration; 480 | buildSettings = { 481 | ALWAYS_SEARCH_USER_PATHS = NO; 482 | CLANG_ANALYZER_NONNULL = YES; 483 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 484 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 485 | CLANG_CXX_LIBRARY = "libc++"; 486 | CLANG_ENABLE_MODULES = YES; 487 | CLANG_ENABLE_OBJC_ARC = YES; 488 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 489 | CLANG_WARN_BOOL_CONVERSION = YES; 490 | CLANG_WARN_COMMA = YES; 491 | CLANG_WARN_CONSTANT_CONVERSION = YES; 492 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 493 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 494 | CLANG_WARN_EMPTY_BODY = YES; 495 | CLANG_WARN_ENUM_CONVERSION = YES; 496 | CLANG_WARN_INFINITE_RECURSION = YES; 497 | CLANG_WARN_INT_CONVERSION = YES; 498 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 499 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 500 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 501 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 502 | CLANG_WARN_STRICT_PROTOTYPES = YES; 503 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 504 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 505 | CLANG_WARN_UNREACHABLE_CODE = YES; 506 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 507 | CODE_SIGN_IDENTITY = "iPhone Developer"; 508 | COPY_PHASE_STRIP = NO; 509 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 510 | ENABLE_NS_ASSERTIONS = NO; 511 | ENABLE_STRICT_OBJC_MSGSEND = YES; 512 | GCC_C_LANGUAGE_STANDARD = gnu11; 513 | GCC_NO_COMMON_BLOCKS = YES; 514 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 515 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 516 | GCC_WARN_UNDECLARED_SELECTOR = YES; 517 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 518 | GCC_WARN_UNUSED_FUNCTION = YES; 519 | GCC_WARN_UNUSED_VARIABLE = YES; 520 | IPHONEOS_DEPLOYMENT_TARGET = 11.2; 521 | MTL_ENABLE_DEBUG_INFO = NO; 522 | SDKROOT = iphoneos; 523 | VALIDATE_PRODUCT = YES; 524 | }; 525 | name = Release; 526 | }; 527 | 08E7CD8E1FE26B9F00B0F14A /* Debug */ = { 528 | isa = XCBuildConfiguration; 529 | baseConfigurationReference = 65768CB5492CA38FC10CEF35 /* Pods-KOPinCodeView.debug.xcconfig */; 530 | buildSettings = { 531 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 532 | CODE_SIGN_STYLE = Automatic; 533 | DEVELOPMENT_TEAM = ""; 534 | INFOPLIST_FILE = KOPinCodeView/Info.plist; 535 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 536 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 537 | PRODUCT_BUNDLE_IDENTIFIER = com.khymych.KOPinCodeView; 538 | PRODUCT_NAME = "$(TARGET_NAME)"; 539 | TARGETED_DEVICE_FAMILY = "1,2"; 540 | }; 541 | name = Debug; 542 | }; 543 | 08E7CD8F1FE26B9F00B0F14A /* Release */ = { 544 | isa = XCBuildConfiguration; 545 | baseConfigurationReference = 5B3B5D7A92EF4DD3E697F435 /* Pods-KOPinCodeView.release.xcconfig */; 546 | buildSettings = { 547 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 548 | CODE_SIGN_STYLE = Automatic; 549 | DEVELOPMENT_TEAM = ""; 550 | INFOPLIST_FILE = KOPinCodeView/Info.plist; 551 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 552 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 553 | PRODUCT_BUNDLE_IDENTIFIER = com.khymych.KOPinCodeView; 554 | PRODUCT_NAME = "$(TARGET_NAME)"; 555 | TARGETED_DEVICE_FAMILY = "1,2"; 556 | }; 557 | name = Release; 558 | }; 559 | 08E7CD911FE26B9F00B0F14A /* Debug */ = { 560 | isa = XCBuildConfiguration; 561 | baseConfigurationReference = 216773EF18F52D1B4F7E128D /* Pods-KOPinCodeViewTests.debug.xcconfig */; 562 | buildSettings = { 563 | BUNDLE_LOADER = "$(TEST_HOST)"; 564 | CODE_SIGN_STYLE = Automatic; 565 | DEVELOPMENT_TEAM = PM85A2KGPM; 566 | INFOPLIST_FILE = KOPinCodeViewTests/Info.plist; 567 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 568 | PRODUCT_BUNDLE_IDENTIFIER = com.khymych.KOPinCodeViewTests; 569 | PRODUCT_NAME = "$(TARGET_NAME)"; 570 | TARGETED_DEVICE_FAMILY = "1,2"; 571 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/KOPinCodeView.app/KOPinCodeView"; 572 | }; 573 | name = Debug; 574 | }; 575 | 08E7CD921FE26B9F00B0F14A /* Release */ = { 576 | isa = XCBuildConfiguration; 577 | baseConfigurationReference = BF8DB09623B1981D6D205018 /* Pods-KOPinCodeViewTests.release.xcconfig */; 578 | buildSettings = { 579 | BUNDLE_LOADER = "$(TEST_HOST)"; 580 | CODE_SIGN_STYLE = Automatic; 581 | DEVELOPMENT_TEAM = PM85A2KGPM; 582 | INFOPLIST_FILE = KOPinCodeViewTests/Info.plist; 583 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 584 | PRODUCT_BUNDLE_IDENTIFIER = com.khymych.KOPinCodeViewTests; 585 | PRODUCT_NAME = "$(TARGET_NAME)"; 586 | TARGETED_DEVICE_FAMILY = "1,2"; 587 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/KOPinCodeView.app/KOPinCodeView"; 588 | }; 589 | name = Release; 590 | }; 591 | /* End XCBuildConfiguration section */ 592 | 593 | /* Begin XCConfigurationList section */ 594 | 08E7CD671FE26B9E00B0F14A /* Build configuration list for PBXProject "KOPinCodeView" */ = { 595 | isa = XCConfigurationList; 596 | buildConfigurations = ( 597 | 08E7CD8B1FE26B9F00B0F14A /* Debug */, 598 | 08E7CD8C1FE26B9F00B0F14A /* Release */, 599 | ); 600 | defaultConfigurationIsVisible = 0; 601 | defaultConfigurationName = Release; 602 | }; 603 | 08E7CD8D1FE26B9F00B0F14A /* Build configuration list for PBXNativeTarget "KOPinCodeView" */ = { 604 | isa = XCConfigurationList; 605 | buildConfigurations = ( 606 | 08E7CD8E1FE26B9F00B0F14A /* Debug */, 607 | 08E7CD8F1FE26B9F00B0F14A /* Release */, 608 | ); 609 | defaultConfigurationIsVisible = 0; 610 | defaultConfigurationName = Release; 611 | }; 612 | 08E7CD901FE26B9F00B0F14A /* Build configuration list for PBXNativeTarget "KOPinCodeViewTests" */ = { 613 | isa = XCConfigurationList; 614 | buildConfigurations = ( 615 | 08E7CD911FE26B9F00B0F14A /* Debug */, 616 | 08E7CD921FE26B9F00B0F14A /* Release */, 617 | ); 618 | defaultConfigurationIsVisible = 0; 619 | defaultConfigurationName = Release; 620 | }; 621 | /* End XCConfigurationList section */ 622 | }; 623 | rootObject = 08E7CD641FE26B9E00B0F14A /* Project object */; 624 | } 625 | -------------------------------------------------------------------------------- /Example/KOPinCodeView/KOPinCodeView/AppDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.h 3 | // KOPinCodeView 4 | // 5 | // Created by Oleksandr Khymych on 14.12.2017. 6 | // Copyright © 2017 Oleksandr Khymych. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface AppDelegate : UIResponder 12 | 13 | @property (strong, nonatomic) UIWindow *window; 14 | 15 | 16 | @end 17 | 18 | -------------------------------------------------------------------------------- /Example/KOPinCodeView/KOPinCodeView/AppDelegate.m: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.m 3 | // KOPinCodeView 4 | // 5 | // Created by Oleksandr Khymych on 14.12.2017. 6 | // Copyright © 2017 Oleksandr Khymych. All rights reserved. 7 | // 8 | 9 | #import "AppDelegate.h" 10 | 11 | @interface AppDelegate () 12 | 13 | @end 14 | 15 | @implementation AppDelegate 16 | 17 | 18 | - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 19 | return YES; 20 | } 21 | @end 22 | -------------------------------------------------------------------------------- /Example/KOPinCodeView/KOPinCodeView/Assets.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" : "ipad", 45 | "size" : "20x20", 46 | "scale" : "1x" 47 | }, 48 | { 49 | "idiom" : "ipad", 50 | "size" : "20x20", 51 | "scale" : "2x" 52 | }, 53 | { 54 | "idiom" : "ipad", 55 | "size" : "29x29", 56 | "scale" : "1x" 57 | }, 58 | { 59 | "idiom" : "ipad", 60 | "size" : "29x29", 61 | "scale" : "2x" 62 | }, 63 | { 64 | "idiom" : "ipad", 65 | "size" : "40x40", 66 | "scale" : "1x" 67 | }, 68 | { 69 | "idiom" : "ipad", 70 | "size" : "40x40", 71 | "scale" : "2x" 72 | }, 73 | { 74 | "idiom" : "ipad", 75 | "size" : "76x76", 76 | "scale" : "1x" 77 | }, 78 | { 79 | "idiom" : "ipad", 80 | "size" : "76x76", 81 | "scale" : "2x" 82 | }, 83 | { 84 | "idiom" : "ipad", 85 | "size" : "83.5x83.5", 86 | "scale" : "2x" 87 | } 88 | ], 89 | "info" : { 90 | "version" : 1, 91 | "author" : "xcode" 92 | } 93 | } -------------------------------------------------------------------------------- /Example/KOPinCodeView/KOPinCodeView/Base.lproj/LaunchScreen.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /Example/KOPinCodeView/KOPinCodeView/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 | 35 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | -------------------------------------------------------------------------------- /Example/KOPinCodeView/KOPinCodeView/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 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 | CFBundleVersion 20 | 1 21 | LSRequiresIPhoneOS 22 | 23 | UILaunchStoryboardName 24 | LaunchScreen 25 | UIMainStoryboardFile 26 | Main 27 | UIRequiredDeviceCapabilities 28 | 29 | armv7 30 | 31 | UISupportedInterfaceOrientations 32 | 33 | UIInterfaceOrientationPortrait 34 | UIInterfaceOrientationLandscapeLeft 35 | UIInterfaceOrientationLandscapeRight 36 | 37 | UISupportedInterfaceOrientations~ipad 38 | 39 | UIInterfaceOrientationPortrait 40 | UIInterfaceOrientationPortraitUpsideDown 41 | UIInterfaceOrientationLandscapeLeft 42 | UIInterfaceOrientationLandscapeRight 43 | 44 | 45 | 46 | -------------------------------------------------------------------------------- /Example/KOPinCodeView/KOPinCodeView/UI/FrameVC/FrameVC.h: -------------------------------------------------------------------------------- 1 | // 2 | // FrameVC.h 3 | // KOPinCodeView 4 | // 5 | // Created by Oleksandr Khymych on 14.12.2017. 6 | // Copyright © 2017 Oleksandr Khymych. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface FrameVC : UIViewController 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /Example/KOPinCodeView/KOPinCodeView/UI/FrameVC/FrameVC.m: -------------------------------------------------------------------------------- 1 | // 2 | // FrameVC.m 3 | // KOPinCodeView 4 | // 5 | // Created by Oleksandr Khymych on 14.12.2017. 6 | // Copyright © 2017 Oleksandr Khymych. All rights reserved. 7 | // 8 | 9 | #import "FrameVC.h" 10 | #import 11 | 12 | @interface FrameVC () 13 | 14 | @end 15 | 16 | @implementation FrameVC 17 | 18 | - (void)viewDidLoad { 19 | [super viewDidLoad]; 20 | //1. init with frame 21 | KOPinCodeView *pinCodeView = [[KOPinCodeView alloc]initWithFrame:CGRectMake(16, 100, self.view.frame.size.width-32, 365)]; 22 | pinCodeView.backgroundColor = [UIColor greenColor]; 23 | //2. Add to you view 24 | [self.view addSubview:pinCodeView]; 25 | pinCodeView.confirm = YES; 26 | //3. setting the delegate: 27 | pinCodeView.delegate = self; 28 | //and init PinCodeView with cout symbol example 29 | [pinCodeView initPinWithCountView:6]; 30 | } 31 | #pragma mark - KOPinCodeViewDelegate 32 | - (void)pinDidEnterAllSymbol:(NSArray *)symbolArray string:(NSString*)pin{ 33 | NSLog(@"Pin:%@", pin); 34 | } 35 | @end 36 | -------------------------------------------------------------------------------- /Example/KOPinCodeView/KOPinCodeView/UI/OutletVC/OutletVC.h: -------------------------------------------------------------------------------- 1 | // 2 | // OutletVC.h 3 | // KOPinCodeView 4 | // 5 | // Created by Oleksandr Khymych on 14.12.2017. 6 | // Copyright © 2017 Oleksandr Khymych. All rights reserved. 7 | // 8 | 9 | #import 10 | #import 11 | 12 | @interface OutletVC : UIViewController 13 | 14 | @end 15 | -------------------------------------------------------------------------------- /Example/KOPinCodeView/KOPinCodeView/UI/OutletVC/OutletVC.m: -------------------------------------------------------------------------------- 1 | // 2 | // OutletVC.m 3 | // KOPinCodeView 4 | // 5 | // Created by Oleksandr Khymych on 14.12.2017. 6 | // Copyright © 2017 Oleksandr Khymych. All rights reserved. 7 | // 8 | 9 | #import "OutletVC.h" 10 | 11 | @interface OutletVC () 12 | @property (weak, nonatomic) IBOutlet KOPinCodeView *pinCodeView; 13 | @end 14 | 15 | @implementation OutletVC 16 | 17 | - (void)viewDidLoad { 18 | [super viewDidLoad]; 19 | //PinCodeView with cout symbol example 20 | [_pinCodeView initPinWithCountView:6]; 21 | } 22 | #pragma mark - KOPinCodeViewDelegate 23 | - (void)pinDidEnterAllSymbol:(NSArray *)symbolArray string:(NSString*)pin{ 24 | NSLog(@"Pin:%@", pin); 25 | } 26 | @end 27 | -------------------------------------------------------------------------------- /Example/KOPinCodeView/KOPinCodeView/main.m: -------------------------------------------------------------------------------- 1 | // 2 | // main.m 3 | // KOPinCodeView 4 | // 5 | // Created by Oleksandr Khymych on 14.12.2017. 6 | // Copyright © 2017 Oleksandr Khymych. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "AppDelegate.h" 11 | 12 | int main(int argc, char * argv[]) { 13 | @autoreleasepool { 14 | return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /Example/KOPinCodeView/KOPinCodeViewTests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 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 | CFBundleVersion 20 | 1 21 | 22 | 23 | -------------------------------------------------------------------------------- /Example/KOPinCodeView/KOPinCodeViewTests/KOPinCodeViewTests.m: -------------------------------------------------------------------------------- 1 | // 2 | // KOPinCodeViewTests.m 3 | // KOPinCodeViewTests 4 | // 5 | // Created by Oleksandr Khymych on 14.12.2017. 6 | // Copyright © 2017 Oleksandr Khymych. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface KOPinCodeViewTests : XCTestCase 12 | 13 | @end 14 | 15 | @implementation KOPinCodeViewTests 16 | 17 | - (void)setUp { 18 | [super setUp]; 19 | // Put setup code here. This method is called before the invocation of each test method in the class. 20 | } 21 | 22 | - (void)tearDown { 23 | // Put teardown code here. This method is called after the invocation of each test method in the class. 24 | [super tearDown]; 25 | } 26 | 27 | - (void)testExample { 28 | // This is an example of a functional test case. 29 | // Use XCTAssert and related functions to verify your tests produce the correct results. 30 | } 31 | 32 | - (void)testPerformanceExample { 33 | // This is an example of a performance test case. 34 | [self measureBlock:^{ 35 | // Put the code you want to measure the time of here. 36 | }]; 37 | } 38 | 39 | @end 40 | -------------------------------------------------------------------------------- /Example/KOPinCodeView/Podfile: -------------------------------------------------------------------------------- 1 | platform :ios, '8.0' 2 | target 'KOPinCodeView' do 3 | pod 'KOPinCodeView' 4 | target 'KOPinCodeViewTests' do 5 | inherit! :search_paths 6 | pod 'KOPinCodeView' 7 | end 8 | end 9 | -------------------------------------------------------------------------------- /Example/KOPinCodeView/Podfile.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - KOPinCodeView (0.1.1) 3 | 4 | DEPENDENCIES: 5 | - KOPinCodeView 6 | 7 | SPEC CHECKSUMS: 8 | KOPinCodeView: 33cd908c5f7d27170e5107ef9cc1a2d12a821168 9 | 10 | PODFILE CHECKSUM: 8e692aac3a99c0a971bd48b0af70153bdd3159d6 11 | 12 | COCOAPODS: 1.4.0.beta.2 13 | -------------------------------------------------------------------------------- /Example/KOPinCodeView/Pods/Headers/Private/KOPinCodeView/KOPinCodeView.h: -------------------------------------------------------------------------------- 1 | ../../../KOPinCodeView/Source/Classes/KOPinCodeView.h -------------------------------------------------------------------------------- /Example/KOPinCodeView/Pods/Headers/Public/KOPinCodeView/KOPinCodeView.h: -------------------------------------------------------------------------------- 1 | ../../../KOPinCodeView/Source/Classes/KOPinCodeView.h -------------------------------------------------------------------------------- /Example/KOPinCodeView/Pods/KOPinCodeView/LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License 2 | 3 | Copyright (c) 2009-2017 Oleksandr Khymych, Inc. http://khymych.com 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in 13 | all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | THE SOFTWARE. 22 | -------------------------------------------------------------------------------- /Example/KOPinCodeView/Pods/KOPinCodeView/README.md: -------------------------------------------------------------------------------- 1 | ## Overview 2 | KOPinCodeView is a completed view developed for PIN-code entering. 3 | 4 | Key features and advantages: 5 | - easy for integrating in controller; 6 | - wide visual customization; 7 | - automatically creates TextField and background view according to self view; 8 | - optional PIN-code confirmation with integrated permission control; 9 | - able to set number of cells for PIN-code entering. 10 | 11 | ![KOPinCodeView](https://github.com/SethSky/KOPinCodeView/blob/master/KOPinCodeView/Assets/pin_code_view.gif?raw=true) 12 | ![KOPinCodeView](https://github.com/SethSky/KOPinCodeView/blob/master/KOPinCodeView/Assets/pin_code_view_confirm.gif?raw=true) 13 | 14 | 15 | # KOPinCodeView 16 | [![Version](https://img.shields.io/cocoapods/v/KOPinCodeView.svg?style=flat)](http://cocoapods.org/pods/KOPinCodeView) 17 | [![License](https://img.shields.io/cocoapods/l/KOPinCodeView.svg?style=flat)](http://cocoapods.org/pods/KOPinCodeView) 18 | [![Platform](https://img.shields.io/cocoapods/p/KOPinCodeView.svg?style=flat)](http://cocoapods.org/pods/KOPinCodeView) 19 | 20 | ## Installation 21 | 22 | ### CocoaPods 23 | 24 | [CocoaPods](http://cocoapods.org) is a dependency manager for Cocoa projects. You can install it with the following command: 25 | 26 | ```bash 27 | $ gem install cocoapods 28 | ``` 29 | 30 | > CocoaPods 1.1+ is required to build KOLocalizedString 0.0.1+. 31 | 32 | To integrate KOLocalizedString into your Xcode project using CocoaPods, specify it in your `Podfile`: 33 | 34 | ```ruby 35 | source 'https://github.com/CocoaPods/Specs.git' 36 | platform :ios, '8.0' 37 | 38 | target '' do 39 | pod 'KOPinCodeView', '~> 0.1.1' 40 | end 41 | ``` 42 | 43 | Then, run the following command: 44 | 45 | ```bash 46 | $ pod install 47 | ``` 48 | 49 | ## Usage 50 | 51 | ### Swift 52 | If you are using `use_frameworks!` in your Podfile, use this import: 53 | ```swift 54 | import KOPinCodeView 55 | ``` 56 | ### In Objective-C 57 | 58 | ```objc 59 | #import //in your controller's header file 60 | ``` 61 | ##### Init methods 62 | # 63 | ```objc 64 | //init PinCodeView with cout symbol 65 | -(void)initPinWithCountView:(int)count; 66 | 67 | //init PinCodeView with confirm or custom view 68 | -(void)initPinViewWithConfirmPIN:(BOOL)confirm 69 | countSymbol:(int)count 70 | sizeSimbol:(CGSize)size 71 | formView:(FormView)form; 72 | ``` 73 | ##### Delegate methods KOPinCodeViewDelegate 74 | # 75 | ```objc 76 | // delegate method. Called when entered all simbols. 77 | // it returned symbols array and string with all symbols. 78 | - (void)pinDidEnterAllSymbol:(NSArray *)symbolArray string:(NSString*)pin; 79 | ``` 80 | ##### Creating a Pin Code View 81 | ###### Example code: 82 | # 83 | ```objc 84 | //1. init with frame 85 | KOPinCodeView *pinCodeView = [[KOPinCodeView alloc]initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, 65)]; 86 | //2. Add to you view 87 | [self.view addSubview:pinCodeView]; 88 | //3. setting the delegate: 89 | pinCodeView.delegate = self; 90 | //or just add view in storyboard 91 | ``` 92 | ```objc 93 | //and init PinCodeView with cout symbol example 94 | [pinCodeView initPinWithCountView:4]; 95 | ``` 96 | ###### init PinCodeView with confirm example: 97 | # 98 | ```objc 99 | [self.pinCodeConfirmView initPinViewWithConfirmPIN:YES countSymbol:6 sizeSimbol:CGSizeMake(45, 45) formView:kCircle]; 100 | ``` 101 | 102 | ###### Pin Code View with confirm custom settings example: 103 | # 104 | ```objc 105 | //thickness view line 106 | self.pinCodeConfirmView.lineDeep = 2.f; 107 | //Color view line 108 | self.pinCodeConfirmView.lineColor = kColor; 109 | //Background color view in select state 110 | self.pinCodeConfirmView.selectColor = [kColor colorWithAlphaComponent:0.5f]; 111 | 112 | //Text color UITextField 113 | self.pinCodeConfirmView.symbolColor = kColor; 114 | //Font UITextField 115 | self.pinCodeConfirmView.symbolFont = [UIFont systemFontOfSize:14]; 116 | 117 | //UILabel show only initPinViewWithConfirmPIN: 118 | //Text color Label 119 | self.pinCodeConfirmView.titleColor = kColor; 120 | //Font Label 121 | self.pinCodeConfirmView.titleFont = [UIFont systemFontOfSize:14]; 122 | //Text Label - Default: "enter Pin code" 123 | self.pinCodeConfirmView.enterPinString = @"Any text 1"; 124 | //Text Label - Default: "Confirm Pin code" 125 | self.pinCodeConfirmView.confirmPinString = @"Any text 2"; 126 | 127 | //Create Confirm Pin Code 128 | self.pinCodeConfirmView.confirm = NO; 129 | //Secure Text - Default: YES 130 | self.pinCodeConfirmView.secure = NO; 131 | //Keyboard Type 132 | self.pinCodeConfirmView.typeKeyboard = UIKeyboardTypeNumberPad; 133 | ``` 134 | ## Author 135 | Oleksandr Khymych, seth@khymych.com 136 | 137 | ## License 138 | KOPinCodeView is released under the MIT license. [See LICENSE](LICENSE) for details. 139 | -------------------------------------------------------------------------------- /Example/KOPinCodeView/Pods/KOPinCodeView/Source/Classes/KOPinCodeView.h: -------------------------------------------------------------------------------- 1 | 2 | #import 3 | 4 | //View Default: kCircle 5 | typedef enum FormView : NSUInteger { 6 | kCircle, //circle 7 | kFoursquare, //Foursquare 8 | kNone //None 9 | } FormView; 10 | 11 | @protocol KOPinCodeViewDelegate 12 | @required 13 | /** 14 | delegate method. Called when entered all simbols. 15 | it returned symbols array and string with all symbols. 16 | 17 | @param symbolArray NSArray with NSString 18 | @param pin NSString 19 | */ 20 | - (void)pinDidEnterAllSymbol:(NSArray *)symbolArray string:(NSString*)pin; 21 | @end 22 | 23 | /** 24 | KOPinCodeView 25 | */ 26 | @interface KOPinCodeView : UIView 27 | /** 28 | KOPinCodeViewDelegate 29 | */ 30 | @property (nonatomic, weak) IBOutlet id delegate; 31 | //Customized view settings 32 | //------------------------------------------------------| 33 | //---UIView---------------------------------------------| 34 | //------------------------------------------------------| 35 | // 36 | @property (nonatomic) FormView formPinView; 37 | //Thickness view line 38 | @property (nonatomic) float lineDeep; 39 | //Color view line 40 | @property (nonatomic) UIColor *lineColor; 41 | //Background color view in select state 42 | @property (nonatomic) UIColor *selectColor; 43 | //if pin codes did not matched, background view will highlight 44 | @property (nonatomic) UIColor *notMatchColor; 45 | //------------------------------------------------------| 46 | //---UITextField----------------------------------------| 47 | //------------------------------------------------------| 48 | //Text color UITextField 49 | @property (nonatomic) UIColor *symbolColor; 50 | //Font UITextField 51 | @property (nonatomic) UIFont *symbolFont; 52 | //------------------------------------------------------| 53 | //---Label----------------------------------------------| 54 | //------------------------------------------------------| 55 | //UILabel show only initPinViewWithConfirmPIN: 56 | //Text color Label 57 | @property (nonatomic) UIColor *titleColor; 58 | //Font Label 59 | @property (nonatomic) UIFont *titleFont; 60 | //Text Label - Default: "enter Pin code" 61 | @property (nonatomic) NSString *enterPinString; 62 | //Text Label - Default: "Confirm Pin code" 63 | @property (nonatomic) NSString *confirmPinString; 64 | //------------------------------------------------------| 65 | //---Other Setting--------------------------------------| 66 | //------------------------------------------------------| 67 | //Create Confirm Pin Code 68 | @property (nonatomic) BOOL confirm; 69 | //Secure Text - Default: YES 70 | @property (nonatomic) BOOL secure; 71 | //Keyboard Type 72 | @property (nonatomic) UIKeyboardType typeKeyboard; 73 | //------------------------------------------------------| 74 | //---Methods--------------------------------------------| 75 | //------------------------------------------------------| 76 | /** 77 | init PinCodeView with cout symbol 78 | @param count int 79 | */ 80 | -(void)initPinWithCountView:(int)count; 81 | /** 82 | init PinCodeView with confirm 83 | 84 | @param confirm BOOL value 85 | @param count int 86 | @param size CGSize 87 | @param form FormView type view 88 | */ 89 | -(void)initPinViewWithConfirmPIN:(BOOL)confirm 90 | countSymbol:(int)count 91 | sizeSimbol:(CGSize)size 92 | formView:(FormView)form; 93 | 94 | /** 95 | Become first cell 96 | */ 97 | -(void)becomeFirstCell; 98 | 99 | @end 100 | -------------------------------------------------------------------------------- /Example/KOPinCodeView/Pods/KOPinCodeView/Source/Classes/KOPinCodeView.m: -------------------------------------------------------------------------------- 1 | // 2 | // KOPinCodeView.m 3 | // KOPinCodeView 4 | // 5 | // Created by Oleksandr Khymych on 01.07.16. 6 | // Copyright © 2016 Oleksandr Khymych. All rights reserved. 7 | // 8 | 9 | #import "KOPinCodeView.h" 10 | 11 | @interface KOPinCodeView(){ 12 | //--------------------------------| 13 | // - Style property 14 | //--------------------------------| 15 | FormView formView; 16 | float borderWidth; 17 | UIColor* borderColor; 18 | UIColor* textColor; 19 | UIColor* backgroundSelectColor; 20 | UIColor* errorColor; 21 | UIFont* textFont; 22 | 23 | UIKeyboardType keyboardType; 24 | //--------------------------------| 25 | // - Text titles 26 | //--------------------------------| 27 | NSString* enterPinText; 28 | NSString* confirmPinText; 29 | //--------------------------------| 30 | // - Style titles 31 | //--------------------------------| 32 | UIColor *labelColor; 33 | UIFont *labelFont; 34 | 35 | float labelHeight; 36 | //--------------------------------| 37 | // - 38 | //--------------------------------| 39 | UIView *selectView; 40 | UIView *deselectView; 41 | 42 | int selectIndex; 43 | BOOL confirmPin; 44 | BOOL secureText; 45 | 46 | int pinCount; 47 | //--------------------------------| 48 | // - 49 | //--------------------------------| 50 | NSMutableArray *textFieldArray; 51 | } 52 | 53 | @end 54 | 55 | typedef void (^KOPinCodeViewCallback)(void); 56 | 57 | @implementation KOPinCodeView{ 58 | KOPinCodeViewCallback callback; 59 | } 60 | #pragma mark - Setters 61 | /** 62 | Set form Cell 63 | 64 | @param formPinView FormView 65 | */ 66 | -(void)setFormPinView:(FormView)formPinView{ 67 | formView = formPinView; 68 | } 69 | /** 70 | Set deep line 71 | 72 | @param lineDeep float 73 | */ 74 | -(void)setLineDeep:(float)lineDeep{ 75 | borderWidth = lineDeep; 76 | } 77 | 78 | -(void)setLineColor:(UIColor *)lineColor{ 79 | borderColor = lineColor; 80 | } 81 | 82 | -(void)setSelectColor:(UIColor *)selectColor{ 83 | backgroundSelectColor = selectColor; 84 | } 85 | 86 | -(void)setSymbolColor:(UIColor *)symbolColor{ 87 | textColor = symbolColor; 88 | } 89 | 90 | -(void)setNotMatchColor:(UIColor *)notMatchColor{ 91 | errorColor = notMatchColor; 92 | } 93 | 94 | -(void)setSymbolFont:(UIFont *)symbolFont{ 95 | textFont = symbolFont; 96 | } 97 | 98 | -(void)setTitleColor:(UIColor *)titleColor{ 99 | labelColor = titleColor; 100 | } 101 | 102 | -(void)setTitleFont:(UIFont *)titleFont{ 103 | labelFont = titleFont; 104 | } 105 | 106 | -(void)setEnterPinString:(NSString *)enterPinString{ 107 | enterPinText = enterPinString; 108 | } 109 | 110 | -(void)setConfirmPinString:(NSString *)confirmPinString{ 111 | confirmPinText = confirmPinString; 112 | } 113 | 114 | -(void)setConfirm:(BOOL)confirm{ 115 | confirmPin = confirm; 116 | } 117 | 118 | -(void)setSecure:(BOOL)secure{ 119 | secureText = secure; 120 | } 121 | 122 | -(void)setTypeKeyboard:(UIKeyboardType)typeKeyboard{ 123 | keyboardType = typeKeyboard; 124 | } 125 | 126 | #pragma mark - init 127 | 128 | - (instancetype)initWithFrame:(CGRect)frame 129 | { 130 | self = [super initWithFrame:frame]; 131 | if (self) { 132 | [self loadDefaultSettings]; 133 | } 134 | return self; 135 | } 136 | 137 | - (instancetype)initWithCoder:(NSCoder *)coder 138 | { 139 | self = [super initWithCoder:coder]; 140 | if (self) { 141 | [self loadDefaultSettings]; 142 | } 143 | return self; 144 | } 145 | 146 | #pragma mark - Load Default Settings 147 | 148 | -(void)loadDefaultSettings{ 149 | //------------------| 150 | //---UIView---------| 151 | //------------------| 152 | formView = kCircle; 153 | //Border View 154 | borderWidth = 1.0; 155 | //Color Border View 156 | borderColor = [UIColor blackColor]; 157 | //Color BackGround View in state Selection 158 | backgroundSelectColor = [[UIColor blackColor] colorWithAlphaComponent:0.5]; 159 | //Background View Color in error state 160 | errorColor = [UIColor redColor]; 161 | //------------------| 162 | //---UITextField----| 163 | //------------------| 164 | //Color UITextField 165 | textColor = [UIColor blackColor]; 166 | //Font UITextField 167 | textFont = [UIFont systemFontOfSize:14]; 168 | //------------------| 169 | //---Label----------| 170 | //------------------| 171 | //Label font 172 | labelFont = [UIFont systemFontOfSize:14]; 173 | //Label Color 174 | labelColor = [UIColor blackColor]; 175 | //Label Text 176 | enterPinText = NSLocalizedString(@"enter Pin code", @""); 177 | confirmPinText = NSLocalizedString(@"Confirm Pin code", @""); 178 | //------------------| 179 | //---Other Setting--| 180 | //------------------| 181 | //Create Confirm Pin Code 182 | confirmPin = NO; 183 | //secure Text 184 | secureText = YES; 185 | //Keyboard Type 186 | keyboardType = UIKeyboardTypeNumberPad; 187 | } 188 | #pragma mark - init Views and Text cell 189 | /** 190 | init Pin code view for IBOutlet 191 | 192 | @param count int 193 | */ 194 | -(void)initPinWithCountView:(int)count{ 195 | [self layoutIfNeeded]; 196 | float width = (self.bounds.size.width/1.138)/count; 197 | if (width>self.bounds.size.height) { 198 | width = self.bounds.size.height; 199 | } 200 | textFont = [UIFont systemFontOfSize:width/2]; 201 | 202 | [self initPinViewWithConfirmPIN:confirmPin 203 | countSymbol:count 204 | sizeSimbol:CGSizeMake(width, width) 205 | formView:formView]; 206 | } 207 | /** 208 | init Pin code view with confirm 209 | 210 | @param confirm BOOL 211 | @param count int 212 | @param size CGSize 213 | @param form FormView 214 | */ 215 | -(void)initPinViewWithConfirmPIN:(BOOL)confirm 216 | countSymbol:(int)count 217 | sizeSimbol:(CGSize)size 218 | formView:(FormView)form{ 219 | //Remove view 220 | [self removeView]; 221 | //Update property 222 | pinCount = count; 223 | confirmPin = confirm; 224 | labelHeight = size.height; 225 | //Space between cells 226 | float spaceBetweenCells = size.width/6; 227 | //full width 228 | float fullWidth = (size.width*count)+(spaceBetweenCells*(count-1)); 229 | //full Height 230 | float fullHeight = confirm ? (size.height+labelHeight)*2 : size.height; 231 | //count cell 232 | count = confirm ? count*2 : count; 233 | //init textFieldArray 234 | textFieldArray = [NSMutableArray array]; 235 | int b = 0; 236 | for (int i = 0; i< count; i++) { 237 | float x = 0.0; 238 | float y = (self.frame.size.height - fullHeight)/2; 239 | if (confirm) { 240 | if (i>count/2) b++; 241 | if (i 1) { 502 | textField.text = string; 503 | return NO; 504 | }else{ 505 | textField.text = string; 506 | } 507 | if ([textField isEqual:[textFieldArray firstObject]]) { 508 | if ([textField.text isEqualToString:@""]) { 509 | [[textFieldArray firstObject] becomeFirstResponder]; 510 | }else{ 511 | [[textFieldArray objectAtIndex:1] becomeFirstResponder]; 512 | } 513 | } 514 | if ([textField isEqual:[textFieldArray objectAtIndex:selectIndex]]) { 515 | if ([textField.text isEqualToString:@""]) { 516 | if (selectIndex != 0){ 517 | [[textFieldArray objectAtIndex:selectIndex-1] becomeFirstResponder]; 518 | } 519 | }else{ 520 | if (selectIndex < textFieldArray.count-1) { 521 | [[textFieldArray objectAtIndex:selectIndex+1] becomeFirstResponder]; 522 | } 523 | if ([textField isEqual:[textFieldArray lastObject]]) { 524 | [self actions]; 525 | } 526 | } 527 | } 528 | return NO; 529 | } 530 | #pragma mark - KOPINCodeViewDelegate 531 | /** 532 | Call back 533 | 534 | @param completion (^KOPinCodeViewCallback)(void) 535 | */ 536 | - (void)complet:(KOPinCodeViewCallback)completion { 537 | callback = completion; 538 | if(callback){ 539 | callback(); 540 | } 541 | } 542 | /** 543 | KOPINCodeViewDelegate 544 | Complet pin with array and String 545 | 546 | @param array NSArray 547 | @param string NSString 548 | */ 549 | - (void)completPin:(NSArray*)array andString:(NSString*)string { 550 | [self complet:^{ 551 | if([self.delegate respondsToSelector:@selector(pinDidEnterAllSymbol:string:)]){ 552 | [self.delegate pinDidEnterAllSymbol:array string:string]; 553 | } 554 | }]; 555 | } 556 | @end 557 | -------------------------------------------------------------------------------- /Example/KOPinCodeView/Pods/Manifest.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - KOPinCodeView (0.1.1) 3 | 4 | DEPENDENCIES: 5 | - KOPinCodeView 6 | 7 | SPEC CHECKSUMS: 8 | KOPinCodeView: 33cd908c5f7d27170e5107ef9cc1a2d12a821168 9 | 10 | PODFILE CHECKSUM: 8e692aac3a99c0a971bd48b0af70153bdd3159d6 11 | 12 | COCOAPODS: 1.4.0.beta.2 13 | -------------------------------------------------------------------------------- /Example/KOPinCodeView/Pods/Pods.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 48; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 0A7933801BC510CF06FF6E23F5567BFE /* KOPinCodeView.h in Headers */ = {isa = PBXBuildFile; fileRef = 873F4F925B89AEAF7D9F26CA8DF18F0F /* KOPinCodeView.h */; settings = {ATTRIBUTES = (Public, ); }; }; 11 | 1E69052432D3F295D92E9AE292DB9C55 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D88AAE1F92055A60CC2FC970D7D34634 /* Foundation.framework */; }; 12 | 1FAF3DBC0F68AB4359EFB08ABAA1041E /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B63C6A64CF66340668996F78DA6BB482 /* UIKit.framework */; }; 13 | 22ABD5BF9FEE6E9F7672E65FE699220A /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D88AAE1F92055A60CC2FC970D7D34634 /* Foundation.framework */; }; 14 | 331CD44A7D40C26848C838C40DB4B59A /* Pods-KOPinCodeViewTests-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 266E0B5DAACE00CF929A144C14A2DAA8 /* Pods-KOPinCodeViewTests-dummy.m */; }; 15 | 97E5647547A0D9A89A67E2BC7D533BED /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D88AAE1F92055A60CC2FC970D7D34634 /* Foundation.framework */; }; 16 | AB0D3CEE217CACCF2FEFC493E5744621 /* KOPinCodeView.m in Sources */ = {isa = PBXBuildFile; fileRef = 0CD6B9697A93520D651104985CAF6705 /* KOPinCodeView.m */; }; 17 | ACAFE85EE94B0B7813C8EB8A48C93183 /* KOPinCodeView-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 06CC3312667E77F50B0D1FB19A9886F2 /* KOPinCodeView-dummy.m */; }; 18 | D98DF5A731300E2ABEB68B327C41D61E /* Pods-KOPinCodeView-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 14A9F6A1256826067FDAC8E9593DA3F6 /* Pods-KOPinCodeView-dummy.m */; }; 19 | /* End PBXBuildFile section */ 20 | 21 | /* Begin PBXContainerItemProxy section */ 22 | 9ABAF3EDE3B50AF23768B0784B5EFF08 /* PBXContainerItemProxy */ = { 23 | isa = PBXContainerItemProxy; 24 | containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; 25 | proxyType = 1; 26 | remoteGlobalIDString = D74FB10A13A15EE5E9A03B38EC8BBD97; 27 | remoteInfo = KOPinCodeView; 28 | }; 29 | EE042655339CAE67811D095AA1ADEAB6 /* PBXContainerItemProxy */ = { 30 | isa = PBXContainerItemProxy; 31 | containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; 32 | proxyType = 1; 33 | remoteGlobalIDString = D74FB10A13A15EE5E9A03B38EC8BBD97; 34 | remoteInfo = KOPinCodeView; 35 | }; 36 | /* End PBXContainerItemProxy section */ 37 | 38 | /* Begin PBXFileReference section */ 39 | 06CC3312667E77F50B0D1FB19A9886F2 /* KOPinCodeView-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "KOPinCodeView-dummy.m"; sourceTree = ""; }; 40 | 0CD6B9697A93520D651104985CAF6705 /* KOPinCodeView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KOPinCodeView.m; path = Source/Classes/KOPinCodeView.m; sourceTree = ""; }; 41 | 14A9F6A1256826067FDAC8E9593DA3F6 /* Pods-KOPinCodeView-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-KOPinCodeView-dummy.m"; sourceTree = ""; }; 42 | 266E0B5DAACE00CF929A144C14A2DAA8 /* Pods-KOPinCodeViewTests-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-KOPinCodeViewTests-dummy.m"; sourceTree = ""; }; 43 | 3F1B8E8E93DA473E378AC42062C9C74B /* libKOPinCodeView.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = libKOPinCodeView.a; path = libKOPinCodeView.a; sourceTree = BUILT_PRODUCTS_DIR; }; 44 | 426361688998743CD7B1157A06703999 /* Pods-KOPinCodeViewTests-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-KOPinCodeViewTests-acknowledgements.plist"; sourceTree = ""; }; 45 | 4E883F7410566D934BD4D5D49FEB9FEA /* Pods-KOPinCodeViewTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-KOPinCodeViewTests.debug.xcconfig"; sourceTree = ""; }; 46 | 58191F96D6DAF46A4765E8801AD68354 /* Pods-KOPinCodeViewTests-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-KOPinCodeViewTests-resources.sh"; sourceTree = ""; }; 47 | 5EC63292A27945695DD47BB0BC07BCD6 /* Pods-KOPinCodeView-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-KOPinCodeView-acknowledgements.markdown"; sourceTree = ""; }; 48 | 640E62547AA308BD42CC480B72198128 /* Pods-KOPinCodeViewTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-KOPinCodeViewTests.release.xcconfig"; sourceTree = ""; }; 49 | 807EB4CC12852817986DC350514E45C2 /* libPods-KOPinCodeView.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = "libPods-KOPinCodeView.a"; path = "libPods-KOPinCodeView.a"; sourceTree = BUILT_PRODUCTS_DIR; }; 50 | 83F42BB30798A9C3495A7BEA5C36ADC8 /* KOPinCodeView.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = KOPinCodeView.xcconfig; sourceTree = ""; }; 51 | 873F4F925B89AEAF7D9F26CA8DF18F0F /* KOPinCodeView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KOPinCodeView.h; path = Source/Classes/KOPinCodeView.h; sourceTree = ""; }; 52 | 93A4A3777CF96A4AAC1D13BA6DCCEA73 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; lastKnownFileType = text; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; 53 | 9456893FEA7CD79B2ECA44EFC1AD6407 /* Pods-KOPinCodeViewTests-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-KOPinCodeViewTests-frameworks.sh"; sourceTree = ""; }; 54 | B63C6A64CF66340668996F78DA6BB482 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS10.3.sdk/System/Library/Frameworks/UIKit.framework; sourceTree = DEVELOPER_DIR; }; 55 | C0FD20ADB9575F3BCE1C22B0E8B3DC5D /* Pods-KOPinCodeViewTests-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-KOPinCodeViewTests-acknowledgements.markdown"; sourceTree = ""; }; 56 | C2A521E95D84D76E1410A7E78165077D /* KOPinCodeView-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "KOPinCodeView-prefix.pch"; sourceTree = ""; }; 57 | D7D713B935388A9891EA2541689FAF7E /* Pods-KOPinCodeView-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-KOPinCodeView-acknowledgements.plist"; sourceTree = ""; }; 58 | D88AAE1F92055A60CC2FC970D7D34634 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS10.3.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; 59 | EBEED6D3AE9BDCD3C89B4307545B97C1 /* Pods-KOPinCodeView.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-KOPinCodeView.release.xcconfig"; sourceTree = ""; }; 60 | EE765E3F93C3C0E9B6D296982F7EBAF6 /* Pods-KOPinCodeView-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-KOPinCodeView-frameworks.sh"; sourceTree = ""; }; 61 | F30E1701A70BA49A42B0940AA8BD80BC /* Pods-KOPinCodeView.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-KOPinCodeView.debug.xcconfig"; sourceTree = ""; }; 62 | F4F6502D3CF32FC979648FA800F96B73 /* Pods-KOPinCodeView-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-KOPinCodeView-resources.sh"; sourceTree = ""; }; 63 | FCA31F70742BD729B632A3FD288CDC1D /* libPods-KOPinCodeViewTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = "libPods-KOPinCodeViewTests.a"; path = "libPods-KOPinCodeViewTests.a"; sourceTree = BUILT_PRODUCTS_DIR; }; 64 | /* End PBXFileReference section */ 65 | 66 | /* Begin PBXFrameworksBuildPhase section */ 67 | 81AD0285CDDC3904247E6BA52D6AE8CF /* Frameworks */ = { 68 | isa = PBXFrameworksBuildPhase; 69 | buildActionMask = 2147483647; 70 | files = ( 71 | 1E69052432D3F295D92E9AE292DB9C55 /* Foundation.framework in Frameworks */, 72 | 1FAF3DBC0F68AB4359EFB08ABAA1041E /* UIKit.framework in Frameworks */, 73 | ); 74 | runOnlyForDeploymentPostprocessing = 0; 75 | }; 76 | BEA3F78A084C1360CC0079D1463D1B3F /* Frameworks */ = { 77 | isa = PBXFrameworksBuildPhase; 78 | buildActionMask = 2147483647; 79 | files = ( 80 | 97E5647547A0D9A89A67E2BC7D533BED /* Foundation.framework in Frameworks */, 81 | ); 82 | runOnlyForDeploymentPostprocessing = 0; 83 | }; 84 | CAB58B33345D6F4E8C23280E62BD0730 /* Frameworks */ = { 85 | isa = PBXFrameworksBuildPhase; 86 | buildActionMask = 2147483647; 87 | files = ( 88 | 22ABD5BF9FEE6E9F7672E65FE699220A /* Foundation.framework in Frameworks */, 89 | ); 90 | runOnlyForDeploymentPostprocessing = 0; 91 | }; 92 | /* End PBXFrameworksBuildPhase section */ 93 | 94 | /* Begin PBXGroup section */ 95 | 1858B25434DB862D7BDD0520FCD09360 /* Pods-KOPinCodeViewTests */ = { 96 | isa = PBXGroup; 97 | children = ( 98 | C0FD20ADB9575F3BCE1C22B0E8B3DC5D /* Pods-KOPinCodeViewTests-acknowledgements.markdown */, 99 | 426361688998743CD7B1157A06703999 /* Pods-KOPinCodeViewTests-acknowledgements.plist */, 100 | 266E0B5DAACE00CF929A144C14A2DAA8 /* Pods-KOPinCodeViewTests-dummy.m */, 101 | 9456893FEA7CD79B2ECA44EFC1AD6407 /* Pods-KOPinCodeViewTests-frameworks.sh */, 102 | 58191F96D6DAF46A4765E8801AD68354 /* Pods-KOPinCodeViewTests-resources.sh */, 103 | 4E883F7410566D934BD4D5D49FEB9FEA /* Pods-KOPinCodeViewTests.debug.xcconfig */, 104 | 640E62547AA308BD42CC480B72198128 /* Pods-KOPinCodeViewTests.release.xcconfig */, 105 | ); 106 | name = "Pods-KOPinCodeViewTests"; 107 | path = "Target Support Files/Pods-KOPinCodeViewTests"; 108 | sourceTree = ""; 109 | }; 110 | 433CD3331B6C3787F473C941B61FC68F /* Frameworks */ = { 111 | isa = PBXGroup; 112 | children = ( 113 | 438B396F6B4147076630CAEFE34282C1 /* iOS */, 114 | ); 115 | name = Frameworks; 116 | sourceTree = ""; 117 | }; 118 | 438B396F6B4147076630CAEFE34282C1 /* iOS */ = { 119 | isa = PBXGroup; 120 | children = ( 121 | D88AAE1F92055A60CC2FC970D7D34634 /* Foundation.framework */, 122 | B63C6A64CF66340668996F78DA6BB482 /* UIKit.framework */, 123 | ); 124 | name = iOS; 125 | sourceTree = ""; 126 | }; 127 | 5F2EA30BA577E0AC695009BA88C31F65 /* Pods */ = { 128 | isa = PBXGroup; 129 | children = ( 130 | 89ACBB1B9ECBD2559E18304A7B77BF5B /* KOPinCodeView */, 131 | ); 132 | name = Pods; 133 | sourceTree = ""; 134 | }; 135 | 73FDC37F700E49A4DC4C1A2F048C2120 /* Support Files */ = { 136 | isa = PBXGroup; 137 | children = ( 138 | 83F42BB30798A9C3495A7BEA5C36ADC8 /* KOPinCodeView.xcconfig */, 139 | 06CC3312667E77F50B0D1FB19A9886F2 /* KOPinCodeView-dummy.m */, 140 | C2A521E95D84D76E1410A7E78165077D /* KOPinCodeView-prefix.pch */, 141 | ); 142 | name = "Support Files"; 143 | path = "../Target Support Files/KOPinCodeView"; 144 | sourceTree = ""; 145 | }; 146 | 7DB346D0F39D3F0E887471402A8071AB = { 147 | isa = PBXGroup; 148 | children = ( 149 | 93A4A3777CF96A4AAC1D13BA6DCCEA73 /* Podfile */, 150 | 433CD3331B6C3787F473C941B61FC68F /* Frameworks */, 151 | 5F2EA30BA577E0AC695009BA88C31F65 /* Pods */, 152 | C4A6F91828F6E7542B1D0F8D1C438BD0 /* Products */, 153 | 7EE49876BD85ADFBE5330CA4BF5D963C /* Targets Support Files */, 154 | ); 155 | sourceTree = ""; 156 | }; 157 | 7EE49876BD85ADFBE5330CA4BF5D963C /* Targets Support Files */ = { 158 | isa = PBXGroup; 159 | children = ( 160 | DFA60991AC8F6CD74191F531B7F607AD /* Pods-KOPinCodeView */, 161 | 1858B25434DB862D7BDD0520FCD09360 /* Pods-KOPinCodeViewTests */, 162 | ); 163 | name = "Targets Support Files"; 164 | sourceTree = ""; 165 | }; 166 | 89ACBB1B9ECBD2559E18304A7B77BF5B /* KOPinCodeView */ = { 167 | isa = PBXGroup; 168 | children = ( 169 | 873F4F925B89AEAF7D9F26CA8DF18F0F /* KOPinCodeView.h */, 170 | 0CD6B9697A93520D651104985CAF6705 /* KOPinCodeView.m */, 171 | 73FDC37F700E49A4DC4C1A2F048C2120 /* Support Files */, 172 | ); 173 | name = KOPinCodeView; 174 | path = KOPinCodeView; 175 | sourceTree = ""; 176 | }; 177 | C4A6F91828F6E7542B1D0F8D1C438BD0 /* Products */ = { 178 | isa = PBXGroup; 179 | children = ( 180 | 3F1B8E8E93DA473E378AC42062C9C74B /* libKOPinCodeView.a */, 181 | 807EB4CC12852817986DC350514E45C2 /* libPods-KOPinCodeView.a */, 182 | FCA31F70742BD729B632A3FD288CDC1D /* libPods-KOPinCodeViewTests.a */, 183 | ); 184 | name = Products; 185 | sourceTree = ""; 186 | }; 187 | DFA60991AC8F6CD74191F531B7F607AD /* Pods-KOPinCodeView */ = { 188 | isa = PBXGroup; 189 | children = ( 190 | 5EC63292A27945695DD47BB0BC07BCD6 /* Pods-KOPinCodeView-acknowledgements.markdown */, 191 | D7D713B935388A9891EA2541689FAF7E /* Pods-KOPinCodeView-acknowledgements.plist */, 192 | 14A9F6A1256826067FDAC8E9593DA3F6 /* Pods-KOPinCodeView-dummy.m */, 193 | EE765E3F93C3C0E9B6D296982F7EBAF6 /* Pods-KOPinCodeView-frameworks.sh */, 194 | F4F6502D3CF32FC979648FA800F96B73 /* Pods-KOPinCodeView-resources.sh */, 195 | F30E1701A70BA49A42B0940AA8BD80BC /* Pods-KOPinCodeView.debug.xcconfig */, 196 | EBEED6D3AE9BDCD3C89B4307545B97C1 /* Pods-KOPinCodeView.release.xcconfig */, 197 | ); 198 | name = "Pods-KOPinCodeView"; 199 | path = "Target Support Files/Pods-KOPinCodeView"; 200 | sourceTree = ""; 201 | }; 202 | /* End PBXGroup section */ 203 | 204 | /* Begin PBXHeadersBuildPhase section */ 205 | D7BB8A5E5811015B6CE6F61FBD027E0D /* Headers */ = { 206 | isa = PBXHeadersBuildPhase; 207 | buildActionMask = 2147483647; 208 | files = ( 209 | 0A7933801BC510CF06FF6E23F5567BFE /* KOPinCodeView.h in Headers */, 210 | ); 211 | runOnlyForDeploymentPostprocessing = 0; 212 | }; 213 | /* End PBXHeadersBuildPhase section */ 214 | 215 | /* Begin PBXNativeTarget section */ 216 | 59EC9B383F70EE74F68E22EB06FA1C3F /* Pods-KOPinCodeView */ = { 217 | isa = PBXNativeTarget; 218 | buildConfigurationList = B9AB16F0A41BE947F0BE1DABF604A6DD /* Build configuration list for PBXNativeTarget "Pods-KOPinCodeView" */; 219 | buildPhases = ( 220 | 66100F398369D8A85FBC205B9886DB11 /* Sources */, 221 | BEA3F78A084C1360CC0079D1463D1B3F /* Frameworks */, 222 | ); 223 | buildRules = ( 224 | ); 225 | dependencies = ( 226 | 2D974345F9422DF548CC306499A39A4F /* PBXTargetDependency */, 227 | ); 228 | name = "Pods-KOPinCodeView"; 229 | productName = "Pods-KOPinCodeView"; 230 | productReference = 807EB4CC12852817986DC350514E45C2 /* libPods-KOPinCodeView.a */; 231 | productType = "com.apple.product-type.library.static"; 232 | }; 233 | D74FB10A13A15EE5E9A03B38EC8BBD97 /* KOPinCodeView */ = { 234 | isa = PBXNativeTarget; 235 | buildConfigurationList = F12CBF05ADFCE48F01CBDD4283FE4B45 /* Build configuration list for PBXNativeTarget "KOPinCodeView" */; 236 | buildPhases = ( 237 | 31C3E9A67DC9E4B5FD575B94FA1244ED /* Sources */, 238 | 81AD0285CDDC3904247E6BA52D6AE8CF /* Frameworks */, 239 | D7BB8A5E5811015B6CE6F61FBD027E0D /* Headers */, 240 | ); 241 | buildRules = ( 242 | ); 243 | dependencies = ( 244 | ); 245 | name = KOPinCodeView; 246 | productName = KOPinCodeView; 247 | productReference = 3F1B8E8E93DA473E378AC42062C9C74B /* libKOPinCodeView.a */; 248 | productType = "com.apple.product-type.library.static"; 249 | }; 250 | F8F42E2D0A042884CFAF16BB71247068 /* Pods-KOPinCodeViewTests */ = { 251 | isa = PBXNativeTarget; 252 | buildConfigurationList = 77D037095D67BA1CF007CB2AC2CB6DF5 /* Build configuration list for PBXNativeTarget "Pods-KOPinCodeViewTests" */; 253 | buildPhases = ( 254 | 10F79E2944C7F9D284A265DC0A3EC3A5 /* Sources */, 255 | CAB58B33345D6F4E8C23280E62BD0730 /* Frameworks */, 256 | ); 257 | buildRules = ( 258 | ); 259 | dependencies = ( 260 | D65502E22F30C9B8CE6896D93AFD05B3 /* PBXTargetDependency */, 261 | ); 262 | name = "Pods-KOPinCodeViewTests"; 263 | productName = "Pods-KOPinCodeViewTests"; 264 | productReference = FCA31F70742BD729B632A3FD288CDC1D /* libPods-KOPinCodeViewTests.a */; 265 | productType = "com.apple.product-type.library.static"; 266 | }; 267 | /* End PBXNativeTarget section */ 268 | 269 | /* Begin PBXProject section */ 270 | D41D8CD98F00B204E9800998ECF8427E /* Project object */ = { 271 | isa = PBXProject; 272 | attributes = { 273 | LastSwiftUpdateCheck = 0830; 274 | LastUpgradeCheck = 0700; 275 | }; 276 | buildConfigurationList = 2D8E8EC45A3A1A1D94AE762CB5028504 /* Build configuration list for PBXProject "Pods" */; 277 | compatibilityVersion = "Xcode 3.2"; 278 | developmentRegion = English; 279 | hasScannedForEncodings = 0; 280 | knownRegions = ( 281 | en, 282 | ); 283 | mainGroup = 7DB346D0F39D3F0E887471402A8071AB; 284 | productRefGroup = C4A6F91828F6E7542B1D0F8D1C438BD0 /* Products */; 285 | projectDirPath = ""; 286 | projectRoot = ""; 287 | targets = ( 288 | D74FB10A13A15EE5E9A03B38EC8BBD97 /* KOPinCodeView */, 289 | 59EC9B383F70EE74F68E22EB06FA1C3F /* Pods-KOPinCodeView */, 290 | F8F42E2D0A042884CFAF16BB71247068 /* Pods-KOPinCodeViewTests */, 291 | ); 292 | }; 293 | /* End PBXProject section */ 294 | 295 | /* Begin PBXSourcesBuildPhase section */ 296 | 10F79E2944C7F9D284A265DC0A3EC3A5 /* Sources */ = { 297 | isa = PBXSourcesBuildPhase; 298 | buildActionMask = 2147483647; 299 | files = ( 300 | 331CD44A7D40C26848C838C40DB4B59A /* Pods-KOPinCodeViewTests-dummy.m in Sources */, 301 | ); 302 | runOnlyForDeploymentPostprocessing = 0; 303 | }; 304 | 31C3E9A67DC9E4B5FD575B94FA1244ED /* Sources */ = { 305 | isa = PBXSourcesBuildPhase; 306 | buildActionMask = 2147483647; 307 | files = ( 308 | ACAFE85EE94B0B7813C8EB8A48C93183 /* KOPinCodeView-dummy.m in Sources */, 309 | AB0D3CEE217CACCF2FEFC493E5744621 /* KOPinCodeView.m in Sources */, 310 | ); 311 | runOnlyForDeploymentPostprocessing = 0; 312 | }; 313 | 66100F398369D8A85FBC205B9886DB11 /* Sources */ = { 314 | isa = PBXSourcesBuildPhase; 315 | buildActionMask = 2147483647; 316 | files = ( 317 | D98DF5A731300E2ABEB68B327C41D61E /* Pods-KOPinCodeView-dummy.m in Sources */, 318 | ); 319 | runOnlyForDeploymentPostprocessing = 0; 320 | }; 321 | /* End PBXSourcesBuildPhase section */ 322 | 323 | /* Begin PBXTargetDependency section */ 324 | 2D974345F9422DF548CC306499A39A4F /* PBXTargetDependency */ = { 325 | isa = PBXTargetDependency; 326 | name = KOPinCodeView; 327 | target = D74FB10A13A15EE5E9A03B38EC8BBD97 /* KOPinCodeView */; 328 | targetProxy = 9ABAF3EDE3B50AF23768B0784B5EFF08 /* PBXContainerItemProxy */; 329 | }; 330 | D65502E22F30C9B8CE6896D93AFD05B3 /* PBXTargetDependency */ = { 331 | isa = PBXTargetDependency; 332 | name = KOPinCodeView; 333 | target = D74FB10A13A15EE5E9A03B38EC8BBD97 /* KOPinCodeView */; 334 | targetProxy = EE042655339CAE67811D095AA1ADEAB6 /* PBXContainerItemProxy */; 335 | }; 336 | /* End PBXTargetDependency section */ 337 | 338 | /* Begin XCBuildConfiguration section */ 339 | 0027DC73E51EA41AB0654BC643BD5E0F /* Release */ = { 340 | isa = XCBuildConfiguration; 341 | baseConfigurationReference = EBEED6D3AE9BDCD3C89B4307545B97C1 /* Pods-KOPinCodeView.release.xcconfig */; 342 | buildSettings = { 343 | CODE_SIGN_IDENTITY = "iPhone Developer"; 344 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; 345 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 346 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; 347 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 348 | MACH_O_TYPE = staticlib; 349 | OTHER_LDFLAGS = ""; 350 | OTHER_LIBTOOLFLAGS = ""; 351 | PODS_ROOT = "$(SRCROOT)"; 352 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; 353 | SDKROOT = iphoneos; 354 | SKIP_INSTALL = YES; 355 | TARGETED_DEVICE_FAMILY = "1,2"; 356 | VALIDATE_PRODUCT = YES; 357 | }; 358 | name = Release; 359 | }; 360 | 4AFAE5B443D4D614DE164367118DD64F /* Debug */ = { 361 | isa = XCBuildConfiguration; 362 | baseConfigurationReference = 4E883F7410566D934BD4D5D49FEB9FEA /* Pods-KOPinCodeViewTests.debug.xcconfig */; 363 | buildSettings = { 364 | CODE_SIGN_IDENTITY = "iPhone Developer"; 365 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; 366 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 367 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; 368 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 369 | MACH_O_TYPE = staticlib; 370 | OTHER_LDFLAGS = ""; 371 | OTHER_LIBTOOLFLAGS = ""; 372 | PODS_ROOT = "$(SRCROOT)"; 373 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; 374 | SDKROOT = iphoneos; 375 | SKIP_INSTALL = YES; 376 | TARGETED_DEVICE_FAMILY = "1,2"; 377 | }; 378 | name = Debug; 379 | }; 380 | 71AA54948ADC2B2CED8761276F2BDDF1 /* Debug */ = { 381 | isa = XCBuildConfiguration; 382 | baseConfigurationReference = F30E1701A70BA49A42B0940AA8BD80BC /* Pods-KOPinCodeView.debug.xcconfig */; 383 | buildSettings = { 384 | CODE_SIGN_IDENTITY = "iPhone Developer"; 385 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; 386 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 387 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; 388 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 389 | MACH_O_TYPE = staticlib; 390 | OTHER_LDFLAGS = ""; 391 | OTHER_LIBTOOLFLAGS = ""; 392 | PODS_ROOT = "$(SRCROOT)"; 393 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; 394 | SDKROOT = iphoneos; 395 | SKIP_INSTALL = YES; 396 | TARGETED_DEVICE_FAMILY = "1,2"; 397 | }; 398 | name = Debug; 399 | }; 400 | 91857FA9EFDDF7E3A55F1EFF5D3AF92E /* Release */ = { 401 | isa = XCBuildConfiguration; 402 | baseConfigurationReference = 83F42BB30798A9C3495A7BEA5C36ADC8 /* KOPinCodeView.xcconfig */; 403 | buildSettings = { 404 | CODE_SIGN_IDENTITY = "iPhone Developer"; 405 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; 406 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 407 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; 408 | GCC_PREFIX_HEADER = "Target Support Files/KOPinCodeView/KOPinCodeView-prefix.pch"; 409 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 410 | OTHER_LDFLAGS = ""; 411 | OTHER_LIBTOOLFLAGS = ""; 412 | PRIVATE_HEADERS_FOLDER_PATH = ""; 413 | PUBLIC_HEADERS_FOLDER_PATH = ""; 414 | SDKROOT = iphoneos; 415 | SKIP_INSTALL = YES; 416 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; 417 | TARGETED_DEVICE_FAMILY = "1,2"; 418 | VALIDATE_PRODUCT = YES; 419 | }; 420 | name = Release; 421 | }; 422 | A8098D58A1FD03D5E6B6BBD9DA0663EC /* Release */ = { 423 | isa = XCBuildConfiguration; 424 | baseConfigurationReference = 640E62547AA308BD42CC480B72198128 /* Pods-KOPinCodeViewTests.release.xcconfig */; 425 | buildSettings = { 426 | CODE_SIGN_IDENTITY = "iPhone Developer"; 427 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; 428 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 429 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; 430 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 431 | MACH_O_TYPE = staticlib; 432 | OTHER_LDFLAGS = ""; 433 | OTHER_LIBTOOLFLAGS = ""; 434 | PODS_ROOT = "$(SRCROOT)"; 435 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; 436 | SDKROOT = iphoneos; 437 | SKIP_INSTALL = YES; 438 | TARGETED_DEVICE_FAMILY = "1,2"; 439 | VALIDATE_PRODUCT = YES; 440 | }; 441 | name = Release; 442 | }; 443 | B254DAA6CF0CE39F4A3D11B90A7E059A /* Release */ = { 444 | isa = XCBuildConfiguration; 445 | buildSettings = { 446 | ALWAYS_SEARCH_USER_PATHS = NO; 447 | CLANG_ANALYZER_NONNULL = YES; 448 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 449 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 450 | CLANG_CXX_LIBRARY = "libc++"; 451 | CLANG_ENABLE_MODULES = YES; 452 | CLANG_ENABLE_OBJC_ARC = YES; 453 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 454 | CLANG_WARN_BOOL_CONVERSION = YES; 455 | CLANG_WARN_COMMA = YES; 456 | CLANG_WARN_CONSTANT_CONVERSION = YES; 457 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 458 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 459 | CLANG_WARN_EMPTY_BODY = YES; 460 | CLANG_WARN_ENUM_CONVERSION = YES; 461 | CLANG_WARN_INFINITE_RECURSION = YES; 462 | CLANG_WARN_INT_CONVERSION = YES; 463 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 464 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 465 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 466 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 467 | CLANG_WARN_STRICT_PROTOTYPES = YES; 468 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 469 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 470 | CLANG_WARN_UNREACHABLE_CODE = YES; 471 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 472 | CODE_SIGNING_REQUIRED = NO; 473 | COPY_PHASE_STRIP = NO; 474 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 475 | ENABLE_NS_ASSERTIONS = NO; 476 | ENABLE_STRICT_OBJC_MSGSEND = YES; 477 | GCC_C_LANGUAGE_STANDARD = gnu11; 478 | GCC_NO_COMMON_BLOCKS = YES; 479 | GCC_PREPROCESSOR_DEFINITIONS = ( 480 | "POD_CONFIGURATION_RELEASE=1", 481 | "$(inherited)", 482 | ); 483 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 484 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 485 | GCC_WARN_UNDECLARED_SELECTOR = YES; 486 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 487 | GCC_WARN_UNUSED_FUNCTION = YES; 488 | GCC_WARN_UNUSED_VARIABLE = YES; 489 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 490 | MTL_ENABLE_DEBUG_INFO = NO; 491 | PRODUCT_NAME = "$(TARGET_NAME)"; 492 | PROVISIONING_PROFILE_SPECIFIER = NO_SIGNING/; 493 | STRIP_INSTALLED_PRODUCT = NO; 494 | SYMROOT = "${SRCROOT}/../build"; 495 | }; 496 | name = Release; 497 | }; 498 | D3E793EE9A53F41CFDD5248C4B84F205 /* Debug */ = { 499 | isa = XCBuildConfiguration; 500 | baseConfigurationReference = 83F42BB30798A9C3495A7BEA5C36ADC8 /* KOPinCodeView.xcconfig */; 501 | buildSettings = { 502 | CODE_SIGN_IDENTITY = "iPhone Developer"; 503 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; 504 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 505 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; 506 | GCC_PREFIX_HEADER = "Target Support Files/KOPinCodeView/KOPinCodeView-prefix.pch"; 507 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 508 | OTHER_LDFLAGS = ""; 509 | OTHER_LIBTOOLFLAGS = ""; 510 | PRIVATE_HEADERS_FOLDER_PATH = ""; 511 | PUBLIC_HEADERS_FOLDER_PATH = ""; 512 | SDKROOT = iphoneos; 513 | SKIP_INSTALL = YES; 514 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; 515 | TARGETED_DEVICE_FAMILY = "1,2"; 516 | }; 517 | name = Debug; 518 | }; 519 | E4B68EE12B21C47CB798D9B1ECA6D7A7 /* Debug */ = { 520 | isa = XCBuildConfiguration; 521 | buildSettings = { 522 | ALWAYS_SEARCH_USER_PATHS = NO; 523 | CLANG_ANALYZER_NONNULL = YES; 524 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 525 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 526 | CLANG_CXX_LIBRARY = "libc++"; 527 | CLANG_ENABLE_MODULES = YES; 528 | CLANG_ENABLE_OBJC_ARC = YES; 529 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 530 | CLANG_WARN_BOOL_CONVERSION = YES; 531 | CLANG_WARN_COMMA = YES; 532 | CLANG_WARN_CONSTANT_CONVERSION = YES; 533 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 534 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 535 | CLANG_WARN_EMPTY_BODY = YES; 536 | CLANG_WARN_ENUM_CONVERSION = YES; 537 | CLANG_WARN_INFINITE_RECURSION = YES; 538 | CLANG_WARN_INT_CONVERSION = YES; 539 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 540 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 541 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 542 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 543 | CLANG_WARN_STRICT_PROTOTYPES = YES; 544 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 545 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 546 | CLANG_WARN_UNREACHABLE_CODE = YES; 547 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 548 | CODE_SIGNING_REQUIRED = NO; 549 | COPY_PHASE_STRIP = NO; 550 | DEBUG_INFORMATION_FORMAT = dwarf; 551 | ENABLE_STRICT_OBJC_MSGSEND = YES; 552 | ENABLE_TESTABILITY = YES; 553 | GCC_C_LANGUAGE_STANDARD = gnu11; 554 | GCC_DYNAMIC_NO_PIC = NO; 555 | GCC_NO_COMMON_BLOCKS = YES; 556 | GCC_OPTIMIZATION_LEVEL = 0; 557 | GCC_PREPROCESSOR_DEFINITIONS = ( 558 | "POD_CONFIGURATION_DEBUG=1", 559 | "DEBUG=1", 560 | "$(inherited)", 561 | ); 562 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 563 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 564 | GCC_WARN_UNDECLARED_SELECTOR = YES; 565 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 566 | GCC_WARN_UNUSED_FUNCTION = YES; 567 | GCC_WARN_UNUSED_VARIABLE = YES; 568 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 569 | MTL_ENABLE_DEBUG_INFO = YES; 570 | ONLY_ACTIVE_ARCH = YES; 571 | PRODUCT_NAME = "$(TARGET_NAME)"; 572 | PROVISIONING_PROFILE_SPECIFIER = NO_SIGNING/; 573 | STRIP_INSTALLED_PRODUCT = NO; 574 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; 575 | SYMROOT = "${SRCROOT}/../build"; 576 | }; 577 | name = Debug; 578 | }; 579 | /* End XCBuildConfiguration section */ 580 | 581 | /* Begin XCConfigurationList section */ 582 | 2D8E8EC45A3A1A1D94AE762CB5028504 /* Build configuration list for PBXProject "Pods" */ = { 583 | isa = XCConfigurationList; 584 | buildConfigurations = ( 585 | E4B68EE12B21C47CB798D9B1ECA6D7A7 /* Debug */, 586 | B254DAA6CF0CE39F4A3D11B90A7E059A /* Release */, 587 | ); 588 | defaultConfigurationIsVisible = 0; 589 | defaultConfigurationName = Release; 590 | }; 591 | 77D037095D67BA1CF007CB2AC2CB6DF5 /* Build configuration list for PBXNativeTarget "Pods-KOPinCodeViewTests" */ = { 592 | isa = XCConfigurationList; 593 | buildConfigurations = ( 594 | 4AFAE5B443D4D614DE164367118DD64F /* Debug */, 595 | A8098D58A1FD03D5E6B6BBD9DA0663EC /* Release */, 596 | ); 597 | defaultConfigurationIsVisible = 0; 598 | defaultConfigurationName = Release; 599 | }; 600 | B9AB16F0A41BE947F0BE1DABF604A6DD /* Build configuration list for PBXNativeTarget "Pods-KOPinCodeView" */ = { 601 | isa = XCConfigurationList; 602 | buildConfigurations = ( 603 | 71AA54948ADC2B2CED8761276F2BDDF1 /* Debug */, 604 | 0027DC73E51EA41AB0654BC643BD5E0F /* Release */, 605 | ); 606 | defaultConfigurationIsVisible = 0; 607 | defaultConfigurationName = Release; 608 | }; 609 | F12CBF05ADFCE48F01CBDD4283FE4B45 /* Build configuration list for PBXNativeTarget "KOPinCodeView" */ = { 610 | isa = XCConfigurationList; 611 | buildConfigurations = ( 612 | D3E793EE9A53F41CFDD5248C4B84F205 /* Debug */, 613 | 91857FA9EFDDF7E3A55F1EFF5D3AF92E /* Release */, 614 | ); 615 | defaultConfigurationIsVisible = 0; 616 | defaultConfigurationName = Release; 617 | }; 618 | /* End XCConfigurationList section */ 619 | }; 620 | rootObject = D41D8CD98F00B204E9800998ECF8427E /* Project object */; 621 | } 622 | -------------------------------------------------------------------------------- /Example/KOPinCodeView/Pods/Target Support Files/KOPinCodeView/KOPinCodeView-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_KOPinCodeView : NSObject 3 | @end 4 | @implementation PodsDummy_KOPinCodeView 5 | @end 6 | -------------------------------------------------------------------------------- /Example/KOPinCodeView/Pods/Target Support Files/KOPinCodeView/KOPinCodeView-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/KOPinCodeView/Pods/Target Support Files/KOPinCodeView/KOPinCodeView.xcconfig: -------------------------------------------------------------------------------- 1 | CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/KOPinCodeView 2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 3 | HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/KOPinCodeView" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/KOPinCodeView" 4 | OTHER_LDFLAGS = -framework "Foundation" -framework "UIKit" 5 | PODS_BUILD_DIR = ${BUILD_DIR} 6 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 7 | PODS_ROOT = ${SRCROOT} 8 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/KOPinCodeView 9 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 10 | SKIP_INSTALL = YES 11 | -------------------------------------------------------------------------------- /Example/KOPinCodeView/Pods/Target Support Files/Pods-KOPinCodeView/Pods-KOPinCodeView-acknowledgements.markdown: -------------------------------------------------------------------------------- 1 | # Acknowledgements 2 | This application makes use of the following third party libraries: 3 | 4 | ## KOPinCodeView 5 | 6 | The MIT License 7 | 8 | Copyright (c) 2009-2017 Oleksandr Khymych, Inc. http://khymych.com 9 | 10 | Permission is hereby granted, free of charge, to any person obtaining a copy 11 | of this software and associated documentation files (the "Software"), to deal 12 | in the Software without restriction, including without limitation the rights 13 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 14 | copies of the Software, and to permit persons to whom the Software is 15 | furnished to do so, subject to the following conditions: 16 | 17 | The above copyright notice and this permission notice shall be included in 18 | all copies or substantial portions of the Software. 19 | 20 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 21 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 22 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 23 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 24 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 25 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 26 | THE SOFTWARE. 27 | 28 | Generated by CocoaPods - https://cocoapods.org 29 | -------------------------------------------------------------------------------- /Example/KOPinCodeView/Pods/Target Support Files/Pods-KOPinCodeView/Pods-KOPinCodeView-acknowledgements.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PreferenceSpecifiers 6 | 7 | 8 | FooterText 9 | This application makes use of the following third party libraries: 10 | Title 11 | Acknowledgements 12 | Type 13 | PSGroupSpecifier 14 | 15 | 16 | FooterText 17 | The MIT License 18 | 19 | Copyright (c) 2009-2017 Oleksandr Khymych, Inc. http://khymych.com 20 | 21 | Permission is hereby granted, free of charge, to any person obtaining a copy 22 | of this software and associated documentation files (the "Software"), to deal 23 | in the Software without restriction, including without limitation the rights 24 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 25 | copies of the Software, and to permit persons to whom the Software is 26 | furnished to do so, subject to the following conditions: 27 | 28 | The above copyright notice and this permission notice shall be included in 29 | all copies or substantial portions of the Software. 30 | 31 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 32 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 33 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 34 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 35 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 36 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 37 | THE SOFTWARE. 38 | 39 | License 40 | MIT 41 | Title 42 | KOPinCodeView 43 | Type 44 | PSGroupSpecifier 45 | 46 | 47 | FooterText 48 | Generated by CocoaPods - https://cocoapods.org 49 | Title 50 | 51 | Type 52 | PSGroupSpecifier 53 | 54 | 55 | StringsTable 56 | Acknowledgements 57 | Title 58 | Acknowledgements 59 | 60 | 61 | -------------------------------------------------------------------------------- /Example/KOPinCodeView/Pods/Target Support Files/Pods-KOPinCodeView/Pods-KOPinCodeView-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Pods_KOPinCodeView : NSObject 3 | @end 4 | @implementation PodsDummy_Pods_KOPinCodeView 5 | @end 6 | -------------------------------------------------------------------------------- /Example/KOPinCodeView/Pods/Target Support Files/Pods-KOPinCodeView/Pods-KOPinCodeView-frameworks.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | set -e 3 | 4 | echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 5 | mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 6 | 7 | SWIFT_STDLIB_PATH="${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" 8 | 9 | # This protects against multiple targets copying the same framework dependency at the same time. The solution 10 | # was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html 11 | RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????") 12 | 13 | install_framework() 14 | { 15 | if [ -r "${BUILT_PRODUCTS_DIR}/$1" ]; then 16 | local source="${BUILT_PRODUCTS_DIR}/$1" 17 | elif [ -r "${BUILT_PRODUCTS_DIR}/$(basename "$1")" ]; then 18 | local source="${BUILT_PRODUCTS_DIR}/$(basename "$1")" 19 | elif [ -r "$1" ]; then 20 | local source="$1" 21 | fi 22 | 23 | local destination="${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 24 | 25 | if [ -L "${source}" ]; then 26 | echo "Symlinked..." 27 | source="$(readlink "${source}")" 28 | fi 29 | 30 | # Use filter instead of exclude so missing patterns don't throw errors. 31 | echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${destination}\"" 32 | rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${destination}" 33 | 34 | local basename 35 | basename="$(basename -s .framework "$1")" 36 | binary="${destination}/${basename}.framework/${basename}" 37 | if ! [ -r "$binary" ]; then 38 | binary="${destination}/${basename}" 39 | fi 40 | 41 | # Strip invalid architectures so "fat" simulator / device frameworks work on device 42 | if [[ "$(file "$binary")" == *"dynamically linked shared library"* ]]; then 43 | strip_invalid_archs "$binary" 44 | fi 45 | 46 | # Resign the code if required by the build settings to avoid unstable apps 47 | code_sign_if_enabled "${destination}/$(basename "$1")" 48 | 49 | # Embed linked Swift runtime libraries. No longer necessary as of Xcode 7. 50 | if [ "${XCODE_VERSION_MAJOR}" -lt 7 ]; then 51 | local swift_runtime_libs 52 | swift_runtime_libs=$(xcrun otool -LX "$binary" | grep --color=never @rpath/libswift | sed -E s/@rpath\\/\(.+dylib\).*/\\1/g | uniq -u && exit ${PIPESTATUS[0]}) 53 | for lib in $swift_runtime_libs; do 54 | echo "rsync -auv \"${SWIFT_STDLIB_PATH}/${lib}\" \"${destination}\"" 55 | rsync -auv "${SWIFT_STDLIB_PATH}/${lib}" "${destination}" 56 | code_sign_if_enabled "${destination}/${lib}" 57 | done 58 | fi 59 | } 60 | 61 | # Copies the dSYM of a vendored framework 62 | install_dsym() { 63 | local source="$1" 64 | if [ -r "$source" ]; then 65 | echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${DWARF_DSYM_FOLDER_PATH}\"" 66 | rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${DWARF_DSYM_FOLDER_PATH}" 67 | fi 68 | 69 | local basename 70 | basename="$(basename -s .framework.dSYM "$source")" 71 | binary="${DWARF_DSYM_FOLDER_PATH}/${basename}.framework.dSYM/Contents/Resources/DWARF/${basename}" 72 | 73 | # Strip invalid architectures so "fat" simulator / device frameworks work on device 74 | if [[ "$(file "$binary")" == *"Mach-O dSYM companion"* ]]; then 75 | strip_invalid_archs "$binary" 76 | fi 77 | } 78 | 79 | # Signs a framework with the provided identity 80 | code_sign_if_enabled() { 81 | if [ -n "${EXPANDED_CODE_SIGN_IDENTITY}" -a "${CODE_SIGNING_REQUIRED}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then 82 | # Use the current code_sign_identitiy 83 | echo "Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}" 84 | local code_sign_cmd="/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS} --preserve-metadata=identifier,entitlements '$1'" 85 | 86 | if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then 87 | code_sign_cmd="$code_sign_cmd &" 88 | fi 89 | echo "$code_sign_cmd" 90 | eval "$code_sign_cmd" 91 | fi 92 | } 93 | 94 | # Strip invalid architectures 95 | strip_invalid_archs() { 96 | binary="$1" 97 | # Get architectures for current file 98 | archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | rev)" 99 | stripped="" 100 | for arch in $archs; do 101 | if ! [[ "${ARCHS}" == *"$arch"* ]]; then 102 | # Strip non-valid architectures in-place 103 | lipo -remove "$arch" -output "$binary" "$binary" || exit 1 104 | stripped="$stripped $arch" 105 | fi 106 | done 107 | if [[ "$stripped" ]]; then 108 | echo "Stripped $binary of architectures:$stripped" 109 | fi 110 | } 111 | 112 | if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then 113 | wait 114 | fi 115 | -------------------------------------------------------------------------------- /Example/KOPinCodeView/Pods/Target Support Files/Pods-KOPinCodeView/Pods-KOPinCodeView-resources.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | set -e 3 | 4 | mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 5 | 6 | RESOURCES_TO_COPY=${PODS_ROOT}/resources-to-copy-${TARGETNAME}.txt 7 | > "$RESOURCES_TO_COPY" 8 | 9 | XCASSET_FILES=() 10 | 11 | # This protects against multiple targets copying the same framework dependency at the same time. The solution 12 | # was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html 13 | RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????") 14 | 15 | case "${TARGETED_DEVICE_FAMILY}" in 16 | 1,2) 17 | TARGET_DEVICE_ARGS="--target-device ipad --target-device iphone" 18 | ;; 19 | 1) 20 | TARGET_DEVICE_ARGS="--target-device iphone" 21 | ;; 22 | 2) 23 | TARGET_DEVICE_ARGS="--target-device ipad" 24 | ;; 25 | 3) 26 | TARGET_DEVICE_ARGS="--target-device tv" 27 | ;; 28 | 4) 29 | TARGET_DEVICE_ARGS="--target-device watch" 30 | ;; 31 | *) 32 | TARGET_DEVICE_ARGS="--target-device mac" 33 | ;; 34 | esac 35 | 36 | install_resource() 37 | { 38 | if [[ "$1" = /* ]] ; then 39 | RESOURCE_PATH="$1" 40 | else 41 | RESOURCE_PATH="${PODS_ROOT}/$1" 42 | fi 43 | if [[ ! -e "$RESOURCE_PATH" ]] ; then 44 | cat << EOM 45 | error: Resource "$RESOURCE_PATH" not found. Run 'pod install' to update the copy resources script. 46 | EOM 47 | exit 1 48 | fi 49 | case $RESOURCE_PATH in 50 | *.storyboard) 51 | echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" || true 52 | ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS} 53 | ;; 54 | *.xib) 55 | echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" || true 56 | ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS} 57 | ;; 58 | *.framework) 59 | echo "mkdir -p ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" || true 60 | mkdir -p "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 61 | echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" $RESOURCE_PATH ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" || true 62 | rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 63 | ;; 64 | *.xcdatamodel) 65 | echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH"`.mom\"" || true 66 | xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodel`.mom" 67 | ;; 68 | *.xcdatamodeld) 69 | echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd\"" || true 70 | xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd" 71 | ;; 72 | *.xcmappingmodel) 73 | echo "xcrun mapc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm\"" || true 74 | xcrun mapc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm" 75 | ;; 76 | *.xcassets) 77 | ABSOLUTE_XCASSET_FILE="$RESOURCE_PATH" 78 | XCASSET_FILES+=("$ABSOLUTE_XCASSET_FILE") 79 | ;; 80 | *) 81 | echo "$RESOURCE_PATH" || true 82 | echo "$RESOURCE_PATH" >> "$RESOURCES_TO_COPY" 83 | ;; 84 | esac 85 | } 86 | 87 | mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 88 | rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 89 | if [[ "${ACTION}" == "install" ]] && [[ "${SKIP_INSTALL}" == "NO" ]]; then 90 | mkdir -p "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 91 | rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 92 | fi 93 | rm -f "$RESOURCES_TO_COPY" 94 | 95 | if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ -n "$XCASSET_FILES" ] 96 | then 97 | # Find all other xcassets (this unfortunately includes those of path pods and other targets). 98 | OTHER_XCASSETS=$(find "$PWD" -iname "*.xcassets" -type d) 99 | while read line; do 100 | if [[ $line != "${PODS_ROOT}*" ]]; then 101 | XCASSET_FILES+=("$line") 102 | fi 103 | done <<<"$OTHER_XCASSETS" 104 | 105 | printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 106 | fi 107 | -------------------------------------------------------------------------------- /Example/KOPinCodeView/Pods/Target Support Files/Pods-KOPinCodeView/Pods-KOPinCodeView.debug.xcconfig: -------------------------------------------------------------------------------- 1 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 2 | HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/KOPinCodeView" 3 | LIBRARY_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/KOPinCodeView" 4 | OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/KOPinCodeView" 5 | OTHER_LDFLAGS = $(inherited) -ObjC -l"KOPinCodeView" -framework "Foundation" -framework "UIKit" 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/KOPinCodeView/Pods/Target Support Files/Pods-KOPinCodeView/Pods-KOPinCodeView.release.xcconfig: -------------------------------------------------------------------------------- 1 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 2 | HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/KOPinCodeView" 3 | LIBRARY_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/KOPinCodeView" 4 | OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/KOPinCodeView" 5 | OTHER_LDFLAGS = $(inherited) -ObjC -l"KOPinCodeView" -framework "Foundation" -framework "UIKit" 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/KOPinCodeView/Pods/Target Support Files/Pods-KOPinCodeViewTests/Pods-KOPinCodeViewTests-acknowledgements.markdown: -------------------------------------------------------------------------------- 1 | # Acknowledgements 2 | This application makes use of the following third party libraries: 3 | 4 | ## KOPinCodeView 5 | 6 | The MIT License 7 | 8 | Copyright (c) 2009-2017 Oleksandr Khymych, Inc. http://khymych.com 9 | 10 | Permission is hereby granted, free of charge, to any person obtaining a copy 11 | of this software and associated documentation files (the "Software"), to deal 12 | in the Software without restriction, including without limitation the rights 13 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 14 | copies of the Software, and to permit persons to whom the Software is 15 | furnished to do so, subject to the following conditions: 16 | 17 | The above copyright notice and this permission notice shall be included in 18 | all copies or substantial portions of the Software. 19 | 20 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 21 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 22 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 23 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 24 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 25 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 26 | THE SOFTWARE. 27 | 28 | Generated by CocoaPods - https://cocoapods.org 29 | -------------------------------------------------------------------------------- /Example/KOPinCodeView/Pods/Target Support Files/Pods-KOPinCodeViewTests/Pods-KOPinCodeViewTests-acknowledgements.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PreferenceSpecifiers 6 | 7 | 8 | FooterText 9 | This application makes use of the following third party libraries: 10 | Title 11 | Acknowledgements 12 | Type 13 | PSGroupSpecifier 14 | 15 | 16 | FooterText 17 | The MIT License 18 | 19 | Copyright (c) 2009-2017 Oleksandr Khymych, Inc. http://khymych.com 20 | 21 | Permission is hereby granted, free of charge, to any person obtaining a copy 22 | of this software and associated documentation files (the "Software"), to deal 23 | in the Software without restriction, including without limitation the rights 24 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 25 | copies of the Software, and to permit persons to whom the Software is 26 | furnished to do so, subject to the following conditions: 27 | 28 | The above copyright notice and this permission notice shall be included in 29 | all copies or substantial portions of the Software. 30 | 31 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 32 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 33 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 34 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 35 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 36 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 37 | THE SOFTWARE. 38 | 39 | License 40 | MIT 41 | Title 42 | KOPinCodeView 43 | Type 44 | PSGroupSpecifier 45 | 46 | 47 | FooterText 48 | Generated by CocoaPods - https://cocoapods.org 49 | Title 50 | 51 | Type 52 | PSGroupSpecifier 53 | 54 | 55 | StringsTable 56 | Acknowledgements 57 | Title 58 | Acknowledgements 59 | 60 | 61 | -------------------------------------------------------------------------------- /Example/KOPinCodeView/Pods/Target Support Files/Pods-KOPinCodeViewTests/Pods-KOPinCodeViewTests-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Pods_KOPinCodeViewTests : NSObject 3 | @end 4 | @implementation PodsDummy_Pods_KOPinCodeViewTests 5 | @end 6 | -------------------------------------------------------------------------------- /Example/KOPinCodeView/Pods/Target Support Files/Pods-KOPinCodeViewTests/Pods-KOPinCodeViewTests-frameworks.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | set -e 3 | 4 | echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 5 | mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 6 | 7 | SWIFT_STDLIB_PATH="${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" 8 | 9 | # This protects against multiple targets copying the same framework dependency at the same time. The solution 10 | # was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html 11 | RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????") 12 | 13 | install_framework() 14 | { 15 | if [ -r "${BUILT_PRODUCTS_DIR}/$1" ]; then 16 | local source="${BUILT_PRODUCTS_DIR}/$1" 17 | elif [ -r "${BUILT_PRODUCTS_DIR}/$(basename "$1")" ]; then 18 | local source="${BUILT_PRODUCTS_DIR}/$(basename "$1")" 19 | elif [ -r "$1" ]; then 20 | local source="$1" 21 | fi 22 | 23 | local destination="${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 24 | 25 | if [ -L "${source}" ]; then 26 | echo "Symlinked..." 27 | source="$(readlink "${source}")" 28 | fi 29 | 30 | # Use filter instead of exclude so missing patterns don't throw errors. 31 | echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${destination}\"" 32 | rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${destination}" 33 | 34 | local basename 35 | basename="$(basename -s .framework "$1")" 36 | binary="${destination}/${basename}.framework/${basename}" 37 | if ! [ -r "$binary" ]; then 38 | binary="${destination}/${basename}" 39 | fi 40 | 41 | # Strip invalid architectures so "fat" simulator / device frameworks work on device 42 | if [[ "$(file "$binary")" == *"dynamically linked shared library"* ]]; then 43 | strip_invalid_archs "$binary" 44 | fi 45 | 46 | # Resign the code if required by the build settings to avoid unstable apps 47 | code_sign_if_enabled "${destination}/$(basename "$1")" 48 | 49 | # Embed linked Swift runtime libraries. No longer necessary as of Xcode 7. 50 | if [ "${XCODE_VERSION_MAJOR}" -lt 7 ]; then 51 | local swift_runtime_libs 52 | swift_runtime_libs=$(xcrun otool -LX "$binary" | grep --color=never @rpath/libswift | sed -E s/@rpath\\/\(.+dylib\).*/\\1/g | uniq -u && exit ${PIPESTATUS[0]}) 53 | for lib in $swift_runtime_libs; do 54 | echo "rsync -auv \"${SWIFT_STDLIB_PATH}/${lib}\" \"${destination}\"" 55 | rsync -auv "${SWIFT_STDLIB_PATH}/${lib}" "${destination}" 56 | code_sign_if_enabled "${destination}/${lib}" 57 | done 58 | fi 59 | } 60 | 61 | # Copies the dSYM of a vendored framework 62 | install_dsym() { 63 | local source="$1" 64 | if [ -r "$source" ]; then 65 | echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${DWARF_DSYM_FOLDER_PATH}\"" 66 | rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${DWARF_DSYM_FOLDER_PATH}" 67 | fi 68 | 69 | local basename 70 | basename="$(basename -s .framework.dSYM "$source")" 71 | binary="${DWARF_DSYM_FOLDER_PATH}/${basename}.framework.dSYM/Contents/Resources/DWARF/${basename}" 72 | 73 | # Strip invalid architectures so "fat" simulator / device frameworks work on device 74 | if [[ "$(file "$binary")" == *"Mach-O dSYM companion"* ]]; then 75 | strip_invalid_archs "$binary" 76 | fi 77 | } 78 | 79 | # Signs a framework with the provided identity 80 | code_sign_if_enabled() { 81 | if [ -n "${EXPANDED_CODE_SIGN_IDENTITY}" -a "${CODE_SIGNING_REQUIRED}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then 82 | # Use the current code_sign_identitiy 83 | echo "Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}" 84 | local code_sign_cmd="/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS} --preserve-metadata=identifier,entitlements '$1'" 85 | 86 | if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then 87 | code_sign_cmd="$code_sign_cmd &" 88 | fi 89 | echo "$code_sign_cmd" 90 | eval "$code_sign_cmd" 91 | fi 92 | } 93 | 94 | # Strip invalid architectures 95 | strip_invalid_archs() { 96 | binary="$1" 97 | # Get architectures for current file 98 | archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | rev)" 99 | stripped="" 100 | for arch in $archs; do 101 | if ! [[ "${ARCHS}" == *"$arch"* ]]; then 102 | # Strip non-valid architectures in-place 103 | lipo -remove "$arch" -output "$binary" "$binary" || exit 1 104 | stripped="$stripped $arch" 105 | fi 106 | done 107 | if [[ "$stripped" ]]; then 108 | echo "Stripped $binary of architectures:$stripped" 109 | fi 110 | } 111 | 112 | if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then 113 | wait 114 | fi 115 | -------------------------------------------------------------------------------- /Example/KOPinCodeView/Pods/Target Support Files/Pods-KOPinCodeViewTests/Pods-KOPinCodeViewTests-resources.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | set -e 3 | 4 | mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 5 | 6 | RESOURCES_TO_COPY=${PODS_ROOT}/resources-to-copy-${TARGETNAME}.txt 7 | > "$RESOURCES_TO_COPY" 8 | 9 | XCASSET_FILES=() 10 | 11 | # This protects against multiple targets copying the same framework dependency at the same time. The solution 12 | # was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html 13 | RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????") 14 | 15 | case "${TARGETED_DEVICE_FAMILY}" in 16 | 1,2) 17 | TARGET_DEVICE_ARGS="--target-device ipad --target-device iphone" 18 | ;; 19 | 1) 20 | TARGET_DEVICE_ARGS="--target-device iphone" 21 | ;; 22 | 2) 23 | TARGET_DEVICE_ARGS="--target-device ipad" 24 | ;; 25 | 3) 26 | TARGET_DEVICE_ARGS="--target-device tv" 27 | ;; 28 | 4) 29 | TARGET_DEVICE_ARGS="--target-device watch" 30 | ;; 31 | *) 32 | TARGET_DEVICE_ARGS="--target-device mac" 33 | ;; 34 | esac 35 | 36 | install_resource() 37 | { 38 | if [[ "$1" = /* ]] ; then 39 | RESOURCE_PATH="$1" 40 | else 41 | RESOURCE_PATH="${PODS_ROOT}/$1" 42 | fi 43 | if [[ ! -e "$RESOURCE_PATH" ]] ; then 44 | cat << EOM 45 | error: Resource "$RESOURCE_PATH" not found. Run 'pod install' to update the copy resources script. 46 | EOM 47 | exit 1 48 | fi 49 | case $RESOURCE_PATH in 50 | *.storyboard) 51 | echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" || true 52 | ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS} 53 | ;; 54 | *.xib) 55 | echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" || true 56 | ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS} 57 | ;; 58 | *.framework) 59 | echo "mkdir -p ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" || true 60 | mkdir -p "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 61 | echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" $RESOURCE_PATH ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" || true 62 | rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 63 | ;; 64 | *.xcdatamodel) 65 | echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH"`.mom\"" || true 66 | xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodel`.mom" 67 | ;; 68 | *.xcdatamodeld) 69 | echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd\"" || true 70 | xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd" 71 | ;; 72 | *.xcmappingmodel) 73 | echo "xcrun mapc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm\"" || true 74 | xcrun mapc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm" 75 | ;; 76 | *.xcassets) 77 | ABSOLUTE_XCASSET_FILE="$RESOURCE_PATH" 78 | XCASSET_FILES+=("$ABSOLUTE_XCASSET_FILE") 79 | ;; 80 | *) 81 | echo "$RESOURCE_PATH" || true 82 | echo "$RESOURCE_PATH" >> "$RESOURCES_TO_COPY" 83 | ;; 84 | esac 85 | } 86 | 87 | mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 88 | rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 89 | if [[ "${ACTION}" == "install" ]] && [[ "${SKIP_INSTALL}" == "NO" ]]; then 90 | mkdir -p "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 91 | rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 92 | fi 93 | rm -f "$RESOURCES_TO_COPY" 94 | 95 | if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ -n "$XCASSET_FILES" ] 96 | then 97 | # Find all other xcassets (this unfortunately includes those of path pods and other targets). 98 | OTHER_XCASSETS=$(find "$PWD" -iname "*.xcassets" -type d) 99 | while read line; do 100 | if [[ $line != "${PODS_ROOT}*" ]]; then 101 | XCASSET_FILES+=("$line") 102 | fi 103 | done <<<"$OTHER_XCASSETS" 104 | 105 | printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 106 | fi 107 | -------------------------------------------------------------------------------- /Example/KOPinCodeView/Pods/Target Support Files/Pods-KOPinCodeViewTests/Pods-KOPinCodeViewTests.debug.xcconfig: -------------------------------------------------------------------------------- 1 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 2 | HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/KOPinCodeView" 3 | LIBRARY_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/KOPinCodeView" 4 | OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/KOPinCodeView" 5 | OTHER_LDFLAGS = $(inherited) -ObjC -framework "Foundation" -framework "UIKit" 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/KOPinCodeView/Pods/Target Support Files/Pods-KOPinCodeViewTests/Pods-KOPinCodeViewTests.release.xcconfig: -------------------------------------------------------------------------------- 1 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 2 | HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/KOPinCodeView" 3 | LIBRARY_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/KOPinCodeView" 4 | OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/KOPinCodeView" 5 | OTHER_LDFLAGS = $(inherited) -ObjC -framework "Foundation" -framework "UIKit" 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 | -------------------------------------------------------------------------------- /KOPinCodeView.podspec: -------------------------------------------------------------------------------- 1 | Pod::Spec.new do |s| 2 | s.name = "KOPinCodeView" 3 | s.version = "0.1.1" 4 | s.license = 'MIT' 5 | s.summary = "KOPinCodeView is a simple library for creating Pin Code view for enter" 6 | s.homepage = "https://github.com/SethSky/KOPinCodeView" 7 | s.author = { "Oleksandr Khymych" => "seth@khymych.com" } 8 | s.source = { :git => "https://github.com/SethSky/KOPinCodeView.git", :tag => s.version } 9 | 10 | s.platform = :ios, '8.0' 11 | s.requires_arc = true 12 | 13 | s.source_files = 'Source/Classes/**/*' 14 | 15 | # s.public_header_files = 'Pod/Classes/**/*.h' 16 | s.frameworks = 'UIKit', 'Foundation' 17 | end 18 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License 2 | 3 | Copyright (c) 2009-2017 Oleksandr Khymych, Inc. http://khymych.com 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in 13 | all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | THE SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ## Overview 2 | KOPinCodeView is a completed view developed for PIN-code entering. 3 | 4 | Key features and advantages: 5 | - easy for integrating in controller; 6 | - wide visual customization; 7 | - automatically creates TextField and background view according to self view; 8 | - optional PIN-code confirmation with integrated permission control; 9 | - able to set number of cells for PIN-code entering. 10 | 11 |
12 | 13 | 14 |
15 | 16 | 17 | # KOPinCodeView 18 | [![Version](https://img.shields.io/cocoapods/v/KOPinCodeView.svg?style=flat)](http://cocoapods.org/pods/KOPinCodeView) 19 | [![License](https://img.shields.io/cocoapods/l/KOPinCodeView.svg?style=flat)](http://cocoapods.org/pods/KOPinCodeView) 20 | [![Platform](https://img.shields.io/cocoapods/p/KOPinCodeView.svg?style=flat)](http://cocoapods.org/pods/KOPinCodeView) 21 | 22 | ## Installation 23 | 24 | ### CocoaPods 25 | 26 | [CocoaPods](http://cocoapods.org) is a dependency manager for Cocoa projects. You can install it with the following command: 27 | 28 | ```bash 29 | $ gem install cocoapods 30 | ``` 31 | 32 | > CocoaPods 1.1+ is required to build KOPinCodeView 0.1.0+. 33 | 34 | To integrate KOPinCodeView into your Xcode project using CocoaPods, specify it in your `Podfile`: 35 | 36 | ```ruby 37 | source 'https://github.com/CocoaPods/Specs.git' 38 | platform :ios, '8.0' 39 | 40 | target '' do 41 | pod 'KOPinCodeView', '~> 0.1.1' 42 | end 43 | ``` 44 | 45 | Then, run the following command: 46 | 47 | ```bash 48 | $ pod install 49 | ``` 50 | 51 | ## Usage 52 | 53 | ### Swift 54 | If you are using `use_frameworks!` in your Podfile, use this import: 55 | ```swift 56 | import KOPinCodeView 57 | ``` 58 | ### In Objective-C 59 | 60 | ```objc 61 | #import //in your controller's header file 62 | ``` 63 | ##### Init methods 64 | # 65 | ```objc 66 | //init PinCodeView with cout symbol 67 | -(void)initPinWithCountView:(int)count; 68 | 69 | //init PinCodeView with confirm or custom view 70 | -(void)initPinViewWithConfirmPIN:(BOOL)confirm 71 | countSymbol:(int)count 72 | sizeSimbol:(CGSize)size 73 | formView:(FormView)form; 74 | ``` 75 | ##### Delegate methods KOPinCodeViewDelegate 76 | # 77 | ```objc 78 | // delegate method. Called when entered all simbols. 79 | // it returned symbols array and string with all symbols. 80 | - (void)pinDidEnterAllSymbol:(NSArray *)symbolArray string:(NSString*)pin; 81 | ``` 82 | ##### Creating a Pin Code View 83 | ###### Example code: 84 | # 85 | ```objc 86 | //1. init with frame 87 | KOPinCodeView *pinCodeView = [[KOPinCodeView alloc]initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, 65)]; 88 | //2. Add to you view 89 | [self.view addSubview:pinCodeView]; 90 | //3. setting the delegate: 91 | pinCodeView.delegate = self; 92 | //or just add view in storyboard 93 | ``` 94 | ```objc 95 | //and init PinCodeView with cout symbol example 96 | [pinCodeView initPinWithCountView:4]; 97 | ``` 98 | ###### init PinCodeView with confirm example: 99 | # 100 | ```objc 101 | [self.pinCodeConfirmView initPinViewWithConfirmPIN:YES countSymbol:6 sizeSimbol:CGSizeMake(45, 45) formView:kCircle]; 102 | ``` 103 | 104 | ###### Pin Code View with confirm custom settings example: 105 | # 106 | ```objc 107 | //thickness view line 108 | self.pinCodeConfirmView.lineDeep = 2.f; 109 | //Color view line 110 | self.pinCodeConfirmView.lineColor = kColor; 111 | //Background color view in select state 112 | self.pinCodeConfirmView.selectColor = [kColor colorWithAlphaComponent:0.5f]; 113 | 114 | //Text color UITextField 115 | self.pinCodeConfirmView.symbolColor = kColor; 116 | //Font UITextField 117 | self.pinCodeConfirmView.symbolFont = [UIFont systemFontOfSize:14]; 118 | 119 | //UILabel show only initPinViewWithConfirmPIN: 120 | //Text color Label 121 | self.pinCodeConfirmView.titleColor = kColor; 122 | //Font Label 123 | self.pinCodeConfirmView.titleFont = [UIFont systemFontOfSize:14]; 124 | //Text Label - Default: "enter Pin code" 125 | self.pinCodeConfirmView.enterPinString = @"Any text 1"; 126 | //Text Label - Default: "Confirm Pin code" 127 | self.pinCodeConfirmView.confirmPinString = @"Any text 2"; 128 | 129 | //Create Confirm Pin Code 130 | self.pinCodeConfirmView.confirm = NO; 131 | //Secure Text - Default: YES 132 | self.pinCodeConfirmView.secure = NO; 133 | //Keyboard Type 134 | self.pinCodeConfirmView.typeKeyboard = UIKeyboardTypeNumberPad; 135 | ``` 136 | ## Author 137 | Oleksandr Khymych, seth@khymych.com 138 | 139 | ## License 140 | KOPinCodeView is released under the MIT license. [See LICENSE](LICENSE) for details. 141 | -------------------------------------------------------------------------------- /Source/Assets/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SethSky/KOPinCodeView/23d0c51f2d8ff764d0855b95a2e75a73c3b8ca93/Source/Assets/.gitkeep -------------------------------------------------------------------------------- /Source/Assets/pin_code_view.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SethSky/KOPinCodeView/23d0c51f2d8ff764d0855b95a2e75a73c3b8ca93/Source/Assets/pin_code_view.gif -------------------------------------------------------------------------------- /Source/Assets/pin_code_view_confirm.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SethSky/KOPinCodeView/23d0c51f2d8ff764d0855b95a2e75a73c3b8ca93/Source/Assets/pin_code_view_confirm.gif -------------------------------------------------------------------------------- /Source/Classes/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SethSky/KOPinCodeView/23d0c51f2d8ff764d0855b95a2e75a73c3b8ca93/Source/Classes/.gitkeep -------------------------------------------------------------------------------- /Source/Classes/KOPinCodeView.h: -------------------------------------------------------------------------------- 1 | 2 | #import 3 | 4 | //View Default: kCircle 5 | typedef enum FormView : NSUInteger { 6 | kCircle, //circle 7 | kFoursquare, //Foursquare 8 | kNone //None 9 | } FormView; 10 | 11 | @protocol KOPinCodeViewDelegate 12 | @required 13 | /** 14 | delegate method. Called when entered all simbols. 15 | it returned symbols array and string with all symbols. 16 | 17 | @param symbolArray NSArray with NSString 18 | @param pin NSString 19 | */ 20 | - (void)pinDidEnterAllSymbol:(NSArray *)symbolArray string:(NSString*)pin; 21 | @end 22 | 23 | /** 24 | KOPinCodeView 25 | */ 26 | @interface KOPinCodeView : UIView 27 | /** 28 | KOPinCodeViewDelegate 29 | */ 30 | @property (nonatomic, weak) IBOutlet id delegate; 31 | //Customized view settings 32 | //------------------------------------------------------| 33 | //---UIView---------------------------------------------| 34 | //------------------------------------------------------| 35 | // 36 | @property (nonatomic) FormView formPinView; 37 | //Thickness view line 38 | @property (nonatomic) float lineDeep; 39 | //Color view line 40 | @property (nonatomic) UIColor *lineColor; 41 | //Background color view in select state 42 | @property (nonatomic) UIColor *selectColor; 43 | //if pin codes did not matched, background view will highlight 44 | @property (nonatomic) UIColor *notMatchColor; 45 | //------------------------------------------------------| 46 | //---UITextField----------------------------------------| 47 | //------------------------------------------------------| 48 | //Text color UITextField 49 | @property (nonatomic) UIColor *symbolColor; 50 | //Font UITextField 51 | @property (nonatomic) UIFont *symbolFont; 52 | //------------------------------------------------------| 53 | //---Label----------------------------------------------| 54 | //------------------------------------------------------| 55 | //UILabel show only initPinViewWithConfirmPIN: 56 | //Text color Label 57 | @property (nonatomic) UIColor *titleColor; 58 | //Font Label 59 | @property (nonatomic) UIFont *titleFont; 60 | //Text Label - Default: "enter Pin code" 61 | @property (nonatomic) NSString *enterPinString; 62 | //Text Label - Default: "Confirm Pin code" 63 | @property (nonatomic) NSString *confirmPinString; 64 | //------------------------------------------------------| 65 | //---Other Setting--------------------------------------| 66 | //------------------------------------------------------| 67 | //Create Confirm Pin Code 68 | @property (nonatomic) BOOL confirm; 69 | //Secure Text - Default: YES 70 | @property (nonatomic) BOOL secure; 71 | //Keyboard Type 72 | @property (nonatomic) UIKeyboardType typeKeyboard; 73 | //------------------------------------------------------| 74 | //---Methods--------------------------------------------| 75 | //------------------------------------------------------| 76 | /** 77 | init PinCodeView with cout symbol 78 | @param count int 79 | */ 80 | -(void)initPinWithCountView:(int)count; 81 | /** 82 | init PinCodeView with confirm 83 | 84 | @param confirm BOOL value 85 | @param count int 86 | @param size CGSize 87 | @param form FormView type view 88 | */ 89 | -(void)initPinViewWithConfirmPIN:(BOOL)confirm 90 | countSymbol:(int)count 91 | sizeSimbol:(CGSize)size 92 | formView:(FormView)form; 93 | 94 | /** 95 | Become first cell 96 | */ 97 | -(void)becomeFirstCell; 98 | 99 | @end 100 | -------------------------------------------------------------------------------- /Source/Classes/KOPinCodeView.m: -------------------------------------------------------------------------------- 1 | // 2 | // KOPinCodeView.m 3 | // KOPinCodeView 4 | // 5 | // Created by Oleksandr Khymych on 01.07.16. 6 | // Copyright © 2016 Oleksandr Khymych. All rights reserved. 7 | // 8 | 9 | #import "KOPinCodeView.h" 10 | 11 | @interface KOPinCodeView(){ 12 | //--------------------------------| 13 | // - Style property 14 | //--------------------------------| 15 | FormView formView; 16 | float borderWidth; 17 | UIColor* borderColor; 18 | UIColor* textColor; 19 | UIColor* backgroundSelectColor; 20 | UIColor* errorColor; 21 | UIFont* textFont; 22 | 23 | UIKeyboardType keyboardType; 24 | //--------------------------------| 25 | // - Text titles 26 | //--------------------------------| 27 | NSString* enterPinText; 28 | NSString* confirmPinText; 29 | //--------------------------------| 30 | // - Style titles 31 | //--------------------------------| 32 | UIColor *labelColor; 33 | UIFont *labelFont; 34 | 35 | float labelHeight; 36 | //--------------------------------| 37 | // - 38 | //--------------------------------| 39 | UIView *selectView; 40 | UIView *deselectView; 41 | 42 | int selectIndex; 43 | BOOL confirmPin; 44 | BOOL secureText; 45 | 46 | int pinCount; 47 | //--------------------------------| 48 | // - 49 | //--------------------------------| 50 | NSMutableArray *textFieldArray; 51 | } 52 | 53 | @end 54 | 55 | typedef void (^KOPinCodeViewCallback)(void); 56 | 57 | @implementation KOPinCodeView{ 58 | KOPinCodeViewCallback callback; 59 | } 60 | #pragma mark - Setters 61 | /** 62 | Set form Cell 63 | 64 | @param formPinView FormView 65 | */ 66 | -(void)setFormPinView:(FormView)formPinView{ 67 | formView = formPinView; 68 | } 69 | /** 70 | Set deep line 71 | 72 | @param lineDeep float 73 | */ 74 | -(void)setLineDeep:(float)lineDeep{ 75 | borderWidth = lineDeep; 76 | } 77 | 78 | -(void)setLineColor:(UIColor *)lineColor{ 79 | borderColor = lineColor; 80 | } 81 | 82 | -(void)setSelectColor:(UIColor *)selectColor{ 83 | backgroundSelectColor = selectColor; 84 | } 85 | 86 | -(void)setSymbolColor:(UIColor *)symbolColor{ 87 | textColor = symbolColor; 88 | } 89 | 90 | -(void)setNotMatchColor:(UIColor *)notMatchColor{ 91 | errorColor = notMatchColor; 92 | } 93 | 94 | -(void)setSymbolFont:(UIFont *)symbolFont{ 95 | textFont = symbolFont; 96 | } 97 | 98 | -(void)setTitleColor:(UIColor *)titleColor{ 99 | labelColor = titleColor; 100 | } 101 | 102 | -(void)setTitleFont:(UIFont *)titleFont{ 103 | labelFont = titleFont; 104 | } 105 | 106 | -(void)setEnterPinString:(NSString *)enterPinString{ 107 | enterPinText = enterPinString; 108 | } 109 | 110 | -(void)setConfirmPinString:(NSString *)confirmPinString{ 111 | confirmPinText = confirmPinString; 112 | } 113 | 114 | -(void)setConfirm:(BOOL)confirm{ 115 | confirmPin = confirm; 116 | } 117 | 118 | -(void)setSecure:(BOOL)secure{ 119 | secureText = secure; 120 | } 121 | 122 | -(void)setTypeKeyboard:(UIKeyboardType)typeKeyboard{ 123 | keyboardType = typeKeyboard; 124 | } 125 | 126 | #pragma mark - init 127 | 128 | - (instancetype)initWithFrame:(CGRect)frame 129 | { 130 | self = [super initWithFrame:frame]; 131 | if (self) { 132 | [self loadDefaultSettings]; 133 | } 134 | return self; 135 | } 136 | 137 | - (instancetype)initWithCoder:(NSCoder *)coder 138 | { 139 | self = [super initWithCoder:coder]; 140 | if (self) { 141 | [self loadDefaultSettings]; 142 | } 143 | return self; 144 | } 145 | 146 | #pragma mark - Load Default Settings 147 | 148 | -(void)loadDefaultSettings{ 149 | //------------------| 150 | //---UIView---------| 151 | //------------------| 152 | formView = kCircle; 153 | //Border View 154 | borderWidth = 1.0; 155 | //Color Border View 156 | borderColor = [UIColor blackColor]; 157 | //Color BackGround View in state Selection 158 | backgroundSelectColor = [[UIColor blackColor] colorWithAlphaComponent:0.5]; 159 | //Background View Color in error state 160 | errorColor = [UIColor redColor]; 161 | //------------------| 162 | //---UITextField----| 163 | //------------------| 164 | //Color UITextField 165 | textColor = [UIColor blackColor]; 166 | //Font UITextField 167 | textFont = [UIFont systemFontOfSize:14]; 168 | //------------------| 169 | //---Label----------| 170 | //------------------| 171 | //Label font 172 | labelFont = [UIFont systemFontOfSize:14]; 173 | //Label Color 174 | labelColor = [UIColor blackColor]; 175 | //Label Text 176 | enterPinText = NSLocalizedString(@"enter Pin code", @""); 177 | confirmPinText = NSLocalizedString(@"Confirm Pin code", @""); 178 | //------------------| 179 | //---Other Setting--| 180 | //------------------| 181 | //Create Confirm Pin Code 182 | confirmPin = NO; 183 | //secure Text 184 | secureText = YES; 185 | //Keyboard Type 186 | keyboardType = UIKeyboardTypeNumberPad; 187 | } 188 | #pragma mark - init Views and Text cell 189 | /** 190 | init Pin code view for IBOutlet 191 | 192 | @param count int 193 | */ 194 | -(void)initPinWithCountView:(int)count{ 195 | [self layoutIfNeeded]; 196 | float width = (self.bounds.size.width/1.138)/count; 197 | if (width>self.bounds.size.height) { 198 | width = self.bounds.size.height; 199 | } 200 | textFont = [UIFont systemFontOfSize:width/2]; 201 | 202 | [self initPinViewWithConfirmPIN:confirmPin 203 | countSymbol:count 204 | sizeSimbol:CGSizeMake(width, width) 205 | formView:formView]; 206 | } 207 | /** 208 | init Pin code view with confirm 209 | 210 | @param confirm BOOL 211 | @param count int 212 | @param size CGSize 213 | @param form FormView 214 | */ 215 | -(void)initPinViewWithConfirmPIN:(BOOL)confirm 216 | countSymbol:(int)count 217 | sizeSimbol:(CGSize)size 218 | formView:(FormView)form{ 219 | //Remove view 220 | [self removeView]; 221 | //Update property 222 | pinCount = count; 223 | confirmPin = confirm; 224 | labelHeight = size.height; 225 | //Space between cells 226 | float spaceBetweenCells = size.width/6; 227 | //full width 228 | float fullWidth = (size.width*count)+(spaceBetweenCells*(count-1)); 229 | //full Height 230 | float fullHeight = confirm ? (size.height+labelHeight)*2 : size.height; 231 | //count cell 232 | count = confirm ? count*2 : count; 233 | //init textFieldArray 234 | textFieldArray = [NSMutableArray array]; 235 | int b = 0; 236 | for (int i = 0; i< count; i++) { 237 | float x = 0.0; 238 | float y = (self.frame.size.height - fullHeight)/2; 239 | if (confirm) { 240 | if (i>count/2) b++; 241 | if (i 1) { 502 | textField.text = string; 503 | return NO; 504 | }else{ 505 | textField.text = string; 506 | } 507 | if ([textField isEqual:[textFieldArray firstObject]]) { 508 | if ([textField.text isEqualToString:@""]) { 509 | [[textFieldArray firstObject] becomeFirstResponder]; 510 | }else{ 511 | [[textFieldArray objectAtIndex:1] becomeFirstResponder]; 512 | } 513 | } 514 | if ([textField isEqual:[textFieldArray objectAtIndex:selectIndex]]) { 515 | if ([textField.text isEqualToString:@""]) { 516 | if (selectIndex != 0){ 517 | [[textFieldArray objectAtIndex:selectIndex-1] becomeFirstResponder]; 518 | } 519 | }else{ 520 | if (selectIndex < textFieldArray.count-1) { 521 | [[textFieldArray objectAtIndex:selectIndex+1] becomeFirstResponder]; 522 | } 523 | if ([textField isEqual:[textFieldArray lastObject]]) { 524 | [self actions]; 525 | } 526 | } 527 | } 528 | return NO; 529 | } 530 | #pragma mark - KOPINCodeViewDelegate 531 | /** 532 | Call back 533 | 534 | @param completion (^KOPinCodeViewCallback)(void) 535 | */ 536 | - (void)complet:(KOPinCodeViewCallback)completion { 537 | callback = completion; 538 | if(callback){ 539 | callback(); 540 | } 541 | } 542 | /** 543 | KOPINCodeViewDelegate 544 | Complet pin with array and String 545 | 546 | @param array NSArray 547 | @param string NSString 548 | */ 549 | - (void)completPin:(NSArray*)array andString:(NSString*)string { 550 | [self complet:^{ 551 | if([self.delegate respondsToSelector:@selector(pinDidEnterAllSymbol:string:)]){ 552 | [self.delegate pinDidEnterAllSymbol:array string:string]; 553 | } 554 | }]; 555 | } 556 | @end 557 | --------------------------------------------------------------------------------