From b7fd217d313636d084bb6f62fb03bfb895b18222 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fl=C3=A1vio=20Caetano?= Date: Tue, 11 Apr 2017 15:00:44 -0300 Subject: [PATCH] Initial code --- .gitignore | 48 + Example/Podfile | 11 + Example/Podfile.lock | 19 + .../Local Podspecs/ReCaptcha.podspec.json | 34 + Example/Pods/Manifest.lock | 19 + Example/Pods/Pods.xcodeproj/project.pbxproj | 1060 +++++++++++++++++ Example/Pods/Result/LICENSE | 21 + Example/Pods/Result/README.md | 113 ++ Example/Pods/Result/Result/Result.swift | 271 +++++ .../Pods/Result/Result/ResultProtocol.swift | 200 ++++ .../Pods-ReCaptcha_Example/Info.plist | 26 + ...eCaptcha_Example-acknowledgements.markdown | 50 + ...s-ReCaptcha_Example-acknowledgements.plist | 88 ++ .../Pods-ReCaptcha_Example-dummy.m | 5 + .../Pods-ReCaptcha_Example-frameworks.sh | 101 ++ .../Pods-ReCaptcha_Example-resources.sh | 99 ++ .../Pods-ReCaptcha_Example-umbrella.h | 16 + .../Pods-ReCaptcha_Example.debug.xcconfig | 10 + .../Pods-ReCaptcha_Example.modulemap | 6 + .../Pods-ReCaptcha_Example.release.xcconfig | 10 + .../Pods-ReCaptcha_Tests/Info.plist | 26 + ...-ReCaptcha_Tests-acknowledgements.markdown | 3 + ...ods-ReCaptcha_Tests-acknowledgements.plist | 29 + .../Pods-ReCaptcha_Tests-dummy.m | 5 + .../Pods-ReCaptcha_Tests-frameworks.sh | 92 ++ .../Pods-ReCaptcha_Tests-resources.sh | 99 ++ .../Pods-ReCaptcha_Tests-umbrella.h | 16 + .../Pods-ReCaptcha_Tests.debug.xcconfig | 7 + .../Pods-ReCaptcha_Tests.modulemap | 6 + .../Pods-ReCaptcha_Tests.release.xcconfig | 7 + .../Target Support Files/ReCaptcha/Info.plist | 26 + .../ReCaptcha/ReCaptcha-dummy.m | 5 + .../ReCaptcha/ReCaptcha-prefix.pch | 12 + .../ReCaptcha/ReCaptcha-umbrella.h | 16 + .../ReCaptcha/ReCaptcha.modulemap | 6 + .../ReCaptcha/ReCaptcha.xcconfig | 12 + .../ResourceBundle-ReCaptcha-Info.plist | 24 + .../Target Support Files/Result/Info.plist | 26 + .../Result/Result-dummy.m | 5 + .../Result/Result-prefix.pch | 12 + .../Result/Result-umbrella.h | 16 + .../Result/Result.modulemap | 6 + .../Result/Result.xcconfig | 10 + Example/ReCaptcha.xcodeproj/project.pbxproj | 591 +++++++++ .../contents.xcworkspacedata | 7 + .../xcschemes/ReCaptcha-Example.xcscheme | 115 ++ .../contents.xcworkspacedata | 10 + Example/ReCaptcha/AppDelegate.swift | 46 + Example/ReCaptcha/Base.lproj/LaunchScreen.xib | 41 + Example/ReCaptcha/Base.lproj/Main.storyboard | 66 + .../AppIcon.appiconset/Contents.json | 48 + Example/ReCaptcha/Info.plist | 45 + Example/ReCaptcha/ViewController.swift | 46 + Example/Tests/Info.plist | 24 + Example/Tests/Tests.swift | 29 + LICENSE | 12 +- README.md | 52 +- ReCaptcha.podspec | 42 + ReCaptcha/Assets/.gitkeep | 0 ReCaptcha/Assets/recaptcha.html | 40 + ReCaptcha/Classes/.gitkeep | 0 ReCaptcha/Classes/NSError+ReCaptcha.swift | 31 + ReCaptcha/Classes/ReCaptcha.swift | 40 + ReCaptcha/Classes/ReCaptchaDecoder.swift | 60 + .../Classes/ReCaptchaWebViewManager.swift | 120 ++ _Pods.xcodeproj | 1 + 66 files changed, 4131 insertions(+), 8 deletions(-) create mode 100644 .gitignore create mode 100644 Example/Podfile create mode 100644 Example/Podfile.lock create mode 100644 Example/Pods/Local Podspecs/ReCaptcha.podspec.json create mode 100644 Example/Pods/Manifest.lock create mode 100644 Example/Pods/Pods.xcodeproj/project.pbxproj create mode 100644 Example/Pods/Result/LICENSE create mode 100644 Example/Pods/Result/README.md create mode 100644 Example/Pods/Result/Result/Result.swift create mode 100644 Example/Pods/Result/Result/ResultProtocol.swift create mode 100644 Example/Pods/Target Support Files/Pods-ReCaptcha_Example/Info.plist create mode 100644 Example/Pods/Target Support Files/Pods-ReCaptcha_Example/Pods-ReCaptcha_Example-acknowledgements.markdown create mode 100644 Example/Pods/Target Support Files/Pods-ReCaptcha_Example/Pods-ReCaptcha_Example-acknowledgements.plist create mode 100644 Example/Pods/Target Support Files/Pods-ReCaptcha_Example/Pods-ReCaptcha_Example-dummy.m create mode 100755 Example/Pods/Target Support Files/Pods-ReCaptcha_Example/Pods-ReCaptcha_Example-frameworks.sh create mode 100755 Example/Pods/Target Support Files/Pods-ReCaptcha_Example/Pods-ReCaptcha_Example-resources.sh create mode 100644 Example/Pods/Target Support Files/Pods-ReCaptcha_Example/Pods-ReCaptcha_Example-umbrella.h create mode 100644 Example/Pods/Target Support Files/Pods-ReCaptcha_Example/Pods-ReCaptcha_Example.debug.xcconfig create mode 100644 Example/Pods/Target Support Files/Pods-ReCaptcha_Example/Pods-ReCaptcha_Example.modulemap create mode 100644 Example/Pods/Target Support Files/Pods-ReCaptcha_Example/Pods-ReCaptcha_Example.release.xcconfig create mode 100644 Example/Pods/Target Support Files/Pods-ReCaptcha_Tests/Info.plist create mode 100644 Example/Pods/Target Support Files/Pods-ReCaptcha_Tests/Pods-ReCaptcha_Tests-acknowledgements.markdown create mode 100644 Example/Pods/Target Support Files/Pods-ReCaptcha_Tests/Pods-ReCaptcha_Tests-acknowledgements.plist create mode 100644 Example/Pods/Target Support Files/Pods-ReCaptcha_Tests/Pods-ReCaptcha_Tests-dummy.m create mode 100755 Example/Pods/Target Support Files/Pods-ReCaptcha_Tests/Pods-ReCaptcha_Tests-frameworks.sh create mode 100755 Example/Pods/Target Support Files/Pods-ReCaptcha_Tests/Pods-ReCaptcha_Tests-resources.sh create mode 100644 Example/Pods/Target Support Files/Pods-ReCaptcha_Tests/Pods-ReCaptcha_Tests-umbrella.h create mode 100644 Example/Pods/Target Support Files/Pods-ReCaptcha_Tests/Pods-ReCaptcha_Tests.debug.xcconfig create mode 100644 Example/Pods/Target Support Files/Pods-ReCaptcha_Tests/Pods-ReCaptcha_Tests.modulemap create mode 100644 Example/Pods/Target Support Files/Pods-ReCaptcha_Tests/Pods-ReCaptcha_Tests.release.xcconfig create mode 100644 Example/Pods/Target Support Files/ReCaptcha/Info.plist create mode 100644 Example/Pods/Target Support Files/ReCaptcha/ReCaptcha-dummy.m create mode 100644 Example/Pods/Target Support Files/ReCaptcha/ReCaptcha-prefix.pch create mode 100644 Example/Pods/Target Support Files/ReCaptcha/ReCaptcha-umbrella.h create mode 100644 Example/Pods/Target Support Files/ReCaptcha/ReCaptcha.modulemap create mode 100644 Example/Pods/Target Support Files/ReCaptcha/ReCaptcha.xcconfig create mode 100644 Example/Pods/Target Support Files/ReCaptcha/ResourceBundle-ReCaptcha-Info.plist create mode 100644 Example/Pods/Target Support Files/Result/Info.plist create mode 100644 Example/Pods/Target Support Files/Result/Result-dummy.m create mode 100644 Example/Pods/Target Support Files/Result/Result-prefix.pch create mode 100644 Example/Pods/Target Support Files/Result/Result-umbrella.h create mode 100644 Example/Pods/Target Support Files/Result/Result.modulemap create mode 100644 Example/Pods/Target Support Files/Result/Result.xcconfig create mode 100644 Example/ReCaptcha.xcodeproj/project.pbxproj create mode 100644 Example/ReCaptcha.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 Example/ReCaptcha.xcodeproj/xcshareddata/xcschemes/ReCaptcha-Example.xcscheme create mode 100644 Example/ReCaptcha.xcworkspace/contents.xcworkspacedata create mode 100644 Example/ReCaptcha/AppDelegate.swift create mode 100644 Example/ReCaptcha/Base.lproj/LaunchScreen.xib create mode 100644 Example/ReCaptcha/Base.lproj/Main.storyboard create mode 100644 Example/ReCaptcha/Images.xcassets/AppIcon.appiconset/Contents.json create mode 100644 Example/ReCaptcha/Info.plist create mode 100644 Example/ReCaptcha/ViewController.swift create mode 100644 Example/Tests/Info.plist create mode 100644 Example/Tests/Tests.swift create mode 100644 ReCaptcha.podspec create mode 100644 ReCaptcha/Assets/.gitkeep create mode 100644 ReCaptcha/Assets/recaptcha.html create mode 100644 ReCaptcha/Classes/.gitkeep create mode 100644 ReCaptcha/Classes/NSError+ReCaptcha.swift create mode 100644 ReCaptcha/Classes/ReCaptcha.swift create mode 100644 ReCaptcha/Classes/ReCaptchaDecoder.swift create mode 100644 ReCaptcha/Classes/ReCaptchaWebViewManager.swift create mode 120000 _Pods.xcodeproj diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..1bee43b --- /dev/null +++ b/.gitignore @@ -0,0 +1,48 @@ +# Xcode +# +# gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore + +## Build generated +build/ +DerivedData + +## Various settings +*.pbxuser +!default.pbxuser +*.mode1v3 +!default.mode1v3 +*.mode2v3 +!default.mode2v3 +*.perspectivev3 +!default.perspectivev3 +xcuserdata + +## Other +*.xccheckout +*.moved-aside +*.xcuserstate +*.orig + +## Obj-C/Swift specific +*.hmap +*.ipa + +# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion + +*.iml + +## Directory-based project format: +.idea/ +.DS_Store + +## CocoaPods +#Pods/ + +html/highwinds_credentials.json +html/node_modules/ +html/fb-*.html +html/ios-*.html +html/mp4-*.html +html/player-inject-*.js + +.bitrise* diff --git a/Example/Podfile b/Example/Podfile new file mode 100644 index 0000000..a37419b --- /dev/null +++ b/Example/Podfile @@ -0,0 +1,11 @@ +use_frameworks! + +target 'ReCaptcha_Example' do + pod 'ReCaptcha', :path => '../' + + target 'ReCaptcha_Tests' do + inherit! :search_paths + + + end +end diff --git a/Example/Podfile.lock b/Example/Podfile.lock new file mode 100644 index 0000000..40872b9 --- /dev/null +++ b/Example/Podfile.lock @@ -0,0 +1,19 @@ +PODS: + - ReCaptcha (0.1.0): + - Result (~> 3.0) + - Result (3.2.1) + +DEPENDENCIES: + - ReCaptcha (from `../`) + +EXTERNAL SOURCES: + ReCaptcha: + :path: "../" + +SPEC CHECKSUMS: + ReCaptcha: d9912029dfd0988054ec6f1237098a19ef694fd0 + Result: 2453a22e5c5b11c0c3a478736e82cd02f763b781 + +PODFILE CHECKSUM: 816c00f9db90d74940892ce0fa0bcc81d31a3270 + +COCOAPODS: 1.2.0.beta.3 diff --git a/Example/Pods/Local Podspecs/ReCaptcha.podspec.json b/Example/Pods/Local Podspecs/ReCaptcha.podspec.json new file mode 100644 index 0000000..6624309 --- /dev/null +++ b/Example/Pods/Local Podspecs/ReCaptcha.podspec.json @@ -0,0 +1,34 @@ +{ + "name": "ReCaptcha", + "version": "0.1.0", + "summary": "ReCaptcha for iOS", + "description": "Add Google invisible ReCaptcha to your app", + "homepage": "https://github.com/fjcaetano/ReCaptcha", + "license": { + "type": "MIT", + "file": "LICENSE" + }, + "authors": { + "fjcaetano": "flavio@vieiracaetano.com" + }, + "source": { + "git": "https://github.com/fjcaetano/ReCaptcha.git", + "tag": "0.1.0" + }, + "social_media_url": "https://twitter.com/flavio_caetano", + "platforms": { + "ios": "8.0" + }, + "source_files": "ReCaptcha/Classes/**/*", + "resource_bundles": { + "ReCaptcha": [ + "ReCaptcha/Assets/*" + ] + }, + "frameworks": "WebKit", + "dependencies": { + "Result": [ + "~> 3.0" + ] + } +} diff --git a/Example/Pods/Manifest.lock b/Example/Pods/Manifest.lock new file mode 100644 index 0000000..40872b9 --- /dev/null +++ b/Example/Pods/Manifest.lock @@ -0,0 +1,19 @@ +PODS: + - ReCaptcha (0.1.0): + - Result (~> 3.0) + - Result (3.2.1) + +DEPENDENCIES: + - ReCaptcha (from `../`) + +EXTERNAL SOURCES: + ReCaptcha: + :path: "../" + +SPEC CHECKSUMS: + ReCaptcha: d9912029dfd0988054ec6f1237098a19ef694fd0 + Result: 2453a22e5c5b11c0c3a478736e82cd02f763b781 + +PODFILE CHECKSUM: 816c00f9db90d74940892ce0fa0bcc81d31a3270 + +COCOAPODS: 1.2.0.beta.3 diff --git a/Example/Pods/Pods.xcodeproj/project.pbxproj b/Example/Pods/Pods.xcodeproj/project.pbxproj new file mode 100644 index 0000000..26b5e73 --- /dev/null +++ b/Example/Pods/Pods.xcodeproj/project.pbxproj @@ -0,0 +1,1060 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + 04F1AF81EF14E040ADDE66E9A4FF77C1 /* ReCaptcha.swift in Sources */ = {isa = PBXBuildFile; fileRef = BED46AF7177DEDBA70ED4837F4105194 /* ReCaptcha.swift */; }; + 0FD23512C77AB9B1D85A233FA546882C /* Result.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6176EA776BE0FF6765118608D9C1D74C /* Result.swift */; }; + 1BEAC1666AC159742F6BA53ABC0CDFC1 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5D11EB4D17E17AEE91F2EC79D126A6CE /* Foundation.framework */; }; + 1CC0AD08C654995EA002961DE0A46557 /* Pods-ReCaptcha_Example-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 2D886642369DDC77EE006B67347A278C /* Pods-ReCaptcha_Example-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2D51F47AE8AFC2425046E911AEDCA841 /* ReCaptcha-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = F626FC7FB9F0A4AF8DC609B578962190 /* ReCaptcha-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 45A7C5368F5E1A30457198D22BF2C890 /* ReCaptcha.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 8D6A73AEF707F7B80555FB4C6D0AE8B1 /* ReCaptcha.bundle */; }; + 63337CFA93E87AC0131DE4083BF47F7E /* Pods-ReCaptcha_Example-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = ED73DFFB6CF96BFFBD3FC4D490791EC8 /* Pods-ReCaptcha_Example-dummy.m */; }; + 89A987A2CB21713B33323028B1CADE36 /* ReCaptchaWebViewManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = E86A3010BA786588696C2DA451FEC3CC /* ReCaptchaWebViewManager.swift */; }; + 93313C987515A768876BABD1C1E12737 /* ResultProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6610BC14661950BC1AE42910B59A753F /* ResultProtocol.swift */; }; + 978AD73069D5DFCF45756A0D59B02137 /* ReCaptcha-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 9FEF98AE6C2703B704C7CCDD26E984F9 /* ReCaptcha-dummy.m */; }; + 979C19523000D495F15CCCFB4233D432 /* Result-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 6D23D937A9AA07BC25EC3B2AE6D89493 /* Result-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9FB3183454EC5B425565BD8DA7CBD96E /* Pods-ReCaptcha_Tests-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DB673F7166BA1E575AB7C0DB38C81F7 /* Pods-ReCaptcha_Tests-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + AB077E986E05219328238C842A1E2666 /* Result-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = E40B465278666A73517786B7DF414897 /* Result-dummy.m */; }; + B81E6C153CDA12F3F2633E2513DE8853 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5D11EB4D17E17AEE91F2EC79D126A6CE /* Foundation.framework */; }; + C7D44755414EE448C770FA1AF7066504 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5D11EB4D17E17AEE91F2EC79D126A6CE /* Foundation.framework */; }; + CF4B3855232F3698616F9121E67E7B3D /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5D11EB4D17E17AEE91F2EC79D126A6CE /* Foundation.framework */; }; + DB75DDF44BDB64AF9D566D145FE03B05 /* Pods-ReCaptcha_Tests-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 5652FA1D048C183500D46500CD7F1B5C /* Pods-ReCaptcha_Tests-dummy.m */; }; + DE548A0E5DA1EE39891CEA3CC0F749CF /* NSError+ReCaptcha.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2696BBF3002833F84D7BBFB690775BAC /* NSError+ReCaptcha.swift */; }; + E5B7E20202C252BC9FFCB4B3BBA81388 /* ReCaptchaDecoder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76AA3C64A8C660A913CF4406AB01DAE6 /* ReCaptchaDecoder.swift */; }; + E7B30EA3127612E91CEC570C9423E10E /* Result.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 388AC740E0D6B95ED251ED41FF6AC0C3 /* Result.framework */; }; + F210448E1E831F630022992F /* recaptcha.html in Resources */ = {isa = PBXBuildFile; fileRef = 9238C5E9356387A5266616A04EB9157C /* recaptcha.html */; }; + F5885380A2104208F52D4BD965B1D043 /* WebKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 194D3FF10C954F5231D9D9FFC3B24B97 /* WebKit.framework */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 13FD6AE3B7623771334FA04D667E8EFE /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + proxyType = 1; + remoteGlobalIDString = A780EA66685A65A6CA9F571B6AE6373A; + remoteInfo = ReCaptcha; + }; + 1C001F2BEBEBC14E47A856F8DC901B72 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + proxyType = 1; + remoteGlobalIDString = AE4B52453D09DB95D6921BBB156B62D9; + remoteInfo = Result; + }; + 969EF06BC0555B9597BE86B1370F31E1 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + proxyType = 1; + remoteGlobalIDString = AE76AE6619A71A9FDE73E26754949342; + remoteInfo = "ReCaptcha-ReCaptcha"; + }; + F34E33B34E17D158850AA10918985510 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + proxyType = 1; + remoteGlobalIDString = AE4B52453D09DB95D6921BBB156B62D9; + remoteInfo = Result; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXFileReference section */ + 05E36C6D521CB2BDC81382C53AD32B4C /* Pods-ReCaptcha_Example-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-ReCaptcha_Example-frameworks.sh"; sourceTree = ""; }; + 0F3C67618EB14552C445E0B5A4284178 /* ReCaptcha.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = ReCaptcha.modulemap; sourceTree = ""; }; + 1302514B18C76A103910BBAD877D166C /* ReCaptcha.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = ReCaptcha.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 194D3FF10C954F5231D9D9FFC3B24B97 /* WebKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = WebKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS10.0.sdk/System/Library/Frameworks/WebKit.framework; sourceTree = DEVELOPER_DIR; }; + 1BBD968DC9E8B1EF7AFC17491AC787C5 /* Pods_ReCaptcha_Tests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_ReCaptcha_Tests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 2696BBF3002833F84D7BBFB690775BAC /* NSError+ReCaptcha.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "NSError+ReCaptcha.swift"; sourceTree = ""; }; + 2C6141357C8A2C3EC4E29261786474F5 /* Pods-ReCaptcha_Tests-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-ReCaptcha_Tests-frameworks.sh"; sourceTree = ""; }; + 2D886642369DDC77EE006B67347A278C /* Pods-ReCaptcha_Example-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-ReCaptcha_Example-umbrella.h"; sourceTree = ""; }; + 3591372A8E2201386DA277EDC8D74273 /* Pods-ReCaptcha_Tests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-ReCaptcha_Tests.debug.xcconfig"; sourceTree = ""; }; + 388AC740E0D6B95ED251ED41FF6AC0C3 /* Result.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Result.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 3DB673F7166BA1E575AB7C0DB38C81F7 /* Pods-ReCaptcha_Tests-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-ReCaptcha_Tests-umbrella.h"; sourceTree = ""; }; + 3ED0A381EF34C67CAAC78FDFCEDC07E4 /* Result.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = Result.modulemap; sourceTree = ""; }; + 3F4B43B754D189EDA6AEC9F621E7D907 /* Pods-ReCaptcha_Tests-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-ReCaptcha_Tests-acknowledgements.markdown"; sourceTree = ""; }; + 5652FA1D048C183500D46500CD7F1B5C /* Pods-ReCaptcha_Tests-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-ReCaptcha_Tests-dummy.m"; sourceTree = ""; }; + 59EF6D2D37AD23347D23B18759F4B584 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 5D11EB4D17E17AEE91F2EC79D126A6CE /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS10.0.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; + 6176EA776BE0FF6765118608D9C1D74C /* Result.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Result.swift; path = Result/Result.swift; sourceTree = ""; }; + 62900FD6C626E97C780C51579A73F9EB /* Pods-ReCaptcha_Example.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-ReCaptcha_Example.debug.xcconfig"; sourceTree = ""; }; + 64DBA9825BA5C1B9707AE400C6E46E44 /* ReCaptcha-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "ReCaptcha-prefix.pch"; sourceTree = ""; }; + 6610BC14661950BC1AE42910B59A753F /* ResultProtocol.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ResultProtocol.swift; path = Result/ResultProtocol.swift; sourceTree = ""; }; + 68F9C07A6A88B0BDDBADCDD63BA4C812 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 6C596433623D8E1AD987355F94151C70 /* Pods-ReCaptcha_Example-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-ReCaptcha_Example-acknowledgements.markdown"; sourceTree = ""; }; + 6D23D937A9AA07BC25EC3B2AE6D89493 /* Result-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Result-umbrella.h"; sourceTree = ""; }; + 76AA3C64A8C660A913CF4406AB01DAE6 /* ReCaptchaDecoder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ReCaptchaDecoder.swift; sourceTree = ""; }; + 825B334653D7D2CC3992190AB7153EFD /* Pods_ReCaptcha_Example.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_ReCaptcha_Example.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 8D6A73AEF707F7B80555FB4C6D0AE8B1 /* ReCaptcha.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = ReCaptcha.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; + 9238C5E9356387A5266616A04EB9157C /* recaptcha.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = recaptcha.html; path = ../Assets/recaptcha.html; sourceTree = ""; }; + 93A4A3777CF96A4AAC1D13BA6DCCEA73 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; + 9598A1D589780681FB3D4A9D2F0FCB4C /* Pods-ReCaptcha_Example.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = "Pods-ReCaptcha_Example.modulemap"; sourceTree = ""; }; + 9C98E60BE8B84C0FC11FA581866218C1 /* Result-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Result-prefix.pch"; sourceTree = ""; }; + 9E554E47200AD3CF97069797C674739E /* ResourceBundle-ReCaptcha-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-ReCaptcha-Info.plist"; sourceTree = ""; }; + 9FEF98AE6C2703B704C7CCDD26E984F9 /* ReCaptcha-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "ReCaptcha-dummy.m"; sourceTree = ""; }; + A1DAD885043B473B6130B3515753FCB6 /* Pods-ReCaptcha_Tests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-ReCaptcha_Tests.release.xcconfig"; sourceTree = ""; }; + A333379C31B2C318AB1EA4FD883919D4 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + A9D3BCDEAC6907A24696551AD6A9017C /* Result.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Result.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + AD55BF868143971E87D196794070A4A6 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + B70C2C50740254B2A20F415C99238743 /* Pods-ReCaptcha_Example-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-ReCaptcha_Example-acknowledgements.plist"; sourceTree = ""; }; + BED46AF7177DEDBA70ED4837F4105194 /* ReCaptcha.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ReCaptcha.swift; sourceTree = ""; }; + C61D698139194665CC9FFE255F3B223E /* Pods-ReCaptcha_Tests-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-ReCaptcha_Tests-acknowledgements.plist"; sourceTree = ""; }; + C81BC5631E83EA67C16F6111189C702F /* Pods-ReCaptcha_Tests.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = "Pods-ReCaptcha_Tests.modulemap"; sourceTree = ""; }; + C9F7FE0F317532EB04548899EF6DDCC4 /* ReCaptcha.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = ReCaptcha.xcconfig; sourceTree = ""; }; + CE3C3C3A3C81109E9A35FCB94824801C /* Pods-ReCaptcha_Tests-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-ReCaptcha_Tests-resources.sh"; sourceTree = ""; }; + CE6B1DFD448D15311A78A714361E03B1 /* Result.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Result.xcconfig; sourceTree = ""; }; + E19F73201B61C4C951C8D3515F75AA5B /* Pods-ReCaptcha_Example-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-ReCaptcha_Example-resources.sh"; sourceTree = ""; }; + E40B465278666A73517786B7DF414897 /* Result-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Result-dummy.m"; sourceTree = ""; }; + E86A3010BA786588696C2DA451FEC3CC /* ReCaptchaWebViewManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ReCaptchaWebViewManager.swift; sourceTree = ""; }; + ED73DFFB6CF96BFFBD3FC4D490791EC8 /* Pods-ReCaptcha_Example-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-ReCaptcha_Example-dummy.m"; sourceTree = ""; }; + F626FC7FB9F0A4AF8DC609B578962190 /* ReCaptcha-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "ReCaptcha-umbrella.h"; sourceTree = ""; }; + FF12EBFEE97656788B5F62991A1092A7 /* Pods-ReCaptcha_Example.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-ReCaptcha_Example.release.xcconfig"; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 287627425B3EF1CDF6C724B9B2D9C43D /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + C7D44755414EE448C770FA1AF7066504 /* Foundation.framework in Frameworks */, + E7B30EA3127612E91CEC570C9423E10E /* Result.framework in Frameworks */, + F5885380A2104208F52D4BD965B1D043 /* WebKit.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 38F2C684A54E1C2565A8104C2BB7AA5D /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + B81E6C153CDA12F3F2633E2513DE8853 /* Foundation.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 5FA469CD5B9F4030B42433C96862D5DA /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 1BEAC1666AC159742F6BA53ABC0CDFC1 /* Foundation.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 924A0EC6B102C6978320657A19DA9210 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + F1529CC0F497F06CE1F681D56EB7DA14 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + CF4B3855232F3698616F9121E67E7B3D /* Foundation.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 02E73279F393727549A733E4A449F96D /* ReCaptcha */ = { + isa = PBXGroup; + children = ( + FC3660C1EA88B53A50F678BB46203269 /* Assets */, + ); + path = ReCaptcha; + sourceTree = ""; + }; + 0F798CEA942E3E7F8427620A7D94EA00 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 388AC740E0D6B95ED251ED41FF6AC0C3 /* Result.framework */, + 8D670F63500C33CCF8B112484A2CE9B3 /* iOS */, + ); + name = Frameworks; + sourceTree = ""; + }; + 0FC7A21DE91315E2936C966F1BBB7B67 /* Pods-ReCaptcha_Example */ = { + isa = PBXGroup; + children = ( + 59EF6D2D37AD23347D23B18759F4B584 /* Info.plist */, + 9598A1D589780681FB3D4A9D2F0FCB4C /* Pods-ReCaptcha_Example.modulemap */, + 6C596433623D8E1AD987355F94151C70 /* Pods-ReCaptcha_Example-acknowledgements.markdown */, + B70C2C50740254B2A20F415C99238743 /* Pods-ReCaptcha_Example-acknowledgements.plist */, + ED73DFFB6CF96BFFBD3FC4D490791EC8 /* Pods-ReCaptcha_Example-dummy.m */, + 05E36C6D521CB2BDC81382C53AD32B4C /* Pods-ReCaptcha_Example-frameworks.sh */, + E19F73201B61C4C951C8D3515F75AA5B /* Pods-ReCaptcha_Example-resources.sh */, + 2D886642369DDC77EE006B67347A278C /* Pods-ReCaptcha_Example-umbrella.h */, + 62900FD6C626E97C780C51579A73F9EB /* Pods-ReCaptcha_Example.debug.xcconfig */, + FF12EBFEE97656788B5F62991A1092A7 /* Pods-ReCaptcha_Example.release.xcconfig */, + ); + name = "Pods-ReCaptcha_Example"; + path = "Target Support Files/Pods-ReCaptcha_Example"; + sourceTree = ""; + }; + 11BDBBC6C59C8A06930EA17E2027FE52 /* Support Files */ = { + isa = PBXGroup; + children = ( + 68F9C07A6A88B0BDDBADCDD63BA4C812 /* Info.plist */, + 0F3C67618EB14552C445E0B5A4284178 /* ReCaptcha.modulemap */, + C9F7FE0F317532EB04548899EF6DDCC4 /* ReCaptcha.xcconfig */, + 9FEF98AE6C2703B704C7CCDD26E984F9 /* ReCaptcha-dummy.m */, + 64DBA9825BA5C1B9707AE400C6E46E44 /* ReCaptcha-prefix.pch */, + F626FC7FB9F0A4AF8DC609B578962190 /* ReCaptcha-umbrella.h */, + 9E554E47200AD3CF97069797C674739E /* ResourceBundle-ReCaptcha-Info.plist */, + ); + name = "Support Files"; + path = "Example/Pods/Target Support Files/ReCaptcha"; + sourceTree = ""; + }; + 2B41D542834EB41FE9EB7FB5E10B2771 /* Pods-ReCaptcha_Tests */ = { + isa = PBXGroup; + children = ( + AD55BF868143971E87D196794070A4A6 /* Info.plist */, + C81BC5631E83EA67C16F6111189C702F /* Pods-ReCaptcha_Tests.modulemap */, + 3F4B43B754D189EDA6AEC9F621E7D907 /* Pods-ReCaptcha_Tests-acknowledgements.markdown */, + C61D698139194665CC9FFE255F3B223E /* Pods-ReCaptcha_Tests-acknowledgements.plist */, + 5652FA1D048C183500D46500CD7F1B5C /* Pods-ReCaptcha_Tests-dummy.m */, + 2C6141357C8A2C3EC4E29261786474F5 /* Pods-ReCaptcha_Tests-frameworks.sh */, + CE3C3C3A3C81109E9A35FCB94824801C /* Pods-ReCaptcha_Tests-resources.sh */, + 3DB673F7166BA1E575AB7C0DB38C81F7 /* Pods-ReCaptcha_Tests-umbrella.h */, + 3591372A8E2201386DA277EDC8D74273 /* Pods-ReCaptcha_Tests.debug.xcconfig */, + A1DAD885043B473B6130B3515753FCB6 /* Pods-ReCaptcha_Tests.release.xcconfig */, + ); + name = "Pods-ReCaptcha_Tests"; + path = "Target Support Files/Pods-ReCaptcha_Tests"; + sourceTree = ""; + }; + 48BFADE58E1F1A94B50A43056945AD47 /* Products */ = { + isa = PBXGroup; + children = ( + 825B334653D7D2CC3992190AB7153EFD /* Pods_ReCaptcha_Example.framework */, + 1BBD968DC9E8B1EF7AFC17491AC787C5 /* Pods_ReCaptcha_Tests.framework */, + 8D6A73AEF707F7B80555FB4C6D0AE8B1 /* ReCaptcha.bundle */, + 1302514B18C76A103910BBAD877D166C /* ReCaptcha.framework */, + A9D3BCDEAC6907A24696551AD6A9017C /* Result.framework */, + ); + name = Products; + sourceTree = ""; + }; + 49ACE9DE8C7763DF182AB8111D8BE095 /* Classes */ = { + isa = PBXGroup; + children = ( + 9238C5E9356387A5266616A04EB9157C /* recaptcha.html */, + 2696BBF3002833F84D7BBFB690775BAC /* NSError+ReCaptcha.swift */, + BED46AF7177DEDBA70ED4837F4105194 /* ReCaptcha.swift */, + 76AA3C64A8C660A913CF4406AB01DAE6 /* ReCaptchaDecoder.swift */, + E86A3010BA786588696C2DA451FEC3CC /* ReCaptchaWebViewManager.swift */, + ); + path = Classes; + sourceTree = ""; + }; + 4FEBFB47C3758C399FEE5A6EF5118C8D /* Result */ = { + isa = PBXGroup; + children = ( + 6176EA776BE0FF6765118608D9C1D74C /* Result.swift */, + 6610BC14661950BC1AE42910B59A753F /* ResultProtocol.swift */, + D6BD6605746D544817B5A9DFA59D6545 /* Support Files */, + ); + path = Result; + sourceTree = ""; + }; + 5137DE76FAA32398C808B1361A5E05AF /* Resources */ = { + isa = PBXGroup; + children = ( + 02E73279F393727549A733E4A449F96D /* ReCaptcha */, + ); + name = Resources; + sourceTree = ""; + }; + 66F5901327024E16A3348145021DA1C7 /* Pods */ = { + isa = PBXGroup; + children = ( + 4FEBFB47C3758C399FEE5A6EF5118C8D /* Result */, + ); + name = Pods; + sourceTree = ""; + }; + 7DB346D0F39D3F0E887471402A8071AB = { + isa = PBXGroup; + children = ( + 93A4A3777CF96A4AAC1D13BA6DCCEA73 /* Podfile */, + A0175024BD3523010534F28D898B0F11 /* Development Pods */, + 0F798CEA942E3E7F8427620A7D94EA00 /* Frameworks */, + 66F5901327024E16A3348145021DA1C7 /* Pods */, + 48BFADE58E1F1A94B50A43056945AD47 /* Products */, + D78C075E2D8387446B2FA12D62DFF437 /* Targets Support Files */, + ); + sourceTree = ""; + }; + 8D670F63500C33CCF8B112484A2CE9B3 /* iOS */ = { + isa = PBXGroup; + children = ( + 5D11EB4D17E17AEE91F2EC79D126A6CE /* Foundation.framework */, + 194D3FF10C954F5231D9D9FFC3B24B97 /* WebKit.framework */, + ); + name = iOS; + sourceTree = ""; + }; + A0175024BD3523010534F28D898B0F11 /* Development Pods */ = { + isa = PBXGroup; + children = ( + E64616E28C9AA457AF0DF7C7308384E1 /* ReCaptcha */, + ); + name = "Development Pods"; + sourceTree = ""; + }; + A6F5AD08EA2545A3BBFAB8A20AD29479 /* ReCaptcha */ = { + isa = PBXGroup; + children = ( + 49ACE9DE8C7763DF182AB8111D8BE095 /* Classes */, + ); + path = ReCaptcha; + sourceTree = ""; + }; + D6BD6605746D544817B5A9DFA59D6545 /* Support Files */ = { + isa = PBXGroup; + children = ( + A333379C31B2C318AB1EA4FD883919D4 /* Info.plist */, + 3ED0A381EF34C67CAAC78FDFCEDC07E4 /* Result.modulemap */, + CE6B1DFD448D15311A78A714361E03B1 /* Result.xcconfig */, + E40B465278666A73517786B7DF414897 /* Result-dummy.m */, + 9C98E60BE8B84C0FC11FA581866218C1 /* Result-prefix.pch */, + 6D23D937A9AA07BC25EC3B2AE6D89493 /* Result-umbrella.h */, + ); + name = "Support Files"; + path = "../Target Support Files/Result"; + sourceTree = ""; + }; + D78C075E2D8387446B2FA12D62DFF437 /* Targets Support Files */ = { + isa = PBXGroup; + children = ( + 0FC7A21DE91315E2936C966F1BBB7B67 /* Pods-ReCaptcha_Example */, + 2B41D542834EB41FE9EB7FB5E10B2771 /* Pods-ReCaptcha_Tests */, + ); + name = "Targets Support Files"; + sourceTree = ""; + }; + E64616E28C9AA457AF0DF7C7308384E1 /* ReCaptcha */ = { + isa = PBXGroup; + children = ( + A6F5AD08EA2545A3BBFAB8A20AD29479 /* ReCaptcha */, + 5137DE76FAA32398C808B1361A5E05AF /* Resources */, + 11BDBBC6C59C8A06930EA17E2027FE52 /* Support Files */, + ); + name = ReCaptcha; + path = ../..; + sourceTree = ""; + }; + FC3660C1EA88B53A50F678BB46203269 /* Assets */ = { + isa = PBXGroup; + children = ( + ); + path = Assets; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXHeadersBuildPhase section */ + 0A3C6F813374A021F19006B22DF976ED /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 979C19523000D495F15CCCFB4233D432 /* Result-umbrella.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 7BB9A99AB958E11E27A7CADFFCCC77D5 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 2D51F47AE8AFC2425046E911AEDCA841 /* ReCaptcha-umbrella.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 830569FFE418106A95EC8122329E2A05 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 1CC0AD08C654995EA002961DE0A46557 /* Pods-ReCaptcha_Example-umbrella.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AC666C635DD03B05A38A2162C6DF5540 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 9FB3183454EC5B425565BD8DA7CBD96E /* Pods-ReCaptcha_Tests-umbrella.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXHeadersBuildPhase section */ + +/* Begin PBXNativeTarget section */ + 88D7EE41D95D3747C2966064904F814F /* Pods-ReCaptcha_Tests */ = { + isa = PBXNativeTarget; + buildConfigurationList = BC2A0AC40F866734B593CB3B9E150DE6 /* Build configuration list for PBXNativeTarget "Pods-ReCaptcha_Tests" */; + buildPhases = ( + BBFD59F57CE66FD6ADDEC3F65D399ECE /* Sources */, + 5FA469CD5B9F4030B42433C96862D5DA /* Frameworks */, + AC666C635DD03B05A38A2162C6DF5540 /* Headers */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "Pods-ReCaptcha_Tests"; + productName = "Pods-ReCaptcha_Tests"; + productReference = 1BBD968DC9E8B1EF7AFC17491AC787C5 /* Pods_ReCaptcha_Tests.framework */; + productType = "com.apple.product-type.framework"; + }; + A780EA66685A65A6CA9F571B6AE6373A /* ReCaptcha */ = { + isa = PBXNativeTarget; + buildConfigurationList = 149A09592BA8D2877C6B32A60AFAB88B /* Build configuration list for PBXNativeTarget "ReCaptcha" */; + buildPhases = ( + 23FF7534C0D40A847060BF370C06411A /* Sources */, + 287627425B3EF1CDF6C724B9B2D9C43D /* Frameworks */, + 9ED0FF20766A1940724CDA061D1F8180 /* Resources */, + 7BB9A99AB958E11E27A7CADFFCCC77D5 /* Headers */, + ); + buildRules = ( + ); + dependencies = ( + C3A4AB85FB4E7C769239BDF98CED997B /* PBXTargetDependency */, + FED02680A9DDA25689A84F0BDEE9000C /* PBXTargetDependency */, + ); + name = ReCaptcha; + productName = ReCaptcha; + productReference = 1302514B18C76A103910BBAD877D166C /* ReCaptcha.framework */; + productType = "com.apple.product-type.framework"; + }; + A8F745F24386675EBED2056FF31AC76A /* Pods-ReCaptcha_Example */ = { + isa = PBXNativeTarget; + buildConfigurationList = C995FCA2C2E94E9BDA8A3AD0ECE91E2D /* Build configuration list for PBXNativeTarget "Pods-ReCaptcha_Example" */; + buildPhases = ( + 6A2CBD5CBF2C5798A39DB47FFADA4798 /* Sources */, + F1529CC0F497F06CE1F681D56EB7DA14 /* Frameworks */, + 830569FFE418106A95EC8122329E2A05 /* Headers */, + ); + buildRules = ( + ); + dependencies = ( + 9175B12E00C54F6862377A87219A1E74 /* PBXTargetDependency */, + 4B8BD742DC1F5AE4EE3EE236E651AB53 /* PBXTargetDependency */, + ); + name = "Pods-ReCaptcha_Example"; + productName = "Pods-ReCaptcha_Example"; + productReference = 825B334653D7D2CC3992190AB7153EFD /* Pods_ReCaptcha_Example.framework */; + productType = "com.apple.product-type.framework"; + }; + AE4B52453D09DB95D6921BBB156B62D9 /* Result */ = { + isa = PBXNativeTarget; + buildConfigurationList = 6B67EFD2518A762E0CA55D90084CE18F /* Build configuration list for PBXNativeTarget "Result" */; + buildPhases = ( + BBEA8CD7CEB99C90FD455F3BCD3D2D38 /* Sources */, + 38F2C684A54E1C2565A8104C2BB7AA5D /* Frameworks */, + 0A3C6F813374A021F19006B22DF976ED /* Headers */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = Result; + productName = Result; + productReference = A9D3BCDEAC6907A24696551AD6A9017C /* Result.framework */; + productType = "com.apple.product-type.framework"; + }; + AE76AE6619A71A9FDE73E26754949342 /* ReCaptcha-ReCaptcha */ = { + isa = PBXNativeTarget; + buildConfigurationList = 6FC5218B00CFFC7A23F12D74A4553421 /* Build configuration list for PBXNativeTarget "ReCaptcha-ReCaptcha" */; + buildPhases = ( + F304B671E8373AB4B8A923B6E43F16F0 /* Sources */, + 924A0EC6B102C6978320657A19DA9210 /* Frameworks */, + 41C085F8B88295F014D5BB0580CB28A4 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "ReCaptcha-ReCaptcha"; + productName = "ReCaptcha-ReCaptcha"; + productReference = 8D6A73AEF707F7B80555FB4C6D0AE8B1 /* ReCaptcha.bundle */; + productType = "com.apple.product-type.bundle"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + D41D8CD98F00B204E9800998ECF8427E /* Project object */ = { + isa = PBXProject; + attributes = { + LastSwiftUpdateCheck = 0730; + LastUpgradeCheck = 0700; + }; + buildConfigurationList = 2D8E8EC45A3A1A1D94AE762CB5028504 /* Build configuration list for PBXProject "Pods" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 0; + knownRegions = ( + en, + ); + mainGroup = 7DB346D0F39D3F0E887471402A8071AB; + productRefGroup = 48BFADE58E1F1A94B50A43056945AD47 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + A8F745F24386675EBED2056FF31AC76A /* Pods-ReCaptcha_Example */, + 88D7EE41D95D3747C2966064904F814F /* Pods-ReCaptcha_Tests */, + A780EA66685A65A6CA9F571B6AE6373A /* ReCaptcha */, + AE76AE6619A71A9FDE73E26754949342 /* ReCaptcha-ReCaptcha */, + AE4B52453D09DB95D6921BBB156B62D9 /* Result */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 41C085F8B88295F014D5BB0580CB28A4 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 9ED0FF20766A1940724CDA061D1F8180 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + F210448E1E831F630022992F /* recaptcha.html in Resources */, + 45A7C5368F5E1A30457198D22BF2C890 /* ReCaptcha.bundle in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 23FF7534C0D40A847060BF370C06411A /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + DE548A0E5DA1EE39891CEA3CC0F749CF /* NSError+ReCaptcha.swift in Sources */, + 978AD73069D5DFCF45756A0D59B02137 /* ReCaptcha-dummy.m in Sources */, + 04F1AF81EF14E040ADDE66E9A4FF77C1 /* ReCaptcha.swift in Sources */, + E5B7E20202C252BC9FFCB4B3BBA81388 /* ReCaptchaDecoder.swift in Sources */, + 89A987A2CB21713B33323028B1CADE36 /* ReCaptchaWebViewManager.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 6A2CBD5CBF2C5798A39DB47FFADA4798 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 63337CFA93E87AC0131DE4083BF47F7E /* Pods-ReCaptcha_Example-dummy.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + BBEA8CD7CEB99C90FD455F3BCD3D2D38 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + AB077E986E05219328238C842A1E2666 /* Result-dummy.m in Sources */, + 0FD23512C77AB9B1D85A233FA546882C /* Result.swift in Sources */, + 93313C987515A768876BABD1C1E12737 /* ResultProtocol.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + BBFD59F57CE66FD6ADDEC3F65D399ECE /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + DB75DDF44BDB64AF9D566D145FE03B05 /* Pods-ReCaptcha_Tests-dummy.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + F304B671E8373AB4B8A923B6E43F16F0 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 4B8BD742DC1F5AE4EE3EE236E651AB53 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = Result; + target = AE4B52453D09DB95D6921BBB156B62D9 /* Result */; + targetProxy = 1C001F2BEBEBC14E47A856F8DC901B72 /* PBXContainerItemProxy */; + }; + 9175B12E00C54F6862377A87219A1E74 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = ReCaptcha; + target = A780EA66685A65A6CA9F571B6AE6373A /* ReCaptcha */; + targetProxy = 13FD6AE3B7623771334FA04D667E8EFE /* PBXContainerItemProxy */; + }; + C3A4AB85FB4E7C769239BDF98CED997B /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "ReCaptcha-ReCaptcha"; + target = AE76AE6619A71A9FDE73E26754949342 /* ReCaptcha-ReCaptcha */; + targetProxy = 969EF06BC0555B9597BE86B1370F31E1 /* PBXContainerItemProxy */; + }; + FED02680A9DDA25689A84F0BDEE9000C /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = Result; + target = AE4B52453D09DB95D6921BBB156B62D9 /* Result */; + targetProxy = F34E33B34E17D158850AA10918985510 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin XCBuildConfiguration section */ + 1CFF1C956539A7C841FF8FED455A69E1 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = C9F7FE0F317532EB04548899EF6DDCC4 /* ReCaptcha.xcconfig */; + buildSettings = { + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = dwarf; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_NO_COMMON_BLOCKS = YES; + GCC_PREFIX_HEADER = "Target Support Files/ReCaptcha/ReCaptcha-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/ReCaptcha/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = "Target Support Files/ReCaptcha/ReCaptcha.modulemap"; + MTL_ENABLE_DEBUG_INFO = YES; + PRODUCT_NAME = ReCaptcha; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 3.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + 386EE74A5EB0D8137075637AC2C0151A /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = C9F7FE0F317532EB04548899EF6DDCC4 /* ReCaptcha.xcconfig */; + buildSettings = { + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/ReCaptcha"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_NO_COMMON_BLOCKS = YES; + INFOPLIST_FILE = "Target Support Files/ReCaptcha/ResourceBundle-ReCaptcha-Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + PRODUCT_NAME = ReCaptcha; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + WRAPPER_EXTENSION = bundle; + }; + name = Release; + }; + 55FF47D0F851DE0483EC8B8AE048D341 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 62900FD6C626E97C780C51579A73F9EB /* Pods-ReCaptcha_Example.debug.xcconfig */; + buildSettings = { + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = dwarf; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_NO_COMMON_BLOCKS = YES; + INFOPLIST_FILE = "Target Support Files/Pods-ReCaptcha_Example/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.3; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-ReCaptcha_Example/Pods-ReCaptcha_Example.modulemap"; + MTL_ENABLE_DEBUG_INFO = YES; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = Pods_ReCaptcha_Example; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + 602DBDC91741995BE440D78E793AEE09 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = A1DAD885043B473B6130B3515753FCB6 /* Pods-ReCaptcha_Tests.release.xcconfig */; + buildSettings = { + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_NO_COMMON_BLOCKS = YES; + INFOPLIST_FILE = "Target Support Files/Pods-ReCaptcha_Tests/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.3; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-ReCaptcha_Tests/Pods-ReCaptcha_Tests.modulemap"; + MTL_ENABLE_DEBUG_INFO = NO; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = Pods_ReCaptcha_Tests; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; + 8DED8AD26D381A6ACFF202E5217EC498 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGNING_REQUIRED = NO; + COPY_PHASE_STRIP = YES; + ENABLE_NS_ASSERTIONS = NO; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_PREPROCESSOR_DEFINITIONS = ( + "POD_CONFIGURATION_RELEASE=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.3; + PROVISIONING_PROFILE_SPECIFIER = NO_SIGNING/; + STRIP_INSTALLED_PRODUCT = NO; + SYMROOT = "${SRCROOT}/../build"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 97A7D05167F81E4003C611BCBDCA647B /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = C9F7FE0F317532EB04548899EF6DDCC4 /* ReCaptcha.xcconfig */; + buildSettings = { + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/ReCaptcha"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_NO_COMMON_BLOCKS = YES; + INFOPLIST_FILE = "Target Support Files/ReCaptcha/ResourceBundle-ReCaptcha-Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + PRODUCT_NAME = ReCaptcha; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + WRAPPER_EXTENSION = bundle; + }; + name = Debug; + }; + 9E1E4E48AF2EAB23169E611BF694090A /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGNING_REQUIRED = NO; + COPY_PHASE_STRIP = NO; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "POD_CONFIGURATION_DEBUG=1", + "DEBUG=1", + "$(inherited)", + ); + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.3; + ONLY_ACTIVE_ARCH = YES; + PROVISIONING_PROFILE_SPECIFIER = NO_SIGNING/; + STRIP_INSTALLED_PRODUCT = NO; + SYMROOT = "${SRCROOT}/../build"; + }; + name = Debug; + }; + A906390ACD653F5294FF495DCFD52F2C /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = CE6B1DFD448D15311A78A714361E03B1 /* Result.xcconfig */; + buildSettings = { + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_NO_COMMON_BLOCKS = YES; + GCC_PREFIX_HEADER = "Target Support Files/Result/Result-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/Result/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = "Target Support Files/Result/Result.modulemap"; + MTL_ENABLE_DEBUG_INFO = NO; + PRODUCT_NAME = Result; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_VERSION = 3.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; + C6810E50DC89F3050C3F6819692A121C /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = C9F7FE0F317532EB04548899EF6DDCC4 /* ReCaptcha.xcconfig */; + buildSettings = { + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_NO_COMMON_BLOCKS = YES; + GCC_PREFIX_HEADER = "Target Support Files/ReCaptcha/ReCaptcha-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/ReCaptcha/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = "Target Support Files/ReCaptcha/ReCaptcha.modulemap"; + MTL_ENABLE_DEBUG_INFO = NO; + PRODUCT_NAME = ReCaptcha; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_VERSION = 3.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; + EFCB419752B3FACEBBC56B27EA740864 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = FF12EBFEE97656788B5F62991A1092A7 /* Pods-ReCaptcha_Example.release.xcconfig */; + buildSettings = { + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_NO_COMMON_BLOCKS = YES; + INFOPLIST_FILE = "Target Support Files/Pods-ReCaptcha_Example/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.3; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-ReCaptcha_Example/Pods-ReCaptcha_Example.modulemap"; + MTL_ENABLE_DEBUG_INFO = NO; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = Pods_ReCaptcha_Example; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; + F644F649FA2C865D43F3B75C76A84D1D /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 3591372A8E2201386DA277EDC8D74273 /* Pods-ReCaptcha_Tests.debug.xcconfig */; + buildSettings = { + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = dwarf; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_NO_COMMON_BLOCKS = YES; + INFOPLIST_FILE = "Target Support Files/Pods-ReCaptcha_Tests/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.3; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-ReCaptcha_Tests/Pods-ReCaptcha_Tests.modulemap"; + MTL_ENABLE_DEBUG_INFO = YES; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = Pods_ReCaptcha_Tests; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + F702213F1B3D5E3C41CB1B99EFAE48B5 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = CE6B1DFD448D15311A78A714361E03B1 /* Result.xcconfig */; + buildSettings = { + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = dwarf; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_NO_COMMON_BLOCKS = YES; + GCC_PREFIX_HEADER = "Target Support Files/Result/Result-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/Result/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = "Target Support Files/Result/Result.modulemap"; + MTL_ENABLE_DEBUG_INFO = YES; + PRODUCT_NAME = Result; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 3.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 149A09592BA8D2877C6B32A60AFAB88B /* Build configuration list for PBXNativeTarget "ReCaptcha" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 1CFF1C956539A7C841FF8FED455A69E1 /* Debug */, + C6810E50DC89F3050C3F6819692A121C /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 2D8E8EC45A3A1A1D94AE762CB5028504 /* Build configuration list for PBXProject "Pods" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 9E1E4E48AF2EAB23169E611BF694090A /* Debug */, + 8DED8AD26D381A6ACFF202E5217EC498 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 6B67EFD2518A762E0CA55D90084CE18F /* Build configuration list for PBXNativeTarget "Result" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + F702213F1B3D5E3C41CB1B99EFAE48B5 /* Debug */, + A906390ACD653F5294FF495DCFD52F2C /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 6FC5218B00CFFC7A23F12D74A4553421 /* Build configuration list for PBXNativeTarget "ReCaptcha-ReCaptcha" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 97A7D05167F81E4003C611BCBDCA647B /* Debug */, + 386EE74A5EB0D8137075637AC2C0151A /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + BC2A0AC40F866734B593CB3B9E150DE6 /* Build configuration list for PBXNativeTarget "Pods-ReCaptcha_Tests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + F644F649FA2C865D43F3B75C76A84D1D /* Debug */, + 602DBDC91741995BE440D78E793AEE09 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + C995FCA2C2E94E9BDA8A3AD0ECE91E2D /* Build configuration list for PBXNativeTarget "Pods-ReCaptcha_Example" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 55FF47D0F851DE0483EC8B8AE048D341 /* Debug */, + EFCB419752B3FACEBBC56B27EA740864 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = D41D8CD98F00B204E9800998ECF8427E /* Project object */; +} diff --git a/Example/Pods/Result/LICENSE b/Example/Pods/Result/LICENSE new file mode 100644 index 0000000..3026ee1 --- /dev/null +++ b/Example/Pods/Result/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2014 Rob Rix + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/Example/Pods/Result/README.md b/Example/Pods/Result/README.md new file mode 100644 index 0000000..7343ade --- /dev/null +++ b/Example/Pods/Result/README.md @@ -0,0 +1,113 @@ +# Result + +[![Build Status](https://travis-ci.org/antitypical/Result.svg?branch=master)](https://travis-ci.org/antitypical/Result) +[![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage) +[![CocoaPods](https://img.shields.io/cocoapods/v/Result.svg)](https://cocoapods.org/) +[![Reference Status](https://www.versioneye.com/objective-c/result/reference_badge.svg?style=flat)](https://www.versioneye.com/objective-c/result/references) + +This is a Swift µframework providing `Result`. + +`Result` values are either successful (wrapping `Value`) or failed (wrapping `Error`). This is similar to Swift’s native `Optional` type: `success` is like `some`, and `failure` is like `none` except with an associated `Error` value. The addition of an associated `Error` allows errors to be passed along for logging or displaying to the user. + +Using this µframework instead of rolling your own `Result` type allows you to easily interface with other frameworks that also use `Result`. + +## Use + +Use `Result` whenever an operation has the possibility of failure. Consider the following example of a function that tries to extract a `String` for a given key from a JSON `Dictionary`. + +```swift +typealias JSONObject = [String: Any] + +enum JSONError: Error { + case noSuchKey(String) + case typeMismatch +} + +func stringForKey(json: JSONObject, key: String) -> Result { + guard let value = json[key] else { + return .failure(.noSuchKey(key)) + } + + if let value = value as? String { + return .success(value) + } + else { + return .failure(.typeMismatch) + } +} +``` + +This function provides a more robust wrapper around the default subscripting provided by `Dictionary`. Rather than return `Any?`, it returns a `Result` that either contains the `String` value for the given key, or an `ErrorType` detailing what went wrong. + +One simple way to handle a `Result` is to deconstruct it using a `switch` statement. + +```swift +switch stringForKey(json, key: "email") { + +case let .success(email): + print("The email is \(email)") + +case let .failure(.noSuchKey(key)): + print("\(key) is not a valid key") + +case .failure(.typeMismatch): + print("Didn't have the right type") +} +``` + +Using a `switch` statement allows powerful pattern matching, and ensures all possible results are covered. Swift 2.0 offers new ways to deconstruct enums like the `if-case` statement, but be wary as such methods do not ensure errors are handled. + +Other methods available for processing `Result` are detailed in the [API documentation](http://cocoadocs.org/docsets/Result/). + +## Result vs. Throws + +Swift 2.0 introduces error handling via throwing and catching `Error`. `Result` accomplishes the same goal by encapsulating the result instead of hijacking control flow. The `Result` abstraction enables powerful functionality such as `map` and `flatMap`, making `Result` more composable than `throw`. + +Since dealing with APIs that throw is common, you can convert such functions into a `Result` by using the `materialize` method. Conversely, a `Result` can be used to throw an error by calling `dematerialize`. + +## Higher Order Functions + +`map` and `flatMap` operate the same as `Optional.map` and `Optional.flatMap` except they apply to `Result`. + +`map` transforms a `Result` into a `Result` of a new type. It does this by taking a function that transforms the `Value` type into a new value. This transformation is only applied in the case of a `success`. In the case of a `failure`, the associated error is re-wrapped in the new `Result`. + +```swift +// transforms a Result to a Result +let idResult = intForKey(json, key:"id").map { id in String(id) } +``` + +Here, the final result is either the id as a `String`, or carries over the `failure` from the previous result. + +`flatMap` is similar to `map` in that in transforms the `Result` into another `Result`. However, the function passed into `flatMap` must return a `Result`. + +An in depth discussion of `map` and `flatMap` is beyond the scope of this documentation. If you would like a deeper understanding, read about functors and monads. This article is a good place to [start](http://www.javiersoto.me/post/106875422394). + +## Integration + +### Carthage + +1. Add this repository as a submodule and/or [add it to your Cartfile](https://github.com/Carthage/Carthage/blob/master/Documentation/Artifacts.md#cartfile) if you’re using [carthage](https://github.com/Carthage/Carthage/) to manage your dependencies. +2. Drag `Result.xcodeproj` into your project or workspace. +3. Link your target against `Result.framework`. +4. Application targets should ensure that the framework gets copied into their application bundle. (Framework targets should instead require the application linking them to include Result.) + +### Cocoapods + +```ruby +pod 'Result', '~> 3.0.0' +``` + +### Swift Package Manager + +```swift +import PackageDescription + +let package = Package( + name: "MyProject", + targets: [], + dependencies: [ + .Package(url: "https://github.com/antitypical/Result.git", + majorVersion: 3) + ] +) +``` diff --git a/Example/Pods/Result/Result/Result.swift b/Example/Pods/Result/Result/Result.swift new file mode 100644 index 0000000..b08ea8e --- /dev/null +++ b/Example/Pods/Result/Result/Result.swift @@ -0,0 +1,271 @@ +// Copyright (c) 2015 Rob Rix. All rights reserved. + +/// An enum representing either a failure with an explanatory error, or a success with a result value. +public enum Result: ResultProtocol, CustomStringConvertible, CustomDebugStringConvertible { + case success(T) + case failure(Error) + + // MARK: Constructors + + /// Constructs a success wrapping a `value`. + public init(value: T) { + self = .success(value) + } + + /// Constructs a failure wrapping an `error`. + public init(error: Error) { + self = .failure(error) + } + + /// Constructs a result from an `Optional`, failing with `Error` if `nil`. + public init(_ value: T?, failWith: @autoclosure () -> Error) { + self = value.map(Result.success) ?? .failure(failWith()) + } + + /// Constructs a result from a function that uses `throw`, failing with `Error` if throws. + public init(_ f: @autoclosure () throws -> T) { + self.init(attempt: f) + } + + /// Constructs a result from a function that uses `throw`, failing with `Error` if throws. + public init(attempt f: () throws -> T) { + do { + self = .success(try f()) + } catch { + self = .failure(error as! Error) + } + } + + // MARK: Deconstruction + + /// Returns the value from `success` Results or `throw`s the error. + public func dematerialize() throws -> T { + switch self { + case let .success(value): + return value + case let .failure(error): + throw error + } + } + + /// Case analysis for Result. + /// + /// Returns the value produced by applying `ifFailure` to `failure` Results, or `ifSuccess` to `success` Results. + public func analysis(ifSuccess: (T) -> Result, ifFailure: (Error) -> Result) -> Result { + switch self { + case let .success(value): + return ifSuccess(value) + case let .failure(value): + return ifFailure(value) + } + } + + // MARK: Errors + + /// The domain for errors constructed by Result. + public static var errorDomain: String { return "com.antitypical.Result" } + + /// The userInfo key for source functions in errors constructed by Result. + public static var functionKey: String { return "\(errorDomain).function" } + + /// The userInfo key for source file paths in errors constructed by Result. + public static var fileKey: String { return "\(errorDomain).file" } + + /// The userInfo key for source file line numbers in errors constructed by Result. + public static var lineKey: String { return "\(errorDomain).line" } + + /// Constructs an error. + public static func error(_ message: String? = nil, function: String = #function, file: String = #file, line: Int = #line) -> NSError { + var userInfo: [String: Any] = [ + functionKey: function, + fileKey: file, + lineKey: line, + ] + + if let message = message { + userInfo[NSLocalizedDescriptionKey] = message + } + + return NSError(domain: errorDomain, code: 0, userInfo: userInfo) + } + + + // MARK: CustomStringConvertible + + public var description: String { + return analysis( + ifSuccess: { ".success(\($0))" }, + ifFailure: { ".failure(\($0))" }) + } + + + // MARK: CustomDebugStringConvertible + + public var debugDescription: String { + return description + } +} + +// MARK: - Derive result from failable closure + +public func materialize(_ f: () throws -> T) -> Result { + return materialize(try f()) +} + +public func materialize(_ f: @autoclosure () throws -> T) -> Result { + do { + return .success(try f()) + } catch { + return .failure(AnyError(error)) + } +} + +@available(*, deprecated, message: "Use the overload which returns `Result` instead") +public func materialize(_ f: () throws -> T) -> Result { + return materialize(try f()) +} + +@available(*, deprecated, message: "Use the overload which returns `Result` instead") +public func materialize(_ f: @autoclosure () throws -> T) -> Result { + do { + return .success(try f()) + } catch { +// This isn't great, but it lets us maintain compatibility until this deprecated +// method can be removed. +#if _runtime(_ObjC) + return .failure(error as NSError) +#else + // https://github.com/apple/swift-corelibs-foundation/blob/swift-3.0.2-RELEASE/Foundation/NSError.swift#L314 + let userInfo = _swift_Foundation_getErrorDefaultUserInfo(error) as? [String: Any] + let nsError = NSError(domain: error._domain, code: error._code, userInfo: userInfo) + return .failure(nsError) +#endif + } +} + +// MARK: - Cocoa API conveniences + +#if !os(Linux) + +/// Constructs a `Result` with the result of calling `try` with an error pointer. +/// +/// This is convenient for wrapping Cocoa API which returns an object or `nil` + an error, by reference. e.g.: +/// +/// Result.try { NSData(contentsOfURL: URL, options: .dataReadingMapped, error: $0) } +public func `try`(_ function: String = #function, file: String = #file, line: Int = #line, `try`: (NSErrorPointer) -> T?) -> Result { + var error: NSError? + return `try`(&error).map(Result.success) ?? .failure(error ?? Result.error(function: function, file: file, line: line)) +} + +/// Constructs a `Result` with the result of calling `try` with an error pointer. +/// +/// This is convenient for wrapping Cocoa API which returns a `Bool` + an error, by reference. e.g.: +/// +/// Result.try { NSFileManager.defaultManager().removeItemAtURL(URL, error: $0) } +public func `try`(_ function: String = #function, file: String = #file, line: Int = #line, `try`: (NSErrorPointer) -> Bool) -> Result<(), NSError> { + var error: NSError? + return `try`(&error) ? + .success(()) + : .failure(error ?? Result<(), NSError>.error(function: function, file: file, line: line)) +} + +#endif + +// MARK: - ErrorProtocolConvertible conformance + +extension NSError: ErrorProtocolConvertible { + public static func error(from error: Swift.Error) -> Self { + func cast(_ error: Swift.Error) -> T { + return error as! T + } + + return cast(error) + } +} + +// MARK: - Errors + +/// An “error” that is impossible to construct. +/// +/// This can be used to describe `Result`s where failures will never +/// be generated. For example, `Result` describes a result that +/// contains an `Int`eger and is guaranteed never to be a `failure`. +public enum NoError: Swift.Error, Equatable { + public static func ==(lhs: NoError, rhs: NoError) -> Bool { + return true + } +} + +/// A type-erased error which wraps an arbitrary error instance. This should be +/// useful for generic contexts. +public struct AnyError: Swift.Error { + /// The underlying error. + public let error: Swift.Error + + public init(_ error: Swift.Error) { + if let anyError = error as? AnyError { + self = anyError + } else { + self.error = error + } + } +} + +extension AnyError: ErrorProtocolConvertible { + public static func error(from error: Error) -> AnyError { + return AnyError(error) + } +} + +extension AnyError: CustomStringConvertible { + public var description: String { + return String(describing: error) + } +} + +// There appears to be a bug in Foundation on Linux which prevents this from working: +// https://bugs.swift.org/browse/SR-3565 +// Don't forget to comment the tests back in when removing this check when it's fixed! +#if !os(Linux) + +extension AnyError: LocalizedError { + public var errorDescription: String? { + return error.localizedDescription + } + + public var failureReason: String? { + return (error as? LocalizedError)?.failureReason + } + + public var helpAnchor: String? { + return (error as? LocalizedError)?.helpAnchor + } + + public var recoverySuggestion: String? { + return (error as? LocalizedError)?.recoverySuggestion + } +} + +#endif + +// MARK: - migration support +extension Result { + @available(*, unavailable, renamed: "success") + public static func Success(_: T) -> Result { + fatalError() + } + + @available(*, unavailable, renamed: "failure") + public static func Failure(_: Error) -> Result { + fatalError() + } +} + +extension NSError { + @available(*, unavailable, renamed: "error(from:)") + public static func errorFromErrorType(_ error: Swift.Error) -> Self { + fatalError() + } +} + +import Foundation diff --git a/Example/Pods/Result/Result/ResultProtocol.swift b/Example/Pods/Result/Result/ResultProtocol.swift new file mode 100644 index 0000000..165567a --- /dev/null +++ b/Example/Pods/Result/Result/ResultProtocol.swift @@ -0,0 +1,200 @@ +// Copyright (c) 2015 Rob Rix. All rights reserved. + +/// A type that can represent either failure with an error or success with a result value. +public protocol ResultProtocol { + associatedtype Value + associatedtype Error: Swift.Error + + /// Constructs a successful result wrapping a `value`. + init(value: Value) + + /// Constructs a failed result wrapping an `error`. + init(error: Error) + + /// Case analysis for ResultProtocol. + /// + /// Returns the value produced by appliying `ifFailure` to the error if self represents a failure, or `ifSuccess` to the result value if self represents a success. + func analysis(ifSuccess: (Value) -> U, ifFailure: (Error) -> U) -> U + + /// Returns the value if self represents a success, `nil` otherwise. + /// + /// A default implementation is provided by a protocol extension. Conforming types may specialize it. + var value: Value? { get } + + /// Returns the error if self represents a failure, `nil` otherwise. + /// + /// A default implementation is provided by a protocol extension. Conforming types may specialize it. + var error: Error? { get } +} + +public extension ResultProtocol { + + /// Returns the value if self represents a success, `nil` otherwise. + public var value: Value? { + return analysis(ifSuccess: { $0 }, ifFailure: { _ in nil }) + } + + /// Returns the error if self represents a failure, `nil` otherwise. + public var error: Error? { + return analysis(ifSuccess: { _ in nil }, ifFailure: { $0 }) + } + + /// Returns a new Result by mapping `Success`es’ values using `transform`, or re-wrapping `Failure`s’ errors. + public func map(_ transform: (Value) -> U) -> Result { + return flatMap { .success(transform($0)) } + } + + /// Returns the result of applying `transform` to `Success`es’ values, or re-wrapping `Failure`’s errors. + public func flatMap(_ transform: (Value) -> Result) -> Result { + return analysis( + ifSuccess: transform, + ifFailure: Result.failure) + } + + /// Returns a Result with a tuple of the receiver and `other` values if both + /// are `Success`es, or re-wrapping the error of the earlier `Failure`. + public func fanout(_ other: @autoclosure () -> R) -> Result<(Value, R.Value), Error> + where Error == R.Error + { + return self.flatMap { left in other().map { right in (left, right) } } + } + + /// Returns a new Result by mapping `Failure`'s values using `transform`, or re-wrapping `Success`es’ values. + public func mapError(_ transform: (Error) -> Error2) -> Result { + return flatMapError { .failure(transform($0)) } + } + + /// Returns the result of applying `transform` to `Failure`’s errors, or re-wrapping `Success`es’ values. + public func flatMapError(_ transform: (Error) -> Result) -> Result { + return analysis( + ifSuccess: Result.success, + ifFailure: transform) + } + + /// Returns a new Result by mapping `Success`es’ values using `success`, and by mapping `Failure`'s values using `failure`. + public func bimap(success: (Value) -> U, failure: (Error) -> Error2) -> Result { + return analysis( + ifSuccess: { .success(success($0)) }, + ifFailure: { .failure(failure($0)) } + ) + } +} + +public extension ResultProtocol { + + // MARK: Higher-order functions + + /// Returns `self.value` if this result is a .Success, or the given value otherwise. Equivalent with `??` + public func recover(_ value: @autoclosure () -> Value) -> Value { + return self.value ?? value() + } + + /// Returns this result if it is a .Success, or the given result otherwise. Equivalent with `??` + public func recover(with result: @autoclosure () -> Self) -> Self { + return analysis( + ifSuccess: { _ in self }, + ifFailure: { _ in result() }) + } +} + +/// Protocol used to constrain `tryMap` to `Result`s with compatible `Error`s. +public protocol ErrorProtocolConvertible: Swift.Error { + static func error(from error: Swift.Error) -> Self +} + +public extension ResultProtocol where Error: ErrorProtocolConvertible { + + /// Returns the result of applying `transform` to `Success`es’ values, or wrapping thrown errors. + public func tryMap(_ transform: (Value) throws -> U) -> Result { + return flatMap { value in + do { + return .success(try transform(value)) + } + catch { + let convertedError = Error.error(from: error) + // Revisit this in a future version of Swift. https://twitter.com/jckarter/status/672931114944696321 + return .failure(convertedError) + } + } + } +} + +// MARK: - Operators + +infix operator &&& : LogicalConjunctionPrecedence + +/// Returns a Result with a tuple of `left` and `right` values if both are `Success`es, or re-wrapping the error of the earlier `Failure`. +@available(*, deprecated, renamed: "ResultProtocol.fanout(self:_:)") +public func &&& (left: L, right: @autoclosure () -> R) -> Result<(L.Value, R.Value), L.Error> + where L.Error == R.Error +{ + return left.fanout(right) +} + +precedencegroup ChainingPrecedence { + associativity: left + higherThan: TernaryPrecedence +} + +infix operator >>- : ChainingPrecedence + +/// Returns the result of applying `transform` to `Success`es’ values, or re-wrapping `Failure`’s errors. +/// +/// This is a synonym for `flatMap`. +@available(*, deprecated, renamed: "ResultProtocol.flatMap(self:_:)") +public func >>- (result: T, transform: (T.Value) -> Result) -> Result { + return result.flatMap(transform) +} + +/// Returns `true` if `left` and `right` are both `Success`es and their values are equal, or if `left` and `right` are both `Failure`s and their errors are equal. +public func == (left: T, right: T) -> Bool + where T.Value: Equatable, T.Error: Equatable +{ + if let left = left.value, let right = right.value { + return left == right + } else if let left = left.error, let right = right.error { + return left == right + } + return false +} + +/// Returns `true` if `left` and `right` represent different cases, or if they represent the same case but different values. +public func != (left: T, right: T) -> Bool + where T.Value: Equatable, T.Error: Equatable +{ + return !(left == right) +} + +/// Returns the value of `left` if it is a `Success`, or `right` otherwise. Short-circuits. +public func ?? (left: T, right: @autoclosure () -> T.Value) -> T.Value { + return left.recover(right()) +} + +/// Returns `left` if it is a `Success`es, or `right` otherwise. Short-circuits. +public func ?? (left: T, right: @autoclosure () -> T) -> T { + return left.recover(with: right()) +} + +// MARK: - migration support +@available(*, unavailable, renamed: "ResultProtocol") +public typealias ResultType = ResultProtocol + +@available(*, unavailable, renamed: "Error") +public typealias ResultErrorType = Swift.Error + +@available(*, unavailable, renamed: "ErrorProtocolConvertible") +public typealias ErrorTypeConvertible = ErrorProtocolConvertible + +extension ResultProtocol { + @available(*, unavailable, renamed: "recover(with:)") + public func recoverWith(_ result: @autoclosure () -> Self) -> Self { + fatalError() + } +} + +extension ErrorProtocolConvertible { + @available(*, unavailable, renamed: "error(from:)") + public static func errorFromErrorType(_ error: Swift.Error) -> Self { + fatalError() + } +} diff --git a/Example/Pods/Target Support Files/Pods-ReCaptcha_Example/Info.plist b/Example/Pods/Target Support Files/Pods-ReCaptcha_Example/Info.plist new file mode 100644 index 0000000..2243fe6 --- /dev/null +++ b/Example/Pods/Target Support Files/Pods-ReCaptcha_Example/Info.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIdentifier + ${PRODUCT_BUNDLE_IDENTIFIER} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.0.0 + CFBundleSignature + ???? + CFBundleVersion + ${CURRENT_PROJECT_VERSION} + NSPrincipalClass + + + diff --git a/Example/Pods/Target Support Files/Pods-ReCaptcha_Example/Pods-ReCaptcha_Example-acknowledgements.markdown b/Example/Pods/Target Support Files/Pods-ReCaptcha_Example/Pods-ReCaptcha_Example-acknowledgements.markdown new file mode 100644 index 0000000..fd6dbf4 --- /dev/null +++ b/Example/Pods/Target Support Files/Pods-ReCaptcha_Example/Pods-ReCaptcha_Example-acknowledgements.markdown @@ -0,0 +1,50 @@ +# Acknowledgements +This application makes use of the following third party libraries: + +## ReCaptcha + +Copyright (c) 2017 fjcaetano + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + + +## Result + +The MIT License (MIT) + +Copyright (c) 2014 Rob Rix + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +Generated by CocoaPods - https://cocoapods.org diff --git a/Example/Pods/Target Support Files/Pods-ReCaptcha_Example/Pods-ReCaptcha_Example-acknowledgements.plist b/Example/Pods/Target Support Files/Pods-ReCaptcha_Example/Pods-ReCaptcha_Example-acknowledgements.plist new file mode 100644 index 0000000..54ab97d --- /dev/null +++ b/Example/Pods/Target Support Files/Pods-ReCaptcha_Example/Pods-ReCaptcha_Example-acknowledgements.plist @@ -0,0 +1,88 @@ + + + + + PreferenceSpecifiers + + + FooterText + This application makes use of the following third party libraries: + Title + Acknowledgements + Type + PSGroupSpecifier + + + FooterText + Copyright (c) 2017 fjcaetano <flavio@vieiracaetano.com> + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + + License + MIT + Title + ReCaptcha + Type + PSGroupSpecifier + + + FooterText + The MIT License (MIT) + +Copyright (c) 2014 Rob Rix + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + License + MIT + Title + Result + Type + PSGroupSpecifier + + + FooterText + Generated by CocoaPods - https://cocoapods.org + Title + + Type + PSGroupSpecifier + + + StringsTable + Acknowledgements + Title + Acknowledgements + + diff --git a/Example/Pods/Target Support Files/Pods-ReCaptcha_Example/Pods-ReCaptcha_Example-dummy.m b/Example/Pods/Target Support Files/Pods-ReCaptcha_Example/Pods-ReCaptcha_Example-dummy.m new file mode 100644 index 0000000..c3fc338 --- /dev/null +++ b/Example/Pods/Target Support Files/Pods-ReCaptcha_Example/Pods-ReCaptcha_Example-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_Pods_ReCaptcha_Example : NSObject +@end +@implementation PodsDummy_Pods_ReCaptcha_Example +@end diff --git a/Example/Pods/Target Support Files/Pods-ReCaptcha_Example/Pods-ReCaptcha_Example-frameworks.sh b/Example/Pods/Target Support Files/Pods-ReCaptcha_Example/Pods-ReCaptcha_Example-frameworks.sh new file mode 100755 index 0000000..f0e2500 --- /dev/null +++ b/Example/Pods/Target Support Files/Pods-ReCaptcha_Example/Pods-ReCaptcha_Example-frameworks.sh @@ -0,0 +1,101 @@ +#!/bin/sh +set -e + +echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" +mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + +SWIFT_STDLIB_PATH="${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" + +install_framework() +{ + if [ -r "${BUILT_PRODUCTS_DIR}/$1" ]; then + local source="${BUILT_PRODUCTS_DIR}/$1" + elif [ -r "${BUILT_PRODUCTS_DIR}/$(basename "$1")" ]; then + local source="${BUILT_PRODUCTS_DIR}/$(basename "$1")" + elif [ -r "$1" ]; then + local source="$1" + fi + + local destination="${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + + if [ -L "${source}" ]; then + echo "Symlinked..." + source="$(readlink "${source}")" + fi + + # use filter instead of exclude so missing patterns dont' throw errors + echo "rsync -av --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${destination}\"" + rsync -av --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${destination}" + + local basename + basename="$(basename -s .framework "$1")" + binary="${destination}/${basename}.framework/${basename}" + if ! [ -r "$binary" ]; then + binary="${destination}/${basename}" + fi + + # Strip invalid architectures so "fat" simulator / device frameworks work on device + if [[ "$(file "$binary")" == *"dynamically linked shared library"* ]]; then + strip_invalid_archs "$binary" + fi + + # Resign the code if required by the build settings to avoid unstable apps + code_sign_if_enabled "${destination}/$(basename "$1")" + + # Embed linked Swift runtime libraries. No longer necessary as of Xcode 7. + if [ "${XCODE_VERSION_MAJOR}" -lt 7 ]; then + local swift_runtime_libs + swift_runtime_libs=$(xcrun otool -LX "$binary" | grep --color=never @rpath/libswift | sed -E s/@rpath\\/\(.+dylib\).*/\\1/g | uniq -u && exit ${PIPESTATUS[0]}) + for lib in $swift_runtime_libs; do + echo "rsync -auv \"${SWIFT_STDLIB_PATH}/${lib}\" \"${destination}\"" + rsync -auv "${SWIFT_STDLIB_PATH}/${lib}" "${destination}" + code_sign_if_enabled "${destination}/${lib}" + done + fi +} + +# Signs a framework with the provided identity +code_sign_if_enabled() { + if [ -n "${EXPANDED_CODE_SIGN_IDENTITY}" -a "${CODE_SIGNING_REQUIRED}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then + # Use the current code_sign_identitiy + echo "Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}" + local code_sign_cmd="/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS} --preserve-metadata=identifier,entitlements '$1'" + + if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then + code_sign_cmd="$code_sign_cmd &" + fi + echo "$code_sign_cmd" + eval "$code_sign_cmd" + fi +} + +# Strip invalid architectures +strip_invalid_archs() { + binary="$1" + # Get architectures for current file + archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | rev)" + stripped="" + for arch in $archs; do + if ! [[ "${VALID_ARCHS}" == *"$arch"* ]]; then + # Strip non-valid architectures in-place + lipo -remove "$arch" -output "$binary" "$binary" || exit 1 + stripped="$stripped $arch" + fi + done + if [[ "$stripped" ]]; then + echo "Stripped $binary of architectures:$stripped" + fi +} + + +if [[ "$CONFIGURATION" == "Debug" ]]; then + install_framework "$BUILT_PRODUCTS_DIR/ReCaptcha/ReCaptcha.framework" + install_framework "$BUILT_PRODUCTS_DIR/Result/Result.framework" +fi +if [[ "$CONFIGURATION" == "Release" ]]; then + install_framework "$BUILT_PRODUCTS_DIR/ReCaptcha/ReCaptcha.framework" + install_framework "$BUILT_PRODUCTS_DIR/Result/Result.framework" +fi +if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then + wait +fi diff --git a/Example/Pods/Target Support Files/Pods-ReCaptcha_Example/Pods-ReCaptcha_Example-resources.sh b/Example/Pods/Target Support Files/Pods-ReCaptcha_Example/Pods-ReCaptcha_Example-resources.sh new file mode 100755 index 0000000..4602c68 --- /dev/null +++ b/Example/Pods/Target Support Files/Pods-ReCaptcha_Example/Pods-ReCaptcha_Example-resources.sh @@ -0,0 +1,99 @@ +#!/bin/sh +set -e + +mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" + +RESOURCES_TO_COPY=${PODS_ROOT}/resources-to-copy-${TARGETNAME}.txt +> "$RESOURCES_TO_COPY" + +XCASSET_FILES=() + +case "${TARGETED_DEVICE_FAMILY}" in + 1,2) + TARGET_DEVICE_ARGS="--target-device ipad --target-device iphone" + ;; + 1) + TARGET_DEVICE_ARGS="--target-device iphone" + ;; + 2) + TARGET_DEVICE_ARGS="--target-device ipad" + ;; + 3) + TARGET_DEVICE_ARGS="--target-device tv" + ;; + *) + TARGET_DEVICE_ARGS="--target-device mac" + ;; +esac + +install_resource() +{ + if [[ "$1" = /* ]] ; then + RESOURCE_PATH="$1" + else + RESOURCE_PATH="${PODS_ROOT}/$1" + fi + if [[ ! -e "$RESOURCE_PATH" ]] ; then + cat << EOM +error: Resource "$RESOURCE_PATH" not found. Run 'pod install' to update the copy resources script. +EOM + exit 1 + fi + case $RESOURCE_PATH in + *.storyboard) + 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}" + 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} + ;; + *.xib) + 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}" + 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} + ;; + *.framework) + echo "mkdir -p ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + mkdir -p "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + echo "rsync -av $RESOURCE_PATH ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + rsync -av "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + ;; + *.xcdatamodel) + echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH"`.mom\"" + xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodel`.mom" + ;; + *.xcdatamodeld) + echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd\"" + xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd" + ;; + *.xcmappingmodel) + echo "xcrun mapc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm\"" + xcrun mapc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm" + ;; + *.xcassets) + ABSOLUTE_XCASSET_FILE="$RESOURCE_PATH" + XCASSET_FILES+=("$ABSOLUTE_XCASSET_FILE") + ;; + *) + echo "$RESOURCE_PATH" + echo "$RESOURCE_PATH" >> "$RESOURCES_TO_COPY" + ;; + esac +} + +mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" +rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" +if [[ "${ACTION}" == "install" ]] && [[ "${SKIP_INSTALL}" == "NO" ]]; then + mkdir -p "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" + rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" +fi +rm -f "$RESOURCES_TO_COPY" + +if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ -n "$XCASSET_FILES" ] +then + # Find all other xcassets (this unfortunately includes those of path pods and other targets). + OTHER_XCASSETS=$(find "$PWD" -iname "*.xcassets" -type d) + while read line; do + if [[ $line != "${PODS_ROOT}*" ]]; then + XCASSET_FILES+=("$line") + fi + done <<<"$OTHER_XCASSETS" + + 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}" +fi diff --git a/Example/Pods/Target Support Files/Pods-ReCaptcha_Example/Pods-ReCaptcha_Example-umbrella.h b/Example/Pods/Target Support Files/Pods-ReCaptcha_Example/Pods-ReCaptcha_Example-umbrella.h new file mode 100644 index 0000000..d9b5543 --- /dev/null +++ b/Example/Pods/Target Support Files/Pods-ReCaptcha_Example/Pods-ReCaptcha_Example-umbrella.h @@ -0,0 +1,16 @@ +#ifdef __OBJC__ +#import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif + + +FOUNDATION_EXPORT double Pods_ReCaptcha_ExampleVersionNumber; +FOUNDATION_EXPORT const unsigned char Pods_ReCaptcha_ExampleVersionString[]; + diff --git a/Example/Pods/Target Support Files/Pods-ReCaptcha_Example/Pods-ReCaptcha_Example.debug.xcconfig b/Example/Pods/Target Support Files/Pods-ReCaptcha_Example/Pods-ReCaptcha_Example.debug.xcconfig new file mode 100644 index 0000000..de54f28 --- /dev/null +++ b/Example/Pods/Target Support Files/Pods-ReCaptcha_Example/Pods-ReCaptcha_Example.debug.xcconfig @@ -0,0 +1,10 @@ +ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES +FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/ReCaptcha" "$PODS_CONFIGURATION_BUILD_DIR/Result" +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' +OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/ReCaptcha/ReCaptcha.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/Result/Result.framework/Headers" +OTHER_LDFLAGS = $(inherited) -framework "ReCaptcha" -framework "Result" +OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" +PODS_BUILD_DIR = $BUILD_DIR +PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT}/Pods diff --git a/Example/Pods/Target Support Files/Pods-ReCaptcha_Example/Pods-ReCaptcha_Example.modulemap b/Example/Pods/Target Support Files/Pods-ReCaptcha_Example/Pods-ReCaptcha_Example.modulemap new file mode 100644 index 0000000..1b47cc2 --- /dev/null +++ b/Example/Pods/Target Support Files/Pods-ReCaptcha_Example/Pods-ReCaptcha_Example.modulemap @@ -0,0 +1,6 @@ +framework module Pods_ReCaptcha_Example { + umbrella header "Pods-ReCaptcha_Example-umbrella.h" + + export * + module * { export * } +} diff --git a/Example/Pods/Target Support Files/Pods-ReCaptcha_Example/Pods-ReCaptcha_Example.release.xcconfig b/Example/Pods/Target Support Files/Pods-ReCaptcha_Example/Pods-ReCaptcha_Example.release.xcconfig new file mode 100644 index 0000000..de54f28 --- /dev/null +++ b/Example/Pods/Target Support Files/Pods-ReCaptcha_Example/Pods-ReCaptcha_Example.release.xcconfig @@ -0,0 +1,10 @@ +ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES +FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/ReCaptcha" "$PODS_CONFIGURATION_BUILD_DIR/Result" +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' +OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/ReCaptcha/ReCaptcha.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/Result/Result.framework/Headers" +OTHER_LDFLAGS = $(inherited) -framework "ReCaptcha" -framework "Result" +OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" +PODS_BUILD_DIR = $BUILD_DIR +PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT}/Pods diff --git a/Example/Pods/Target Support Files/Pods-ReCaptcha_Tests/Info.plist b/Example/Pods/Target Support Files/Pods-ReCaptcha_Tests/Info.plist new file mode 100644 index 0000000..2243fe6 --- /dev/null +++ b/Example/Pods/Target Support Files/Pods-ReCaptcha_Tests/Info.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIdentifier + ${PRODUCT_BUNDLE_IDENTIFIER} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.0.0 + CFBundleSignature + ???? + CFBundleVersion + ${CURRENT_PROJECT_VERSION} + NSPrincipalClass + + + diff --git a/Example/Pods/Target Support Files/Pods-ReCaptcha_Tests/Pods-ReCaptcha_Tests-acknowledgements.markdown b/Example/Pods/Target Support Files/Pods-ReCaptcha_Tests/Pods-ReCaptcha_Tests-acknowledgements.markdown new file mode 100644 index 0000000..102af75 --- /dev/null +++ b/Example/Pods/Target Support Files/Pods-ReCaptcha_Tests/Pods-ReCaptcha_Tests-acknowledgements.markdown @@ -0,0 +1,3 @@ +# Acknowledgements +This application makes use of the following third party libraries: +Generated by CocoaPods - https://cocoapods.org diff --git a/Example/Pods/Target Support Files/Pods-ReCaptcha_Tests/Pods-ReCaptcha_Tests-acknowledgements.plist b/Example/Pods/Target Support Files/Pods-ReCaptcha_Tests/Pods-ReCaptcha_Tests-acknowledgements.plist new file mode 100644 index 0000000..7acbad1 --- /dev/null +++ b/Example/Pods/Target Support Files/Pods-ReCaptcha_Tests/Pods-ReCaptcha_Tests-acknowledgements.plist @@ -0,0 +1,29 @@ + + + + + PreferenceSpecifiers + + + FooterText + This application makes use of the following third party libraries: + Title + Acknowledgements + Type + PSGroupSpecifier + + + FooterText + Generated by CocoaPods - https://cocoapods.org + Title + + Type + PSGroupSpecifier + + + StringsTable + Acknowledgements + Title + Acknowledgements + + diff --git a/Example/Pods/Target Support Files/Pods-ReCaptcha_Tests/Pods-ReCaptcha_Tests-dummy.m b/Example/Pods/Target Support Files/Pods-ReCaptcha_Tests/Pods-ReCaptcha_Tests-dummy.m new file mode 100644 index 0000000..d7404f2 --- /dev/null +++ b/Example/Pods/Target Support Files/Pods-ReCaptcha_Tests/Pods-ReCaptcha_Tests-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_Pods_ReCaptcha_Tests : NSObject +@end +@implementation PodsDummy_Pods_ReCaptcha_Tests +@end diff --git a/Example/Pods/Target Support Files/Pods-ReCaptcha_Tests/Pods-ReCaptcha_Tests-frameworks.sh b/Example/Pods/Target Support Files/Pods-ReCaptcha_Tests/Pods-ReCaptcha_Tests-frameworks.sh new file mode 100755 index 0000000..0f29f13 --- /dev/null +++ b/Example/Pods/Target Support Files/Pods-ReCaptcha_Tests/Pods-ReCaptcha_Tests-frameworks.sh @@ -0,0 +1,92 @@ +#!/bin/sh +set -e + +echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" +mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + +SWIFT_STDLIB_PATH="${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" + +install_framework() +{ + if [ -r "${BUILT_PRODUCTS_DIR}/$1" ]; then + local source="${BUILT_PRODUCTS_DIR}/$1" + elif [ -r "${BUILT_PRODUCTS_DIR}/$(basename "$1")" ]; then + local source="${BUILT_PRODUCTS_DIR}/$(basename "$1")" + elif [ -r "$1" ]; then + local source="$1" + fi + + local destination="${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + + if [ -L "${source}" ]; then + echo "Symlinked..." + source="$(readlink "${source}")" + fi + + # use filter instead of exclude so missing patterns dont' throw errors + echo "rsync -av --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${destination}\"" + rsync -av --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${destination}" + + local basename + basename="$(basename -s .framework "$1")" + binary="${destination}/${basename}.framework/${basename}" + if ! [ -r "$binary" ]; then + binary="${destination}/${basename}" + fi + + # Strip invalid architectures so "fat" simulator / device frameworks work on device + if [[ "$(file "$binary")" == *"dynamically linked shared library"* ]]; then + strip_invalid_archs "$binary" + fi + + # Resign the code if required by the build settings to avoid unstable apps + code_sign_if_enabled "${destination}/$(basename "$1")" + + # Embed linked Swift runtime libraries. No longer necessary as of Xcode 7. + if [ "${XCODE_VERSION_MAJOR}" -lt 7 ]; then + local swift_runtime_libs + swift_runtime_libs=$(xcrun otool -LX "$binary" | grep --color=never @rpath/libswift | sed -E s/@rpath\\/\(.+dylib\).*/\\1/g | uniq -u && exit ${PIPESTATUS[0]}) + for lib in $swift_runtime_libs; do + echo "rsync -auv \"${SWIFT_STDLIB_PATH}/${lib}\" \"${destination}\"" + rsync -auv "${SWIFT_STDLIB_PATH}/${lib}" "${destination}" + code_sign_if_enabled "${destination}/${lib}" + done + fi +} + +# Signs a framework with the provided identity +code_sign_if_enabled() { + if [ -n "${EXPANDED_CODE_SIGN_IDENTITY}" -a "${CODE_SIGNING_REQUIRED}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then + # Use the current code_sign_identitiy + echo "Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}" + local code_sign_cmd="/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS} --preserve-metadata=identifier,entitlements '$1'" + + if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then + code_sign_cmd="$code_sign_cmd &" + fi + echo "$code_sign_cmd" + eval "$code_sign_cmd" + fi +} + +# Strip invalid architectures +strip_invalid_archs() { + binary="$1" + # Get architectures for current file + archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | rev)" + stripped="" + for arch in $archs; do + if ! [[ "${VALID_ARCHS}" == *"$arch"* ]]; then + # Strip non-valid architectures in-place + lipo -remove "$arch" -output "$binary" "$binary" || exit 1 + stripped="$stripped $arch" + fi + done + if [[ "$stripped" ]]; then + echo "Stripped $binary of architectures:$stripped" + fi +} + +if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then + wait +fi diff --git a/Example/Pods/Target Support Files/Pods-ReCaptcha_Tests/Pods-ReCaptcha_Tests-resources.sh b/Example/Pods/Target Support Files/Pods-ReCaptcha_Tests/Pods-ReCaptcha_Tests-resources.sh new file mode 100755 index 0000000..4602c68 --- /dev/null +++ b/Example/Pods/Target Support Files/Pods-ReCaptcha_Tests/Pods-ReCaptcha_Tests-resources.sh @@ -0,0 +1,99 @@ +#!/bin/sh +set -e + +mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" + +RESOURCES_TO_COPY=${PODS_ROOT}/resources-to-copy-${TARGETNAME}.txt +> "$RESOURCES_TO_COPY" + +XCASSET_FILES=() + +case "${TARGETED_DEVICE_FAMILY}" in + 1,2) + TARGET_DEVICE_ARGS="--target-device ipad --target-device iphone" + ;; + 1) + TARGET_DEVICE_ARGS="--target-device iphone" + ;; + 2) + TARGET_DEVICE_ARGS="--target-device ipad" + ;; + 3) + TARGET_DEVICE_ARGS="--target-device tv" + ;; + *) + TARGET_DEVICE_ARGS="--target-device mac" + ;; +esac + +install_resource() +{ + if [[ "$1" = /* ]] ; then + RESOURCE_PATH="$1" + else + RESOURCE_PATH="${PODS_ROOT}/$1" + fi + if [[ ! -e "$RESOURCE_PATH" ]] ; then + cat << EOM +error: Resource "$RESOURCE_PATH" not found. Run 'pod install' to update the copy resources script. +EOM + exit 1 + fi + case $RESOURCE_PATH in + *.storyboard) + 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}" + 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} + ;; + *.xib) + 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}" + 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} + ;; + *.framework) + echo "mkdir -p ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + mkdir -p "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + echo "rsync -av $RESOURCE_PATH ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + rsync -av "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + ;; + *.xcdatamodel) + echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH"`.mom\"" + xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodel`.mom" + ;; + *.xcdatamodeld) + echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd\"" + xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd" + ;; + *.xcmappingmodel) + echo "xcrun mapc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm\"" + xcrun mapc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm" + ;; + *.xcassets) + ABSOLUTE_XCASSET_FILE="$RESOURCE_PATH" + XCASSET_FILES+=("$ABSOLUTE_XCASSET_FILE") + ;; + *) + echo "$RESOURCE_PATH" + echo "$RESOURCE_PATH" >> "$RESOURCES_TO_COPY" + ;; + esac +} + +mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" +rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" +if [[ "${ACTION}" == "install" ]] && [[ "${SKIP_INSTALL}" == "NO" ]]; then + mkdir -p "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" + rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" +fi +rm -f "$RESOURCES_TO_COPY" + +if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ -n "$XCASSET_FILES" ] +then + # Find all other xcassets (this unfortunately includes those of path pods and other targets). + OTHER_XCASSETS=$(find "$PWD" -iname "*.xcassets" -type d) + while read line; do + if [[ $line != "${PODS_ROOT}*" ]]; then + XCASSET_FILES+=("$line") + fi + done <<<"$OTHER_XCASSETS" + + 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}" +fi diff --git a/Example/Pods/Target Support Files/Pods-ReCaptcha_Tests/Pods-ReCaptcha_Tests-umbrella.h b/Example/Pods/Target Support Files/Pods-ReCaptcha_Tests/Pods-ReCaptcha_Tests-umbrella.h new file mode 100644 index 0000000..affa805 --- /dev/null +++ b/Example/Pods/Target Support Files/Pods-ReCaptcha_Tests/Pods-ReCaptcha_Tests-umbrella.h @@ -0,0 +1,16 @@ +#ifdef __OBJC__ +#import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif + + +FOUNDATION_EXPORT double Pods_ReCaptcha_TestsVersionNumber; +FOUNDATION_EXPORT const unsigned char Pods_ReCaptcha_TestsVersionString[]; + diff --git a/Example/Pods/Target Support Files/Pods-ReCaptcha_Tests/Pods-ReCaptcha_Tests.debug.xcconfig b/Example/Pods/Target Support Files/Pods-ReCaptcha_Tests/Pods-ReCaptcha_Tests.debug.xcconfig new file mode 100644 index 0000000..4776e86 --- /dev/null +++ b/Example/Pods/Target Support Files/Pods-ReCaptcha_Tests/Pods-ReCaptcha_Tests.debug.xcconfig @@ -0,0 +1,7 @@ +FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/ReCaptcha" "$PODS_CONFIGURATION_BUILD_DIR/Result" +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' +OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/ReCaptcha/ReCaptcha.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/Result/Result.framework/Headers" +PODS_BUILD_DIR = $BUILD_DIR +PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT}/Pods diff --git a/Example/Pods/Target Support Files/Pods-ReCaptcha_Tests/Pods-ReCaptcha_Tests.modulemap b/Example/Pods/Target Support Files/Pods-ReCaptcha_Tests/Pods-ReCaptcha_Tests.modulemap new file mode 100644 index 0000000..8b349cd --- /dev/null +++ b/Example/Pods/Target Support Files/Pods-ReCaptcha_Tests/Pods-ReCaptcha_Tests.modulemap @@ -0,0 +1,6 @@ +framework module Pods_ReCaptcha_Tests { + umbrella header "Pods-ReCaptcha_Tests-umbrella.h" + + export * + module * { export * } +} diff --git a/Example/Pods/Target Support Files/Pods-ReCaptcha_Tests/Pods-ReCaptcha_Tests.release.xcconfig b/Example/Pods/Target Support Files/Pods-ReCaptcha_Tests/Pods-ReCaptcha_Tests.release.xcconfig new file mode 100644 index 0000000..4776e86 --- /dev/null +++ b/Example/Pods/Target Support Files/Pods-ReCaptcha_Tests/Pods-ReCaptcha_Tests.release.xcconfig @@ -0,0 +1,7 @@ +FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/ReCaptcha" "$PODS_CONFIGURATION_BUILD_DIR/Result" +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' +OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/ReCaptcha/ReCaptcha.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/Result/Result.framework/Headers" +PODS_BUILD_DIR = $BUILD_DIR +PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT}/Pods diff --git a/Example/Pods/Target Support Files/ReCaptcha/Info.plist b/Example/Pods/Target Support Files/ReCaptcha/Info.plist new file mode 100644 index 0000000..161a9d3 --- /dev/null +++ b/Example/Pods/Target Support Files/ReCaptcha/Info.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIdentifier + ${PRODUCT_BUNDLE_IDENTIFIER} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + FMWK + CFBundleShortVersionString + 0.1.0 + CFBundleSignature + ???? + CFBundleVersion + ${CURRENT_PROJECT_VERSION} + NSPrincipalClass + + + diff --git a/Example/Pods/Target Support Files/ReCaptcha/ReCaptcha-dummy.m b/Example/Pods/Target Support Files/ReCaptcha/ReCaptcha-dummy.m new file mode 100644 index 0000000..0539ff5 --- /dev/null +++ b/Example/Pods/Target Support Files/ReCaptcha/ReCaptcha-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_ReCaptcha : NSObject +@end +@implementation PodsDummy_ReCaptcha +@end diff --git a/Example/Pods/Target Support Files/ReCaptcha/ReCaptcha-prefix.pch b/Example/Pods/Target Support Files/ReCaptcha/ReCaptcha-prefix.pch new file mode 100644 index 0000000..beb2a24 --- /dev/null +++ b/Example/Pods/Target Support Files/ReCaptcha/ReCaptcha-prefix.pch @@ -0,0 +1,12 @@ +#ifdef __OBJC__ +#import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif + diff --git a/Example/Pods/Target Support Files/ReCaptcha/ReCaptcha-umbrella.h b/Example/Pods/Target Support Files/ReCaptcha/ReCaptcha-umbrella.h new file mode 100644 index 0000000..50d62ad --- /dev/null +++ b/Example/Pods/Target Support Files/ReCaptcha/ReCaptcha-umbrella.h @@ -0,0 +1,16 @@ +#ifdef __OBJC__ +#import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif + + +FOUNDATION_EXPORT double ReCaptchaVersionNumber; +FOUNDATION_EXPORT const unsigned char ReCaptchaVersionString[]; + diff --git a/Example/Pods/Target Support Files/ReCaptcha/ReCaptcha.modulemap b/Example/Pods/Target Support Files/ReCaptcha/ReCaptcha.modulemap new file mode 100644 index 0000000..bdd73da --- /dev/null +++ b/Example/Pods/Target Support Files/ReCaptcha/ReCaptcha.modulemap @@ -0,0 +1,6 @@ +framework module ReCaptcha { + umbrella header "ReCaptcha-umbrella.h" + + export * + module * { export * } +} diff --git a/Example/Pods/Target Support Files/ReCaptcha/ReCaptcha.xcconfig b/Example/Pods/Target Support Files/ReCaptcha/ReCaptcha.xcconfig new file mode 100644 index 0000000..ffe11e5 --- /dev/null +++ b/Example/Pods/Target Support Files/ReCaptcha/ReCaptcha.xcconfig @@ -0,0 +1,12 @@ +CONFIGURATION_BUILD_DIR = $PODS_CONFIGURATION_BUILD_DIR/ReCaptcha +FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/Result" +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Public" +OTHER_LDFLAGS = -framework "WebKit" +OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" +PODS_BUILD_DIR = $BUILD_DIR +PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT} +PODS_TARGET_SRCROOT = ${PODS_ROOT}/../.. +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES diff --git a/Example/Pods/Target Support Files/ReCaptcha/ResourceBundle-ReCaptcha-Info.plist b/Example/Pods/Target Support Files/ReCaptcha/ResourceBundle-ReCaptcha-Info.plist new file mode 100644 index 0000000..99a40ff --- /dev/null +++ b/Example/Pods/Target Support Files/ReCaptcha/ResourceBundle-ReCaptcha-Info.plist @@ -0,0 +1,24 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleIdentifier + ${PRODUCT_BUNDLE_IDENTIFIER} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + BNDL + CFBundleShortVersionString + 0.1.0 + CFBundleSignature + ???? + CFBundleVersion + 1 + NSPrincipalClass + + + diff --git a/Example/Pods/Target Support Files/Result/Info.plist b/Example/Pods/Target Support Files/Result/Info.plist new file mode 100644 index 0000000..42c9fae --- /dev/null +++ b/Example/Pods/Target Support Files/Result/Info.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIdentifier + ${PRODUCT_BUNDLE_IDENTIFIER} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + FMWK + CFBundleShortVersionString + 3.2.1 + CFBundleSignature + ???? + CFBundleVersion + ${CURRENT_PROJECT_VERSION} + NSPrincipalClass + + + diff --git a/Example/Pods/Target Support Files/Result/Result-dummy.m b/Example/Pods/Target Support Files/Result/Result-dummy.m new file mode 100644 index 0000000..ba47f61 --- /dev/null +++ b/Example/Pods/Target Support Files/Result/Result-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_Result : NSObject +@end +@implementation PodsDummy_Result +@end diff --git a/Example/Pods/Target Support Files/Result/Result-prefix.pch b/Example/Pods/Target Support Files/Result/Result-prefix.pch new file mode 100644 index 0000000..beb2a24 --- /dev/null +++ b/Example/Pods/Target Support Files/Result/Result-prefix.pch @@ -0,0 +1,12 @@ +#ifdef __OBJC__ +#import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif + diff --git a/Example/Pods/Target Support Files/Result/Result-umbrella.h b/Example/Pods/Target Support Files/Result/Result-umbrella.h new file mode 100644 index 0000000..25f5eb1 --- /dev/null +++ b/Example/Pods/Target Support Files/Result/Result-umbrella.h @@ -0,0 +1,16 @@ +#ifdef __OBJC__ +#import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif + + +FOUNDATION_EXPORT double ResultVersionNumber; +FOUNDATION_EXPORT const unsigned char ResultVersionString[]; + diff --git a/Example/Pods/Target Support Files/Result/Result.modulemap b/Example/Pods/Target Support Files/Result/Result.modulemap new file mode 100644 index 0000000..c5e6a4a --- /dev/null +++ b/Example/Pods/Target Support Files/Result/Result.modulemap @@ -0,0 +1,6 @@ +framework module Result { + umbrella header "Result-umbrella.h" + + export * + module * { export * } +} diff --git a/Example/Pods/Target Support Files/Result/Result.xcconfig b/Example/Pods/Target Support Files/Result/Result.xcconfig new file mode 100644 index 0000000..c29cedf --- /dev/null +++ b/Example/Pods/Target Support Files/Result/Result.xcconfig @@ -0,0 +1,10 @@ +CONFIGURATION_BUILD_DIR = $PODS_CONFIGURATION_BUILD_DIR/Result +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Public" +OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" +PODS_BUILD_DIR = $BUILD_DIR +PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT} +PODS_TARGET_SRCROOT = ${PODS_ROOT}/Result +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES diff --git a/Example/ReCaptcha.xcodeproj/project.pbxproj b/Example/ReCaptcha.xcodeproj/project.pbxproj new file mode 100644 index 0000000..bb17692 --- /dev/null +++ b/Example/ReCaptcha.xcodeproj/project.pbxproj @@ -0,0 +1,591 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + 52549DA49C762538F7829851 /* Pods_ReCaptcha_Tests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9417A28DC340FF0BC1627B3F /* Pods_ReCaptcha_Tests.framework */; }; + 607FACD61AFB9204008FA782 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 607FACD51AFB9204008FA782 /* AppDelegate.swift */; }; + 607FACD81AFB9204008FA782 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 607FACD71AFB9204008FA782 /* ViewController.swift */; }; + 607FACDB1AFB9204008FA782 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 607FACD91AFB9204008FA782 /* Main.storyboard */; }; + 607FACDD1AFB9204008FA782 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 607FACDC1AFB9204008FA782 /* Images.xcassets */; }; + 607FACE01AFB9204008FA782 /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 607FACDE1AFB9204008FA782 /* LaunchScreen.xib */; }; + 607FACEC1AFB9204008FA782 /* Tests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 607FACEB1AFB9204008FA782 /* Tests.swift */; }; + BD850CB2DF4C9C94FC51226C /* Pods_ReCaptcha_Example.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 62BEEA62161F672468CCFD64 /* Pods_ReCaptcha_Example.framework */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 607FACE61AFB9204008FA782 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 607FACC81AFB9204008FA782 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 607FACCF1AFB9204008FA782; + remoteInfo = ReCaptcha; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXFileReference section */ + 0A2D0E5B4C6E445BF971488B /* README.md */ = {isa = PBXFileReference; includeInIndex = 1; name = README.md; path = ../README.md; sourceTree = ""; }; + 44568771DD76CFBDF2D1C83D /* Pods-ReCaptcha_Tests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ReCaptcha_Tests.release.xcconfig"; path = "Pods/Target Support Files/Pods-ReCaptcha_Tests/Pods-ReCaptcha_Tests.release.xcconfig"; sourceTree = ""; }; + 4FED8267564AACFFEE83DB15 /* Pods-ReCaptcha_Tests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ReCaptcha_Tests.debug.xcconfig"; path = "Pods/Target Support Files/Pods-ReCaptcha_Tests/Pods-ReCaptcha_Tests.debug.xcconfig"; sourceTree = ""; }; + 607FACD01AFB9204008FA782 /* ReCaptcha_Example.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = ReCaptcha_Example.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 607FACD41AFB9204008FA782 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 607FACD51AFB9204008FA782 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 607FACD71AFB9204008FA782 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; + 607FACDA1AFB9204008FA782 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + 607FACDC1AFB9204008FA782 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = ""; }; + 607FACDF1AFB9204008FA782 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/LaunchScreen.xib; sourceTree = ""; }; + 607FACE51AFB9204008FA782 /* ReCaptcha_Tests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = ReCaptcha_Tests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 607FACEA1AFB9204008FA782 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 607FACEB1AFB9204008FA782 /* Tests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Tests.swift; sourceTree = ""; }; + 62BEEA62161F672468CCFD64 /* Pods_ReCaptcha_Example.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_ReCaptcha_Example.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 62C1DD0E80E9920845E5DA51 /* ReCaptcha.podspec */ = {isa = PBXFileReference; includeInIndex = 1; name = ReCaptcha.podspec; path = ../ReCaptcha.podspec; sourceTree = ""; }; + 80FF4E03D71AACBD81A36301 /* Pods-ReCaptcha_Example.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ReCaptcha_Example.debug.xcconfig"; path = "Pods/Target Support Files/Pods-ReCaptcha_Example/Pods-ReCaptcha_Example.debug.xcconfig"; sourceTree = ""; }; + 9417A28DC340FF0BC1627B3F /* Pods_ReCaptcha_Tests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_ReCaptcha_Tests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + C2A0BDD35B5E219129E9BC65 /* Pods-ReCaptcha_Example.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ReCaptcha_Example.release.xcconfig"; path = "Pods/Target Support Files/Pods-ReCaptcha_Example/Pods-ReCaptcha_Example.release.xcconfig"; sourceTree = ""; }; + C8537003ECC47117AF54DCA9 /* LICENSE */ = {isa = PBXFileReference; includeInIndex = 1; name = LICENSE; path = ../LICENSE; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 607FACCD1AFB9204008FA782 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + BD850CB2DF4C9C94FC51226C /* Pods_ReCaptcha_Example.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 607FACE21AFB9204008FA782 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 52549DA49C762538F7829851 /* Pods_ReCaptcha_Tests.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 607FACC71AFB9204008FA782 = { + isa = PBXGroup; + children = ( + 607FACF51AFB993E008FA782 /* Podspec Metadata */, + 607FACD21AFB9204008FA782 /* Example for ReCaptcha */, + 607FACE81AFB9204008FA782 /* Tests */, + 607FACD11AFB9204008FA782 /* Products */, + 716E2370DBF48D5E2C86E802 /* Pods */, + FDC29111B59FAB9F0F44DADB /* Frameworks */, + ); + sourceTree = ""; + }; + 607FACD11AFB9204008FA782 /* Products */ = { + isa = PBXGroup; + children = ( + 607FACD01AFB9204008FA782 /* ReCaptcha_Example.app */, + 607FACE51AFB9204008FA782 /* ReCaptcha_Tests.xctest */, + ); + name = Products; + sourceTree = ""; + }; + 607FACD21AFB9204008FA782 /* Example for ReCaptcha */ = { + isa = PBXGroup; + children = ( + 607FACD51AFB9204008FA782 /* AppDelegate.swift */, + 607FACD71AFB9204008FA782 /* ViewController.swift */, + 607FACD91AFB9204008FA782 /* Main.storyboard */, + 607FACDC1AFB9204008FA782 /* Images.xcassets */, + 607FACDE1AFB9204008FA782 /* LaunchScreen.xib */, + 607FACD31AFB9204008FA782 /* Supporting Files */, + ); + name = "Example for ReCaptcha"; + path = ReCaptcha; + sourceTree = ""; + }; + 607FACD31AFB9204008FA782 /* Supporting Files */ = { + isa = PBXGroup; + children = ( + 607FACD41AFB9204008FA782 /* Info.plist */, + ); + name = "Supporting Files"; + sourceTree = ""; + }; + 607FACE81AFB9204008FA782 /* Tests */ = { + isa = PBXGroup; + children = ( + 607FACEB1AFB9204008FA782 /* Tests.swift */, + 607FACE91AFB9204008FA782 /* Supporting Files */, + ); + path = Tests; + sourceTree = ""; + }; + 607FACE91AFB9204008FA782 /* Supporting Files */ = { + isa = PBXGroup; + children = ( + 607FACEA1AFB9204008FA782 /* Info.plist */, + ); + name = "Supporting Files"; + sourceTree = ""; + }; + 607FACF51AFB993E008FA782 /* Podspec Metadata */ = { + isa = PBXGroup; + children = ( + 62C1DD0E80E9920845E5DA51 /* ReCaptcha.podspec */, + 0A2D0E5B4C6E445BF971488B /* README.md */, + C8537003ECC47117AF54DCA9 /* LICENSE */, + ); + name = "Podspec Metadata"; + sourceTree = ""; + }; + 716E2370DBF48D5E2C86E802 /* Pods */ = { + isa = PBXGroup; + children = ( + 80FF4E03D71AACBD81A36301 /* Pods-ReCaptcha_Example.debug.xcconfig */, + C2A0BDD35B5E219129E9BC65 /* Pods-ReCaptcha_Example.release.xcconfig */, + 4FED8267564AACFFEE83DB15 /* Pods-ReCaptcha_Tests.debug.xcconfig */, + 44568771DD76CFBDF2D1C83D /* Pods-ReCaptcha_Tests.release.xcconfig */, + ); + name = Pods; + sourceTree = ""; + }; + FDC29111B59FAB9F0F44DADB /* Frameworks */ = { + isa = PBXGroup; + children = ( + 62BEEA62161F672468CCFD64 /* Pods_ReCaptcha_Example.framework */, + 9417A28DC340FF0BC1627B3F /* Pods_ReCaptcha_Tests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 607FACCF1AFB9204008FA782 /* ReCaptcha_Example */ = { + isa = PBXNativeTarget; + buildConfigurationList = 607FACEF1AFB9204008FA782 /* Build configuration list for PBXNativeTarget "ReCaptcha_Example" */; + buildPhases = ( + 51299F67A8756E2B3EAE411A /* [CP] Check Pods Manifest.lock */, + 607FACCC1AFB9204008FA782 /* Sources */, + 607FACCD1AFB9204008FA782 /* Frameworks */, + 607FACCE1AFB9204008FA782 /* Resources */, + 8F03FFB3F5C55E873C23C682 /* [CP] Embed Pods Frameworks */, + ED1C0E07490C9C4B4A401061 /* [CP] Copy Pods Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = ReCaptcha_Example; + productName = ReCaptcha; + productReference = 607FACD01AFB9204008FA782 /* ReCaptcha_Example.app */; + productType = "com.apple.product-type.application"; + }; + 607FACE41AFB9204008FA782 /* ReCaptcha_Tests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 607FACF21AFB9204008FA782 /* Build configuration list for PBXNativeTarget "ReCaptcha_Tests" */; + buildPhases = ( + 32C4C887B33CF62A7DE5872D /* [CP] Check Pods Manifest.lock */, + 607FACE11AFB9204008FA782 /* Sources */, + 607FACE21AFB9204008FA782 /* Frameworks */, + 607FACE31AFB9204008FA782 /* Resources */, + 8B5691817244442ACEDE9B1B /* [CP] Embed Pods Frameworks */, + D444826FD5C8EEFF5D77456E /* [CP] Copy Pods Resources */, + ); + buildRules = ( + ); + dependencies = ( + 607FACE71AFB9204008FA782 /* PBXTargetDependency */, + ); + name = ReCaptcha_Tests; + productName = Tests; + productReference = 607FACE51AFB9204008FA782 /* ReCaptcha_Tests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 607FACC81AFB9204008FA782 /* Project object */ = { + isa = PBXProject; + attributes = { + LastSwiftUpdateCheck = 0720; + LastUpgradeCheck = 0820; + ORGANIZATIONNAME = CocoaPods; + TargetAttributes = { + 607FACCF1AFB9204008FA782 = { + CreatedOnToolsVersion = 6.3.1; + LastSwiftMigration = 0820; + }; + 607FACE41AFB9204008FA782 = { + CreatedOnToolsVersion = 6.3.1; + LastSwiftMigration = 0820; + TestTargetID = 607FACCF1AFB9204008FA782; + }; + }; + }; + buildConfigurationList = 607FACCB1AFB9204008FA782 /* Build configuration list for PBXProject "ReCaptcha" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 607FACC71AFB9204008FA782; + productRefGroup = 607FACD11AFB9204008FA782 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 607FACCF1AFB9204008FA782 /* ReCaptcha_Example */, + 607FACE41AFB9204008FA782 /* ReCaptcha_Tests */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 607FACCE1AFB9204008FA782 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 607FACDB1AFB9204008FA782 /* Main.storyboard in Resources */, + 607FACE01AFB9204008FA782 /* LaunchScreen.xib in Resources */, + 607FACDD1AFB9204008FA782 /* Images.xcassets in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 607FACE31AFB9204008FA782 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + 32C4C887B33CF62A7DE5872D /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "[CP] Check Pods Manifest.lock"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_ROOT}/../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"; + showEnvVarsInLog = 0; + }; + 51299F67A8756E2B3EAE411A /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "[CP] Check Pods Manifest.lock"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_ROOT}/../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"; + showEnvVarsInLog = 0; + }; + 8B5691817244442ACEDE9B1B /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "[CP] Embed Pods Frameworks"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-ReCaptcha_Tests/Pods-ReCaptcha_Tests-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; + 8F03FFB3F5C55E873C23C682 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "[CP] Embed Pods Frameworks"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-ReCaptcha_Example/Pods-ReCaptcha_Example-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; + D444826FD5C8EEFF5D77456E /* [CP] Copy Pods Resources */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "[CP] Copy Pods Resources"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-ReCaptcha_Tests/Pods-ReCaptcha_Tests-resources.sh\"\n"; + showEnvVarsInLog = 0; + }; + ED1C0E07490C9C4B4A401061 /* [CP] Copy Pods Resources */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "[CP] Copy Pods Resources"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-ReCaptcha_Example/Pods-ReCaptcha_Example-resources.sh\"\n"; + showEnvVarsInLog = 0; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 607FACCC1AFB9204008FA782 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 607FACD81AFB9204008FA782 /* ViewController.swift in Sources */, + 607FACD61AFB9204008FA782 /* AppDelegate.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 607FACE11AFB9204008FA782 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 607FACEC1AFB9204008FA782 /* Tests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 607FACE71AFB9204008FA782 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 607FACCF1AFB9204008FA782 /* ReCaptcha_Example */; + targetProxy = 607FACE61AFB9204008FA782 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin PBXVariantGroup section */ + 607FACD91AFB9204008FA782 /* Main.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 607FACDA1AFB9204008FA782 /* Base */, + ); + name = Main.storyboard; + sourceTree = ""; + }; + 607FACDE1AFB9204008FA782 /* LaunchScreen.xib */ = { + isa = PBXVariantGroup; + children = ( + 607FACDF1AFB9204008FA782 /* Base */, + ); + name = LaunchScreen.xib; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 607FACED1AFB9204008FA782 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.3; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + }; + name = Debug; + }; + 607FACEE1AFB9204008FA782 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.3; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 607FACF01AFB9204008FA782 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 80FF4E03D71AACBD81A36301 /* Pods-ReCaptcha_Example.debug.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + INFOPLIST_FILE = ReCaptcha/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + MODULE_NAME = ExampleApp; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.demo.$(PRODUCT_NAME:rfc1034identifier)"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 3.0; + }; + name = Debug; + }; + 607FACF11AFB9204008FA782 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = C2A0BDD35B5E219129E9BC65 /* Pods-ReCaptcha_Example.release.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + INFOPLIST_FILE = ReCaptcha/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + MODULE_NAME = ExampleApp; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.demo.$(PRODUCT_NAME:rfc1034identifier)"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 3.0; + }; + name = Release; + }; + 607FACF31AFB9204008FA782 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 4FED8267564AACFFEE83DB15 /* Pods-ReCaptcha_Tests.debug.xcconfig */; + buildSettings = { + FRAMEWORK_SEARCH_PATHS = ( + "$(SDKROOT)/Developer/Library/Frameworks", + "$(inherited)", + ); + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + INFOPLIST_FILE = Tests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.$(PRODUCT_NAME:rfc1034identifier)"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 3.0; + }; + name = Debug; + }; + 607FACF41AFB9204008FA782 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 44568771DD76CFBDF2D1C83D /* Pods-ReCaptcha_Tests.release.xcconfig */; + buildSettings = { + FRAMEWORK_SEARCH_PATHS = ( + "$(SDKROOT)/Developer/Library/Frameworks", + "$(inherited)", + ); + INFOPLIST_FILE = Tests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.$(PRODUCT_NAME:rfc1034identifier)"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 3.0; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 607FACCB1AFB9204008FA782 /* Build configuration list for PBXProject "ReCaptcha" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 607FACED1AFB9204008FA782 /* Debug */, + 607FACEE1AFB9204008FA782 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 607FACEF1AFB9204008FA782 /* Build configuration list for PBXNativeTarget "ReCaptcha_Example" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 607FACF01AFB9204008FA782 /* Debug */, + 607FACF11AFB9204008FA782 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 607FACF21AFB9204008FA782 /* Build configuration list for PBXNativeTarget "ReCaptcha_Tests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 607FACF31AFB9204008FA782 /* Debug */, + 607FACF41AFB9204008FA782 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 607FACC81AFB9204008FA782 /* Project object */; +} diff --git a/Example/ReCaptcha.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/Example/ReCaptcha.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..eb752a5 --- /dev/null +++ b/Example/ReCaptcha.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/Example/ReCaptcha.xcodeproj/xcshareddata/xcschemes/ReCaptcha-Example.xcscheme b/Example/ReCaptcha.xcodeproj/xcshareddata/xcschemes/ReCaptcha-Example.xcscheme new file mode 100644 index 0000000..f765373 --- /dev/null +++ b/Example/ReCaptcha.xcodeproj/xcshareddata/xcschemes/ReCaptcha-Example.xcscheme @@ -0,0 +1,115 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Example/ReCaptcha.xcworkspace/contents.xcworkspacedata b/Example/ReCaptcha.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..80c5b41 --- /dev/null +++ b/Example/ReCaptcha.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,10 @@ + + + + + + + diff --git a/Example/ReCaptcha/AppDelegate.swift b/Example/ReCaptcha/AppDelegate.swift new file mode 100644 index 0000000..6a62c67 --- /dev/null +++ b/Example/ReCaptcha/AppDelegate.swift @@ -0,0 +1,46 @@ +// +// AppDelegate.swift +// ReCaptcha +// +// Created by fjcaetano on 03/22/2017. +// Copyright (c) 2017 fjcaetano. All rights reserved. +// + +import UIKit + +@UIApplicationMain +class AppDelegate: UIResponder, UIApplicationDelegate { + + var window: UIWindow? + + + func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { + // Override point for customization after application launch. + return true + } + + func applicationWillResignActive(_ application: UIApplication) { + // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. + // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game. + } + + func applicationDidEnterBackground(_ application: UIApplication) { + // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. + // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. + } + + func applicationWillEnterForeground(_ application: UIApplication) { + // Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background. + } + + func applicationDidBecomeActive(_ application: UIApplication) { + // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. + } + + func applicationWillTerminate(_ application: UIApplication) { + // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. + } + + +} + diff --git a/Example/ReCaptcha/Base.lproj/LaunchScreen.xib b/Example/ReCaptcha/Base.lproj/LaunchScreen.xib new file mode 100644 index 0000000..603ad84 --- /dev/null +++ b/Example/ReCaptcha/Base.lproj/LaunchScreen.xib @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Example/ReCaptcha/Base.lproj/Main.storyboard b/Example/ReCaptcha/Base.lproj/Main.storyboard new file mode 100644 index 0000000..eb69e77 --- /dev/null +++ b/Example/ReCaptcha/Base.lproj/Main.storyboard @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Example/ReCaptcha/Images.xcassets/AppIcon.appiconset/Contents.json b/Example/ReCaptcha/Images.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000..b8236c6 --- /dev/null +++ b/Example/ReCaptcha/Images.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,48 @@ +{ + "images" : [ + { + "idiom" : "iphone", + "size" : "20x20", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "20x20", + "scale" : "3x" + }, + { + "idiom" : "iphone", + "size" : "29x29", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "29x29", + "scale" : "3x" + }, + { + "idiom" : "iphone", + "size" : "40x40", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "40x40", + "scale" : "3x" + }, + { + "idiom" : "iphone", + "size" : "60x60", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "60x60", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/Example/ReCaptcha/Info.plist b/Example/ReCaptcha/Info.plist new file mode 100644 index 0000000..bfcebea --- /dev/null +++ b/Example/ReCaptcha/Info.plist @@ -0,0 +1,45 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + APPL + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1 + LSRequiresIPhoneOS + + UILaunchStoryboardName + LaunchScreen + ReCaptchaKey + 6LdE-hkUAAAAAKWfpXjXrsLMwDc0psCcjvpBgGr6 + ReCaptchaDomain + http://localhost + LSApplicationCategoryType + + UIMainStoryboardFile + Main + UIRequiredDeviceCapabilities + + armv7 + + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + + + diff --git a/Example/ReCaptcha/ViewController.swift b/Example/ReCaptcha/ViewController.swift new file mode 100644 index 0000000..a628f80 --- /dev/null +++ b/Example/ReCaptcha/ViewController.swift @@ -0,0 +1,46 @@ +// +// ViewController.swift +// ReCaptcha +// +// Created by fjcaetano on 03/22/2017. +// Copyright (c) 2017 fjcaetano. All rights reserved. +// + +import UIKit +import ReCaptcha +import Result + + +class ViewController: UIViewController { + fileprivate static let webViewTag = 123 + + fileprivate let recaptcha = try! ReCaptcha() + + @IBOutlet weak var label: UILabel! + @IBOutlet weak var spinner: UIActivityIndicatorView! + + + override func viewDidLoad() { + super.viewDidLoad() + + recaptcha.presenterView = view + recaptcha.configureWebView { [weak self] webview in + webview.frame = self?.view.bounds ?? CGRect.zero + webview.tag = ViewController.webViewTag + } + } + + + @IBAction func didPressButton(button: UIButton) { + spinner.startAnimating() + button.isEnabled = false + + recaptcha.validate { [weak self] result in + self?.spinner.stopAnimating() + + self?.label.text = try? result.dematerialize() + self?.view.viewWithTag(ViewController.webViewTag)?.removeFromSuperview() + } + } +} + diff --git a/Example/Tests/Info.plist b/Example/Tests/Info.plist new file mode 100644 index 0000000..ba72822 --- /dev/null +++ b/Example/Tests/Info.plist @@ -0,0 +1,24 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + BNDL + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1 + + diff --git a/Example/Tests/Tests.swift b/Example/Tests/Tests.swift new file mode 100644 index 0000000..299cea4 --- /dev/null +++ b/Example/Tests/Tests.swift @@ -0,0 +1,29 @@ +import UIKit +import XCTest +import ReCaptcha + +class Tests: XCTestCase { + + override func setUp() { + super.setUp() + // Put setup code here. This method is called before the invocation of each test method in the class. + } + + override func tearDown() { + // Put teardown code here. This method is called after the invocation of each test method in the class. + super.tearDown() + } + + func testExample() { + // This is an example of a functional test case. + XCTAssert(true, "Pass") + } + + func testPerformanceExample() { + // This is an example of a performance test case. + self.measure() { + // Put the code you want to measure the time of here. + } + } + +} diff --git a/LICENSE b/LICENSE index 9d2ca62..366ce78 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,4 @@ -MIT License - -Copyright (c) 2017 Flávio Caetano +Copyright (c) 2017 Flávio Caetano Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal @@ -9,13 +7,13 @@ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/README.md b/README.md index 0c12bd9..faf4159 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,52 @@ # ReCaptcha -[In]visible ReCaptcha for iOS + +[![CI Status](http://img.shields.io/travis/fjcaetano/ReCaptcha.svg?style=flat)](https://travis-ci.org/fjcaetano/ReCaptcha) +[![Version](https://img.shields.io/cocoapods/v/ReCaptcha.svg?style=flat)](http://cocoapods.org/pods/ReCaptcha) +[![License](https://img.shields.io/cocoapods/l/ReCaptcha.svg?style=flat)](http://cocoapods.org/pods/ReCaptcha) +[![Platform](https://img.shields.io/cocoapods/p/ReCaptcha.svg?style=flat)](http://cocoapods.org/pods/ReCaptcha) + +----- + +Add Google's [Invisible ReCaptcha](https://developers.google.com/recaptcha/docs/invisible) to your project. This library +automatically handles ReCaptcha's events and retrieves the validation token or notifies you to present the challenge if +invisibility is not possible. + +## Installation + +ReCaptcha is available through [CocoaPods](http://cocoapods.org). To install it, simply add the following line to your +Podfile: + +``` ruby +pod "ReCaptcha" +``` + +## Usage + +Simply add `ReCaptchaKey` and `ReCaptchaDomain` to your Info.plist and run: + +``` swift +override func viewDidLoad() { + super.viewDidLoad() + + recaptcha.presenterView = view + recaptcha.configureWebView { [weak self] webview in + webview.frame = self?.view.bounds ?? CGRect.zero + webview.tag = ViewController.webViewTag + } +} + + +func validate() { + recaptcha.validate { [weak self] result in + dprint(try? result.dematerialize()) + } +} +``` + +## Author + +Flávio Caetano, flavio@vieiracaetano.com + +## License + +ReCaptcha is available under the MIT license. See the LICENSE file for more info. diff --git a/ReCaptcha.podspec b/ReCaptcha.podspec new file mode 100644 index 0000000..bead8f5 --- /dev/null +++ b/ReCaptcha.podspec @@ -0,0 +1,42 @@ +# +# Be sure to run `pod lib lint ReCaptcha.podspec' to ensure this is a +# valid spec before submitting. +# +# Any lines starting with a # are optional, but their use is encouraged +# To learn more about a Podspec see http://guides.cocoapods.org/syntax/podspec.html +# + +Pod::Spec.new do |s| + s.name = 'ReCaptcha' + s.version = '0.1.0' + s.summary = 'ReCaptcha for iOS' + +# This description is used to generate tags and improve search results. +# * Think: What does it do? Why did you write it? What is the focus? +# * Try to keep it short, snappy and to the point. +# * Write the description between the DESC delimiters below. +# * Finally, don't worry about the indent, CocoaPods strips it! + + s.description = <<-DESC +Add Google invisible ReCaptcha to your app + DESC + + s.homepage = 'https://github.com/fjcaetano/ReCaptcha' + # s.screenshots = 'www.example.com/screenshots_1', 'www.example.com/screenshots_2' + s.license = { :type => 'MIT', :file => 'LICENSE' } + s.author = { 'fjcaetano' => 'flavio@vieiracaetano.com' } + s.source = { :git => 'https://github.com/fjcaetano/ReCaptcha.git', :tag => s.version.to_s } + s.social_media_url = 'https://twitter.com/flavio_caetano' + + s.ios.deployment_target = '8.0' + + s.source_files = 'ReCaptcha/Classes/**/*' + +# s.resource_bundles = { +# 'ReCaptcha' => ['ReCaptcha/Assets/*'] +# } + + # s.public_header_files = 'Pod/Classes/**/*.h' + s.frameworks = 'WebKit' + s.dependency 'Result', '~> 3.0' +end diff --git a/ReCaptcha/Assets/.gitkeep b/ReCaptcha/Assets/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/ReCaptcha/Assets/recaptcha.html b/ReCaptcha/Assets/recaptcha.html new file mode 100644 index 0000000..0237452 --- /dev/null +++ b/ReCaptcha/Assets/recaptcha.html @@ -0,0 +1,40 @@ + + + + + + + + + + diff --git a/ReCaptcha/Classes/.gitkeep b/ReCaptcha/Classes/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/ReCaptcha/Classes/NSError+ReCaptcha.swift b/ReCaptcha/Classes/NSError+ReCaptcha.swift new file mode 100644 index 0000000..4f2d9e7 --- /dev/null +++ b/ReCaptcha/Classes/NSError+ReCaptcha.swift @@ -0,0 +1,31 @@ +// +// NSError+ReCaptcha.swift +// Pods +// +// Created by Flávio Caetano on 22/03/17. +// +// + +import Foundation + + +fileprivate let kErrorDomain = "com.flaviocaetano.ReCaptcha" +extension NSError { + enum Code: Int { + case undefined + case htmlLoadError + case apiKeyNotFound + case baseURLNotFound + case wrongMessageFormat + } + + + var rc_code: Code? { + return Code(rawValue: code) + } + + + convenience init(code: Code, userInfo: [AnyHashable: Any]? = nil) { + self.init(domain: kErrorDomain, code: code.rawValue, userInfo: userInfo) + } +} diff --git a/ReCaptcha/Classes/ReCaptcha.swift b/ReCaptcha/Classes/ReCaptcha.swift new file mode 100644 index 0000000..fa16896 --- /dev/null +++ b/ReCaptcha/Classes/ReCaptcha.swift @@ -0,0 +1,40 @@ +// +// ReCaptcha.swift +// Pods +// +// Created by Flávio Caetano on 22/03/17. +// +// + +import Foundation +import WebKit + + +open class ReCaptcha: ReCaptchaWebViewManager { + fileprivate struct Constants { + struct InfoDictKeys { + static let APIKey = "ReCaptchaKey" + static let Domain = "ReCaptchaDomain" + } + } + + public init(apiKey: String? = nil, baseURL: URL? = nil) throws { + guard let filePath = Bundle(for: ReCaptcha.self).path(forResource: "recaptcha", ofType: "html") else { + throw NSError(code: .htmlLoadError) + } + + // Fetches from info.plist + let infoDict = Bundle.main.infoDictionary + + guard let apiKey = apiKey ?? (infoDict?[Constants.InfoDictKeys.APIKey] as? String) else { + throw NSError(code: .apiKeyNotFound) + } + + guard let domain = infoDict?[Constants.InfoDictKeys.Domain] as? String, let baseURL = baseURL ?? URL(string: domain) else { + throw NSError(code: .baseURLNotFound) + } + + let rawHTML = try String(contentsOfFile: filePath) + super.init(html: String(format: rawHTML, apiKey), apiKey: apiKey, baseURL: baseURL) + } +} diff --git a/ReCaptcha/Classes/ReCaptchaDecoder.swift b/ReCaptcha/Classes/ReCaptchaDecoder.swift new file mode 100644 index 0000000..dbbd6bc --- /dev/null +++ b/ReCaptcha/Classes/ReCaptchaDecoder.swift @@ -0,0 +1,60 @@ +// +// ReCaptchaDecoder.swift +// Pods +// +// Created by Flávio Caetano on 22/03/17. +// +// + +import Foundation +import WebKit + + +class ReCaptchaDecoder: NSObject { + enum Result { + case token(String) + case showReCaptcha + case error(NSError) + } + + fileprivate let sendMessage: ((Result) -> Void) + + init(didReceiveMessage: @escaping (Result) -> Void) { + sendMessage = didReceiveMessage + + super.init() + } + + + func send(error: NSError) { + sendMessage(.error(error)) + } +} + + +// MARK: Script Handler +extension ReCaptchaDecoder: WKScriptMessageHandler { + func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) { + guard let dict = message.body as? [String: Any] else { + return sendMessage(.error(NSError(code: .wrongMessageFormat))) + } + + sendMessage(Result.from(response: dict)) + } +} + + +// MARK: - Result +fileprivate extension ReCaptchaDecoder.Result { + static func from(response: [String: Any]) -> ReCaptchaDecoder.Result { + if let token = response["token"] as? String { + return .token(token) + } + + if let action = response["action"] as? String, action == "showReCaptcha" { + return .showReCaptcha + } + + return .error(NSError(code: .undefined)) + } +} diff --git a/ReCaptcha/Classes/ReCaptchaWebViewManager.swift b/ReCaptcha/Classes/ReCaptchaWebViewManager.swift new file mode 100644 index 0000000..c58ea96 --- /dev/null +++ b/ReCaptcha/Classes/ReCaptchaWebViewManager.swift @@ -0,0 +1,120 @@ +// +// ReCaptchaWebViewManager.swift +// Pods +// +// Created by Flávio Caetano on 22/03/17. +// +// + +import Foundation +import WebKit +import Result + + +open class ReCaptchaWebViewManager: NSObject { + public typealias Response = Result + + fileprivate struct Constants { + static let ExecuteJSCommand = "execute();" + } + + open weak var presenterView: UIView? + + + fileprivate var completion: ((Response) -> Void)? + fileprivate var configureWebView: ((WKWebView) -> Void)? + fileprivate var decoder: ReCaptchaDecoder! + fileprivate var didFinishLoading = false // webView.isLoading does not work in this case + + fileprivate lazy var webView: WKWebView = { + let webview = WKWebView(frame: CGRect.zero, configuration: self.buildConfiguration()) + webview.navigationDelegate = self + + return webview + }() + + + init(html: String, apiKey: String, baseURL: URL) { + super.init() + + decoder = ReCaptchaDecoder { [weak self] result in + self?.handle(result: result) + } + + webView.loadHTMLString(String(format: html, apiKey), baseURL: baseURL) + } + + + open func validate(completion: @escaping (Response) -> Void) { + self.completion = completion + + execute() + } + + + open func stop() { + webView.stopLoading() + } + + + open func configureWebView(_ configure: @escaping (WKWebView) -> Void) { + self.configureWebView = configure + } +} + + +// MARK: - Navigation +extension ReCaptchaWebViewManager: WKNavigationDelegate { + public func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) { + didFinishLoading = true + + presenterView?.addSubview(webView) + + if completion != nil { + // User has requested for validation + DispatchQueue.main.asyncAfter(deadline: .now() + 1) { + self.execute() + } + } + } +} + + +// MARK: - Private Methods +fileprivate extension ReCaptchaWebViewManager { + func execute() { + guard didFinishLoading else { + // Hasn't finished loading the HTML yet + return + } + + webView.evaluateJavaScript(Constants.ExecuteJSCommand) { [weak self] result, error in + if let error = error { + self?.decoder.send(error: error as NSError) + } + } + } + + func buildConfiguration() -> WKWebViewConfiguration { + let controller = WKUserContentController() + controller.add(decoder, name: "recaptcha") + + let conf = WKWebViewConfiguration() + conf.userContentController = controller + + return conf + } + + func handle(result: ReCaptchaDecoder.Result) { + switch result { + case .token(let token): + completion?(Response.success(token)) + + case .error(let error): + completion?(Response.failure(error)) + + case .showReCaptcha: + configureWebView?(webView) + } + } +} diff --git a/_Pods.xcodeproj b/_Pods.xcodeproj new file mode 120000 index 0000000..3c5a8e7 --- /dev/null +++ b/_Pods.xcodeproj @@ -0,0 +1 @@ +Example/Pods/Pods.xcodeproj \ No newline at end of file