Repository: zhongjianfeipqy/VerificationCode Branch: master Commit: 5388635bf417 Files: 81 Total size: 237.2 KB Directory structure: gitextract_u4m2ruc1/ ├── .gitignore ├── LICENSE ├── Podfile ├── Pods/ │ ├── Pods.xcodeproj/ │ │ └── project.pbxproj │ ├── SnapKit/ │ │ ├── LICENSE │ │ ├── README.md │ │ └── Source/ │ │ ├── Constraint.swift │ │ ├── ConstraintAttributes.swift │ │ ├── ConstraintConfig.swift │ │ ├── ConstraintConstantTarget.swift │ │ ├── ConstraintDSL.swift │ │ ├── ConstraintDescription.swift │ │ ├── ConstraintInsetTarget.swift │ │ ├── ConstraintInsets.swift │ │ ├── ConstraintItem.swift │ │ ├── ConstraintLayoutGuide+Extensions.swift │ │ ├── ConstraintLayoutGuide.swift │ │ ├── ConstraintLayoutGuideDSL.swift │ │ ├── ConstraintLayoutSupport.swift │ │ ├── ConstraintLayoutSupportDSL.swift │ │ ├── ConstraintMaker.swift │ │ ├── ConstraintMakerEditable.swift │ │ ├── ConstraintMakerExtendable.swift │ │ ├── ConstraintMakerFinalizable.swift │ │ ├── ConstraintMakerPriortizable.swift │ │ ├── ConstraintMakerRelatable.swift │ │ ├── ConstraintMultiplierTarget.swift │ │ ├── ConstraintOffsetTarget.swift │ │ ├── ConstraintPriority.swift │ │ ├── ConstraintPriorityTarget.swift │ │ ├── ConstraintRelatableTarget.swift │ │ ├── ConstraintRelation.swift │ │ ├── ConstraintView+Extensions.swift │ │ ├── ConstraintView.swift │ │ ├── ConstraintViewDSL.swift │ │ ├── Debugging.swift │ │ ├── LayoutConstraint.swift │ │ ├── LayoutConstraintItem.swift │ │ ├── Typealiases.swift │ │ └── UILayoutSupport+Extensions.swift │ └── Target Support Files/ │ ├── Pods-VerifyCodeDemo/ │ │ ├── Pods-VerifyCodeDemo-Info.plist │ │ ├── Pods-VerifyCodeDemo-acknowledgements.markdown │ │ ├── Pods-VerifyCodeDemo-acknowledgements.plist │ │ ├── Pods-VerifyCodeDemo-dummy.m │ │ ├── Pods-VerifyCodeDemo-frameworks-Debug-input-files.xcfilelist │ │ ├── Pods-VerifyCodeDemo-frameworks-Debug-output-files.xcfilelist │ │ ├── Pods-VerifyCodeDemo-frameworks-Release-input-files.xcfilelist │ │ ├── Pods-VerifyCodeDemo-frameworks-Release-output-files.xcfilelist │ │ ├── Pods-VerifyCodeDemo-frameworks.sh │ │ ├── Pods-VerifyCodeDemo-umbrella.h │ │ ├── Pods-VerifyCodeDemo.debug.xcconfig │ │ ├── Pods-VerifyCodeDemo.modulemap │ │ └── Pods-VerifyCodeDemo.release.xcconfig │ └── SnapKit/ │ ├── SnapKit-Info.plist │ ├── SnapKit-dummy.m │ ├── SnapKit-prefix.pch │ ├── SnapKit-umbrella.h │ ├── SnapKit.modulemap │ └── SnapKit.xcconfig ├── README.md ├── VerifyCodeDemo/ │ ├── AppDelegate.swift │ ├── Assets.xcassets/ │ │ ├── AppIcon.appiconset/ │ │ │ └── Contents.json │ │ └── Contents.json │ ├── Base.lproj/ │ │ ├── LaunchScreen.storyboard │ │ └── Main.storyboard │ ├── Info.plist │ ├── VerifyCodeView/ │ │ ├── TDWExtension/ │ │ │ └── TDWExtensions.swift │ │ ├── TDWVerifyCodeNumView.swift │ │ ├── TDWVerifyCodeTextView.swift │ │ └── TDWVerifyCodeView.swift │ └── ViewController.swift ├── VerifyCodeDemo.xcodeproj/ │ ├── project.pbxproj │ └── project.xcworkspace/ │ ├── contents.xcworkspacedata │ └── xcshareddata/ │ └── IDEWorkspaceChecks.plist ├── VerifyCodeDemo.xcworkspace/ │ ├── contents.xcworkspacedata │ └── xcshareddata/ │ └── IDEWorkspaceChecks.plist ├── VerifyCodeDemoTests/ │ ├── Info.plist │ └── VerifyCodeDemoTests.swift ├── VerifyCodeDemoUITests/ │ ├── Info.plist │ └── VerifyCodeDemoUITests.swift └── VerifyCodeSwift.podspec ================================================ FILE CONTENTS ================================================ ================================================ FILE: .gitignore ================================================ # 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 *.moved-aside *.xccheckout *.xcscmblueprint ## Obj-C/Swift specific *.hmap *.ipa *.dSYM.zip *.dSYM ## Playgrounds timeline.xctimeline playground.xcworkspace # Swift Package Manager # # Add this line if you want to avoid checking in source code from Swift Package Manager dependencies. # Packages/ # Package.pins # Package.resolved .build/ # CocoaPods # # We recommend against adding the Pods directory to your .gitignore. However # you should judge for yourself, the pros and cons are mentioned at: # https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control # # Pods/ # Carthage # # Add this line if you want to avoid checking in source code from Carthage dependencies. # Carthage/Checkouts Carthage/Build # fastlane # # It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the # screenshots whenever they are needed. # For more information about the recommended setup visit: # https://docs.fastlane.tools/best-practices/source-control/#source-control fastlane/report.xml fastlane/Preview.html fastlane/screenshots/**/*.png fastlane/test_output ================================================ FILE: LICENSE ================================================ MIT License Copyright (c) 2019 Fly 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. ================================================ FILE: Podfile ================================================ source 'https://github.com/CocoaPods/Specs.git' platform :ios, '9.0' use_frameworks! target 'VerifyCodeDemo' do pod 'SnapKit' end ================================================ FILE: Pods/Pods.xcodeproj/project.pbxproj ================================================ // !$*UTF8*$! { archiveVersion = 1; classes = { }; objectVersion = 51; objects = { /* Begin PBXBuildFile section */ 04F66FA3C83A53525898079B3945E9B6 /* ConstraintConstantTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = 784E71663FDE42A52D425DA752FC02E7 /* ConstraintConstantTarget.swift */; }; 0C6E2B64A133169E6694D3B7CE028F8F /* ConstraintPriorityTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4BC92BE130C0A4CE98F06E9D397E55AF /* ConstraintPriorityTarget.swift */; }; 108A9DFC16807E2F00517CF4E23D00BE /* ConstraintInsets.swift in Sources */ = {isa = PBXBuildFile; fileRef = B0A3ECCB7489854CAA077B5B187C912D /* ConstraintInsets.swift */; }; 12285CBA4D3AA9AD71C418040E9D9A15 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CB4607EFCA7C5F75397649E792E2AFCB /* Foundation.framework */; }; 22327C004280671E16186F4D131CC59C /* ConstraintMakerRelatable.swift in Sources */ = {isa = PBXBuildFile; fileRef = ED05C0772840EE66B3EB754BEF846F7A /* ConstraintMakerRelatable.swift */; }; 22E06035A5CFB0C407AAD71805B204C8 /* ConstraintMakerPriortizable.swift in Sources */ = {isa = PBXBuildFile; fileRef = A6F1619E6AE6BAD68A1F802AD244BFAB /* ConstraintMakerPriortizable.swift */; }; 23B574059CE490AE9CA01580A476AFED /* LayoutConstraint.swift in Sources */ = {isa = PBXBuildFile; fileRef = 48EFBC475A6AD866A5083DC5F61B3563 /* LayoutConstraint.swift */; }; 25A8D111D8F21EBE8A89F8254C46E72E /* ConstraintLayoutSupportDSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = D5902768DE34E1627B020F4B2FB7BBBE /* ConstraintLayoutSupportDSL.swift */; }; 2A19C2CB15633EB715E907B635E5A2AF /* ConstraintConfig.swift in Sources */ = {isa = PBXBuildFile; fileRef = 69A533BD0DE17143457FB42BF7749CDD /* ConstraintConfig.swift */; }; 389074CB59EE151F61C40B251D52A737 /* ConstraintLayoutSupport.swift in Sources */ = {isa = PBXBuildFile; fileRef = 62526768B0933882A844A3CC52757009 /* ConstraintLayoutSupport.swift */; }; 4758FDCA298ED5B4BBFE7302BFEDE1F0 /* ConstraintMaker.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3F812B71438F709C9BBB7D4B438DAA8B /* ConstraintMaker.swift */; }; 4B219F8E1869A5903D989F4B1FF69AEF /* ConstraintDSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = F63DC83113A26BB1DB9ED37E0EE3F512 /* ConstraintDSL.swift */; }; 5818046C12DA0D8C11D63CD3D9CBE224 /* LayoutConstraintItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B3D1E72289667D4BA6D946E25320953 /* LayoutConstraintItem.swift */; }; 59B9310884B9ECAEF5D8CE090D9A0AE2 /* SnapKit-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = FD313B584F4DD046DAD1E1A5DBA2AA9A /* SnapKit-dummy.m */; }; 5B0DD5E8FD3BF049E7691214635E937E /* SnapKit-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = FED189CE3C9928FFAF66C86038ABFDB1 /* SnapKit-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; 6140B1FD47528742DB382D75D6772D70 /* ConstraintLayoutGuide.swift in Sources */ = {isa = PBXBuildFile; fileRef = A23DE5B5F4B593DDCE0ADE8616B85C5A /* ConstraintLayoutGuide.swift */; }; 6187A3CB3B75ABB947D4847B62374AD2 /* Debugging.swift in Sources */ = {isa = PBXBuildFile; fileRef = 40C5937AEDD4F642E09E0A1980BCC652 /* Debugging.swift */; }; 63970F4F979D711C0ED5CAAE5CBCD8EF /* ConstraintViewDSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC0E4E3541BF32A5C4247EA2CC09B4BE /* ConstraintViewDSL.swift */; }; 641A7B34B3FD3C3CD899321E2104E68A /* ConstraintRelatableTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFA57917D5E295BADC0B25F3CDB9C4E8 /* ConstraintRelatableTarget.swift */; }; 6C7DC9AECC4B57A305E61D417A490FB1 /* ConstraintPriority.swift in Sources */ = {isa = PBXBuildFile; fileRef = 161FED143DE8DD1AC41D71D22AEA464B /* ConstraintPriority.swift */; }; 8301F67FE6A00E166C6267B521BE722D /* ConstraintLayoutGuideDSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A9E8324D0994261E310D8C9ABB5015C /* ConstraintLayoutGuideDSL.swift */; }; 84249F5514093FEDD80926183FF3D3F0 /* ConstraintLayoutGuide+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 144DAF3614C757BDAABBA78E4B4866FC /* ConstraintLayoutGuide+Extensions.swift */; }; 85771E91D00630FEBE7342B318331A0C /* Pods-VerifyCodeDemo-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = CEEEC2EF65E7B1C049BD1F03D5CE735B /* Pods-VerifyCodeDemo-dummy.m */; }; A1D5B066B529B59BF042AC9CDDE3D0C2 /* ConstraintMakerExtendable.swift in Sources */ = {isa = PBXBuildFile; fileRef = F902CDA99715ADA3EC010544308DA63A /* ConstraintMakerExtendable.swift */; }; A7F301FEFA26966FD93FE41537DA9833 /* ConstraintDescription.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7597745DD02F02027BEB927801E4E7E2 /* ConstraintDescription.swift */; }; B33BB541223B04CBC5C3AB7E3F46592B /* ConstraintOffsetTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = E21B4EB2CAC44390D976C65ABE1CE2F5 /* ConstraintOffsetTarget.swift */; }; B41F7C069770EAF9D13CBCE1824F02C8 /* ConstraintView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F5C9D6FEF48994711991A348A7B0B99A /* ConstraintView.swift */; }; BC9C79BB8A830AACC383277B2C0D5E6A /* ConstraintMakerEditable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8A26D91B0E800F3CC711EB9D4B7D643D /* ConstraintMakerEditable.swift */; }; D05FC0A055D0231C18A078B7EAF81C96 /* ConstraintView+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2AB05D22C92E5A571A653D510E552AC0 /* ConstraintView+Extensions.swift */; }; D6A16FD82B9996ED419AEC2D4E9DCE56 /* UILayoutSupport+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9C87F70E835D22459F492D40CB584A67 /* UILayoutSupport+Extensions.swift */; }; D9BA55AB9494D090563BC5386DE58BEC /* ConstraintMakerFinalizable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6BA20D94D18B89BCA5CF2600878CAB42 /* ConstraintMakerFinalizable.swift */; }; DF9B9D0EBA692F0B9E710785BFF2BE99 /* Pods-VerifyCodeDemo-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 36E9416CBCBC9A333A4B481C95314E2D /* Pods-VerifyCodeDemo-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; E0506FA9DEF8B22037587D6DF7C58EF2 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CB4607EFCA7C5F75397649E792E2AFCB /* Foundation.framework */; }; E418542DAA6B444CEDC23B9304116BA0 /* ConstraintAttributes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45FD64C66CE4DDF29ECD54691C69DE81 /* ConstraintAttributes.swift */; }; EA2F9BED7BE4C7E5F3BA4A98C006EB97 /* ConstraintMultiplierTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9C12038B34951B9B002DAB0D5FE023DA /* ConstraintMultiplierTarget.swift */; }; EAB7F9DF9A2AA71DD77A3AC43B08DFC6 /* Constraint.swift in Sources */ = {isa = PBXBuildFile; fileRef = C417784A7C0566CA3A4A90F972ECD6E6 /* Constraint.swift */; }; F39B131A46A0FE42BA8A0BB7FBFF2677 /* ConstraintItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = C65BFCA0A21044C1C3E6F663BB5F9B48 /* ConstraintItem.swift */; }; F76C08342FED84F10146E681E99A805C /* ConstraintInsetTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = B2A12656157BC29CB51F2534C8EDF360 /* ConstraintInsetTarget.swift */; }; F9A24CE1ECD5B380B4FCD9CF80660B2D /* Typealiases.swift in Sources */ = {isa = PBXBuildFile; fileRef = A156835F5B20B0DE5962C7DD63E2E761 /* Typealiases.swift */; }; FC3348D1B776D0ED499FFFA7F4F2834B /* ConstraintRelation.swift in Sources */ = {isa = PBXBuildFile; fileRef = D21B2FDCEA78DB15010A749F9203D21F /* ConstraintRelation.swift */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ B127EA3F17E251202A7E3015298E8029 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; remoteGlobalIDString = 19622742EBA51E823D6DAE3F8CDBFAD4; remoteInfo = SnapKit; }; /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ 0DDDD6F462EB3B196478B6BB1493ED00 /* Pods-VerifyCodeDemo.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-VerifyCodeDemo.debug.xcconfig"; sourceTree = ""; }; 144DAF3614C757BDAABBA78E4B4866FC /* ConstraintLayoutGuide+Extensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "ConstraintLayoutGuide+Extensions.swift"; path = "Source/ConstraintLayoutGuide+Extensions.swift"; sourceTree = ""; }; 161FED143DE8DD1AC41D71D22AEA464B /* ConstraintPriority.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintPriority.swift; path = Source/ConstraintPriority.swift; sourceTree = ""; }; 25E34EF5671A453947A4DB0C58A03A48 /* SnapKit.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SnapKit.xcconfig; sourceTree = ""; }; 2AB05D22C92E5A571A653D510E552AC0 /* ConstraintView+Extensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "ConstraintView+Extensions.swift"; path = "Source/ConstraintView+Extensions.swift"; sourceTree = ""; }; 36E9416CBCBC9A333A4B481C95314E2D /* Pods-VerifyCodeDemo-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-VerifyCodeDemo-umbrella.h"; sourceTree = ""; }; 3F812B71438F709C9BBB7D4B438DAA8B /* ConstraintMaker.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintMaker.swift; path = Source/ConstraintMaker.swift; sourceTree = ""; }; 40C5937AEDD4F642E09E0A1980BCC652 /* Debugging.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Debugging.swift; path = Source/Debugging.swift; sourceTree = ""; }; 45FD64C66CE4DDF29ECD54691C69DE81 /* ConstraintAttributes.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintAttributes.swift; path = Source/ConstraintAttributes.swift; sourceTree = ""; }; 48EFBC475A6AD866A5083DC5F61B3563 /* LayoutConstraint.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LayoutConstraint.swift; path = Source/LayoutConstraint.swift; sourceTree = ""; }; 4BC92BE130C0A4CE98F06E9D397E55AF /* ConstraintPriorityTarget.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintPriorityTarget.swift; path = Source/ConstraintPriorityTarget.swift; sourceTree = ""; }; 4E49729C791003914C2052732F8BADA0 /* Pods-VerifyCodeDemo-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-VerifyCodeDemo-frameworks.sh"; sourceTree = ""; }; 5337E1A59467312C92B46B0DF2F630FF /* Pods-VerifyCodeDemo.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-VerifyCodeDemo.modulemap"; sourceTree = ""; }; 5B3D1E72289667D4BA6D946E25320953 /* LayoutConstraintItem.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LayoutConstraintItem.swift; path = Source/LayoutConstraintItem.swift; sourceTree = ""; }; 5E62545952A3F91C0FFB7163FA3ABB9E /* SnapKit-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SnapKit-prefix.pch"; sourceTree = ""; }; 5F18E344646C6B2E634C37B927C0463B /* Pods-VerifyCodeDemo-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-VerifyCodeDemo-Info.plist"; sourceTree = ""; }; 6043A60B74B531F62E520A7669D4E907 /* SnapKit-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "SnapKit-Info.plist"; sourceTree = ""; }; 62526768B0933882A844A3CC52757009 /* ConstraintLayoutSupport.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintLayoutSupport.swift; path = Source/ConstraintLayoutSupport.swift; sourceTree = ""; }; 68AE75C62A03742A9CC315392483504B /* Pods-VerifyCodeDemo-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-VerifyCodeDemo-acknowledgements.markdown"; sourceTree = ""; }; 69A533BD0DE17143457FB42BF7749CDD /* ConstraintConfig.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintConfig.swift; path = Source/ConstraintConfig.swift; sourceTree = ""; }; 6B1DEB655656986537682044C2CE00A9 /* Pods_VerifyCodeDemo.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Pods_VerifyCodeDemo.framework; path = "Pods-VerifyCodeDemo.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; 6BA20D94D18B89BCA5CF2600878CAB42 /* ConstraintMakerFinalizable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintMakerFinalizable.swift; path = Source/ConstraintMakerFinalizable.swift; sourceTree = ""; }; 6FED7DD645CF7EE688F4FBFE76F4B56A /* SnapKit.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = SnapKit.modulemap; sourceTree = ""; }; 7597745DD02F02027BEB927801E4E7E2 /* ConstraintDescription.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintDescription.swift; path = Source/ConstraintDescription.swift; sourceTree = ""; }; 784E71663FDE42A52D425DA752FC02E7 /* ConstraintConstantTarget.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintConstantTarget.swift; path = Source/ConstraintConstantTarget.swift; sourceTree = ""; }; 7A9E8324D0994261E310D8C9ABB5015C /* ConstraintLayoutGuideDSL.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintLayoutGuideDSL.swift; path = Source/ConstraintLayoutGuideDSL.swift; sourceTree = ""; }; 8A26D91B0E800F3CC711EB9D4B7D643D /* ConstraintMakerEditable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintMakerEditable.swift; path = Source/ConstraintMakerEditable.swift; sourceTree = ""; }; 9428E894F7932D494E10DDB6D971EB39 /* Pods-VerifyCodeDemo.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-VerifyCodeDemo.release.xcconfig"; sourceTree = ""; }; 979486118B3E90C08386079D57962701 /* SnapKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = SnapKit.framework; path = SnapKit.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 9C12038B34951B9B002DAB0D5FE023DA /* ConstraintMultiplierTarget.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintMultiplierTarget.swift; path = Source/ConstraintMultiplierTarget.swift; sourceTree = ""; }; 9C87F70E835D22459F492D40CB584A67 /* UILayoutSupport+Extensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UILayoutSupport+Extensions.swift"; path = "Source/UILayoutSupport+Extensions.swift"; sourceTree = ""; }; 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; A156835F5B20B0DE5962C7DD63E2E761 /* Typealiases.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Typealiases.swift; path = Source/Typealiases.swift; sourceTree = ""; }; A23DE5B5F4B593DDCE0ADE8616B85C5A /* ConstraintLayoutGuide.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintLayoutGuide.swift; path = Source/ConstraintLayoutGuide.swift; sourceTree = ""; }; A6F1619E6AE6BAD68A1F802AD244BFAB /* ConstraintMakerPriortizable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintMakerPriortizable.swift; path = Source/ConstraintMakerPriortizable.swift; sourceTree = ""; }; B0A3ECCB7489854CAA077B5B187C912D /* ConstraintInsets.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintInsets.swift; path = Source/ConstraintInsets.swift; sourceTree = ""; }; B2A12656157BC29CB51F2534C8EDF360 /* ConstraintInsetTarget.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintInsetTarget.swift; path = Source/ConstraintInsetTarget.swift; sourceTree = ""; }; BFA57917D5E295BADC0B25F3CDB9C4E8 /* ConstraintRelatableTarget.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintRelatableTarget.swift; path = Source/ConstraintRelatableTarget.swift; sourceTree = ""; }; C232F61433509F03A214316255D3ECEA /* Pods-VerifyCodeDemo-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-VerifyCodeDemo-acknowledgements.plist"; sourceTree = ""; }; C417784A7C0566CA3A4A90F972ECD6E6 /* Constraint.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Constraint.swift; path = Source/Constraint.swift; sourceTree = ""; }; C65BFCA0A21044C1C3E6F663BB5F9B48 /* ConstraintItem.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintItem.swift; path = Source/ConstraintItem.swift; sourceTree = ""; }; CB4607EFCA7C5F75397649E792E2AFCB /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.0.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; CEEEC2EF65E7B1C049BD1F03D5CE735B /* Pods-VerifyCodeDemo-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-VerifyCodeDemo-dummy.m"; sourceTree = ""; }; D21B2FDCEA78DB15010A749F9203D21F /* ConstraintRelation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintRelation.swift; path = Source/ConstraintRelation.swift; sourceTree = ""; }; D5902768DE34E1627B020F4B2FB7BBBE /* ConstraintLayoutSupportDSL.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintLayoutSupportDSL.swift; path = Source/ConstraintLayoutSupportDSL.swift; sourceTree = ""; }; E21B4EB2CAC44390D976C65ABE1CE2F5 /* ConstraintOffsetTarget.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintOffsetTarget.swift; path = Source/ConstraintOffsetTarget.swift; sourceTree = ""; }; EC0E4E3541BF32A5C4247EA2CC09B4BE /* ConstraintViewDSL.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintViewDSL.swift; path = Source/ConstraintViewDSL.swift; sourceTree = ""; }; ED05C0772840EE66B3EB754BEF846F7A /* ConstraintMakerRelatable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintMakerRelatable.swift; path = Source/ConstraintMakerRelatable.swift; sourceTree = ""; }; F5C9D6FEF48994711991A348A7B0B99A /* ConstraintView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintView.swift; path = Source/ConstraintView.swift; sourceTree = ""; }; F63DC83113A26BB1DB9ED37E0EE3F512 /* ConstraintDSL.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintDSL.swift; path = Source/ConstraintDSL.swift; sourceTree = ""; }; F902CDA99715ADA3EC010544308DA63A /* ConstraintMakerExtendable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintMakerExtendable.swift; path = Source/ConstraintMakerExtendable.swift; sourceTree = ""; }; FD313B584F4DD046DAD1E1A5DBA2AA9A /* SnapKit-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SnapKit-dummy.m"; sourceTree = ""; }; FED189CE3C9928FFAF66C86038ABFDB1 /* SnapKit-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SnapKit-umbrella.h"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ 24A2B817B5B2B4CA7195E39A75EE5DA4 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( E0506FA9DEF8B22037587D6DF7C58EF2 /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; 5CB4D568CCC95040548F0B7350C90628 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 12285CBA4D3AA9AD71C418040E9D9A15 /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ 427B270BD76A5EF45313FBF29233B96D /* Pods */ = { isa = PBXGroup; children = ( E9B3907E32293D14238C042AF3BAE652 /* SnapKit */, ); name = Pods; sourceTree = ""; }; 4CC056115B16BAC8746D03109CE76AC4 /* Targets Support Files */ = { isa = PBXGroup; children = ( C78159D9C22B141025034C9E15504E11 /* Pods-VerifyCodeDemo */, ); name = "Targets Support Files"; sourceTree = ""; }; 9B055D0CFEA43187E72B03DED11F5662 /* iOS */ = { isa = PBXGroup; children = ( CB4607EFCA7C5F75397649E792E2AFCB /* Foundation.framework */, ); name = iOS; sourceTree = ""; }; C78159D9C22B141025034C9E15504E11 /* Pods-VerifyCodeDemo */ = { isa = PBXGroup; children = ( 5337E1A59467312C92B46B0DF2F630FF /* Pods-VerifyCodeDemo.modulemap */, 68AE75C62A03742A9CC315392483504B /* Pods-VerifyCodeDemo-acknowledgements.markdown */, C232F61433509F03A214316255D3ECEA /* Pods-VerifyCodeDemo-acknowledgements.plist */, CEEEC2EF65E7B1C049BD1F03D5CE735B /* Pods-VerifyCodeDemo-dummy.m */, 4E49729C791003914C2052732F8BADA0 /* Pods-VerifyCodeDemo-frameworks.sh */, 5F18E344646C6B2E634C37B927C0463B /* Pods-VerifyCodeDemo-Info.plist */, 36E9416CBCBC9A333A4B481C95314E2D /* Pods-VerifyCodeDemo-umbrella.h */, 0DDDD6F462EB3B196478B6BB1493ED00 /* Pods-VerifyCodeDemo.debug.xcconfig */, 9428E894F7932D494E10DDB6D971EB39 /* Pods-VerifyCodeDemo.release.xcconfig */, ); name = "Pods-VerifyCodeDemo"; path = "Target Support Files/Pods-VerifyCodeDemo"; sourceTree = ""; }; C91EDAA5CCFDB0CED5792EE230E47FD8 /* Support Files */ = { isa = PBXGroup; children = ( 6FED7DD645CF7EE688F4FBFE76F4B56A /* SnapKit.modulemap */, 25E34EF5671A453947A4DB0C58A03A48 /* SnapKit.xcconfig */, FD313B584F4DD046DAD1E1A5DBA2AA9A /* SnapKit-dummy.m */, 6043A60B74B531F62E520A7669D4E907 /* SnapKit-Info.plist */, 5E62545952A3F91C0FFB7163FA3ABB9E /* SnapKit-prefix.pch */, FED189CE3C9928FFAF66C86038ABFDB1 /* SnapKit-umbrella.h */, ); name = "Support Files"; path = "../Target Support Files/SnapKit"; sourceTree = ""; }; CF1408CF629C7361332E53B88F7BD30C = { isa = PBXGroup; children = ( 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */, D210D550F4EA176C3123ED886F8F87F5 /* Frameworks */, 427B270BD76A5EF45313FBF29233B96D /* Pods */, D0BB88904A8103332A55D5B84619149A /* Products */, 4CC056115B16BAC8746D03109CE76AC4 /* Targets Support Files */, ); sourceTree = ""; }; D0BB88904A8103332A55D5B84619149A /* Products */ = { isa = PBXGroup; children = ( 6B1DEB655656986537682044C2CE00A9 /* Pods_VerifyCodeDemo.framework */, 979486118B3E90C08386079D57962701 /* SnapKit.framework */, ); name = Products; sourceTree = ""; }; D210D550F4EA176C3123ED886F8F87F5 /* Frameworks */ = { isa = PBXGroup; children = ( 9B055D0CFEA43187E72B03DED11F5662 /* iOS */, ); name = Frameworks; sourceTree = ""; }; E9B3907E32293D14238C042AF3BAE652 /* SnapKit */ = { isa = PBXGroup; children = ( C417784A7C0566CA3A4A90F972ECD6E6 /* Constraint.swift */, 45FD64C66CE4DDF29ECD54691C69DE81 /* ConstraintAttributes.swift */, 69A533BD0DE17143457FB42BF7749CDD /* ConstraintConfig.swift */, 784E71663FDE42A52D425DA752FC02E7 /* ConstraintConstantTarget.swift */, 7597745DD02F02027BEB927801E4E7E2 /* ConstraintDescription.swift */, F63DC83113A26BB1DB9ED37E0EE3F512 /* ConstraintDSL.swift */, B0A3ECCB7489854CAA077B5B187C912D /* ConstraintInsets.swift */, B2A12656157BC29CB51F2534C8EDF360 /* ConstraintInsetTarget.swift */, C65BFCA0A21044C1C3E6F663BB5F9B48 /* ConstraintItem.swift */, A23DE5B5F4B593DDCE0ADE8616B85C5A /* ConstraintLayoutGuide.swift */, 144DAF3614C757BDAABBA78E4B4866FC /* ConstraintLayoutGuide+Extensions.swift */, 7A9E8324D0994261E310D8C9ABB5015C /* ConstraintLayoutGuideDSL.swift */, 62526768B0933882A844A3CC52757009 /* ConstraintLayoutSupport.swift */, D5902768DE34E1627B020F4B2FB7BBBE /* ConstraintLayoutSupportDSL.swift */, 3F812B71438F709C9BBB7D4B438DAA8B /* ConstraintMaker.swift */, 8A26D91B0E800F3CC711EB9D4B7D643D /* ConstraintMakerEditable.swift */, F902CDA99715ADA3EC010544308DA63A /* ConstraintMakerExtendable.swift */, 6BA20D94D18B89BCA5CF2600878CAB42 /* ConstraintMakerFinalizable.swift */, A6F1619E6AE6BAD68A1F802AD244BFAB /* ConstraintMakerPriortizable.swift */, ED05C0772840EE66B3EB754BEF846F7A /* ConstraintMakerRelatable.swift */, 9C12038B34951B9B002DAB0D5FE023DA /* ConstraintMultiplierTarget.swift */, E21B4EB2CAC44390D976C65ABE1CE2F5 /* ConstraintOffsetTarget.swift */, 161FED143DE8DD1AC41D71D22AEA464B /* ConstraintPriority.swift */, 4BC92BE130C0A4CE98F06E9D397E55AF /* ConstraintPriorityTarget.swift */, BFA57917D5E295BADC0B25F3CDB9C4E8 /* ConstraintRelatableTarget.swift */, D21B2FDCEA78DB15010A749F9203D21F /* ConstraintRelation.swift */, F5C9D6FEF48994711991A348A7B0B99A /* ConstraintView.swift */, 2AB05D22C92E5A571A653D510E552AC0 /* ConstraintView+Extensions.swift */, EC0E4E3541BF32A5C4247EA2CC09B4BE /* ConstraintViewDSL.swift */, 40C5937AEDD4F642E09E0A1980BCC652 /* Debugging.swift */, 48EFBC475A6AD866A5083DC5F61B3563 /* LayoutConstraint.swift */, 5B3D1E72289667D4BA6D946E25320953 /* LayoutConstraintItem.swift */, A156835F5B20B0DE5962C7DD63E2E761 /* Typealiases.swift */, 9C87F70E835D22459F492D40CB584A67 /* UILayoutSupport+Extensions.swift */, C91EDAA5CCFDB0CED5792EE230E47FD8 /* Support Files */, ); name = SnapKit; path = SnapKit; sourceTree = ""; }; /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */ 5707B703A295B2F77304B49592371464 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( 5B0DD5E8FD3BF049E7691214635E937E /* SnapKit-umbrella.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; DB40925FC1004C4CDD24E460B530FFC3 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( DF9B9D0EBA692F0B9E710785BFF2BE99 /* Pods-VerifyCodeDemo-umbrella.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXHeadersBuildPhase section */ /* Begin PBXNativeTarget section */ 19622742EBA51E823D6DAE3F8CDBFAD4 /* SnapKit */ = { isa = PBXNativeTarget; buildConfigurationList = 3BBBC403BA79741703B9761E6A88A5B5 /* Build configuration list for PBXNativeTarget "SnapKit" */; buildPhases = ( 5707B703A295B2F77304B49592371464 /* Headers */, 253D0469F7AD24142C0ED3550984BB13 /* Sources */, 5CB4D568CCC95040548F0B7350C90628 /* Frameworks */, 0BE06200C6B667A325862B3097467860 /* Resources */, ); buildRules = ( ); dependencies = ( ); name = SnapKit; productName = SnapKit; productReference = 979486118B3E90C08386079D57962701 /* SnapKit.framework */; productType = "com.apple.product-type.framework"; }; 352ACF249742AD668356716BEC898B49 /* Pods-VerifyCodeDemo */ = { isa = PBXNativeTarget; buildConfigurationList = 27527AB7E45BC8234586E8C2F2638CED /* Build configuration list for PBXNativeTarget "Pods-VerifyCodeDemo" */; buildPhases = ( DB40925FC1004C4CDD24E460B530FFC3 /* Headers */, 9873D193E19480A7878931F0A283F3E1 /* Sources */, 24A2B817B5B2B4CA7195E39A75EE5DA4 /* Frameworks */, 07AD972366EBC4D88439BE859E606D76 /* Resources */, ); buildRules = ( ); dependencies = ( 4CEEDE957FAE0FB0ACCCBE71FEF1B71B /* PBXTargetDependency */, ); name = "Pods-VerifyCodeDemo"; productName = "Pods-VerifyCodeDemo"; productReference = 6B1DEB655656986537682044C2CE00A9 /* Pods_VerifyCodeDemo.framework */; productType = "com.apple.product-type.framework"; }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ BFDFE7DC352907FC980B868725387E98 /* Project object */ = { isa = PBXProject; attributes = { LastSwiftUpdateCheck = 0930; LastUpgradeCheck = 0930; }; buildConfigurationList = 4821239608C13582E20E6DA73FD5F1F9 /* Build configuration list for PBXProject "Pods" */; compatibilityVersion = "Xcode 10.0"; developmentRegion = English; hasScannedForEncodings = 0; knownRegions = ( en, ); mainGroup = CF1408CF629C7361332E53B88F7BD30C; productRefGroup = D0BB88904A8103332A55D5B84619149A /* Products */; projectDirPath = ""; projectRoot = ""; targets = ( 352ACF249742AD668356716BEC898B49 /* Pods-VerifyCodeDemo */, 19622742EBA51E823D6DAE3F8CDBFAD4 /* SnapKit */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ 07AD972366EBC4D88439BE859E606D76 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; 0BE06200C6B667A325862B3097467860 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXResourcesBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ 253D0469F7AD24142C0ED3550984BB13 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( EAB7F9DF9A2AA71DD77A3AC43B08DFC6 /* Constraint.swift in Sources */, E418542DAA6B444CEDC23B9304116BA0 /* ConstraintAttributes.swift in Sources */, 2A19C2CB15633EB715E907B635E5A2AF /* ConstraintConfig.swift in Sources */, 04F66FA3C83A53525898079B3945E9B6 /* ConstraintConstantTarget.swift in Sources */, A7F301FEFA26966FD93FE41537DA9833 /* ConstraintDescription.swift in Sources */, 4B219F8E1869A5903D989F4B1FF69AEF /* ConstraintDSL.swift in Sources */, 108A9DFC16807E2F00517CF4E23D00BE /* ConstraintInsets.swift in Sources */, F76C08342FED84F10146E681E99A805C /* ConstraintInsetTarget.swift in Sources */, F39B131A46A0FE42BA8A0BB7FBFF2677 /* ConstraintItem.swift in Sources */, 84249F5514093FEDD80926183FF3D3F0 /* ConstraintLayoutGuide+Extensions.swift in Sources */, 6140B1FD47528742DB382D75D6772D70 /* ConstraintLayoutGuide.swift in Sources */, 8301F67FE6A00E166C6267B521BE722D /* ConstraintLayoutGuideDSL.swift in Sources */, 389074CB59EE151F61C40B251D52A737 /* ConstraintLayoutSupport.swift in Sources */, 25A8D111D8F21EBE8A89F8254C46E72E /* ConstraintLayoutSupportDSL.swift in Sources */, 4758FDCA298ED5B4BBFE7302BFEDE1F0 /* ConstraintMaker.swift in Sources */, BC9C79BB8A830AACC383277B2C0D5E6A /* ConstraintMakerEditable.swift in Sources */, A1D5B066B529B59BF042AC9CDDE3D0C2 /* ConstraintMakerExtendable.swift in Sources */, D9BA55AB9494D090563BC5386DE58BEC /* ConstraintMakerFinalizable.swift in Sources */, 22E06035A5CFB0C407AAD71805B204C8 /* ConstraintMakerPriortizable.swift in Sources */, 22327C004280671E16186F4D131CC59C /* ConstraintMakerRelatable.swift in Sources */, EA2F9BED7BE4C7E5F3BA4A98C006EB97 /* ConstraintMultiplierTarget.swift in Sources */, B33BB541223B04CBC5C3AB7E3F46592B /* ConstraintOffsetTarget.swift in Sources */, 6C7DC9AECC4B57A305E61D417A490FB1 /* ConstraintPriority.swift in Sources */, 0C6E2B64A133169E6694D3B7CE028F8F /* ConstraintPriorityTarget.swift in Sources */, 641A7B34B3FD3C3CD899321E2104E68A /* ConstraintRelatableTarget.swift in Sources */, FC3348D1B776D0ED499FFFA7F4F2834B /* ConstraintRelation.swift in Sources */, D05FC0A055D0231C18A078B7EAF81C96 /* ConstraintView+Extensions.swift in Sources */, B41F7C069770EAF9D13CBCE1824F02C8 /* ConstraintView.swift in Sources */, 63970F4F979D711C0ED5CAAE5CBCD8EF /* ConstraintViewDSL.swift in Sources */, 6187A3CB3B75ABB947D4847B62374AD2 /* Debugging.swift in Sources */, 23B574059CE490AE9CA01580A476AFED /* LayoutConstraint.swift in Sources */, 5818046C12DA0D8C11D63CD3D9CBE224 /* LayoutConstraintItem.swift in Sources */, 59B9310884B9ECAEF5D8CE090D9A0AE2 /* SnapKit-dummy.m in Sources */, F9A24CE1ECD5B380B4FCD9CF80660B2D /* Typealiases.swift in Sources */, D6A16FD82B9996ED419AEC2D4E9DCE56 /* UILayoutSupport+Extensions.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 9873D193E19480A7878931F0A283F3E1 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 85771E91D00630FEBE7342B318331A0C /* Pods-VerifyCodeDemo-dummy.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ 4CEEDE957FAE0FB0ACCCBE71FEF1B71B /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = SnapKit; target = 19622742EBA51E823D6DAE3F8CDBFAD4 /* SnapKit */; targetProxy = B127EA3F17E251202A7E3015298E8029 /* PBXContainerItemProxy */; }; /* End PBXTargetDependency section */ /* Begin XCBuildConfiguration section */ 07488D4657FB0A78086563621D425F8A /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_ANALYZER_NONNULL = YES; CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_ENABLE_OBJC_WEAK = YES; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_DOCUMENTATION_COMMENTS = YES; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; CLANG_WARN_STRICT_PROTOTYPES = YES; CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; COPY_PHASE_STRIP = NO; DEBUG_INFORMATION_FORMAT = dwarf; ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_TESTABILITY = YES; GCC_C_LANGUAGE_STANDARD = gnu11; GCC_DYNAMIC_NO_PIC = NO; GCC_NO_COMMON_BLOCKS = YES; GCC_OPTIMIZATION_LEVEL = 0; GCC_PREPROCESSOR_DEFINITIONS = ( "POD_CONFIGURATION_DEBUG=1", "DEBUG=1", "$(inherited)", ); 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 = 9.0; MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; MTL_FAST_MATH = YES; ONLY_ACTIVE_ARCH = YES; PRODUCT_NAME = "$(TARGET_NAME)"; STRIP_INSTALLED_PRODUCT = NO; SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_VERSION = 4.2; SYMROOT = "${SRCROOT}/../build"; }; name = Debug; }; 52B155456A890653ECFD078C2B116E2A /* Debug */ = { isa = XCBuildConfiguration; baseConfigurationReference = 25E34EF5671A453947A4DB0C58A03A48 /* SnapKit.xcconfig */; buildSettings = { CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; CURRENT_PROJECT_VERSION = 1; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; GCC_PREFIX_HEADER = "Target Support Files/SnapKit/SnapKit-prefix.pch"; INFOPLIST_FILE = "Target Support Files/SnapKit/SnapKit-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/SnapKit/SnapKit.modulemap"; PRODUCT_MODULE_NAME = SnapKit; PRODUCT_NAME = SnapKit; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; SWIFT_VERSION = 4.2; TARGETED_DEVICE_FAMILY = "1,2"; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; name = Debug; }; 6D2F18C68282FE51277236440CAEBD24 /* Debug */ = { isa = XCBuildConfiguration; baseConfigurationReference = 0DDDD6F462EB3B196478B6BB1493ED00 /* Pods-VerifyCodeDemo.debug.xcconfig */; buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; CURRENT_PROJECT_VERSION = 1; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; INFOPLIST_FILE = "Target Support Files/Pods-VerifyCodeDemo/Pods-VerifyCodeDemo-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 9.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", "@loader_path/Frameworks", ); MACH_O_TYPE = staticlib; MODULEMAP_FILE = "Target Support Files/Pods-VerifyCodeDemo/Pods-VerifyCodeDemo.modulemap"; OTHER_LDFLAGS = ""; OTHER_LIBTOOLFLAGS = ""; PODS_ROOT = "$(SRCROOT)"; PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; SDKROOT = iphoneos; SKIP_INSTALL = YES; TARGETED_DEVICE_FAMILY = "1,2"; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; name = Debug; }; A1962E6FF39BBAC201A2E5DDF99557DF /* Release */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_ANALYZER_NONNULL = YES; CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_ENABLE_OBJC_WEAK = YES; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_DOCUMENTATION_COMMENTS = YES; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; CLANG_WARN_STRICT_PROTOTYPES = YES; CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; COPY_PHASE_STRIP = NO; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; ENABLE_NS_ASSERTIONS = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_C_LANGUAGE_STANDARD = gnu11; GCC_NO_COMMON_BLOCKS = YES; GCC_PREPROCESSOR_DEFINITIONS = ( "POD_CONFIGURATION_RELEASE=1", "$(inherited)", ); 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 = 9.0; MTL_ENABLE_DEBUG_INFO = NO; MTL_FAST_MATH = YES; PRODUCT_NAME = "$(TARGET_NAME)"; STRIP_INSTALLED_PRODUCT = NO; SWIFT_COMPILATION_MODE = wholemodule; SWIFT_OPTIMIZATION_LEVEL = "-O"; SWIFT_VERSION = 4.2; SYMROOT = "${SRCROOT}/../build"; }; name = Release; }; A47F3B2601F1B23076D1B0A6AC3A1D71 /* Release */ = { isa = XCBuildConfiguration; baseConfigurationReference = 9428E894F7932D494E10DDB6D971EB39 /* Pods-VerifyCodeDemo.release.xcconfig */; buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; CURRENT_PROJECT_VERSION = 1; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; INFOPLIST_FILE = "Target Support Files/Pods-VerifyCodeDemo/Pods-VerifyCodeDemo-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 9.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", "@loader_path/Frameworks", ); MACH_O_TYPE = staticlib; MODULEMAP_FILE = "Target Support Files/Pods-VerifyCodeDemo/Pods-VerifyCodeDemo.modulemap"; OTHER_LDFLAGS = ""; OTHER_LIBTOOLFLAGS = ""; PODS_ROOT = "$(SRCROOT)"; PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; SDKROOT = iphoneos; SKIP_INSTALL = YES; TARGETED_DEVICE_FAMILY = "1,2"; VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; name = Release; }; C451653B8A5DC6ECA28660D72EACE786 /* Release */ = { isa = XCBuildConfiguration; baseConfigurationReference = 25E34EF5671A453947A4DB0C58A03A48 /* SnapKit.xcconfig */; buildSettings = { CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; CURRENT_PROJECT_VERSION = 1; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; GCC_PREFIX_HEADER = "Target Support Files/SnapKit/SnapKit-prefix.pch"; INFOPLIST_FILE = "Target Support Files/SnapKit/SnapKit-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/SnapKit/SnapKit.modulemap"; PRODUCT_MODULE_NAME = SnapKit; PRODUCT_NAME = SnapKit; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; SWIFT_VERSION = 4.2; TARGETED_DEVICE_FAMILY = "1,2"; VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; name = Release; }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ 27527AB7E45BC8234586E8C2F2638CED /* Build configuration list for PBXNativeTarget "Pods-VerifyCodeDemo" */ = { isa = XCConfigurationList; buildConfigurations = ( 6D2F18C68282FE51277236440CAEBD24 /* Debug */, A47F3B2601F1B23076D1B0A6AC3A1D71 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 3BBBC403BA79741703B9761E6A88A5B5 /* Build configuration list for PBXNativeTarget "SnapKit" */ = { isa = XCConfigurationList; buildConfigurations = ( 52B155456A890653ECFD078C2B116E2A /* Debug */, C451653B8A5DC6ECA28660D72EACE786 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 4821239608C13582E20E6DA73FD5F1F9 /* Build configuration list for PBXProject "Pods" */ = { isa = XCConfigurationList; buildConfigurations = ( 07488D4657FB0A78086563621D425F8A /* Debug */, A1962E6FF39BBAC201A2E5DDF99557DF /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; /* End XCConfigurationList section */ }; rootObject = BFDFE7DC352907FC980B868725387E98 /* Project object */; } ================================================ FILE: Pods/SnapKit/LICENSE ================================================ Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit 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. ================================================ FILE: Pods/SnapKit/README.md ================================================ SnapKit is a DSL to make Auto Layout easy on both iOS and OS X. [![Build Status](https://travis-ci.org/SnapKit/SnapKit.svg)](https://travis-ci.org/SnapKit/SnapKit) [![Platform](https://img.shields.io/cocoapods/p/SnapKit.svg?style=flat)](https://github.com/SnapKit/SnapKit) [![Cocoapods Compatible](https://img.shields.io/cocoapods/v/SnapKit.svg)](https://cocoapods.org/pods/SnapKit) [![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage) #### ⚠️ **To use with Swift 3.x please ensure you are using >= 3.0.0** ⚠️ #### ⚠️ **To use with Swift 4.x please ensure you are using >= 4.0.0** ⚠️ ## Contents - [Requirements](#requirements) - [Migration Guides](#migration-guides) - [Communication](#communication) - [Installation](#installation) - [Usage](#usage) - [Credits](#credits) - [License](#license) ## Requirements - iOS 8.0+ / Mac OS X 10.11+ / tvOS 9.0+ - Xcode 9.0+ - Swift 3.0+ ## Communication - If you **need help**, use [Stack Overflow](http://stackoverflow.com/questions/tagged/snapkit). (Tag 'snapkit') - If you'd like to **ask a general question**, use [Stack Overflow](http://stackoverflow.com/questions/tagged/snapkit). - If you **found a bug**, open an issue. - If you **have a feature request**, open an issue. - If you **want to contribute**, submit a pull request. ## Installation ### CocoaPods [CocoaPods](http://cocoapods.org) is a dependency manager for Cocoa projects. You can install it with the following command: ```bash $ gem install cocoapods ``` > CocoaPods 1.1.0+ is required to build SnapKit 4.0.0+. To integrate SnapKit into your Xcode project using CocoaPods, specify it in your `Podfile`: ```ruby source 'https://github.com/CocoaPods/Specs.git' platform :ios, '10.0' use_frameworks! target '' do pod 'SnapKit', '~> 4.0.0' end ``` Then, run the following command: ```bash $ pod install ``` ### Carthage [Carthage](https://github.com/Carthage/Carthage) is a decentralized dependency manager that builds your dependencies and provides you with binary frameworks. You can install Carthage with [Homebrew](http://brew.sh/) using the following command: ```bash $ brew update $ brew install carthage ``` To integrate SnapKit into your Xcode project using Carthage, specify it in your `Cartfile`: ```ogdl github "SnapKit/SnapKit" ~> 4.0.0 ``` Run `carthage update` to build the framework and drag the built `SnapKit.framework` into your Xcode project. ### Manually If you prefer not to use either of the aforementioned dependency managers, you can integrate SnapKit into your project manually. --- ## Usage ### Quick Start ```swift import SnapKit class MyViewController: UIViewController { lazy var box = UIView() override func viewDidLoad() { super.viewDidLoad() self.view.addSubview(box) box.snp.makeConstraints { (make) -> Void in make.width.height.equalTo(50) make.center.equalTo(self.view) } } } ``` ### Resources - [Documentation](http://snapkit.io/docs/) - [F.A.Q.](http://snapkit.io/faq/) ## Credits - Robert Payne ([@robertjpayne](https://twitter.com/robertjpayne)) - Many other contributors ## License SnapKit is released under the MIT license. See LICENSE for details. ================================================ FILE: Pods/SnapKit/Source/Constraint.swift ================================================ // // SnapKit // // Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit // // 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. #if os(iOS) || os(tvOS) import UIKit #else import AppKit #endif public final class Constraint { internal let sourceLocation: (String, UInt) internal let label: String? private let from: ConstraintItem private let to: ConstraintItem private let relation: ConstraintRelation private let multiplier: ConstraintMultiplierTarget private var constant: ConstraintConstantTarget { didSet { self.updateConstantAndPriorityIfNeeded() } } private var priority: ConstraintPriorityTarget { didSet { self.updateConstantAndPriorityIfNeeded() } } public var layoutConstraints: [LayoutConstraint] public var isActive: Bool { set { if newValue { activate() } else { deactivate() } } get { for layoutConstraint in self.layoutConstraints { if layoutConstraint.isActive { return true } } return false } } // MARK: Initialization internal init(from: ConstraintItem, to: ConstraintItem, relation: ConstraintRelation, sourceLocation: (String, UInt), label: String?, multiplier: ConstraintMultiplierTarget, constant: ConstraintConstantTarget, priority: ConstraintPriorityTarget) { self.from = from self.to = to self.relation = relation self.sourceLocation = sourceLocation self.label = label self.multiplier = multiplier self.constant = constant self.priority = priority self.layoutConstraints = [] // get attributes let layoutFromAttributes = self.from.attributes.layoutAttributes let layoutToAttributes = self.to.attributes.layoutAttributes // get layout from let layoutFrom = self.from.layoutConstraintItem! // get relation let layoutRelation = self.relation.layoutRelation for layoutFromAttribute in layoutFromAttributes { // get layout to attribute let layoutToAttribute: LayoutAttribute #if os(iOS) || os(tvOS) if layoutToAttributes.count > 0 { if self.from.attributes == .edges && self.to.attributes == .margins { switch layoutFromAttribute { case .left: layoutToAttribute = .leftMargin case .right: layoutToAttribute = .rightMargin case .top: layoutToAttribute = .topMargin case .bottom: layoutToAttribute = .bottomMargin default: fatalError() } } else if self.from.attributes == .margins && self.to.attributes == .edges { switch layoutFromAttribute { case .leftMargin: layoutToAttribute = .left case .rightMargin: layoutToAttribute = .right case .topMargin: layoutToAttribute = .top case .bottomMargin: layoutToAttribute = .bottom default: fatalError() } } else if self.from.attributes == self.to.attributes { layoutToAttribute = layoutFromAttribute } else { layoutToAttribute = layoutToAttributes[0] } } else { if self.to.target == nil && (layoutFromAttribute == .centerX || layoutFromAttribute == .centerY) { layoutToAttribute = layoutFromAttribute == .centerX ? .left : .top } else { layoutToAttribute = layoutFromAttribute } } #else if self.from.attributes == self.to.attributes { layoutToAttribute = layoutFromAttribute } else if layoutToAttributes.count > 0 { layoutToAttribute = layoutToAttributes[0] } else { layoutToAttribute = layoutFromAttribute } #endif // get layout constant let layoutConstant: CGFloat = self.constant.constraintConstantTargetValueFor(layoutAttribute: layoutToAttribute) // get layout to var layoutTo: AnyObject? = self.to.target // use superview if possible if layoutTo == nil && layoutToAttribute != .width && layoutToAttribute != .height { layoutTo = layoutFrom.superview } // create layout constraint let layoutConstraint = LayoutConstraint( item: layoutFrom, attribute: layoutFromAttribute, relatedBy: layoutRelation, toItem: layoutTo, attribute: layoutToAttribute, multiplier: self.multiplier.constraintMultiplierTargetValue, constant: layoutConstant ) // set label layoutConstraint.label = self.label // set priority layoutConstraint.priority = LayoutPriority(rawValue: self.priority.constraintPriorityTargetValue) // set constraint layoutConstraint.constraint = self // append self.layoutConstraints.append(layoutConstraint) } } // MARK: Public @available(*, deprecated:3.0, message:"Use activate().") public func install() { self.activate() } @available(*, deprecated:3.0, message:"Use deactivate().") public func uninstall() { self.deactivate() } public func activate() { self.activateIfNeeded() } public func deactivate() { self.deactivateIfNeeded() } @discardableResult public func update(offset: ConstraintOffsetTarget) -> Constraint { self.constant = offset.constraintOffsetTargetValue return self } @discardableResult public func update(inset: ConstraintInsetTarget) -> Constraint { self.constant = inset.constraintInsetTargetValue return self } @discardableResult public func update(priority: ConstraintPriorityTarget) -> Constraint { self.priority = priority.constraintPriorityTargetValue return self } @discardableResult public func update(priority: ConstraintPriority) -> Constraint { self.priority = priority.value return self } @available(*, deprecated:3.0, message:"Use update(offset: ConstraintOffsetTarget) instead.") public func updateOffset(amount: ConstraintOffsetTarget) -> Void { self.update(offset: amount) } @available(*, deprecated:3.0, message:"Use update(inset: ConstraintInsetTarget) instead.") public func updateInsets(amount: ConstraintInsetTarget) -> Void { self.update(inset: amount) } @available(*, deprecated:3.0, message:"Use update(priority: ConstraintPriorityTarget) instead.") public func updatePriority(amount: ConstraintPriorityTarget) -> Void { self.update(priority: amount) } @available(*, obsoleted:3.0, message:"Use update(priority: ConstraintPriorityTarget) instead.") public func updatePriorityRequired() -> Void {} @available(*, obsoleted:3.0, message:"Use update(priority: ConstraintPriorityTarget) instead.") public func updatePriorityHigh() -> Void { fatalError("Must be implemented by Concrete subclass.") } @available(*, obsoleted:3.0, message:"Use update(priority: ConstraintPriorityTarget) instead.") public func updatePriorityMedium() -> Void { fatalError("Must be implemented by Concrete subclass.") } @available(*, obsoleted:3.0, message:"Use update(priority: ConstraintPriorityTarget) instead.") public func updatePriorityLow() -> Void { fatalError("Must be implemented by Concrete subclass.") } // MARK: Internal internal func updateConstantAndPriorityIfNeeded() { for layoutConstraint in self.layoutConstraints { let attribute = (layoutConstraint.secondAttribute == .notAnAttribute) ? layoutConstraint.firstAttribute : layoutConstraint.secondAttribute layoutConstraint.constant = self.constant.constraintConstantTargetValueFor(layoutAttribute: attribute) let requiredPriority = ConstraintPriority.required.value if (layoutConstraint.priority.rawValue < requiredPriority), (self.priority.constraintPriorityTargetValue != requiredPriority) { layoutConstraint.priority = LayoutPriority(rawValue: self.priority.constraintPriorityTargetValue) } } } internal func activateIfNeeded(updatingExisting: Bool = false) { guard let item = self.from.layoutConstraintItem else { print("WARNING: SnapKit failed to get from item from constraint. Activate will be a no-op.") return } let layoutConstraints = self.layoutConstraints if updatingExisting { var existingLayoutConstraints: [LayoutConstraint] = [] for constraint in item.constraints { existingLayoutConstraints += constraint.layoutConstraints } for layoutConstraint in layoutConstraints { let existingLayoutConstraint = existingLayoutConstraints.first { $0 == layoutConstraint } guard let updateLayoutConstraint = existingLayoutConstraint else { fatalError("Updated constraint could not find existing matching constraint to update: \(layoutConstraint)") } let updateLayoutAttribute = (updateLayoutConstraint.secondAttribute == .notAnAttribute) ? updateLayoutConstraint.firstAttribute : updateLayoutConstraint.secondAttribute updateLayoutConstraint.constant = self.constant.constraintConstantTargetValueFor(layoutAttribute: updateLayoutAttribute) } } else { NSLayoutConstraint.activate(layoutConstraints) item.add(constraints: [self]) } } internal func deactivateIfNeeded() { guard let item = self.from.layoutConstraintItem else { print("WARNING: SnapKit failed to get from item from constraint. Deactivate will be a no-op.") return } let layoutConstraints = self.layoutConstraints NSLayoutConstraint.deactivate(layoutConstraints) item.remove(constraints: [self]) } } ================================================ FILE: Pods/SnapKit/Source/ConstraintAttributes.swift ================================================ // // SnapKit // // Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit // // 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. #if os(iOS) || os(tvOS) import UIKit #else import AppKit #endif internal struct ConstraintAttributes : OptionSet, ExpressibleByIntegerLiteral { typealias IntegerLiteralType = UInt internal init(rawValue: UInt) { self.rawValue = rawValue } internal init(_ rawValue: UInt) { self.init(rawValue: rawValue) } internal init(nilLiteral: ()) { self.rawValue = 0 } internal init(integerLiteral rawValue: IntegerLiteralType) { self.init(rawValue: rawValue) } internal private(set) var rawValue: UInt internal static var allZeros: ConstraintAttributes { return 0 } internal static func convertFromNilLiteral() -> ConstraintAttributes { return 0 } internal var boolValue: Bool { return self.rawValue != 0 } internal func toRaw() -> UInt { return self.rawValue } internal static func fromRaw(_ raw: UInt) -> ConstraintAttributes? { return self.init(raw) } internal static func fromMask(_ raw: UInt) -> ConstraintAttributes { return self.init(raw) } // normal internal static var none: ConstraintAttributes { return 0 } internal static var left: ConstraintAttributes { return 1 } internal static var top: ConstraintAttributes { return 2 } internal static var right: ConstraintAttributes { return 4 } internal static var bottom: ConstraintAttributes { return 8 } internal static var leading: ConstraintAttributes { return 16 } internal static var trailing: ConstraintAttributes { return 32 } internal static var width: ConstraintAttributes { return 64 } internal static var height: ConstraintAttributes { return 128 } internal static var centerX: ConstraintAttributes { return 256 } internal static var centerY: ConstraintAttributes { return 512 } internal static var lastBaseline: ConstraintAttributes { return 1024 } @available(iOS 8.0, OSX 10.11, *) internal static var firstBaseline: ConstraintAttributes { return 2048 } @available(iOS 8.0, *) internal static var leftMargin: ConstraintAttributes { return 4096 } @available(iOS 8.0, *) internal static var rightMargin: ConstraintAttributes { return 8192 } @available(iOS 8.0, *) internal static var topMargin: ConstraintAttributes { return 16384 } @available(iOS 8.0, *) internal static var bottomMargin: ConstraintAttributes { return 32768 } @available(iOS 8.0, *) internal static var leadingMargin: ConstraintAttributes { return 65536 } @available(iOS 8.0, *) internal static var trailingMargin: ConstraintAttributes { return 131072 } @available(iOS 8.0, *) internal static var centerXWithinMargins: ConstraintAttributes { return 262144 } @available(iOS 8.0, *) internal static var centerYWithinMargins: ConstraintAttributes { return 524288 } // aggregates internal static var edges: ConstraintAttributes { return 15 } internal static var size: ConstraintAttributes { return 192 } internal static var center: ConstraintAttributes { return 768 } @available(iOS 8.0, *) internal static var margins: ConstraintAttributes { return 61440 } @available(iOS 8.0, *) internal static var centerWithinMargins: ConstraintAttributes { return 786432 } internal var layoutAttributes:[LayoutAttribute] { var attrs = [LayoutAttribute]() if (self.contains(ConstraintAttributes.left)) { attrs.append(.left) } if (self.contains(ConstraintAttributes.top)) { attrs.append(.top) } if (self.contains(ConstraintAttributes.right)) { attrs.append(.right) } if (self.contains(ConstraintAttributes.bottom)) { attrs.append(.bottom) } if (self.contains(ConstraintAttributes.leading)) { attrs.append(.leading) } if (self.contains(ConstraintAttributes.trailing)) { attrs.append(.trailing) } if (self.contains(ConstraintAttributes.width)) { attrs.append(.width) } if (self.contains(ConstraintAttributes.height)) { attrs.append(.height) } if (self.contains(ConstraintAttributes.centerX)) { attrs.append(.centerX) } if (self.contains(ConstraintAttributes.centerY)) { attrs.append(.centerY) } if (self.contains(ConstraintAttributes.lastBaseline)) { attrs.append(.lastBaseline) } #if os(iOS) || os(tvOS) if (self.contains(ConstraintAttributes.firstBaseline)) { attrs.append(.firstBaseline) } if (self.contains(ConstraintAttributes.leftMargin)) { attrs.append(.leftMargin) } if (self.contains(ConstraintAttributes.rightMargin)) { attrs.append(.rightMargin) } if (self.contains(ConstraintAttributes.topMargin)) { attrs.append(.topMargin) } if (self.contains(ConstraintAttributes.bottomMargin)) { attrs.append(.bottomMargin) } if (self.contains(ConstraintAttributes.leadingMargin)) { attrs.append(.leadingMargin) } if (self.contains(ConstraintAttributes.trailingMargin)) { attrs.append(.trailingMargin) } if (self.contains(ConstraintAttributes.centerXWithinMargins)) { attrs.append(.centerXWithinMargins) } if (self.contains(ConstraintAttributes.centerYWithinMargins)) { attrs.append(.centerYWithinMargins) } #endif return attrs } } internal func + (left: ConstraintAttributes, right: ConstraintAttributes) -> ConstraintAttributes { return left.union(right) } internal func +=(left: inout ConstraintAttributes, right: ConstraintAttributes) { left.formUnion(right) } internal func -=(left: inout ConstraintAttributes, right: ConstraintAttributes) { left.subtract(right) } internal func ==(left: ConstraintAttributes, right: ConstraintAttributes) -> Bool { return left.rawValue == right.rawValue } ================================================ FILE: Pods/SnapKit/Source/ConstraintConfig.swift ================================================ // // SnapKit // // Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit // // 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. #if os(iOS) || os(tvOS) import UIKit public typealias ConstraintInterfaceLayoutDirection = UIUserInterfaceLayoutDirection #else import AppKit public typealias ConstraintInterfaceLayoutDirection = NSUserInterfaceLayoutDirection #endif public struct ConstraintConfig { public static var interfaceLayoutDirection: ConstraintInterfaceLayoutDirection = .leftToRight } ================================================ FILE: Pods/SnapKit/Source/ConstraintConstantTarget.swift ================================================ // // SnapKit // // Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit // // 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. #if os(iOS) || os(tvOS) import UIKit #else import AppKit #endif public protocol ConstraintConstantTarget { } extension CGPoint: ConstraintConstantTarget { } extension CGSize: ConstraintConstantTarget { } extension ConstraintInsets: ConstraintConstantTarget { } extension ConstraintConstantTarget { internal func constraintConstantTargetValueFor(layoutAttribute: LayoutAttribute) -> CGFloat { if let value = self as? CGFloat { return value } if let value = self as? Float { return CGFloat(value) } if let value = self as? Double { return CGFloat(value) } if let value = self as? Int { return CGFloat(value) } if let value = self as? UInt { return CGFloat(value) } if let value = self as? CGSize { if layoutAttribute == .width { return value.width } else if layoutAttribute == .height { return value.height } else { return 0.0 } } if let value = self as? CGPoint { #if os(iOS) || os(tvOS) switch layoutAttribute { case .left, .right, .leading, .trailing, .centerX, .leftMargin, .rightMargin, .leadingMargin, .trailingMargin, .centerXWithinMargins: return value.x case .top, .bottom, .centerY, .topMargin, .bottomMargin, .centerYWithinMargins, .lastBaseline, .firstBaseline: return value.y case .width, .height, .notAnAttribute: return 0.0 } #else switch layoutAttribute { case .left, .right, .leading, .trailing, .centerX: return value.x case .top, .bottom, .centerY, .lastBaseline, .firstBaseline: return value.y case .width, .height, .notAnAttribute: return 0.0 } #endif } if let value = self as? ConstraintInsets { #if os(iOS) || os(tvOS) switch layoutAttribute { case .left, .leftMargin, .centerX, .centerXWithinMargins: return value.left case .top, .topMargin, .centerY, .centerYWithinMargins, .lastBaseline, .firstBaseline: return value.top case .right, .rightMargin: return -value.right case .bottom, .bottomMargin: return -value.bottom case .leading, .leadingMargin: return (ConstraintConfig.interfaceLayoutDirection == .leftToRight) ? value.left : value.right case .trailing, .trailingMargin: return (ConstraintConfig.interfaceLayoutDirection == .leftToRight) ? -value.right : -value.left case .width: return -(value.left + value.right) case .height: return -(value.top + value.bottom) case .notAnAttribute: return 0.0 } #else switch layoutAttribute { case .left, .centerX: return value.left case .top, .centerY, .lastBaseline, .firstBaseline: return value.top case .right: return -value.right case .bottom: return -value.bottom case .leading: return (ConstraintConfig.interfaceLayoutDirection == .leftToRight) ? value.left : value.right case .trailing: return (ConstraintConfig.interfaceLayoutDirection == .leftToRight) ? -value.right : -value.left case .width: return -(value.left + value.right) case .height: return -(value.top + value.bottom) case .notAnAttribute: return 0.0 } #endif } return 0.0 } } ================================================ FILE: Pods/SnapKit/Source/ConstraintDSL.swift ================================================ // // SnapKit // // Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit // // 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. #if os(iOS) || os(tvOS) import UIKit #else import AppKit #endif public protocol ConstraintDSL { var target: AnyObject? { get } func setLabel(_ value: String?) func label() -> String? } extension ConstraintDSL { public func setLabel(_ value: String?) { objc_setAssociatedObject(self.target as Any, &labelKey, value, .OBJC_ASSOCIATION_COPY_NONATOMIC) } public func label() -> String? { return objc_getAssociatedObject(self.target as Any, &labelKey) as? String } } private var labelKey: UInt8 = 0 public protocol ConstraintBasicAttributesDSL : ConstraintDSL { } extension ConstraintBasicAttributesDSL { // MARK: Basics public var left: ConstraintItem { return ConstraintItem(target: self.target, attributes: ConstraintAttributes.left) } public var top: ConstraintItem { return ConstraintItem(target: self.target, attributes: ConstraintAttributes.top) } public var right: ConstraintItem { return ConstraintItem(target: self.target, attributes: ConstraintAttributes.right) } public var bottom: ConstraintItem { return ConstraintItem(target: self.target, attributes: ConstraintAttributes.bottom) } public var leading: ConstraintItem { return ConstraintItem(target: self.target, attributes: ConstraintAttributes.leading) } public var trailing: ConstraintItem { return ConstraintItem(target: self.target, attributes: ConstraintAttributes.trailing) } public var width: ConstraintItem { return ConstraintItem(target: self.target, attributes: ConstraintAttributes.width) } public var height: ConstraintItem { return ConstraintItem(target: self.target, attributes: ConstraintAttributes.height) } public var centerX: ConstraintItem { return ConstraintItem(target: self.target, attributes: ConstraintAttributes.centerX) } public var centerY: ConstraintItem { return ConstraintItem(target: self.target, attributes: ConstraintAttributes.centerY) } public var edges: ConstraintItem { return ConstraintItem(target: self.target, attributes: ConstraintAttributes.edges) } public var size: ConstraintItem { return ConstraintItem(target: self.target, attributes: ConstraintAttributes.size) } public var center: ConstraintItem { return ConstraintItem(target: self.target, attributes: ConstraintAttributes.center) } } public protocol ConstraintAttributesDSL : ConstraintBasicAttributesDSL { } extension ConstraintAttributesDSL { // MARK: Baselines @available(*, deprecated:3.0, message:"Use .lastBaseline instead") public var baseline: ConstraintItem { return ConstraintItem(target: self.target, attributes: ConstraintAttributes.lastBaseline) } @available(iOS 8.0, OSX 10.11, *) public var lastBaseline: ConstraintItem { return ConstraintItem(target: self.target, attributes: ConstraintAttributes.lastBaseline) } @available(iOS 8.0, OSX 10.11, *) public var firstBaseline: ConstraintItem { return ConstraintItem(target: self.target, attributes: ConstraintAttributes.firstBaseline) } // MARK: Margins @available(iOS 8.0, *) public var leftMargin: ConstraintItem { return ConstraintItem(target: self.target, attributes: ConstraintAttributes.leftMargin) } @available(iOS 8.0, *) public var topMargin: ConstraintItem { return ConstraintItem(target: self.target, attributes: ConstraintAttributes.topMargin) } @available(iOS 8.0, *) public var rightMargin: ConstraintItem { return ConstraintItem(target: self.target, attributes: ConstraintAttributes.rightMargin) } @available(iOS 8.0, *) public var bottomMargin: ConstraintItem { return ConstraintItem(target: self.target, attributes: ConstraintAttributes.bottomMargin) } @available(iOS 8.0, *) public var leadingMargin: ConstraintItem { return ConstraintItem(target: self.target, attributes: ConstraintAttributes.leadingMargin) } @available(iOS 8.0, *) public var trailingMargin: ConstraintItem { return ConstraintItem(target: self.target, attributes: ConstraintAttributes.trailingMargin) } @available(iOS 8.0, *) public var centerXWithinMargins: ConstraintItem { return ConstraintItem(target: self.target, attributes: ConstraintAttributes.centerXWithinMargins) } @available(iOS 8.0, *) public var centerYWithinMargins: ConstraintItem { return ConstraintItem(target: self.target, attributes: ConstraintAttributes.centerYWithinMargins) } @available(iOS 8.0, *) public var margins: ConstraintItem { return ConstraintItem(target: self.target, attributes: ConstraintAttributes.margins) } @available(iOS 8.0, *) public var centerWithinMargins: ConstraintItem { return ConstraintItem(target: self.target, attributes: ConstraintAttributes.centerWithinMargins) } } ================================================ FILE: Pods/SnapKit/Source/ConstraintDescription.swift ================================================ // // SnapKit // // Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit // // 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. #if os(iOS) || os(tvOS) import UIKit #else import AppKit #endif public class ConstraintDescription { internal let item: LayoutConstraintItem internal var attributes: ConstraintAttributes internal var relation: ConstraintRelation? = nil internal var sourceLocation: (String, UInt)? = nil internal var label: String? = nil internal var related: ConstraintItem? = nil internal var multiplier: ConstraintMultiplierTarget = 1.0 internal var constant: ConstraintConstantTarget = 0.0 internal var priority: ConstraintPriorityTarget = 1000.0 internal lazy var constraint: Constraint? = { guard let relation = self.relation, let related = self.related, let sourceLocation = self.sourceLocation else { return nil } let from = ConstraintItem(target: self.item, attributes: self.attributes) return Constraint( from: from, to: related, relation: relation, sourceLocation: sourceLocation, label: self.label, multiplier: self.multiplier, constant: self.constant, priority: self.priority ) }() // MARK: Initialization internal init(item: LayoutConstraintItem, attributes: ConstraintAttributes) { self.item = item self.attributes = attributes } } ================================================ FILE: Pods/SnapKit/Source/ConstraintInsetTarget.swift ================================================ // // SnapKit // // Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit // // 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. #if os(iOS) || os(tvOS) import UIKit #else import AppKit #endif public protocol ConstraintInsetTarget: ConstraintConstantTarget { } extension Int: ConstraintInsetTarget { } extension UInt: ConstraintInsetTarget { } extension Float: ConstraintInsetTarget { } extension Double: ConstraintInsetTarget { } extension CGFloat: ConstraintInsetTarget { } extension ConstraintInsets: ConstraintInsetTarget { } extension ConstraintInsetTarget { internal var constraintInsetTargetValue: ConstraintInsets { if let amount = self as? ConstraintInsets { return amount } else if let amount = self as? Float { return ConstraintInsets(top: CGFloat(amount), left: CGFloat(amount), bottom: CGFloat(amount), right: CGFloat(amount)) } else if let amount = self as? Double { return ConstraintInsets(top: CGFloat(amount), left: CGFloat(amount), bottom: CGFloat(amount), right: CGFloat(amount)) } else if let amount = self as? CGFloat { return ConstraintInsets(top: amount, left: amount, bottom: amount, right: amount) } else if let amount = self as? Int { return ConstraintInsets(top: CGFloat(amount), left: CGFloat(amount), bottom: CGFloat(amount), right: CGFloat(amount)) } else if let amount = self as? UInt { return ConstraintInsets(top: CGFloat(amount), left: CGFloat(amount), bottom: CGFloat(amount), right: CGFloat(amount)) } else { return ConstraintInsets(top: 0, left: 0, bottom: 0, right: 0) } } } ================================================ FILE: Pods/SnapKit/Source/ConstraintInsets.swift ================================================ // // SnapKit // // Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit // // 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. #if os(iOS) || os(tvOS) import UIKit #else import AppKit #endif #if os(iOS) || os(tvOS) public typealias ConstraintInsets = UIEdgeInsets #else public typealias ConstraintInsets = NSEdgeInsets #endif ================================================ FILE: Pods/SnapKit/Source/ConstraintItem.swift ================================================ // // SnapKit // // Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit // // 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. #if os(iOS) || os(tvOS) import UIKit #else import AppKit #endif public final class ConstraintItem { internal weak var target: AnyObject? internal let attributes: ConstraintAttributes internal init(target: AnyObject?, attributes: ConstraintAttributes) { self.target = target self.attributes = attributes } internal var layoutConstraintItem: LayoutConstraintItem? { return self.target as? LayoutConstraintItem } } public func ==(lhs: ConstraintItem, rhs: ConstraintItem) -> Bool { // pointer equality guard lhs !== rhs else { return true } // must both have valid targets and identical attributes guard let target1 = lhs.target, let target2 = rhs.target, target1 === target2 && lhs.attributes == rhs.attributes else { return false } return true } ================================================ FILE: Pods/SnapKit/Source/ConstraintLayoutGuide+Extensions.swift ================================================ // // SnapKit // // Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit // // 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. #if os(iOS) || os(tvOS) import UIKit #endif @available(iOS 9.0, OSX 10.11, *) public extension ConstraintLayoutGuide { public var snp: ConstraintLayoutGuideDSL { return ConstraintLayoutGuideDSL(guide: self) } } ================================================ FILE: Pods/SnapKit/Source/ConstraintLayoutGuide.swift ================================================ // // SnapKit // // Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit // // 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. #if os(iOS) || os(tvOS) import UIKit #else import AppKit #endif #if os(iOS) || os(tvOS) @available(iOS 9.0, *) public typealias ConstraintLayoutGuide = UILayoutGuide #else @available(OSX 10.11, *) public typealias ConstraintLayoutGuide = NSLayoutGuide #endif ================================================ FILE: Pods/SnapKit/Source/ConstraintLayoutGuideDSL.swift ================================================ // // SnapKit // // Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit // // 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. #if os(iOS) || os(tvOS) import UIKit #else import AppKit #endif @available(iOS 9.0, OSX 10.11, *) public struct ConstraintLayoutGuideDSL: ConstraintAttributesDSL { @discardableResult public func prepareConstraints(_ closure: (_ make: ConstraintMaker) -> Void) -> [Constraint] { return ConstraintMaker.prepareConstraints(item: self.guide, closure: closure) } public func makeConstraints(_ closure: (_ make: ConstraintMaker) -> Void) { ConstraintMaker.makeConstraints(item: self.guide, closure: closure) } public func remakeConstraints(_ closure: (_ make: ConstraintMaker) -> Void) { ConstraintMaker.remakeConstraints(item: self.guide, closure: closure) } public func updateConstraints(_ closure: (_ make: ConstraintMaker) -> Void) { ConstraintMaker.updateConstraints(item: self.guide, closure: closure) } public func removeConstraints() { ConstraintMaker.removeConstraints(item: self.guide) } public var target: AnyObject? { return self.guide } internal let guide: ConstraintLayoutGuide internal init(guide: ConstraintLayoutGuide) { self.guide = guide } } ================================================ FILE: Pods/SnapKit/Source/ConstraintLayoutSupport.swift ================================================ // // SnapKit // // Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit // // 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. #if os(iOS) || os(tvOS) import UIKit #else import AppKit #endif #if os(iOS) || os(tvOS) @available(iOS 8.0, *) public typealias ConstraintLayoutSupport = UILayoutSupport #else public class ConstraintLayoutSupport {} #endif ================================================ FILE: Pods/SnapKit/Source/ConstraintLayoutSupportDSL.swift ================================================ // // SnapKit // // Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit // // 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. #if os(iOS) || os(tvOS) import UIKit #else import AppKit #endif @available(iOS 8.0, *) public struct ConstraintLayoutSupportDSL: ConstraintDSL { public var target: AnyObject? { return self.support } internal let support: ConstraintLayoutSupport internal init(support: ConstraintLayoutSupport) { self.support = support } public var top: ConstraintItem { return ConstraintItem(target: self.target, attributes: ConstraintAttributes.top) } public var bottom: ConstraintItem { return ConstraintItem(target: self.target, attributes: ConstraintAttributes.bottom) } public var height: ConstraintItem { return ConstraintItem(target: self.target, attributes: ConstraintAttributes.height) } } ================================================ FILE: Pods/SnapKit/Source/ConstraintMaker.swift ================================================ // // SnapKit // // Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit // // 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. #if os(iOS) || os(tvOS) import UIKit #else import AppKit #endif public class ConstraintMaker { public var left: ConstraintMakerExtendable { return self.makeExtendableWithAttributes(.left) } public var top: ConstraintMakerExtendable { return self.makeExtendableWithAttributes(.top) } public var bottom: ConstraintMakerExtendable { return self.makeExtendableWithAttributes(.bottom) } public var right: ConstraintMakerExtendable { return self.makeExtendableWithAttributes(.right) } public var leading: ConstraintMakerExtendable { return self.makeExtendableWithAttributes(.leading) } public var trailing: ConstraintMakerExtendable { return self.makeExtendableWithAttributes(.trailing) } public var width: ConstraintMakerExtendable { return self.makeExtendableWithAttributes(.width) } public var height: ConstraintMakerExtendable { return self.makeExtendableWithAttributes(.height) } public var centerX: ConstraintMakerExtendable { return self.makeExtendableWithAttributes(.centerX) } public var centerY: ConstraintMakerExtendable { return self.makeExtendableWithAttributes(.centerY) } @available(*, deprecated:3.0, message:"Use lastBaseline instead") public var baseline: ConstraintMakerExtendable { return self.makeExtendableWithAttributes(.lastBaseline) } public var lastBaseline: ConstraintMakerExtendable { return self.makeExtendableWithAttributes(.lastBaseline) } @available(iOS 8.0, OSX 10.11, *) public var firstBaseline: ConstraintMakerExtendable { return self.makeExtendableWithAttributes(.firstBaseline) } @available(iOS 8.0, *) public var leftMargin: ConstraintMakerExtendable { return self.makeExtendableWithAttributes(.leftMargin) } @available(iOS 8.0, *) public var rightMargin: ConstraintMakerExtendable { return self.makeExtendableWithAttributes(.rightMargin) } @available(iOS 8.0, *) public var topMargin: ConstraintMakerExtendable { return self.makeExtendableWithAttributes(.topMargin) } @available(iOS 8.0, *) public var bottomMargin: ConstraintMakerExtendable { return self.makeExtendableWithAttributes(.bottomMargin) } @available(iOS 8.0, *) public var leadingMargin: ConstraintMakerExtendable { return self.makeExtendableWithAttributes(.leadingMargin) } @available(iOS 8.0, *) public var trailingMargin: ConstraintMakerExtendable { return self.makeExtendableWithAttributes(.trailingMargin) } @available(iOS 8.0, *) public var centerXWithinMargins: ConstraintMakerExtendable { return self.makeExtendableWithAttributes(.centerXWithinMargins) } @available(iOS 8.0, *) public var centerYWithinMargins: ConstraintMakerExtendable { return self.makeExtendableWithAttributes(.centerYWithinMargins) } public var edges: ConstraintMakerExtendable { return self.makeExtendableWithAttributes(.edges) } public var size: ConstraintMakerExtendable { return self.makeExtendableWithAttributes(.size) } public var center: ConstraintMakerExtendable { return self.makeExtendableWithAttributes(.center) } @available(iOS 8.0, *) public var margins: ConstraintMakerExtendable { return self.makeExtendableWithAttributes(.margins) } @available(iOS 8.0, *) public var centerWithinMargins: ConstraintMakerExtendable { return self.makeExtendableWithAttributes(.centerWithinMargins) } private let item: LayoutConstraintItem private var descriptions = [ConstraintDescription]() internal init(item: LayoutConstraintItem) { self.item = item self.item.prepare() } internal func makeExtendableWithAttributes(_ attributes: ConstraintAttributes) -> ConstraintMakerExtendable { let description = ConstraintDescription(item: self.item, attributes: attributes) self.descriptions.append(description) return ConstraintMakerExtendable(description) } internal static func prepareConstraints(item: LayoutConstraintItem, closure: (_ make: ConstraintMaker) -> Void) -> [Constraint] { let maker = ConstraintMaker(item: item) closure(maker) var constraints: [Constraint] = [] for description in maker.descriptions { guard let constraint = description.constraint else { continue } constraints.append(constraint) } return constraints } internal static func makeConstraints(item: LayoutConstraintItem, closure: (_ make: ConstraintMaker) -> Void) { let constraints = prepareConstraints(item: item, closure: closure) for constraint in constraints { constraint.activateIfNeeded(updatingExisting: false) } } internal static func remakeConstraints(item: LayoutConstraintItem, closure: (_ make: ConstraintMaker) -> Void) { self.removeConstraints(item: item) self.makeConstraints(item: item, closure: closure) } internal static func updateConstraints(item: LayoutConstraintItem, closure: (_ make: ConstraintMaker) -> Void) { guard item.constraints.count > 0 else { self.makeConstraints(item: item, closure: closure) return } let constraints = prepareConstraints(item: item, closure: closure) for constraint in constraints { constraint.activateIfNeeded(updatingExisting: true) } } internal static func removeConstraints(item: LayoutConstraintItem) { let constraints = item.constraints for constraint in constraints { constraint.deactivateIfNeeded() } } } ================================================ FILE: Pods/SnapKit/Source/ConstraintMakerEditable.swift ================================================ // // SnapKit // // Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit // // 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. #if os(iOS) || os(tvOS) import UIKit #else import AppKit #endif public class ConstraintMakerEditable: ConstraintMakerPriortizable { @discardableResult public func multipliedBy(_ amount: ConstraintMultiplierTarget) -> ConstraintMakerEditable { self.description.multiplier = amount return self } @discardableResult public func dividedBy(_ amount: ConstraintMultiplierTarget) -> ConstraintMakerEditable { return self.multipliedBy(1.0 / amount.constraintMultiplierTargetValue) } @discardableResult public func offset(_ amount: ConstraintOffsetTarget) -> ConstraintMakerEditable { self.description.constant = amount.constraintOffsetTargetValue return self } @discardableResult public func inset(_ amount: ConstraintInsetTarget) -> ConstraintMakerEditable { self.description.constant = amount.constraintInsetTargetValue return self } } ================================================ FILE: Pods/SnapKit/Source/ConstraintMakerExtendable.swift ================================================ // // SnapKit // // Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit // // 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. #if os(iOS) || os(tvOS) import UIKit #else import AppKit #endif public class ConstraintMakerExtendable: ConstraintMakerRelatable { public var left: ConstraintMakerExtendable { self.description.attributes += .left return self } public var top: ConstraintMakerExtendable { self.description.attributes += .top return self } public var bottom: ConstraintMakerExtendable { self.description.attributes += .bottom return self } public var right: ConstraintMakerExtendable { self.description.attributes += .right return self } public var leading: ConstraintMakerExtendable { self.description.attributes += .leading return self } public var trailing: ConstraintMakerExtendable { self.description.attributes += .trailing return self } public var width: ConstraintMakerExtendable { self.description.attributes += .width return self } public var height: ConstraintMakerExtendable { self.description.attributes += .height return self } public var centerX: ConstraintMakerExtendable { self.description.attributes += .centerX return self } public var centerY: ConstraintMakerExtendable { self.description.attributes += .centerY return self } @available(*, deprecated:3.0, message:"Use lastBaseline instead") public var baseline: ConstraintMakerExtendable { self.description.attributes += .lastBaseline return self } public var lastBaseline: ConstraintMakerExtendable { self.description.attributes += .lastBaseline return self } @available(iOS 8.0, OSX 10.11, *) public var firstBaseline: ConstraintMakerExtendable { self.description.attributes += .firstBaseline return self } @available(iOS 8.0, *) public var leftMargin: ConstraintMakerExtendable { self.description.attributes += .leftMargin return self } @available(iOS 8.0, *) public var rightMargin: ConstraintMakerExtendable { self.description.attributes += .rightMargin return self } @available(iOS 8.0, *) public var topMargin: ConstraintMakerExtendable { self.description.attributes += .topMargin return self } @available(iOS 8.0, *) public var bottomMargin: ConstraintMakerExtendable { self.description.attributes += .bottomMargin return self } @available(iOS 8.0, *) public var leadingMargin: ConstraintMakerExtendable { self.description.attributes += .leadingMargin return self } @available(iOS 8.0, *) public var trailingMargin: ConstraintMakerExtendable { self.description.attributes += .trailingMargin return self } @available(iOS 8.0, *) public var centerXWithinMargins: ConstraintMakerExtendable { self.description.attributes += .centerXWithinMargins return self } @available(iOS 8.0, *) public var centerYWithinMargins: ConstraintMakerExtendable { self.description.attributes += .centerYWithinMargins return self } public var edges: ConstraintMakerExtendable { self.description.attributes += .edges return self } public var size: ConstraintMakerExtendable { self.description.attributes += .size return self } @available(iOS 8.0, *) public var margins: ConstraintMakerExtendable { self.description.attributes += .margins return self } @available(iOS 8.0, *) public var centerWithinMargins: ConstraintMakerExtendable { self.description.attributes += .centerWithinMargins return self } } ================================================ FILE: Pods/SnapKit/Source/ConstraintMakerFinalizable.swift ================================================ // // SnapKit // // Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit // // 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. #if os(iOS) || os(tvOS) import UIKit #else import AppKit #endif public class ConstraintMakerFinalizable { internal let description: ConstraintDescription internal init(_ description: ConstraintDescription) { self.description = description } @discardableResult public func labeled(_ label: String) -> ConstraintMakerFinalizable { self.description.label = label return self } public var constraint: Constraint { return self.description.constraint! } } ================================================ FILE: Pods/SnapKit/Source/ConstraintMakerPriortizable.swift ================================================ // // SnapKit // // Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit // // 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. #if os(iOS) || os(tvOS) import UIKit #else import AppKit #endif public class ConstraintMakerPriortizable: ConstraintMakerFinalizable { @discardableResult public func priority(_ amount: ConstraintPriority) -> ConstraintMakerFinalizable { self.description.priority = amount.value return self } @discardableResult public func priority(_ amount: ConstraintPriorityTarget) -> ConstraintMakerFinalizable { self.description.priority = amount return self } @available(*, deprecated:3.0, message:"Use priority(.required) instead.") @discardableResult public func priorityRequired() -> ConstraintMakerFinalizable { return self.priority(.required) } @available(*, deprecated:3.0, message:"Use priority(.high) instead.") @discardableResult public func priorityHigh() -> ConstraintMakerFinalizable { return self.priority(.high) } @available(*, deprecated:3.0, message:"Use priority(.medium) instead.") @discardableResult public func priorityMedium() -> ConstraintMakerFinalizable { return self.priority(.medium) } @available(*, deprecated:3.0, message:"Use priority(.low) instead.") @discardableResult public func priorityLow() -> ConstraintMakerFinalizable { return self.priority(.low) } } ================================================ FILE: Pods/SnapKit/Source/ConstraintMakerRelatable.swift ================================================ // // SnapKit // // Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit // // 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. #if os(iOS) || os(tvOS) import UIKit #else import AppKit #endif public class ConstraintMakerRelatable { internal let description: ConstraintDescription internal init(_ description: ConstraintDescription) { self.description = description } internal func relatedTo(_ other: ConstraintRelatableTarget, relation: ConstraintRelation, file: String, line: UInt) -> ConstraintMakerEditable { let related: ConstraintItem let constant: ConstraintConstantTarget if let other = other as? ConstraintItem { guard other.attributes == ConstraintAttributes.none || other.attributes.layoutAttributes.count <= 1 || other.attributes.layoutAttributes == self.description.attributes.layoutAttributes || other.attributes == .edges && self.description.attributes == .margins || other.attributes == .margins && self.description.attributes == .edges else { fatalError("Cannot constraint to multiple non identical attributes. (\(file), \(line))"); } related = other constant = 0.0 } else if let other = other as? ConstraintView { related = ConstraintItem(target: other, attributes: ConstraintAttributes.none) constant = 0.0 } else if let other = other as? ConstraintConstantTarget { related = ConstraintItem(target: nil, attributes: ConstraintAttributes.none) constant = other } else if #available(iOS 9.0, OSX 10.11, *), let other = other as? ConstraintLayoutGuide { related = ConstraintItem(target: other, attributes: ConstraintAttributes.none) constant = 0.0 } else { fatalError("Invalid constraint. (\(file), \(line))") } let editable = ConstraintMakerEditable(self.description) editable.description.sourceLocation = (file, line) editable.description.relation = relation editable.description.related = related editable.description.constant = constant return editable } @discardableResult public func equalTo(_ other: ConstraintRelatableTarget, _ file: String = #file, _ line: UInt = #line) -> ConstraintMakerEditable { return self.relatedTo(other, relation: .equal, file: file, line: line) } @discardableResult public func equalToSuperview(_ file: String = #file, _ line: UInt = #line) -> ConstraintMakerEditable { guard let other = self.description.item.superview else { fatalError("Expected superview but found nil when attempting make constraint `equalToSuperview`.") } return self.relatedTo(other, relation: .equal, file: file, line: line) } @discardableResult public func lessThanOrEqualTo(_ other: ConstraintRelatableTarget, _ file: String = #file, _ line: UInt = #line) -> ConstraintMakerEditable { return self.relatedTo(other, relation: .lessThanOrEqual, file: file, line: line) } @discardableResult public func lessThanOrEqualToSuperview(_ file: String = #file, _ line: UInt = #line) -> ConstraintMakerEditable { guard let other = self.description.item.superview else { fatalError("Expected superview but found nil when attempting make constraint `lessThanOrEqualToSuperview`.") } return self.relatedTo(other, relation: .lessThanOrEqual, file: file, line: line) } @discardableResult public func greaterThanOrEqualTo(_ other: ConstraintRelatableTarget, _ file: String = #file, line: UInt = #line) -> ConstraintMakerEditable { return self.relatedTo(other, relation: .greaterThanOrEqual, file: file, line: line) } @discardableResult public func greaterThanOrEqualToSuperview(_ file: String = #file, line: UInt = #line) -> ConstraintMakerEditable { guard let other = self.description.item.superview else { fatalError("Expected superview but found nil when attempting make constraint `greaterThanOrEqualToSuperview`.") } return self.relatedTo(other, relation: .greaterThanOrEqual, file: file, line: line) } } ================================================ FILE: Pods/SnapKit/Source/ConstraintMultiplierTarget.swift ================================================ // // SnapKit // // Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit // // 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. #if os(iOS) || os(tvOS) import UIKit #else import AppKit #endif public protocol ConstraintMultiplierTarget { var constraintMultiplierTargetValue: CGFloat { get } } extension Int: ConstraintMultiplierTarget { public var constraintMultiplierTargetValue: CGFloat { return CGFloat(self) } } extension UInt: ConstraintMultiplierTarget { public var constraintMultiplierTargetValue: CGFloat { return CGFloat(self) } } extension Float: ConstraintMultiplierTarget { public var constraintMultiplierTargetValue: CGFloat { return CGFloat(self) } } extension Double: ConstraintMultiplierTarget { public var constraintMultiplierTargetValue: CGFloat { return CGFloat(self) } } extension CGFloat: ConstraintMultiplierTarget { public var constraintMultiplierTargetValue: CGFloat { return self } } ================================================ FILE: Pods/SnapKit/Source/ConstraintOffsetTarget.swift ================================================ // // SnapKit // // Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit // // 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. #if os(iOS) || os(tvOS) import UIKit #else import AppKit #endif public protocol ConstraintOffsetTarget: ConstraintConstantTarget { } extension Int: ConstraintOffsetTarget { } extension UInt: ConstraintOffsetTarget { } extension Float: ConstraintOffsetTarget { } extension Double: ConstraintOffsetTarget { } extension CGFloat: ConstraintOffsetTarget { } extension ConstraintOffsetTarget { internal var constraintOffsetTargetValue: CGFloat { let offset: CGFloat if let amount = self as? Float { offset = CGFloat(amount) } else if let amount = self as? Double { offset = CGFloat(amount) } else if let amount = self as? CGFloat { offset = CGFloat(amount) } else if let amount = self as? Int { offset = CGFloat(amount) } else if let amount = self as? UInt { offset = CGFloat(amount) } else { offset = 0.0 } return offset } } ================================================ FILE: Pods/SnapKit/Source/ConstraintPriority.swift ================================================ // // SnapKit // // Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit // // 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. #if os(iOS) || os(tvOS) import UIKit #else import AppKit #endif public struct ConstraintPriority : ExpressibleByFloatLiteral, Equatable, Strideable { public typealias FloatLiteralType = Float public let value: Float public init(floatLiteral value: Float) { self.value = value } public init(_ value: Float) { self.value = value } public static var required: ConstraintPriority { return 1000.0 } public static var high: ConstraintPriority { return 750.0 } public static var medium: ConstraintPriority { #if os(OSX) return 501.0 #else return 500.0 #endif } public static var low: ConstraintPriority { return 250.0 } public static func ==(lhs: ConstraintPriority, rhs: ConstraintPriority) -> Bool { return lhs.value == rhs.value } // MARK: Strideable public func advanced(by n: FloatLiteralType) -> ConstraintPriority { return ConstraintPriority(floatLiteral: value + n) } public func distance(to other: ConstraintPriority) -> FloatLiteralType { return other.value - value } } ================================================ FILE: Pods/SnapKit/Source/ConstraintPriorityTarget.swift ================================================ // // SnapKit // // Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit // // 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. #if os(iOS) || os(tvOS) import UIKit #else import AppKit #endif public protocol ConstraintPriorityTarget { var constraintPriorityTargetValue: Float { get } } extension Int: ConstraintPriorityTarget { public var constraintPriorityTargetValue: Float { return Float(self) } } extension UInt: ConstraintPriorityTarget { public var constraintPriorityTargetValue: Float { return Float(self) } } extension Float: ConstraintPriorityTarget { public var constraintPriorityTargetValue: Float { return self } } extension Double: ConstraintPriorityTarget { public var constraintPriorityTargetValue: Float { return Float(self) } } extension CGFloat: ConstraintPriorityTarget { public var constraintPriorityTargetValue: Float { return Float(self) } } #if os(iOS) || os(tvOS) extension UILayoutPriority: ConstraintPriorityTarget { public var constraintPriorityTargetValue: Float { return self.rawValue } } #endif ================================================ FILE: Pods/SnapKit/Source/ConstraintRelatableTarget.swift ================================================ // // SnapKit // // Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit // // 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. #if os(iOS) || os(tvOS) import UIKit #else import AppKit #endif public protocol ConstraintRelatableTarget { } extension Int: ConstraintRelatableTarget { } extension UInt: ConstraintRelatableTarget { } extension Float: ConstraintRelatableTarget { } extension Double: ConstraintRelatableTarget { } extension CGFloat: ConstraintRelatableTarget { } extension CGSize: ConstraintRelatableTarget { } extension CGPoint: ConstraintRelatableTarget { } extension ConstraintInsets: ConstraintRelatableTarget { } extension ConstraintItem: ConstraintRelatableTarget { } extension ConstraintView: ConstraintRelatableTarget { } @available(iOS 9.0, OSX 10.11, *) extension ConstraintLayoutGuide: ConstraintRelatableTarget { } ================================================ FILE: Pods/SnapKit/Source/ConstraintRelation.swift ================================================ // // SnapKit // // Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit // // 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. #if os(iOS) || os(tvOS) import UIKit #else import AppKit #endif internal enum ConstraintRelation : Int { case equal = 1 case lessThanOrEqual case greaterThanOrEqual internal var layoutRelation: LayoutRelation { get { switch(self) { case .equal: return .equal case .lessThanOrEqual: return .lessThanOrEqual case .greaterThanOrEqual: return .greaterThanOrEqual } } } } ================================================ FILE: Pods/SnapKit/Source/ConstraintView+Extensions.swift ================================================ // // SnapKit // // Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit // // 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. #if os(iOS) || os(tvOS) import UIKit #else import AppKit #endif public extension ConstraintView { @available(*, deprecated:3.0, message:"Use newer snp.* syntax.") public var snp_left: ConstraintItem { return self.snp.left } @available(*, deprecated:3.0, message:"Use newer snp.* syntax.") public var snp_top: ConstraintItem { return self.snp.top } @available(*, deprecated:3.0, message:"Use newer snp.* syntax.") public var snp_right: ConstraintItem { return self.snp.right } @available(*, deprecated:3.0, message:"Use newer snp.* syntax.") public var snp_bottom: ConstraintItem { return self.snp.bottom } @available(*, deprecated:3.0, message:"Use newer snp.* syntax.") public var snp_leading: ConstraintItem { return self.snp.leading } @available(*, deprecated:3.0, message:"Use newer snp.* syntax.") public var snp_trailing: ConstraintItem { return self.snp.trailing } @available(*, deprecated:3.0, message:"Use newer snp.* syntax.") public var snp_width: ConstraintItem { return self.snp.width } @available(*, deprecated:3.0, message:"Use newer snp.* syntax.") public var snp_height: ConstraintItem { return self.snp.height } @available(*, deprecated:3.0, message:"Use newer snp.* syntax.") public var snp_centerX: ConstraintItem { return self.snp.centerX } @available(*, deprecated:3.0, message:"Use newer snp.* syntax.") public var snp_centerY: ConstraintItem { return self.snp.centerY } @available(*, deprecated:3.0, message:"Use newer snp.* syntax.") public var snp_baseline: ConstraintItem { return self.snp.baseline } @available(*, deprecated:3.0, message:"Use newer snp.* syntax.") @available(iOS 8.0, OSX 10.11, *) public var snp_lastBaseline: ConstraintItem { return self.snp.lastBaseline } @available(iOS, deprecated:3.0, message:"Use newer snp.* syntax.") @available(iOS 8.0, OSX 10.11, *) public var snp_firstBaseline: ConstraintItem { return self.snp.firstBaseline } @available(iOS, deprecated:3.0, message:"Use newer snp.* syntax.") @available(iOS 8.0, *) public var snp_leftMargin: ConstraintItem { return self.snp.leftMargin } @available(iOS, deprecated:3.0, message:"Use newer snp.* syntax.") @available(iOS 8.0, *) public var snp_topMargin: ConstraintItem { return self.snp.topMargin } @available(iOS, deprecated:3.0, message:"Use newer snp.* syntax.") @available(iOS 8.0, *) public var snp_rightMargin: ConstraintItem { return self.snp.rightMargin } @available(iOS, deprecated:3.0, message:"Use newer snp.* syntax.") @available(iOS 8.0, *) public var snp_bottomMargin: ConstraintItem { return self.snp.bottomMargin } @available(iOS, deprecated:3.0, message:"Use newer snp.* syntax.") @available(iOS 8.0, *) public var snp_leadingMargin: ConstraintItem { return self.snp.leadingMargin } @available(iOS, deprecated:3.0, message:"Use newer snp.* syntax.") @available(iOS 8.0, *) public var snp_trailingMargin: ConstraintItem { return self.snp.trailingMargin } @available(iOS, deprecated:3.0, message:"Use newer snp.* syntax.") @available(iOS 8.0, *) public var snp_centerXWithinMargins: ConstraintItem { return self.snp.centerXWithinMargins } @available(iOS, deprecated:3.0, message:"Use newer snp.* syntax.") @available(iOS 8.0, *) public var snp_centerYWithinMargins: ConstraintItem { return self.snp.centerYWithinMargins } @available(*, deprecated:3.0, message:"Use newer snp.* syntax.") public var snp_edges: ConstraintItem { return self.snp.edges } @available(*, deprecated:3.0, message:"Use newer snp.* syntax.") public var snp_size: ConstraintItem { return self.snp.size } @available(*, deprecated:3.0, message:"Use newer snp.* syntax.") public var snp_center: ConstraintItem { return self.snp.center } @available(iOS, deprecated:3.0, message:"Use newer snp.* syntax.") @available(iOS 8.0, *) public var snp_margins: ConstraintItem { return self.snp.margins } @available(iOS, deprecated:3.0, message:"Use newer snp.* syntax.") @available(iOS 8.0, *) public var snp_centerWithinMargins: ConstraintItem { return self.snp.centerWithinMargins } @available(*, deprecated:3.0, message:"Use newer snp.* syntax.") public func snp_prepareConstraints(_ closure: (_ make: ConstraintMaker) -> Void) -> [Constraint] { return self.snp.prepareConstraints(closure) } @available(*, deprecated:3.0, message:"Use newer snp.* syntax.") public func snp_makeConstraints(_ closure: (_ make: ConstraintMaker) -> Void) { self.snp.makeConstraints(closure) } @available(*, deprecated:3.0, message:"Use newer snp.* syntax.") public func snp_remakeConstraints(_ closure: (_ make: ConstraintMaker) -> Void) { self.snp.remakeConstraints(closure) } @available(*, deprecated:3.0, message:"Use newer snp.* syntax.") public func snp_updateConstraints(_ closure: (_ make: ConstraintMaker) -> Void) { self.snp.updateConstraints(closure) } @available(*, deprecated:3.0, message:"Use newer snp.* syntax.") public func snp_removeConstraints() { self.snp.removeConstraints() } public var snp: ConstraintViewDSL { return ConstraintViewDSL(view: self) } } ================================================ FILE: Pods/SnapKit/Source/ConstraintView.swift ================================================ // // SnapKit // // Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit // // 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. #if os(iOS) || os(tvOS) import UIKit #else import AppKit #endif #if os(iOS) || os(tvOS) public typealias ConstraintView = UIView #else public typealias ConstraintView = NSView #endif ================================================ FILE: Pods/SnapKit/Source/ConstraintViewDSL.swift ================================================ // // SnapKit // // Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit // // 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. #if os(iOS) || os(tvOS) import UIKit #else import AppKit #endif public struct ConstraintViewDSL: ConstraintAttributesDSL { @discardableResult public func prepareConstraints(_ closure: (_ make: ConstraintMaker) -> Void) -> [Constraint] { return ConstraintMaker.prepareConstraints(item: self.view, closure: closure) } public func makeConstraints(_ closure: (_ make: ConstraintMaker) -> Void) { ConstraintMaker.makeConstraints(item: self.view, closure: closure) } public func remakeConstraints(_ closure: (_ make: ConstraintMaker) -> Void) { ConstraintMaker.remakeConstraints(item: self.view, closure: closure) } public func updateConstraints(_ closure: (_ make: ConstraintMaker) -> Void) { ConstraintMaker.updateConstraints(item: self.view, closure: closure) } public func removeConstraints() { ConstraintMaker.removeConstraints(item: self.view) } public var contentHuggingHorizontalPriority: Float { get { return self.view.contentHuggingPriority(for: .horizontal).rawValue } set { self.view.setContentHuggingPriority(LayoutPriority(rawValue: newValue), for: .horizontal) } } public var contentHuggingVerticalPriority: Float { get { return self.view.contentHuggingPriority(for: .vertical).rawValue } set { self.view.setContentHuggingPriority(LayoutPriority(rawValue: newValue), for: .vertical) } } public var contentCompressionResistanceHorizontalPriority: Float { get { return self.view.contentCompressionResistancePriority(for: .horizontal).rawValue } set { self.view.setContentCompressionResistancePriority(LayoutPriority(rawValue: newValue), for: .horizontal) } } public var contentCompressionResistanceVerticalPriority: Float { get { return self.view.contentCompressionResistancePriority(for: .vertical).rawValue } set { self.view.setContentCompressionResistancePriority(LayoutPriority(rawValue: newValue), for: .vertical) } } public var target: AnyObject? { return self.view } internal let view: ConstraintView internal init(view: ConstraintView) { self.view = view } } ================================================ FILE: Pods/SnapKit/Source/Debugging.swift ================================================ // // SnapKit // // Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit // // 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. #if os(iOS) || os(tvOS) import UIKit #else import AppKit #endif public extension LayoutConstraint { override public var description: String { var description = "<" description += descriptionForObject(self) if let firstItem = conditionalOptional(from: self.firstItem) { description += " \(descriptionForObject(firstItem))" } if self.firstAttribute != .notAnAttribute { description += ".\(descriptionForAttribute(self.firstAttribute))" } description += " \(descriptionForRelation(self.relation))" if let secondItem = self.secondItem { description += " \(descriptionForObject(secondItem))" } if self.secondAttribute != .notAnAttribute { description += ".\(descriptionForAttribute(self.secondAttribute))" } if self.multiplier != 1.0 { description += " * \(self.multiplier)" } if self.secondAttribute == .notAnAttribute { description += " \(self.constant)" } else { if self.constant > 0.0 { description += " + \(self.constant)" } else if self.constant < 0.0 { description += " - \(abs(self.constant))" } } if self.priority.rawValue != 1000.0 { description += " ^\(self.priority)" } description += ">" return description } } private func descriptionForRelation(_ relation: LayoutRelation) -> String { switch relation { case .equal: return "==" case .greaterThanOrEqual: return ">=" case .lessThanOrEqual: return "<=" } } private func descriptionForAttribute(_ attribute: LayoutAttribute) -> String { #if os(iOS) || os(tvOS) switch attribute { case .notAnAttribute: return "notAnAttribute" case .top: return "top" case .left: return "left" case .bottom: return "bottom" case .right: return "right" case .leading: return "leading" case .trailing: return "trailing" case .width: return "width" case .height: return "height" case .centerX: return "centerX" case .centerY: return "centerY" case .lastBaseline: return "lastBaseline" case .firstBaseline: return "firstBaseline" case .topMargin: return "topMargin" case .leftMargin: return "leftMargin" case .bottomMargin: return "bottomMargin" case .rightMargin: return "rightMargin" case .leadingMargin: return "leadingMargin" case .trailingMargin: return "trailingMargin" case .centerXWithinMargins: return "centerXWithinMargins" case .centerYWithinMargins: return "centerYWithinMargins" } #else switch attribute { case .notAnAttribute: return "notAnAttribute" case .top: return "top" case .left: return "left" case .bottom: return "bottom" case .right: return "right" case .leading: return "leading" case .trailing: return "trailing" case .width: return "width" case .height: return "height" case .centerX: return "centerX" case .centerY: return "centerY" case .lastBaseline: return "lastBaseline" case .firstBaseline: return "firstBaseline" } #endif } private func conditionalOptional(from object: Optional) -> Optional { return object } private func conditionalOptional(from object: T) -> Optional { return Optional.some(object) } private func descriptionForObject(_ object: AnyObject) -> String { let pointerDescription = String(format: "%p", UInt(bitPattern: ObjectIdentifier(object))) var desc = "" desc += type(of: object).description() if let object = object as? ConstraintView { desc += ":\(object.snp.label() ?? pointerDescription)" } else if let object = object as? LayoutConstraint { desc += ":\(object.label ?? pointerDescription)" } else { desc += ":\(pointerDescription)" } if let object = object as? LayoutConstraint, let file = object.constraint?.sourceLocation.0, let line = object.constraint?.sourceLocation.1 { desc += "@\((file as NSString).lastPathComponent)#\(line)" } desc += "" return desc } ================================================ FILE: Pods/SnapKit/Source/LayoutConstraint.swift ================================================ // // SnapKit // // Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit // // 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. #if os(iOS) || os(tvOS) import UIKit #else import AppKit #endif public class LayoutConstraint : NSLayoutConstraint { public var label: String? { get { return self.identifier } set { self.identifier = newValue } } internal weak var constraint: Constraint? = nil } internal func ==(lhs: LayoutConstraint, rhs: LayoutConstraint) -> Bool { guard lhs.firstItem === rhs.firstItem && lhs.secondItem === rhs.secondItem && lhs.firstAttribute == rhs.firstAttribute && lhs.secondAttribute == rhs.secondAttribute && lhs.relation == rhs.relation && lhs.priority == rhs.priority && lhs.multiplier == rhs.multiplier else { return false } return true } ================================================ FILE: Pods/SnapKit/Source/LayoutConstraintItem.swift ================================================ // // SnapKit // // Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit // // 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. #if os(iOS) || os(tvOS) import UIKit #else import AppKit #endif public protocol LayoutConstraintItem: class { } @available(iOS 9.0, OSX 10.11, *) extension ConstraintLayoutGuide : LayoutConstraintItem { } extension ConstraintView : LayoutConstraintItem { } extension LayoutConstraintItem { internal func prepare() { if let view = self as? ConstraintView { view.translatesAutoresizingMaskIntoConstraints = false } } internal var superview: ConstraintView? { if let view = self as? ConstraintView { return view.superview } if #available(iOS 9.0, OSX 10.11, *), let guide = self as? ConstraintLayoutGuide { return guide.owningView } return nil } internal var constraints: [Constraint] { return self.constraintsSet.allObjects as! [Constraint] } internal func add(constraints: [Constraint]) { let constraintsSet = self.constraintsSet for constraint in constraints { constraintsSet.add(constraint) } } internal func remove(constraints: [Constraint]) { let constraintsSet = self.constraintsSet for constraint in constraints { constraintsSet.remove(constraint) } } private var constraintsSet: NSMutableSet { let constraintsSet: NSMutableSet if let existing = objc_getAssociatedObject(self, &constraintsKey) as? NSMutableSet { constraintsSet = existing } else { constraintsSet = NSMutableSet() objc_setAssociatedObject(self, &constraintsKey, constraintsSet, .OBJC_ASSOCIATION_RETAIN_NONATOMIC) } return constraintsSet } } private var constraintsKey: UInt8 = 0 ================================================ FILE: Pods/SnapKit/Source/Typealiases.swift ================================================ // // SnapKit // // Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit // // 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. import Foundation #if os(iOS) || os(tvOS) import UIKit #if swift(>=4.2) typealias LayoutRelation = NSLayoutConstraint.Relation typealias LayoutAttribute = NSLayoutConstraint.Attribute #else typealias LayoutRelation = NSLayoutRelation typealias LayoutAttribute = NSLayoutAttribute #endif typealias LayoutPriority = UILayoutPriority #else import AppKit typealias LayoutRelation = NSLayoutConstraint.Relation typealias LayoutAttribute = NSLayoutConstraint.Attribute typealias LayoutPriority = NSLayoutConstraint.Priority #endif ================================================ FILE: Pods/SnapKit/Source/UILayoutSupport+Extensions.swift ================================================ // // SnapKit // // Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit // // 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. #if os(iOS) || os(tvOS) import UIKit #endif @available(iOS 8.0, *) public extension ConstraintLayoutSupport { public var snp: ConstraintLayoutSupportDSL { return ConstraintLayoutSupportDSL(support: self) } } ================================================ FILE: Pods/Target Support Files/Pods-VerifyCodeDemo/Pods-VerifyCodeDemo-Info.plist ================================================ 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 ================================================ FILE: Pods/Target Support Files/Pods-VerifyCodeDemo/Pods-VerifyCodeDemo-acknowledgements.markdown ================================================ # Acknowledgements This application makes use of the following third party libraries: ## SnapKit Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit 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 ================================================ FILE: Pods/Target Support Files/Pods-VerifyCodeDemo/Pods-VerifyCodeDemo-acknowledgements.plist ================================================ PreferenceSpecifiers FooterText This application makes use of the following third party libraries: Title Acknowledgements Type PSGroupSpecifier FooterText Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit 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 SnapKit Type PSGroupSpecifier FooterText Generated by CocoaPods - https://cocoapods.org Title Type PSGroupSpecifier StringsTable Acknowledgements Title Acknowledgements ================================================ FILE: Pods/Target Support Files/Pods-VerifyCodeDemo/Pods-VerifyCodeDemo-dummy.m ================================================ #import @interface PodsDummy_Pods_VerifyCodeDemo : NSObject @end @implementation PodsDummy_Pods_VerifyCodeDemo @end ================================================ FILE: Pods/Target Support Files/Pods-VerifyCodeDemo/Pods-VerifyCodeDemo-frameworks-Debug-input-files.xcfilelist ================================================ ${PODS_ROOT}/Target Support Files/Pods-VerifyCodeDemo/Pods-VerifyCodeDemo-frameworks.sh ${BUILT_PRODUCTS_DIR}/SnapKit/SnapKit.framework ================================================ FILE: Pods/Target Support Files/Pods-VerifyCodeDemo/Pods-VerifyCodeDemo-frameworks-Debug-output-files.xcfilelist ================================================ ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SnapKit.framework ================================================ FILE: Pods/Target Support Files/Pods-VerifyCodeDemo/Pods-VerifyCodeDemo-frameworks-Release-input-files.xcfilelist ================================================ ${PODS_ROOT}/Target Support Files/Pods-VerifyCodeDemo/Pods-VerifyCodeDemo-frameworks.sh ${BUILT_PRODUCTS_DIR}/SnapKit/SnapKit.framework ================================================ FILE: Pods/Target Support Files/Pods-VerifyCodeDemo/Pods-VerifyCodeDemo-frameworks-Release-output-files.xcfilelist ================================================ ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SnapKit.framework ================================================ FILE: Pods/Target Support Files/Pods-VerifyCodeDemo/Pods-VerifyCodeDemo-frameworks.sh ================================================ #!/bin/sh set -e set -u set -o pipefail function on_error { echo "$(realpath -mq "${0}"):$1: error: Unexpected failure" } trap 'on_error $LINENO' ERR if [ -z ${FRAMEWORKS_FOLDER_PATH+x} ]; then # If FRAMEWORKS_FOLDER_PATH is not set, then there's nowhere for us to copy # frameworks to, so exit 0 (signalling the script phase was successful). exit 0 fi echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" COCOAPODS_PARALLEL_CODE_SIGN="${COCOAPODS_PARALLEL_CODE_SIGN:-false}" SWIFT_STDLIB_PATH="${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" # Used as a return value for each invocation of `strip_invalid_archs` function. STRIP_BINARY_RETVAL=0 # This protects against multiple targets copying the same framework dependency at the same time. The solution # was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????") # Copies and strips a vendored framework 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 don't throw errors. echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${destination}\"" rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --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}" elif [ -L "${binary}" ]; then echo "Destination binary is symlinked..." dirname="$(dirname "${binary}")" binary="${dirname}/$(readlink "${binary}")" 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) 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 } # Copies and strips a vendored dSYM install_dsym() { local source="$1" if [ -r "$source" ]; then # Copy the dSYM into a the targets temp dir. echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${DERIVED_FILES_DIR}\"" rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${DERIVED_FILES_DIR}" local basename basename="$(basename -s .framework.dSYM "$source")" binary="${DERIVED_FILES_DIR}/${basename}.framework.dSYM/Contents/Resources/DWARF/${basename}" # Strip invalid architectures so "fat" simulator / device frameworks work on device if [[ "$(file "$binary")" == *"Mach-O "*"dSYM companion"* ]]; then strip_invalid_archs "$binary" fi if [[ $STRIP_BINARY_RETVAL == 1 ]]; then # Move the stripped file into its final destination. echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${DERIVED_FILES_DIR}/${basename}.framework.dSYM\" \"${DWARF_DSYM_FOLDER_PATH}\"" rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${DERIVED_FILES_DIR}/${basename}.framework.dSYM" "${DWARF_DSYM_FOLDER_PATH}" else # The dSYM was not stripped at all, in this case touch a fake folder so the input/output paths from Xcode do not reexecute this script because the file is missing. touch "${DWARF_DSYM_FOLDER_PATH}/${basename}.framework.dSYM" fi fi } # Copies the bcsymbolmap files of a vendored framework install_bcsymbolmap() { local bcsymbolmap_path="$1" local destination="${BUILT_PRODUCTS_DIR}" echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${bcsymbolmap_path}" "${destination}"" rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${bcsymbolmap_path}" "${destination}" } # 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_identity 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 target binary binary_archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | awk '{$1=$1;print}' | rev)" # Intersect them with the architectures we are building for intersected_archs="$(echo ${ARCHS[@]} ${binary_archs[@]} | tr ' ' '\n' | sort | uniq -d)" # If there are no archs supported by this binary then warn the user if [[ -z "$intersected_archs" ]]; then echo "warning: [CP] Vendored binary '$binary' contains architectures ($binary_archs) none of which match the current build architectures ($ARCHS)." STRIP_BINARY_RETVAL=0 return fi stripped="" for arch in $binary_archs; do if ! [[ "${ARCHS}" == *"$arch"* ]]; then # Strip non-valid architectures in-place lipo -remove "$arch" -output "$binary" "$binary" stripped="$stripped $arch" fi done if [[ "$stripped" ]]; then echo "Stripped $binary of architectures:$stripped" fi STRIP_BINARY_RETVAL=1 } if [[ "$CONFIGURATION" == "Debug" ]]; then install_framework "${BUILT_PRODUCTS_DIR}/SnapKit/SnapKit.framework" fi if [[ "$CONFIGURATION" == "Release" ]]; then install_framework "${BUILT_PRODUCTS_DIR}/SnapKit/SnapKit.framework" fi if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then wait fi ================================================ FILE: Pods/Target Support Files/Pods-VerifyCodeDemo/Pods-VerifyCodeDemo-umbrella.h ================================================ #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_VerifyCodeDemoVersionNumber; FOUNDATION_EXPORT const unsigned char Pods_VerifyCodeDemoVersionString[]; ================================================ FILE: Pods/Target Support Files/Pods-VerifyCodeDemo/Pods-VerifyCodeDemo.debug.xcconfig ================================================ ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit/SnapKit.framework/Headers" LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' OTHER_LDFLAGS = $(inherited) -framework "SnapKit" OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_PODFILE_DIR_PATH = ${SRCROOT}/. PODS_ROOT = ${SRCROOT}/Pods ================================================ FILE: Pods/Target Support Files/Pods-VerifyCodeDemo/Pods-VerifyCodeDemo.modulemap ================================================ framework module Pods_VerifyCodeDemo { umbrella header "Pods-VerifyCodeDemo-umbrella.h" export * module * { export * } } ================================================ FILE: Pods/Target Support Files/Pods-VerifyCodeDemo/Pods-VerifyCodeDemo.release.xcconfig ================================================ ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit/SnapKit.framework/Headers" LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' OTHER_LDFLAGS = $(inherited) -framework "SnapKit" OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_PODFILE_DIR_PATH = ${SRCROOT}/. PODS_ROOT = ${SRCROOT}/Pods ================================================ FILE: Pods/Target Support Files/SnapKit/SnapKit-Info.plist ================================================ CFBundleDevelopmentRegion en CFBundleExecutable ${EXECUTABLE_NAME} CFBundleIdentifier ${PRODUCT_BUNDLE_IDENTIFIER} CFBundleInfoDictionaryVersion 6.0 CFBundleName ${PRODUCT_NAME} CFBundlePackageType FMWK CFBundleShortVersionString 4.2.0 CFBundleSignature ???? CFBundleVersion ${CURRENT_PROJECT_VERSION} NSPrincipalClass ================================================ FILE: Pods/Target Support Files/SnapKit/SnapKit-dummy.m ================================================ #import @interface PodsDummy_SnapKit : NSObject @end @implementation PodsDummy_SnapKit @end ================================================ FILE: Pods/Target Support Files/SnapKit/SnapKit-prefix.pch ================================================ #ifdef __OBJC__ #import #else #ifndef FOUNDATION_EXPORT #if defined(__cplusplus) #define FOUNDATION_EXPORT extern "C" #else #define FOUNDATION_EXPORT extern #endif #endif #endif ================================================ FILE: Pods/Target Support Files/SnapKit/SnapKit-umbrella.h ================================================ #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 SnapKitVersionNumber; FOUNDATION_EXPORT const unsigned char SnapKitVersionString[]; ================================================ FILE: Pods/Target Support Files/SnapKit/SnapKit.modulemap ================================================ framework module SnapKit { umbrella header "SnapKit-umbrella.h" export * module * { export * } } ================================================ FILE: Pods/Target Support Files/SnapKit/SnapKit.xcconfig ================================================ CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/SnapKit GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 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}/SnapKit PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} SKIP_INSTALL = YES ================================================ FILE: README.md ================================================ # VerificationCode #### 依赖于SnapKit ## 工具类 ![工具类.jpg](https://upload-images.jianshu.io/upload_images/2094754-d0116e762526d75f.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) ## 依赖的方法、可以使用自己项目的方法替换 ![依赖类.jpg](https://upload-images.jianshu.io/upload_images/2094754-7d23542eb01f6de1.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) ## 效果: ![验证码输入Demo.gif](https://upload-images.jianshu.io/upload_images/2094754-768de1c89184e230.gif?imageMogr2/auto-orient/strip) ## 思路: 视图层级: - 最底层一个隐藏的UITextView,上面铺的Label - 输入焦点在UITextView,监听UITextView的输入,给Label赋值 - 通过Label显示输入的文字使用CAShapeLayer绘制光标 - 通过光标的显示隐藏来控制光标的移动 - 基础动画控制光标闪动 ## 使用: // 初始化验证码输入框数量 let codeView = TDWVerifyCodeView.init(inputTextNum: 6) // 监听验证码输入的过程 codeView.textValueChange = { [weak self] str in // 要做的事情 } // 监听验证码输入完成 codeView.inputFinish = { [weak self] str in // 要做的事情 } ### #### 简书链接: #### https://www.jianshu.com/p/d258714f7095 ## 喜欢的点个star,谢谢老铁们 ================================================ FILE: VerifyCodeDemo/AppDelegate.swift ================================================ // // AppDelegate.swift // VerifyCodeDemo // // Created by tuandai on 2019/1/30. // Copyright © 2019 tuandai. All rights reserved. // import UIKit @UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegate { var window: UIWindow? func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: 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 invalidate graphics rendering callbacks. 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 active 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:. } } ================================================ FILE: VerifyCodeDemo/Assets.xcassets/AppIcon.appiconset/Contents.json ================================================ { "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" }, { "idiom" : "ipad", "size" : "20x20", "scale" : "1x" }, { "idiom" : "ipad", "size" : "20x20", "scale" : "2x" }, { "idiom" : "ipad", "size" : "29x29", "scale" : "1x" }, { "idiom" : "ipad", "size" : "29x29", "scale" : "2x" }, { "idiom" : "ipad", "size" : "40x40", "scale" : "1x" }, { "idiom" : "ipad", "size" : "40x40", "scale" : "2x" }, { "idiom" : "ipad", "size" : "76x76", "scale" : "1x" }, { "idiom" : "ipad", "size" : "76x76", "scale" : "2x" }, { "idiom" : "ipad", "size" : "83.5x83.5", "scale" : "2x" }, { "idiom" : "ios-marketing", "size" : "1024x1024", "scale" : "1x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: VerifyCodeDemo/Assets.xcassets/Contents.json ================================================ { "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: VerifyCodeDemo/Base.lproj/LaunchScreen.storyboard ================================================ ================================================ FILE: VerifyCodeDemo/Base.lproj/Main.storyboard ================================================ ================================================ FILE: VerifyCodeDemo/Info.plist ================================================ CFBundleDevelopmentRegion $(DEVELOPMENT_LANGUAGE) CFBundleExecutable $(EXECUTABLE_NAME) CFBundleIdentifier $(PRODUCT_BUNDLE_IDENTIFIER) CFBundleInfoDictionaryVersion 6.0 CFBundleName $(PRODUCT_NAME) CFBundlePackageType APPL CFBundleShortVersionString 1.0 CFBundleVersion 1 LSRequiresIPhoneOS UILaunchStoryboardName LaunchScreen UIMainStoryboardFile Main UIRequiredDeviceCapabilities armv7 UISupportedInterfaceOrientations UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight UISupportedInterfaceOrientations~ipad UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight ================================================ FILE: VerifyCodeDemo/VerifyCodeView/TDWExtension/TDWExtensions.swift ================================================ // // TDWUIScreenExtensions.swift // TDWCashLoan // // Created by ZhengRuSong on 2017/8/4. // Copyright © 2017年 com.tuandaiwang.www. All rights reserved. // import Foundation import UIKit public extension UIScreen { static func tdw_width() -> CGFloat { return UIScreen.main.bounds.width } static func tdw_height() -> CGFloat { return UIScreen.main.bounds.height } static func tdw_size() -> CGSize { return UIScreen.main.bounds.size } } public extension UIColor { //用数值初始化颜色,便于生成设计图上标明的十六进制颜色 convenience init(TDWValueRGB: UInt, alpha: CGFloat = 1.0) { self.init( red: CGFloat((TDWValueRGB & 0xFF0000) >> 16) / 255.0, green: CGFloat((TDWValueRGB & 0x00FF00) >> 8) / 255.0, blue: CGFloat(TDWValueRGB & 0x0000FF) / 255.0, alpha: alpha ) } convenience init(TDWValueRGB: UInt) { self.init( red: CGFloat((TDWValueRGB & 0xFF0000) >> 16) / 255.0, green: CGFloat((TDWValueRGB & 0x00FF00) >> 8) / 255.0, blue: CGFloat(TDWValueRGB & 0x0000FF) / 255.0, alpha: 1.0 ) } } ================================================ FILE: VerifyCodeDemo/VerifyCodeView/TDWVerifyCodeNumView.swift ================================================ // // TDWVerifyCodeNumView.swift // VerifyCodeDemo // // Created by tuandai on 2019/1/30. // Copyright © 2019 tuandai. All rights reserved. // import UIKit import SnapKit class TDWVerifyCodeNumView: UIView { /// 光标颜色 var cursorColor = UIColor.init(TDWValueRGB: 0xfab700) fileprivate lazy var numLabel: UILabel = { let label = UILabel() label.textAlignment = .center label.font = UIFont.systemFont(ofSize: 17) self.addSubview(label) return label }() fileprivate lazy var lineView: UIView = { let line = UIView() line.backgroundColor = UIColor.init(TDWValueRGB: 0xe6e6e6) self.addSubview(line) return line }() /// 光标 lazy var cursor: CAShapeLayer = { let shapeLayer = CAShapeLayer() shapeLayer.fillColor = cursorColor.cgColor shapeLayer.add(opacityAnimation, forKey: "kOpacityAnimation") self.layer.addSublayer(shapeLayer) return shapeLayer }() /// 闪烁动画 fileprivate var opacityAnimation: CABasicAnimation = { let opacityAnimation = CABasicAnimation.init(keyPath: "opacity") // 属性初始值 opacityAnimation.fromValue = 1.0 // 属性要到达的值 opacityAnimation.toValue = 0.0 // 动画时间 opacityAnimation.duration = 0.9 // 重复次数(无穷大) opacityAnimation.repeatCount = HUGE /* removedOnCompletion:默认为YES,代表动画执行完毕后就从图层上移除,图形会恢复到动画执行前的状态。如果想让图层保持显示动画执行后的状态,那就设置为NO,不过还要设置fillMode为kCAFillModeForwards */ opacityAnimation.isRemovedOnCompletion = true // 决定当前对象在非active时间段的行为。比如动画开始之前或者动画结束之后 opacityAnimation.fillMode = .forwards // 速度控制函数,控制动画运行的节奏 /* kCAMediaTimingFunctionLinear(线性):匀速,给你一个相对静态的感觉 kCAMediaTimingFunctionEaseIn(渐进):动画缓慢进入,然后加速离开 kCAMediaTimingFunctionEaseOut(渐出):动画全速进入,然后减速的到达目的地 kCAMediaTimingFunctionEaseInEaseOut(渐进渐出):动画缓慢的进入,中间加速,然后减速的到达目的地。这个是默认的动画行为。 */ opacityAnimation.timingFunction = CAMediaTimingFunction.init(name: .easeIn) return opacityAnimation }() override init(frame: CGRect) { super.init(frame: frame) numLabel.snp.makeConstraints { (make) in make.left.right.top.equalToSuperview() make.bottom.equalToSuperview().offset(-0.5) } lineView.snp.makeConstraints { (make) in make.left.bottom.right.equalToSuperview() make.height.equalTo(0.5) } NotificationCenter.default.addObserver(self, selector: #selector(becomeActive), name: UIApplication.didBecomeActiveNotification, object: nil) NotificationCenter.default.addObserver(self, selector: #selector(enterBack), name: UIApplication.didEnterBackgroundNotification, object: nil) } deinit { NotificationCenter.default.removeObserver(self) } override func layoutSubviews() { super.layoutSubviews() let path = UIBezierPath.init(rect: CGRect.init(x: self.frame.size.width * 0.5, y: self.frame.size.height * 0.1, width: 1, height: self.frame.size.height * 0.7)) cursor.path = path.cgPath } /// 去后台 @objc fileprivate func enterBack() { // 移除动画 cursor.removeAnimation(forKey: "kOpacityAnimation") } /// 回前台 @objc fileprivate func becomeActive() { // 重新添加动画 cursor.add(opacityAnimation, forKey: "kOpacityAnimation") } required init?(coder aDecoder: NSCoder) { fatalError("init(coder:) has not been implemented") } } // MARK: - 供外部调用方法 extension TDWVerifyCodeNumView { /// 设置光标是否隐藏 /// /// - Parameter isHidden: 是否隐藏 func setCursorStatus(_ isHidden: Bool) { if isHidden { cursor.removeAnimation(forKey: "kOpacityAnimation") } else { cursor.add(opacityAnimation, forKey: "kOpacityAnimation") } UIView.animate(withDuration: 0.25) { self.cursor.isHidden = isHidden } } /// 验证码赋值,并修改线条颜色 /// /// - Parameter num: 验证码 func setNum(num: String?) { numLabel.text = num } /// 设置底部线条是否为焦点 /// /// - Parameter isFocus: 是否是焦点 func setBottomLineFocus(isFocus: Bool) { if isFocus { lineView.backgroundColor = UIColor.init(TDWValueRGB: 0x999999) } else { lineView.backgroundColor = UIColor.init(TDWValueRGB: 0xe6e6e6) } } /// 获取当前的验证码 /// /// - Returns: 验证码 func getNum() -> String { return numLabel.text ?? "" } /// 返回验证码值 /// /// - Returns: 验证码数值 func getNum() -> String? { return numLabel.text } } ================================================ FILE: VerifyCodeDemo/VerifyCodeView/TDWVerifyCodeTextView.swift ================================================ // // TDWVerifyCodeTextView.swift // VerifyCodeDemo // // Created by tuandai on 2019/1/30. // Copyright © 2019 tuandai. All rights reserved. // import UIKit class TDWVerifyCodeTextView: UITextField { /// 是否隐藏所有菜单 var isHiddenAllMenu = false /// 粘贴 - 会调用两次此闭包 当isTrigger = true的时候才为实际粘贴 var pasteClouruse: ((_ isTrigger: Bool) -> Bool)? /// 选择 - 会调用两次此闭包 当isTrigger = true的时候才为实际选择 var selectClouruse: ((_ isTrigger: Bool) -> Bool)? /// 选择全部 - 会调用两次此闭包 当isTrigger = true的时候才为实际选择全部 var selectAllClouruse: ((_ isTrigger: Bool) -> Bool)? /// 复制 - 会调用两次此闭包 当isTrigger = true的时候才为实际复制 var copyClouruse: ((_ isTrigger: Bool) -> Bool)? /// 剪切 - 会调用两次此闭包 当isTrigger = true的时候才为实际剪切 var cutClouruse: ((_ isTrigger: Bool) -> Bool)? /// 删除 - 会调用两次此闭包 当isTrigger = true的时候才为实际删除 var deleteClouruse: ((_ isTrigger: Bool) -> Bool)? override func canPerformAction(_ action: Selector, withSender sender: Any?) -> Bool { if isHiddenAllMenu { UIMenuController.shared.isMenuVisible = false return false } // 菜单是否隐藏 var isTrigger = false if let vc = sender as? UIMenuController { isTrigger = vc.isMenuVisible } switch action { case #selector(UIResponderStandardEditActions.paste(_:)): if let pasteClouruse = pasteClouruse { return pasteClouruse(isTrigger) } else { return super.canPerformAction(action, withSender: sender) } case #selector(UIResponderStandardEditActions.select(_:)): if let selectClouruse = selectClouruse { return selectClouruse(isTrigger) } else { return super.canPerformAction(action, withSender: sender) } case #selector(UIResponderStandardEditActions.selectAll(_:)): if let selectAllClouruse = selectAllClouruse { return selectAllClouruse(isTrigger) } else { return super.canPerformAction(action, withSender: sender) } case #selector(UIResponderStandardEditActions.copy(_:)): if let copyClouruse = copyClouruse { return copyClouruse(isTrigger) } else { return super.canPerformAction(action, withSender: sender) } case #selector(UIResponderStandardEditActions.cut(_:)): if let cutClouruse = cutClouruse { return cutClouruse(isTrigger) } else { return super.canPerformAction(action, withSender: sender) } case #selector(UIResponderStandardEditActions.delete(_:)): if let deleteClouruse = deleteClouruse { return deleteClouruse(isTrigger) } else { return super.canPerformAction(action, withSender: sender) } default: return super.canPerformAction(action, withSender: sender) } } } ================================================ FILE: VerifyCodeDemo/VerifyCodeView/TDWVerifyCodeView.swift ================================================ // // TDWVerifyCodeView.swift // VerifyCodeDemo // // Created by tuandai on 2019/1/30. // Copyright © 2019 tuandai. All rights reserved. // import UIKit import SnapKit class TDWVerifyCodeView: UIView { /// 输入值改变 var textValueChange: ((_ text: String) -> Void)? /// 输入完成 var inputFinish: ((_ text: String) -> Void)? /// 验证码输入框个数 var inputTextNum: Int = 6 /// 输入框 lazy var textFiled: TDWVerifyCodeTextView = { let textFiled = TDWVerifyCodeTextView() textFiled.tintColor = .clear textFiled.backgroundColor = .clear textFiled.textColor = .clear textFiled.delegate = self textFiled.keyboardType = .decimalPad textFiled.addTarget(self, action: #selector(textFiledDidChange(_:)), for: .editingChanged) textFiled.addTarget(self, action: #selector(textFiledDidEnd(_:)), for: .editingDidEnd) self.addSubview(textFiled) return textFiled }() /// 验证码数量 var codeViews: [TDWVerifyCodeNumView] = [] /// 验证码输入框距离两边的边距 var padding: CGFloat = 15 /// 每个验证码输入框间距 var spacing: CGFloat = 10 /// 是否在输入中 var isInput = true override init(frame: CGRect) { super.init(frame: frame) } convenience init(inputTextNum: Int) { self.init() self.inputTextNum = inputTextNum initSubviews() NotificationCenter.default.addObserver(self, selector: #selector(keyboardShow(note:)), name: UIResponder.keyboardWillShowNotification, object: nil) NotificationCenter.default.addObserver(self, selector: #selector(keyboardHidden(note:)), name: UIResponder.keyboardWillHideNotification, object: nil) } deinit { NotificationCenter.default.removeObserver(self) } func initSubviews() { textFiled.snp.makeConstraints { (make) in make.left.equalToSuperview().offset(padding) make.right.equalToSuperview().offset(-padding) make.top.bottom.equalToSuperview() } // 每个验证码框宽度 let itemWidth: CGFloat = (UIScreen.tdw_width() - padding * 2 - spacing * (CGFloat(inputTextNum) - 1)) / CGFloat(inputTextNum) for i in 0.. Bool { // 输入框已有的值 var inputText = textFiled.text ?? "" if string.count == 0 { // 删除 if range.location != inputText.count - 1 { // 删除的不是最后一个 if inputText.count > 0 { // 手动删除最后一位 textFiled.text?.removeLast() textFiledDidChange(textFiled) } return false } } if let tempRange = Range.init(range, in: inputText) { // 拼接输入后的值 inputText = inputText.replacingCharacters(in: tempRange , with: string) let meetRegx = "[0-9]*" let characterSet = NSPredicate.init(format: "SELF MATCHES %@", meetRegx) if characterSet.evaluate(with: inputText) == false { return false } } if inputText.count > inputTextNum { return false } return true } @objc func textFiledDidChange(_ textFiled: UITextField) { let inputStr = textFiled.text ?? "" textValueChange?(inputStr) for i in 0..= inputTextNum { // 结束编辑 DispatchQueue.main.async { textFiled.resignFirstResponder() } allCursorHidden() } } @objc func textFiledDidEnd(_ textFiled: UITextField) { guard let inputStr = textFiled.text else { return } if isInput, inputStr.count >= inputTextNum { inputFinish?(inputStr) } } } ================================================ FILE: VerifyCodeDemo/ViewController.swift ================================================ // // ViewController.swift // VerifyCodeDemo // // Created by tuandai on 2019/1/30. // Copyright © 2019 tuandai. All rights reserved. // import UIKit import SnapKit class ViewController: UIViewController { lazy var codeView: TDWVerifyCodeView = { let codeView = TDWVerifyCodeView.init(inputTextNum: 6) self.view.addSubview(codeView) return codeView }() override func viewDidLoad() { super.viewDidLoad() codeView.snp.makeConstraints { (make) in make.left.right.equalToSuperview() make.centerY.equalToSuperview() make.height.equalTo(35) } codeView.textFiled.becomeFirstResponder() // 监听验证码输入的过程 codeView.textValueChange = { str in // 要做的事情 } // 监听验证码输入完成 codeView.inputFinish = { str in // 要做的事情 } } override func touchesBegan(_ touches: Set, with event: UIEvent?) { view.endEditing(true) } } ================================================ FILE: VerifyCodeDemo.xcodeproj/project.pbxproj ================================================ // !$*UTF8*$! { archiveVersion = 1; classes = { }; objectVersion = 51; objects = { /* Begin PBXBuildFile section */ 2563206B22019629002A0DE6 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2563206A22019629002A0DE6 /* AppDelegate.swift */; }; 2563206D22019629002A0DE6 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2563206C22019629002A0DE6 /* ViewController.swift */; }; 2563207022019629002A0DE6 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 2563206E22019629002A0DE6 /* Main.storyboard */; }; 256320722201962A002A0DE6 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 256320712201962A002A0DE6 /* Assets.xcassets */; }; 256320752201962A002A0DE6 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 256320732201962A002A0DE6 /* LaunchScreen.storyboard */; }; 256320802201962B002A0DE6 /* VerifyCodeDemoTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2563207F2201962B002A0DE6 /* VerifyCodeDemoTests.swift */; }; 2563208B2201962B002A0DE6 /* VerifyCodeDemoUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2563208A2201962B002A0DE6 /* VerifyCodeDemoUITests.swift */; }; 256320992201963F002A0DE6 /* TDWVerifyCodeView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 256320982201963F002A0DE6 /* TDWVerifyCodeView.swift */; }; 2563209B22019654002A0DE6 /* TDWVerifyCodeTextView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2563209A22019654002A0DE6 /* TDWVerifyCodeTextView.swift */; }; 2563209D2201967C002A0DE6 /* TDWVerifyCodeNumView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2563209C2201967C002A0DE6 /* TDWVerifyCodeNumView.swift */; }; 256320A12201A2D3002A0DE6 /* TDWExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 256320A02201A2D3002A0DE6 /* TDWExtensions.swift */; }; B0A54D802B586BC26DAD041F /* Pods_VerifyCodeDemo.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C99E989052CA85F323758B9A /* Pods_VerifyCodeDemo.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ 2563207C2201962B002A0DE6 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 2563205F22019629002A0DE6 /* Project object */; proxyType = 1; remoteGlobalIDString = 2563206622019629002A0DE6; remoteInfo = VerifyCodeDemo; }; 256320872201962B002A0DE6 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 2563205F22019629002A0DE6 /* Project object */; proxyType = 1; remoteGlobalIDString = 2563206622019629002A0DE6; remoteInfo = VerifyCodeDemo; }; /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ 2563206722019629002A0DE6 /* VerifyCodeDemo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = VerifyCodeDemo.app; sourceTree = BUILT_PRODUCTS_DIR; }; 2563206A22019629002A0DE6 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 2563206C22019629002A0DE6 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; 2563206F22019629002A0DE6 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 256320712201962A002A0DE6 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 256320742201962A002A0DE6 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 256320762201962A002A0DE6 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 2563207B2201962B002A0DE6 /* VerifyCodeDemoTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = VerifyCodeDemoTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 2563207F2201962B002A0DE6 /* VerifyCodeDemoTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VerifyCodeDemoTests.swift; sourceTree = ""; }; 256320812201962B002A0DE6 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 256320862201962B002A0DE6 /* VerifyCodeDemoUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = VerifyCodeDemoUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 2563208A2201962B002A0DE6 /* VerifyCodeDemoUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VerifyCodeDemoUITests.swift; sourceTree = ""; }; 2563208C2201962B002A0DE6 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 256320982201963F002A0DE6 /* TDWVerifyCodeView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TDWVerifyCodeView.swift; sourceTree = ""; }; 2563209A22019654002A0DE6 /* TDWVerifyCodeTextView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TDWVerifyCodeTextView.swift; sourceTree = ""; }; 2563209C2201967C002A0DE6 /* TDWVerifyCodeNumView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TDWVerifyCodeNumView.swift; sourceTree = ""; }; 256320A02201A2D3002A0DE6 /* TDWExtensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TDWExtensions.swift; sourceTree = ""; }; 390278A2A28599A1C030DCD8 /* Pods-VerifyCodeDemo.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-VerifyCodeDemo.release.xcconfig"; path = "Pods/Target Support Files/Pods-VerifyCodeDemo/Pods-VerifyCodeDemo.release.xcconfig"; sourceTree = ""; }; B1A9810C31697E1CA11AF7FD /* Pods-VerifyCodeDemo.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-VerifyCodeDemo.debug.xcconfig"; path = "Pods/Target Support Files/Pods-VerifyCodeDemo/Pods-VerifyCodeDemo.debug.xcconfig"; sourceTree = ""; }; C99E989052CA85F323758B9A /* Pods_VerifyCodeDemo.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_VerifyCodeDemo.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ 2563206422019629002A0DE6 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( B0A54D802B586BC26DAD041F /* Pods_VerifyCodeDemo.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; 256320782201962B002A0DE6 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; 256320832201962B002A0DE6 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ 140C2D7873010CB6165F4D93 /* Frameworks */ = { isa = PBXGroup; children = ( C99E989052CA85F323758B9A /* Pods_VerifyCodeDemo.framework */, ); name = Frameworks; sourceTree = ""; }; 2563205E22019629002A0DE6 = { isa = PBXGroup; children = ( 2563206922019629002A0DE6 /* VerifyCodeDemo */, 2563207E2201962B002A0DE6 /* VerifyCodeDemoTests */, 256320892201962B002A0DE6 /* VerifyCodeDemoUITests */, 2563206822019629002A0DE6 /* Products */, 36FE96B18339A1CB4BCA9B01 /* Pods */, 140C2D7873010CB6165F4D93 /* Frameworks */, ); sourceTree = ""; }; 2563206822019629002A0DE6 /* Products */ = { isa = PBXGroup; children = ( 2563206722019629002A0DE6 /* VerifyCodeDemo.app */, 2563207B2201962B002A0DE6 /* VerifyCodeDemoTests.xctest */, 256320862201962B002A0DE6 /* VerifyCodeDemoUITests.xctest */, ); name = Products; sourceTree = ""; }; 2563206922019629002A0DE6 /* VerifyCodeDemo */ = { isa = PBXGroup; children = ( 2563206A22019629002A0DE6 /* AppDelegate.swift */, 2563206C22019629002A0DE6 /* ViewController.swift */, 256AB8EB221BFC42008A61CA /* VerifyCodeView */, 2563206E22019629002A0DE6 /* Main.storyboard */, 256320712201962A002A0DE6 /* Assets.xcassets */, 256320732201962A002A0DE6 /* LaunchScreen.storyboard */, 256320762201962A002A0DE6 /* Info.plist */, ); path = VerifyCodeDemo; sourceTree = ""; }; 2563207E2201962B002A0DE6 /* VerifyCodeDemoTests */ = { isa = PBXGroup; children = ( 2563207F2201962B002A0DE6 /* VerifyCodeDemoTests.swift */, 256320812201962B002A0DE6 /* Info.plist */, ); path = VerifyCodeDemoTests; sourceTree = ""; }; 256320892201962B002A0DE6 /* VerifyCodeDemoUITests */ = { isa = PBXGroup; children = ( 2563208A2201962B002A0DE6 /* VerifyCodeDemoUITests.swift */, 2563208C2201962B002A0DE6 /* Info.plist */, ); path = VerifyCodeDemoUITests; sourceTree = ""; }; 256AB8EB221BFC42008A61CA /* VerifyCodeView */ = { isa = PBXGroup; children = ( 256AB8ED221BFC6D008A61CA /* TDWExtension */, 256320982201963F002A0DE6 /* TDWVerifyCodeView.swift */, 2563209C2201967C002A0DE6 /* TDWVerifyCodeNumView.swift */, 2563209A22019654002A0DE6 /* TDWVerifyCodeTextView.swift */, ); path = VerifyCodeView; sourceTree = ""; }; 256AB8ED221BFC6D008A61CA /* TDWExtension */ = { isa = PBXGroup; children = ( 256320A02201A2D3002A0DE6 /* TDWExtensions.swift */, ); path = TDWExtension; sourceTree = ""; }; 36FE96B18339A1CB4BCA9B01 /* Pods */ = { isa = PBXGroup; children = ( B1A9810C31697E1CA11AF7FD /* Pods-VerifyCodeDemo.debug.xcconfig */, 390278A2A28599A1C030DCD8 /* Pods-VerifyCodeDemo.release.xcconfig */, ); name = Pods; sourceTree = ""; }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ 2563206622019629002A0DE6 /* VerifyCodeDemo */ = { isa = PBXNativeTarget; buildConfigurationList = 2563208F2201962B002A0DE6 /* Build configuration list for PBXNativeTarget "VerifyCodeDemo" */; buildPhases = ( 6CD2A0C17DB4D7E11EBD634A /* [CP] Check Pods Manifest.lock */, 2563206322019629002A0DE6 /* Sources */, 2563206422019629002A0DE6 /* Frameworks */, 2563206522019629002A0DE6 /* Resources */, B35EF4ED0E3B1B9D5FE1F9E9 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); dependencies = ( ); name = VerifyCodeDemo; productName = VerifyCodeDemo; productReference = 2563206722019629002A0DE6 /* VerifyCodeDemo.app */; productType = "com.apple.product-type.application"; }; 2563207A2201962B002A0DE6 /* VerifyCodeDemoTests */ = { isa = PBXNativeTarget; buildConfigurationList = 256320922201962B002A0DE6 /* Build configuration list for PBXNativeTarget "VerifyCodeDemoTests" */; buildPhases = ( 256320772201962B002A0DE6 /* Sources */, 256320782201962B002A0DE6 /* Frameworks */, 256320792201962B002A0DE6 /* Resources */, ); buildRules = ( ); dependencies = ( 2563207D2201962B002A0DE6 /* PBXTargetDependency */, ); name = VerifyCodeDemoTests; productName = VerifyCodeDemoTests; productReference = 2563207B2201962B002A0DE6 /* VerifyCodeDemoTests.xctest */; productType = "com.apple.product-type.bundle.unit-test"; }; 256320852201962B002A0DE6 /* VerifyCodeDemoUITests */ = { isa = PBXNativeTarget; buildConfigurationList = 256320952201962B002A0DE6 /* Build configuration list for PBXNativeTarget "VerifyCodeDemoUITests" */; buildPhases = ( 256320822201962B002A0DE6 /* Sources */, 256320832201962B002A0DE6 /* Frameworks */, 256320842201962B002A0DE6 /* Resources */, ); buildRules = ( ); dependencies = ( 256320882201962B002A0DE6 /* PBXTargetDependency */, ); name = VerifyCodeDemoUITests; productName = VerifyCodeDemoUITests; productReference = 256320862201962B002A0DE6 /* VerifyCodeDemoUITests.xctest */; productType = "com.apple.product-type.bundle.ui-testing"; }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ 2563205F22019629002A0DE6 /* Project object */ = { isa = PBXProject; attributes = { LastSwiftUpdateCheck = 1010; LastUpgradeCheck = 1010; ORGANIZATIONNAME = tuandai; TargetAttributes = { 2563206622019629002A0DE6 = { CreatedOnToolsVersion = 10.1; }; 2563207A2201962B002A0DE6 = { CreatedOnToolsVersion = 10.1; TestTargetID = 2563206622019629002A0DE6; }; 256320852201962B002A0DE6 = { CreatedOnToolsVersion = 10.1; TestTargetID = 2563206622019629002A0DE6; }; }; }; buildConfigurationList = 2563206222019629002A0DE6 /* Build configuration list for PBXProject "VerifyCodeDemo" */; compatibilityVersion = "Xcode 9.3"; developmentRegion = en; hasScannedForEncodings = 0; knownRegions = ( en, Base, ); mainGroup = 2563205E22019629002A0DE6; productRefGroup = 2563206822019629002A0DE6 /* Products */; projectDirPath = ""; projectRoot = ""; targets = ( 2563206622019629002A0DE6 /* VerifyCodeDemo */, 2563207A2201962B002A0DE6 /* VerifyCodeDemoTests */, 256320852201962B002A0DE6 /* VerifyCodeDemoUITests */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ 2563206522019629002A0DE6 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( 256320752201962A002A0DE6 /* LaunchScreen.storyboard in Resources */, 256320722201962A002A0DE6 /* Assets.xcassets in Resources */, 2563207022019629002A0DE6 /* Main.storyboard in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; 256320792201962B002A0DE6 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; 256320842201962B002A0DE6 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ 6CD2A0C17DB4D7E11EBD634A /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( "${PODS_PODFILE_DIR_PATH}/Podfile.lock", "${PODS_ROOT}/Manifest.lock", ); name = "[CP] Check Pods Manifest.lock"; outputPaths = ( "$(DERIVED_FILE_DIR)/Pods-VerifyCodeDemo-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; B35EF4ED0E3B1B9D5FE1F9E9 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( "${PODS_ROOT}/Target Support Files/Pods-VerifyCodeDemo/Pods-VerifyCodeDemo-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( "${PODS_ROOT}/Target Support Files/Pods-VerifyCodeDemo/Pods-VerifyCodeDemo-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-VerifyCodeDemo/Pods-VerifyCodeDemo-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ 2563206322019629002A0DE6 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 2563206D22019629002A0DE6 /* ViewController.swift in Sources */, 2563209B22019654002A0DE6 /* TDWVerifyCodeTextView.swift in Sources */, 2563209D2201967C002A0DE6 /* TDWVerifyCodeNumView.swift in Sources */, 2563206B22019629002A0DE6 /* AppDelegate.swift in Sources */, 256320A12201A2D3002A0DE6 /* TDWExtensions.swift in Sources */, 256320992201963F002A0DE6 /* TDWVerifyCodeView.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 256320772201962B002A0DE6 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 256320802201962B002A0DE6 /* VerifyCodeDemoTests.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 256320822201962B002A0DE6 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 2563208B2201962B002A0DE6 /* VerifyCodeDemoUITests.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ 2563207D2201962B002A0DE6 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 2563206622019629002A0DE6 /* VerifyCodeDemo */; targetProxy = 2563207C2201962B002A0DE6 /* PBXContainerItemProxy */; }; 256320882201962B002A0DE6 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 2563206622019629002A0DE6 /* VerifyCodeDemo */; targetProxy = 256320872201962B002A0DE6 /* PBXContainerItemProxy */; }; /* End PBXTargetDependency section */ /* Begin PBXVariantGroup section */ 2563206E22019629002A0DE6 /* Main.storyboard */ = { isa = PBXVariantGroup; children = ( 2563206F22019629002A0DE6 /* Base */, ); name = Main.storyboard; sourceTree = ""; }; 256320732201962A002A0DE6 /* LaunchScreen.storyboard */ = { isa = PBXVariantGroup; children = ( 256320742201962A002A0DE6 /* Base */, ); name = LaunchScreen.storyboard; sourceTree = ""; }; /* End PBXVariantGroup section */ /* Begin XCBuildConfiguration section */ 2563208D2201962B002A0DE6 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_ANALYZER_NONNULL = YES; CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_ENABLE_OBJC_WEAK = YES; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_DOCUMENTATION_COMMENTS = YES; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; CLANG_WARN_STRICT_PROTOTYPES = YES; CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; CODE_SIGN_IDENTITY = "iPhone Developer"; COPY_PHASE_STRIP = NO; DEBUG_INFORMATION_FORMAT = dwarf; ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_TESTABILITY = YES; GCC_C_LANGUAGE_STANDARD = gnu11; GCC_DYNAMIC_NO_PIC = NO; GCC_NO_COMMON_BLOCKS = YES; GCC_OPTIMIZATION_LEVEL = 0; GCC_PREPROCESSOR_DEFINITIONS = ( "DEBUG=1", "$(inherited)", ); 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 = 12.1; MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; MTL_FAST_MATH = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; }; name = Debug; }; 2563208E2201962B002A0DE6 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_ANALYZER_NONNULL = YES; CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_ENABLE_OBJC_WEAK = YES; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_DOCUMENTATION_COMMENTS = YES; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; CLANG_WARN_STRICT_PROTOTYPES = YES; CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; CODE_SIGN_IDENTITY = "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 = gnu11; 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 = 12.1; MTL_ENABLE_DEBUG_INFO = NO; MTL_FAST_MATH = YES; SDKROOT = iphoneos; SWIFT_COMPILATION_MODE = wholemodule; SWIFT_OPTIMIZATION_LEVEL = "-O"; VALIDATE_PRODUCT = YES; }; name = Release; }; 256320902201962B002A0DE6 /* Debug */ = { isa = XCBuildConfiguration; baseConfigurationReference = B1A9810C31697E1CA11AF7FD /* Pods-VerifyCodeDemo.debug.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CODE_SIGN_STYLE = Manual; DEVELOPMENT_TEAM = ""; INFOPLIST_FILE = VerifyCodeDemo/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 9.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", ); PRODUCT_BUNDLE_IDENTIFIER = com.qqq.sss; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; }; name = Debug; }; 256320912201962B002A0DE6 /* Release */ = { isa = XCBuildConfiguration; baseConfigurationReference = 390278A2A28599A1C030DCD8 /* Pods-VerifyCodeDemo.release.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CODE_SIGN_STYLE = Manual; DEVELOPMENT_TEAM = ""; INFOPLIST_FILE = VerifyCodeDemo/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 9.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", ); PRODUCT_BUNDLE_IDENTIFIER = com.qqq.sss; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; }; name = Release; }; 256320932201962B002A0DE6 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; INFOPLIST_FILE = VerifyCodeDemoTests/Info.plist; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", "@loader_path/Frameworks", ); PRODUCT_BUNDLE_IDENTIFIER = jf.VerifyCodeDemoTests; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_VERSION = 4.2; TARGETED_DEVICE_FAMILY = "1,2"; TEST_HOST = "$(BUILT_PRODUCTS_DIR)/VerifyCodeDemo.app/VerifyCodeDemo"; }; name = Debug; }; 256320942201962B002A0DE6 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; INFOPLIST_FILE = VerifyCodeDemoTests/Info.plist; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", "@loader_path/Frameworks", ); PRODUCT_BUNDLE_IDENTIFIER = jf.VerifyCodeDemoTests; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_VERSION = 4.2; TARGETED_DEVICE_FAMILY = "1,2"; TEST_HOST = "$(BUILT_PRODUCTS_DIR)/VerifyCodeDemo.app/VerifyCodeDemo"; }; name = Release; }; 256320962201962B002A0DE6 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; CODE_SIGN_STYLE = Automatic; INFOPLIST_FILE = VerifyCodeDemoUITests/Info.plist; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", "@loader_path/Frameworks", ); PRODUCT_BUNDLE_IDENTIFIER = jf.VerifyCodeDemoUITests; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_VERSION = 4.2; TARGETED_DEVICE_FAMILY = "1,2"; TEST_TARGET_NAME = VerifyCodeDemo; }; name = Debug; }; 256320972201962B002A0DE6 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; CODE_SIGN_STYLE = Automatic; INFOPLIST_FILE = VerifyCodeDemoUITests/Info.plist; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", "@loader_path/Frameworks", ); PRODUCT_BUNDLE_IDENTIFIER = jf.VerifyCodeDemoUITests; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_VERSION = 4.2; TARGETED_DEVICE_FAMILY = "1,2"; TEST_TARGET_NAME = VerifyCodeDemo; }; name = Release; }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ 2563206222019629002A0DE6 /* Build configuration list for PBXProject "VerifyCodeDemo" */ = { isa = XCConfigurationList; buildConfigurations = ( 2563208D2201962B002A0DE6 /* Debug */, 2563208E2201962B002A0DE6 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 2563208F2201962B002A0DE6 /* Build configuration list for PBXNativeTarget "VerifyCodeDemo" */ = { isa = XCConfigurationList; buildConfigurations = ( 256320902201962B002A0DE6 /* Debug */, 256320912201962B002A0DE6 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 256320922201962B002A0DE6 /* Build configuration list for PBXNativeTarget "VerifyCodeDemoTests" */ = { isa = XCConfigurationList; buildConfigurations = ( 256320932201962B002A0DE6 /* Debug */, 256320942201962B002A0DE6 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 256320952201962B002A0DE6 /* Build configuration list for PBXNativeTarget "VerifyCodeDemoUITests" */ = { isa = XCConfigurationList; buildConfigurations = ( 256320962201962B002A0DE6 /* Debug */, 256320972201962B002A0DE6 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; /* End XCConfigurationList section */ }; rootObject = 2563205F22019629002A0DE6 /* Project object */; } ================================================ FILE: VerifyCodeDemo.xcodeproj/project.xcworkspace/contents.xcworkspacedata ================================================ ================================================ FILE: VerifyCodeDemo.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist ================================================ IDEDidComputeMac32BitWarning ================================================ FILE: VerifyCodeDemo.xcworkspace/contents.xcworkspacedata ================================================ ================================================ FILE: VerifyCodeDemo.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist ================================================ IDEDidComputeMac32BitWarning ================================================ FILE: VerifyCodeDemoTests/Info.plist ================================================ CFBundleDevelopmentRegion $(DEVELOPMENT_LANGUAGE) CFBundleExecutable $(EXECUTABLE_NAME) CFBundleIdentifier $(PRODUCT_BUNDLE_IDENTIFIER) CFBundleInfoDictionaryVersion 6.0 CFBundleName $(PRODUCT_NAME) CFBundlePackageType BNDL CFBundleShortVersionString 1.0 CFBundleVersion 1 ================================================ FILE: VerifyCodeDemoTests/VerifyCodeDemoTests.swift ================================================ // // VerifyCodeDemoTests.swift // VerifyCodeDemoTests // // Created by tuandai on 2019/1/30. // Copyright © 2019 tuandai. All rights reserved. // import XCTest @testable import VerifyCodeDemo class VerifyCodeDemoTests: XCTestCase { override func 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. } func testExample() { // This is an example of a functional test case. // Use XCTAssert and related functions to verify your tests produce the correct results. } func testPerformanceExample() { // This is an example of a performance test case. self.measure { // Put the code you want to measure the time of here. } } } ================================================ FILE: VerifyCodeDemoUITests/Info.plist ================================================ CFBundleDevelopmentRegion $(DEVELOPMENT_LANGUAGE) CFBundleExecutable $(EXECUTABLE_NAME) CFBundleIdentifier $(PRODUCT_BUNDLE_IDENTIFIER) CFBundleInfoDictionaryVersion 6.0 CFBundleName $(PRODUCT_NAME) CFBundlePackageType BNDL CFBundleShortVersionString 1.0 CFBundleVersion 1 ================================================ FILE: VerifyCodeDemoUITests/VerifyCodeDemoUITests.swift ================================================ // // VerifyCodeDemoUITests.swift // VerifyCodeDemoUITests // // Created by tuandai on 2019/1/30. // Copyright © 2019 tuandai. All rights reserved. // import XCTest class VerifyCodeDemoUITests: XCTestCase { override func setUp() { // Put setup code here. This method is called before the invocation of each test method in the class. // In UI tests it is usually best to stop immediately when a failure occurs. continueAfterFailure = false // UI tests must launch the application that they test. Doing this in setup will make sure it happens for each test method. XCUIApplication().launch() // In UI tests it’s important to set the initial state - such as interface orientation - required for your tests before they run. The setUp method is a good place to do this. } override func tearDown() { // Put teardown code here. This method is called after the invocation of each test method in the class. } func testExample() { // Use recording to get started writing UI tests. // Use XCTAssert and related functions to verify your tests produce the correct results. } } ================================================ FILE: VerifyCodeSwift.podspec ================================================ Pod::Spec.new do |spec| spec.name = "VerifyCodeSwift" spec.version = "3.0.1" spec.summary = "iOS Custom captcha" spec.swift_versions = "5.0" spec.description = <<-DESC iOS Custom captcha, Support for swift. DESC spec.homepage = "https://github.com/zhongjianfeipqy/VerificationCode" spec.screenshots = "https://upload-images.jianshu.io/upload_images/2094754-768de1c89184e230.gif?imageMogr2/auto-orient/strip" spec.license = "MIT" spec.author = { "JF Z" => "378789308@qq.com"} spec.social_media_url = "https://www.jianshu.com/u/2a97371d263b" spec.platform = :ios, "9.0" # When using multiple platforms # spec.ios.deployment_target = "5.0" # spec.osx.deployment_target = "10.7" # spec.watchos.deployment_target = "2.0" # spec.tvos.deployment_target = "9.0" spec.source = { :git => "https://github.com/zhongjianfeipqy/VerificationCode.git", :tag => "#{spec.version}" } # spec.source_files = "VerifyCodeDemo/VerifyCodeView/**/*" spec.source_files = "VerifyCodeDemo/VerifyCodeView/*" # 建立TDWExtension文件夹,并且设置文件夹下的源文件 spec.subspec 'TDWExtension' do |sub| sub.source_files = "VerifyCodeDemo/VerifyCodeView/TDWExtension/*" end spec.frameworks = "UIKit", "Foundation" # spec.library = "iconv" # spec.libraries = "iconv", "xml2" spec.requires_arc = true spec.dependency 'SnapKit' end