From 4764b9d48dadda9dcbe2c100f9b40b7aaf1a07d7 Mon Sep 17 00:00:00 2001 From: Damon Date: Thu, 15 Jul 2021 18:38:11 +0800 Subject: [PATCH] init --- example/Podfile | 11 + example/Podfile.lock | 27 + example/Pods/Manifest.lock | 27 + example/Pods/Pods.xcodeproj/project.pbxproj | 1372 +++++++++++++++++ .../Pods-ZXUserDefaultManager.xcscheme | 58 + .../xcschemes/SnapKit.xcscheme | 60 + .../xcschemes/ZXKitCore-ZXKitCore.xcscheme | 58 + .../xcschemes/ZXKitCore.xcscheme | 60 + .../xcschemes/ZXKitUtil.xcscheme | 60 + .../xcschemes/xcschememanagement.plist | 46 + example/Pods/SnapKit/LICENSE | 19 + example/Pods/SnapKit/README.md | 136 ++ example/Pods/SnapKit/Source/Constraint.swift | 341 ++++ .../SnapKit/Source/ConstraintAttributes.swift | 199 +++ .../SnapKit/Source/ConstraintConfig.swift | 37 + .../Source/ConstraintConstantTarget.swift | 213 +++ .../Pods/SnapKit/Source/ConstraintDSL.swift | 194 +++ .../Source/ConstraintDescription.swift | 69 + .../ConstraintDirectionalInsetTarget.swift | 49 + .../Source/ConstraintDirectionalInsets.swift | 34 + .../Source/ConstraintInsetTarget.swift | 72 + .../SnapKit/Source/ConstraintInsets.swift | 35 + .../Pods/SnapKit/Source/ConstraintItem.swift | 61 + .../ConstraintLayoutGuide+Extensions.swift | 36 + .../Source/ConstraintLayoutGuide.swift | 37 + .../Source/ConstraintLayoutGuideDSL.swift | 66 + .../Source/ConstraintLayoutSupport.swift | 36 + .../Source/ConstraintLayoutSupportDSL.swift | 56 + .../Pods/SnapKit/Source/ConstraintMaker.swift | 212 +++ .../Source/ConstraintMakerEditable.swift | 64 + .../Source/ConstraintMakerExtendable.swift | 179 +++ .../Source/ConstraintMakerFinalizable.swift | 49 + .../Source/ConstraintMakerPriortizable.swift | 68 + .../Source/ConstraintMakerRelatable.swift | 115 ++ .../Source/ConstraintMultiplierTarget.swift | 75 + .../Source/ConstraintOffsetTarget.swift | 69 + .../SnapKit/Source/ConstraintPriority.swift | 77 + .../Source/ConstraintPriorityTarget.swift | 85 + .../Source/ConstraintRelatableTarget.swift | 72 + .../SnapKit/Source/ConstraintRelation.swift | 48 + .../Source/ConstraintView+Extensions.swift | 152 ++ .../Pods/SnapKit/Source/ConstraintView.swift | 35 + .../SnapKit/Source/ConstraintViewDSL.swift | 101 ++ example/Pods/SnapKit/Source/Debugging.swift | 169 ++ .../SnapKit/Source/LayoutConstraint.swift | 61 + .../SnapKit/Source/LayoutConstraintItem.swift | 93 ++ example/Pods/SnapKit/Source/Typealiases.swift | 42 + .../Source/UILayoutSupport+Extensions.swift | 36 + .../Pods-ZXUserDefaultManager-Info.plist | 26 + ...erDefaultManager-acknowledgements.markdown | 436 ++++++ ...XUserDefaultManager-acknowledgements.plist | 480 ++++++ .../Pods-ZXUserDefaultManager-dummy.m | 5 + ...er-frameworks-Debug-input-files.xcfilelist | 4 + ...r-frameworks-Debug-output-files.xcfilelist | 3 + ...-frameworks-Release-input-files.xcfilelist | 4 + ...frameworks-Release-output-files.xcfilelist | 3 + .../Pods-ZXUserDefaultManager-frameworks.sh | 211 +++ .../Pods-ZXUserDefaultManager-umbrella.h | 16 + .../Pods-ZXUserDefaultManager.debug.xcconfig | 12 + .../Pods-ZXUserDefaultManager.modulemap | 6 + ...Pods-ZXUserDefaultManager.release.xcconfig | 12 + .../SnapKit/SnapKit-Info.plist | 26 + .../SnapKit/SnapKit-dummy.m | 5 + .../SnapKit/SnapKit-prefix.pch | 12 + .../SnapKit/SnapKit-umbrella.h | 16 + .../SnapKit/SnapKit.debug.xcconfig | 10 + .../SnapKit/SnapKit.modulemap | 6 + .../SnapKit/SnapKit.release.xcconfig | 10 + ...ourceBundle-ZXKitCore-ZXKitCore-Info.plist | 24 + .../ZXKitCore/ZXKitCore-Info.plist | 26 + .../ZXKitCore/ZXKitCore-dummy.m | 5 + .../ZXKitCore/ZXKitCore-prefix.pch | 12 + .../ZXKitCore/ZXKitCore-umbrella.h | 16 + .../ZXKitCore/ZXKitCore.debug.xcconfig | 11 + .../ZXKitCore/ZXKitCore.modulemap | 6 + .../ZXKitCore/ZXKitCore.release.xcconfig | 11 + .../ZXKitUtil/ZXKitUtil-Info.plist | 26 + .../ZXKitUtil/ZXKitUtil-dummy.m | 5 + .../ZXKitUtil/ZXKitUtil-prefix.pch | 12 + .../ZXKitUtil/ZXKitUtil-umbrella.h | 16 + .../ZXKitUtil/ZXKitUtil.debug.xcconfig | 10 + .../ZXKitUtil/ZXKitUtil.modulemap | 6 + .../ZXKitUtil/ZXKitUtil.release.xcconfig | 10 + example/Pods/ZXKitCore/LICENSE | 201 +++ example/Pods/ZXKitCore/README.md | 124 ++ example/Pods/ZXKitCore/pod/ZXKit.swift | 133 ++ .../pod/ZXKitCollectionViewHeaderView.swift | 44 + .../Pods/ZXKitCore/pod/ZXKitFloatWindow.swift | 91 ++ .../pod/ZXKitPluginCollectionViewCell.swift | 76 + .../ZXKitCore/pod/ZXKitPluginProtocol.swift | 25 + example/Pods/ZXKitCore/pod/ZXKitWindow.swift | 228 +++ .../localizable/en.lproj/Localizable.strings | 14 + .../zh-Hans.lproj/Localizable.strings | 14 + example/Pods/ZXKitUtil/LICENSE | 201 +++ example/Pods/ZXKitUtil/README.md | 120 ++ example/Pods/ZXKitUtil/pod/ZXKitUtil+UI.swift | 231 +++ .../Pods/ZXKitUtil/pod/ZXKitUtil+file.swift | 82 + .../Pods/ZXKitUtil/pod/ZXKitUtil+media.swift | 111 ++ .../ZXKitUtil/pod/ZXKitUtil+permission.swift | 200 +++ .../Pods/ZXKitUtil/pod/ZXKitUtil+system.swift | 157 ++ example/Pods/ZXKitUtil/pod/ZXKitUtil.swift | 16 + .../Pods/ZXKitUtil/pod/extend/Data+zx.swift | 163 ++ .../Pods/ZXKitUtil/pod/extend/Date+zx.swift | 31 + .../Pods/ZXKitUtil/pod/extend/String+zx.swift | 80 + .../ZXKitUtil/pod/extend/UIColor+zx.swift | 86 ++ .../ZXKitUtil/pod/extend/UIImage+zx.swift | 30 + .../Pods/ZXKitUtil/pod/extend/UIView+zx.swift | 48 + .../ZXKitUtil/pod/extend/ZXKitNameSpace.swift | 36 + .../project.pbxproj | 508 ++++++ .../contents.xcworkspacedata | 7 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../UserInterfaceState.xcuserstate | Bin 0 -> 29426 bytes .../xcschemes/xcschememanagement.plist | 14 + .../contents.xcworkspacedata | 10 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../UserInterfaceState.xcuserstate | Bin 0 -> 34081 bytes .../ZXUserDefaultManager/AppDelegate.swift | 28 + .../AccentColor.colorset/Contents.json | 11 + .../AppIcon.appiconset/Contents.json | 98 ++ .../Assets.xcassets/Contents.json | 6 + .../Base.lproj/LaunchScreen.storyboard | 25 + .../Base.lproj/Main.storyboard | 24 + example/ZXUserDefaultManager/Info.plist | 47 + .../ZXUserDefaultManager/ViewController.swift | 33 + pod/ZXUserDefaultManager.swift | 40 + pod/assets/ZXUserDefaultManager.png | Bin 0 -> 22019 bytes .../localizable/en.lproj/Localizable.strings | 19 + .../zh-Hans.lproj/Localizable.strings | 19 + pod/model/ZXDataCellModel.swift | 12 + pod/vc/ZXUserDefaultVC.swift | 156 ++ pod/view/ZXDataTableViewCell.swift | 60 + pod/zxkit/ZXUserDefaultManager+zxkit.swift | 38 + 132 files changed, 10483 insertions(+) create mode 100644 example/Podfile create mode 100644 example/Podfile.lock create mode 100644 example/Pods/Manifest.lock create mode 100644 example/Pods/Pods.xcodeproj/project.pbxproj create mode 100644 example/Pods/Pods.xcodeproj/xcuserdata/damon.xcuserdatad/xcschemes/Pods-ZXUserDefaultManager.xcscheme create mode 100644 example/Pods/Pods.xcodeproj/xcuserdata/damon.xcuserdatad/xcschemes/SnapKit.xcscheme create mode 100644 example/Pods/Pods.xcodeproj/xcuserdata/damon.xcuserdatad/xcschemes/ZXKitCore-ZXKitCore.xcscheme create mode 100644 example/Pods/Pods.xcodeproj/xcuserdata/damon.xcuserdatad/xcschemes/ZXKitCore.xcscheme create mode 100644 example/Pods/Pods.xcodeproj/xcuserdata/damon.xcuserdatad/xcschemes/ZXKitUtil.xcscheme create mode 100644 example/Pods/Pods.xcodeproj/xcuserdata/damon.xcuserdatad/xcschemes/xcschememanagement.plist create mode 100644 example/Pods/SnapKit/LICENSE create mode 100644 example/Pods/SnapKit/README.md create mode 100644 example/Pods/SnapKit/Source/Constraint.swift create mode 100644 example/Pods/SnapKit/Source/ConstraintAttributes.swift create mode 100644 example/Pods/SnapKit/Source/ConstraintConfig.swift create mode 100644 example/Pods/SnapKit/Source/ConstraintConstantTarget.swift create mode 100644 example/Pods/SnapKit/Source/ConstraintDSL.swift create mode 100644 example/Pods/SnapKit/Source/ConstraintDescription.swift create mode 100644 example/Pods/SnapKit/Source/ConstraintDirectionalInsetTarget.swift create mode 100644 example/Pods/SnapKit/Source/ConstraintDirectionalInsets.swift create mode 100644 example/Pods/SnapKit/Source/ConstraintInsetTarget.swift create mode 100644 example/Pods/SnapKit/Source/ConstraintInsets.swift create mode 100644 example/Pods/SnapKit/Source/ConstraintItem.swift create mode 100644 example/Pods/SnapKit/Source/ConstraintLayoutGuide+Extensions.swift create mode 100644 example/Pods/SnapKit/Source/ConstraintLayoutGuide.swift create mode 100644 example/Pods/SnapKit/Source/ConstraintLayoutGuideDSL.swift create mode 100644 example/Pods/SnapKit/Source/ConstraintLayoutSupport.swift create mode 100644 example/Pods/SnapKit/Source/ConstraintLayoutSupportDSL.swift create mode 100644 example/Pods/SnapKit/Source/ConstraintMaker.swift create mode 100644 example/Pods/SnapKit/Source/ConstraintMakerEditable.swift create mode 100644 example/Pods/SnapKit/Source/ConstraintMakerExtendable.swift create mode 100644 example/Pods/SnapKit/Source/ConstraintMakerFinalizable.swift create mode 100644 example/Pods/SnapKit/Source/ConstraintMakerPriortizable.swift create mode 100644 example/Pods/SnapKit/Source/ConstraintMakerRelatable.swift create mode 100644 example/Pods/SnapKit/Source/ConstraintMultiplierTarget.swift create mode 100644 example/Pods/SnapKit/Source/ConstraintOffsetTarget.swift create mode 100644 example/Pods/SnapKit/Source/ConstraintPriority.swift create mode 100644 example/Pods/SnapKit/Source/ConstraintPriorityTarget.swift create mode 100644 example/Pods/SnapKit/Source/ConstraintRelatableTarget.swift create mode 100644 example/Pods/SnapKit/Source/ConstraintRelation.swift create mode 100644 example/Pods/SnapKit/Source/ConstraintView+Extensions.swift create mode 100644 example/Pods/SnapKit/Source/ConstraintView.swift create mode 100644 example/Pods/SnapKit/Source/ConstraintViewDSL.swift create mode 100644 example/Pods/SnapKit/Source/Debugging.swift create mode 100644 example/Pods/SnapKit/Source/LayoutConstraint.swift create mode 100644 example/Pods/SnapKit/Source/LayoutConstraintItem.swift create mode 100644 example/Pods/SnapKit/Source/Typealiases.swift create mode 100644 example/Pods/SnapKit/Source/UILayoutSupport+Extensions.swift create mode 100644 example/Pods/Target Support Files/Pods-ZXUserDefaultManager/Pods-ZXUserDefaultManager-Info.plist create mode 100644 example/Pods/Target Support Files/Pods-ZXUserDefaultManager/Pods-ZXUserDefaultManager-acknowledgements.markdown create mode 100644 example/Pods/Target Support Files/Pods-ZXUserDefaultManager/Pods-ZXUserDefaultManager-acknowledgements.plist create mode 100644 example/Pods/Target Support Files/Pods-ZXUserDefaultManager/Pods-ZXUserDefaultManager-dummy.m create mode 100644 example/Pods/Target Support Files/Pods-ZXUserDefaultManager/Pods-ZXUserDefaultManager-frameworks-Debug-input-files.xcfilelist create mode 100644 example/Pods/Target Support Files/Pods-ZXUserDefaultManager/Pods-ZXUserDefaultManager-frameworks-Debug-output-files.xcfilelist create mode 100644 example/Pods/Target Support Files/Pods-ZXUserDefaultManager/Pods-ZXUserDefaultManager-frameworks-Release-input-files.xcfilelist create mode 100644 example/Pods/Target Support Files/Pods-ZXUserDefaultManager/Pods-ZXUserDefaultManager-frameworks-Release-output-files.xcfilelist create mode 100755 example/Pods/Target Support Files/Pods-ZXUserDefaultManager/Pods-ZXUserDefaultManager-frameworks.sh create mode 100644 example/Pods/Target Support Files/Pods-ZXUserDefaultManager/Pods-ZXUserDefaultManager-umbrella.h create mode 100644 example/Pods/Target Support Files/Pods-ZXUserDefaultManager/Pods-ZXUserDefaultManager.debug.xcconfig create mode 100644 example/Pods/Target Support Files/Pods-ZXUserDefaultManager/Pods-ZXUserDefaultManager.modulemap create mode 100644 example/Pods/Target Support Files/Pods-ZXUserDefaultManager/Pods-ZXUserDefaultManager.release.xcconfig create mode 100644 example/Pods/Target Support Files/SnapKit/SnapKit-Info.plist create mode 100644 example/Pods/Target Support Files/SnapKit/SnapKit-dummy.m create mode 100644 example/Pods/Target Support Files/SnapKit/SnapKit-prefix.pch create mode 100644 example/Pods/Target Support Files/SnapKit/SnapKit-umbrella.h create mode 100644 example/Pods/Target Support Files/SnapKit/SnapKit.debug.xcconfig create mode 100644 example/Pods/Target Support Files/SnapKit/SnapKit.modulemap create mode 100644 example/Pods/Target Support Files/SnapKit/SnapKit.release.xcconfig create mode 100644 example/Pods/Target Support Files/ZXKitCore/ResourceBundle-ZXKitCore-ZXKitCore-Info.plist create mode 100644 example/Pods/Target Support Files/ZXKitCore/ZXKitCore-Info.plist create mode 100644 example/Pods/Target Support Files/ZXKitCore/ZXKitCore-dummy.m create mode 100644 example/Pods/Target Support Files/ZXKitCore/ZXKitCore-prefix.pch create mode 100644 example/Pods/Target Support Files/ZXKitCore/ZXKitCore-umbrella.h create mode 100644 example/Pods/Target Support Files/ZXKitCore/ZXKitCore.debug.xcconfig create mode 100644 example/Pods/Target Support Files/ZXKitCore/ZXKitCore.modulemap create mode 100644 example/Pods/Target Support Files/ZXKitCore/ZXKitCore.release.xcconfig create mode 100644 example/Pods/Target Support Files/ZXKitUtil/ZXKitUtil-Info.plist create mode 100644 example/Pods/Target Support Files/ZXKitUtil/ZXKitUtil-dummy.m create mode 100644 example/Pods/Target Support Files/ZXKitUtil/ZXKitUtil-prefix.pch create mode 100644 example/Pods/Target Support Files/ZXKitUtil/ZXKitUtil-umbrella.h create mode 100644 example/Pods/Target Support Files/ZXKitUtil/ZXKitUtil.debug.xcconfig create mode 100644 example/Pods/Target Support Files/ZXKitUtil/ZXKitUtil.modulemap create mode 100644 example/Pods/Target Support Files/ZXKitUtil/ZXKitUtil.release.xcconfig create mode 100644 example/Pods/ZXKitCore/LICENSE create mode 100644 example/Pods/ZXKitCore/README.md create mode 100644 example/Pods/ZXKitCore/pod/ZXKit.swift create mode 100644 example/Pods/ZXKitCore/pod/ZXKitCollectionViewHeaderView.swift create mode 100644 example/Pods/ZXKitCore/pod/ZXKitFloatWindow.swift create mode 100644 example/Pods/ZXKitCore/pod/ZXKitPluginCollectionViewCell.swift create mode 100644 example/Pods/ZXKitCore/pod/ZXKitPluginProtocol.swift create mode 100644 example/Pods/ZXKitCore/pod/ZXKitWindow.swift create mode 100644 example/Pods/ZXKitCore/pod/localizable/en.lproj/Localizable.strings create mode 100644 example/Pods/ZXKitCore/pod/localizable/zh-Hans.lproj/Localizable.strings create mode 100644 example/Pods/ZXKitUtil/LICENSE create mode 100644 example/Pods/ZXKitUtil/README.md create mode 100644 example/Pods/ZXKitUtil/pod/ZXKitUtil+UI.swift create mode 100644 example/Pods/ZXKitUtil/pod/ZXKitUtil+file.swift create mode 100644 example/Pods/ZXKitUtil/pod/ZXKitUtil+media.swift create mode 100644 example/Pods/ZXKitUtil/pod/ZXKitUtil+permission.swift create mode 100644 example/Pods/ZXKitUtil/pod/ZXKitUtil+system.swift create mode 100644 example/Pods/ZXKitUtil/pod/ZXKitUtil.swift create mode 100644 example/Pods/ZXKitUtil/pod/extend/Data+zx.swift create mode 100644 example/Pods/ZXKitUtil/pod/extend/Date+zx.swift create mode 100644 example/Pods/ZXKitUtil/pod/extend/String+zx.swift create mode 100644 example/Pods/ZXKitUtil/pod/extend/UIColor+zx.swift create mode 100644 example/Pods/ZXKitUtil/pod/extend/UIImage+zx.swift create mode 100644 example/Pods/ZXKitUtil/pod/extend/UIView+zx.swift create mode 100644 example/Pods/ZXKitUtil/pod/extend/ZXKitNameSpace.swift create mode 100644 example/ZXUserDefaultManager.xcodeproj/project.pbxproj create mode 100644 example/ZXUserDefaultManager.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 example/ZXUserDefaultManager.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 example/ZXUserDefaultManager.xcodeproj/project.xcworkspace/xcuserdata/damon.xcuserdatad/UserInterfaceState.xcuserstate create mode 100644 example/ZXUserDefaultManager.xcodeproj/xcuserdata/damon.xcuserdatad/xcschemes/xcschememanagement.plist create mode 100644 example/ZXUserDefaultManager.xcworkspace/contents.xcworkspacedata create mode 100644 example/ZXUserDefaultManager.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 example/ZXUserDefaultManager.xcworkspace/xcuserdata/damon.xcuserdatad/UserInterfaceState.xcuserstate create mode 100644 example/ZXUserDefaultManager/AppDelegate.swift create mode 100644 example/ZXUserDefaultManager/Assets.xcassets/AccentColor.colorset/Contents.json create mode 100644 example/ZXUserDefaultManager/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 example/ZXUserDefaultManager/Assets.xcassets/Contents.json create mode 100644 example/ZXUserDefaultManager/Base.lproj/LaunchScreen.storyboard create mode 100644 example/ZXUserDefaultManager/Base.lproj/Main.storyboard create mode 100644 example/ZXUserDefaultManager/Info.plist create mode 100644 example/ZXUserDefaultManager/ViewController.swift create mode 100644 pod/ZXUserDefaultManager.swift create mode 100644 pod/assets/ZXUserDefaultManager.png create mode 100644 pod/assets/localizable/en.lproj/Localizable.strings create mode 100644 pod/assets/localizable/zh-Hans.lproj/Localizable.strings create mode 100644 pod/model/ZXDataCellModel.swift create mode 100644 pod/vc/ZXUserDefaultVC.swift create mode 100644 pod/view/ZXDataTableViewCell.swift create mode 100644 pod/zxkit/ZXUserDefaultManager+zxkit.swift diff --git a/example/Podfile b/example/Podfile new file mode 100644 index 0000000..7b38e45 --- /dev/null +++ b/example/Podfile @@ -0,0 +1,11 @@ +# Uncomment the next line to define a global platform for your project +# platform :ios, '9.0' + +target 'ZXUserDefaultManager' do + # Comment the next line if you don't want to use dynamic frameworks + use_frameworks! + + # Pods for ZXUserDefaultManager + pod 'SnapKit' + pod 'ZXKitCore/core' +end diff --git a/example/Podfile.lock b/example/Podfile.lock new file mode 100644 index 0000000..f135de2 --- /dev/null +++ b/example/Podfile.lock @@ -0,0 +1,27 @@ +PODS: + - SnapKit (5.0.1) + - ZXKitCore/core (0.1.5): + - SnapKit + - ZXKitUtil + - ZXKitUtil (3.0.1): + - ZXKitUtil/core (= 3.0.1) + - ZXKitUtil/core (3.0.1) + +DEPENDENCIES: + - SnapKit + - ZXKitCore/core + +SPEC REPOS: + trunk: + - SnapKit + - ZXKitCore + - ZXKitUtil + +SPEC CHECKSUMS: + SnapKit: 97b92857e3df3a0c71833cce143274bf6ef8e5eb + ZXKitCore: 51a3cdf16252e8e023c7bcc6d52b3d251faaed3c + ZXKitUtil: 7f8782b19f1696fe259d07f4048196be5f2ea6b7 + +PODFILE CHECKSUM: b8f329f9ee5281c1fcdd4ca446b9b4073483e104 + +COCOAPODS: 1.9.1 diff --git a/example/Pods/Manifest.lock b/example/Pods/Manifest.lock new file mode 100644 index 0000000..f135de2 --- /dev/null +++ b/example/Pods/Manifest.lock @@ -0,0 +1,27 @@ +PODS: + - SnapKit (5.0.1) + - ZXKitCore/core (0.1.5): + - SnapKit + - ZXKitUtil + - ZXKitUtil (3.0.1): + - ZXKitUtil/core (= 3.0.1) + - ZXKitUtil/core (3.0.1) + +DEPENDENCIES: + - SnapKit + - ZXKitCore/core + +SPEC REPOS: + trunk: + - SnapKit + - ZXKitCore + - ZXKitUtil + +SPEC CHECKSUMS: + SnapKit: 97b92857e3df3a0c71833cce143274bf6ef8e5eb + ZXKitCore: 51a3cdf16252e8e023c7bcc6d52b3d251faaed3c + ZXKitUtil: 7f8782b19f1696fe259d07f4048196be5f2ea6b7 + +PODFILE CHECKSUM: b8f329f9ee5281c1fcdd4ca446b9b4073483e104 + +COCOAPODS: 1.9.1 diff --git a/example/Pods/Pods.xcodeproj/project.pbxproj b/example/Pods/Pods.xcodeproj/project.pbxproj new file mode 100644 index 0000000..86af3bb --- /dev/null +++ b/example/Pods/Pods.xcodeproj/project.pbxproj @@ -0,0 +1,1372 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 50; + objects = { + +/* Begin PBXBuildFile section */ + 01C550A53C9E2047C83F8E85BBB558E6 /* ConstraintLayoutSupportDSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = 73354188EFCE9F9ABC3454FC55D5BB46 /* ConstraintLayoutSupportDSL.swift */; }; + 039EAFE7935113805F3FC21BF1B7C9D5 /* LayoutConstraint.swift in Sources */ = {isa = PBXBuildFile; fileRef = F59A1DD537259552A3630926647873BC /* LayoutConstraint.swift */; }; + 04543980C4A7CE442330B0F1BC4A9A54 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E792327924BEEC9F8E2BA4CD51318E41 /* Foundation.framework */; }; + 1312138B863B3A2BA2BEF8420F7A77A2 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E792327924BEEC9F8E2BA4CD51318E41 /* Foundation.framework */; }; + 14B9EA9DBCEFEBFAB44BF784FDE5402D /* ZXKitUtil+file.swift in Sources */ = {isa = PBXBuildFile; fileRef = DEA4D034D5F6E98D92EEF6A7F0B5C6FE /* ZXKitUtil+file.swift */; }; + 1956E392D500F3CD899D39A5F805736D /* Typealiases.swift in Sources */ = {isa = PBXBuildFile; fileRef = 67A75B72B5CF0289492BCCA9CAB6C68A /* Typealiases.swift */; }; + 1AF211ACFA5230A9422432050B5712E2 /* ZXKitUtil-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 252B693E132E271DC17D29651B41EE05 /* ZXKitUtil-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1AFB1E9136716C0B61D6C700FF1E60FD /* ConstraintLayoutGuide+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 40772A2F7E7251C3B283019D080D8A0C /* ConstraintLayoutGuide+Extensions.swift */; }; + 1E90D961B4EA217F6B05D917FD7FA5F7 /* SnapKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 753EF59389BB1B8D29B58C5DC3EDB22D /* SnapKit.framework */; }; + 21AB1101BBE4D28D74ED4EDF0D59025A /* ConstraintInsets.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8F5CC54089C9142109C096A54E138712 /* ConstraintInsets.swift */; }; + 232B2F922E972D9F43D2EE15ACECE734 /* ConstraintPriority.swift in Sources */ = {isa = PBXBuildFile; fileRef = 23BDA9C6F54C56258B5F86F21A4DC4C5 /* ConstraintPriority.swift */; }; + 2A1BBBC87AC2367BD14610A9D10D285E /* ConstraintAttributes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1C91C6595BEE44B00E79FD3DA80DB418 /* ConstraintAttributes.swift */; }; + 2C06F2E972444D359754D21AC46BFFE2 /* ConstraintInsetTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0449C20BA141D70FD0BDD256E096ADD8 /* ConstraintInsetTarget.swift */; }; + 33000BA87BB53B1B25D27B055BDAF69A /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E792327924BEEC9F8E2BA4CD51318E41 /* Foundation.framework */; }; + 357A328382314B3087207316C2DA7D13 /* UIColor+zx.swift in Sources */ = {isa = PBXBuildFile; fileRef = 27272A81F225F76DD6BD04BA3B7A3790 /* UIColor+zx.swift */; }; + 3651DFEFB2D3FE752F006F7512FD3B79 /* ZXKitUtil-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = D00D3E3E2EA89331E49B2DFAE98AB531 /* ZXKitUtil-dummy.m */; }; + 372BED9E35F5B2B2A988668E49F23A9A /* Pods-ZXUserDefaultManager-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 7A38108293946FA8219B2C534CEA4FD4 /* Pods-ZXUserDefaultManager-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 38991EB845EB572636F415BF5689B915 /* ZXKitCollectionViewHeaderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = CFC3E2D652691CB4AA5448D65A8E96DE /* ZXKitCollectionViewHeaderView.swift */; }; + 38C2F2CD61477AC0288B26DFDD20D6C2 /* ZXKitUtil.swift in Sources */ = {isa = PBXBuildFile; fileRef = F2158F2E48A86A14A7897525E10368B2 /* ZXKitUtil.swift */; }; + 3B27B0261D4A73C7C928DBDAE5DCE873 /* ZXKitPluginCollectionViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 450FFF2A08894252E1F1F3587E71A039 /* ZXKitPluginCollectionViewCell.swift */; }; + 3BFC243AB9BD579969F0D5756560BCAA /* Constraint.swift in Sources */ = {isa = PBXBuildFile; fileRef = 50AA4000BA76BB73FC49C7247FF375D0 /* Constraint.swift */; }; + 3E5285F4F36EAD77ECABBFB7F36BB1BB /* ConstraintView+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1219F10EAB3A36F4773EFD89AA72860F /* ConstraintView+Extensions.swift */; }; + 3FD4D5CFDA72F49865A619A767C6B4A9 /* Date+zx.swift in Sources */ = {isa = PBXBuildFile; fileRef = 38863F4DFDA5EF25DA6F329309C5F18F /* Date+zx.swift */; }; + 42F8910EB5378855142043C61476B910 /* ZXKit.swift in Sources */ = {isa = PBXBuildFile; fileRef = 584086170A2678DA3CF08FBC57F16EA6 /* ZXKit.swift */; }; + 4C7A676DAE95EEAC3787A75349F0862D /* SnapKit-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 15832CD907465A8F6CD8D5749874B979 /* SnapKit-dummy.m */; }; + 51CD5887014967E77E58F5A163996454 /* ConstraintMaker.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0D89B8244C10B763BAAF552A044E6774 /* ConstraintMaker.swift */; }; + 549FCCFD9CC45005B9B1CBA3A41492BB /* ZXKitFloatWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 23EF529530F867C9C9B84AFF2BE464DB /* ZXKitFloatWindow.swift */; }; + 57B1876F2BE4168E5BFDB63D8CC849A0 /* ConstraintLayoutSupport.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA3981AE88AC0ECB94D684474CB0F7DA /* ConstraintLayoutSupport.swift */; }; + 5854DF509E8A016B6235793D04083035 /* ConstraintConstantTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = D2CE81D81724CC05BEC222FEAA800BBE /* ConstraintConstantTarget.swift */; }; + 5A404D2F437CB0DA1BB51F7A11E21A6A /* ZXKitCore-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 34444DC77783E86C921718355F197A03 /* ZXKitCore-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5E2B9316621DF86F2288F5B6FAE7353E /* ZXKitUtil.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 11B3CF7AB85BD0C25899D32C3BD83AAE /* ZXKitUtil.framework */; }; + 602A743535C8535A30576FC0E24F970B /* Data+zx.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C83403C24C207705E43DAB70BA6E1CF /* Data+zx.swift */; }; + 6956EC0664E9D52A0396C468EFCA4E7D /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E792327924BEEC9F8E2BA4CD51318E41 /* Foundation.framework */; }; + 69CCBEEDFCA6D743D80026568D961919 /* ConstraintMakerExtendable.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBD13F58C2DC6695AFB10D81022E8070 /* ConstraintMakerExtendable.swift */; }; + 69E3A06BBDFDC7D06A9D4BDC4E895E73 /* ConstraintRelatableTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = E786978EDBE2F8E5787D84E1987697C9 /* ConstraintRelatableTarget.swift */; }; + 6C65EA91D874842596DB219BA9849C2D /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = B136659FA2976EC1AC4C8842DBB9E090 /* Localizable.strings */; }; + 6E0EB9E7FAAEDBB7A73ECF3095F69C4A /* UILayoutSupport+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6F8747D51C16E5D397C657D385BBC429 /* UILayoutSupport+Extensions.swift */; }; + 71DE9DC2FA583526AB4D1FD7F00C099C /* ConstraintDirectionalInsetTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C3ED04CCE8265580124579C6D4181E7 /* ConstraintDirectionalInsetTarget.swift */; }; + 754B22E781910077DDC4BFACB3FDAD2E /* ZXKitCore-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 456ACA398A6834F9B42C448D8627E420 /* ZXKitCore-dummy.m */; }; + 75E146C12D1287228A0B493E87CDE31F /* ConstraintMakerRelatable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 254BC37D2B7AC6DD53B0CA2C7EEC23E4 /* ConstraintMakerRelatable.swift */; }; + 77C9889055A3B32EA13A9616824DB0ED /* ConstraintLayoutGuideDSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3868D8C95718853DB8F428B100921C58 /* ConstraintLayoutGuideDSL.swift */; }; + 77D17A2D0BEB8D415C47005F8C6C927D /* ZXKitUtil+media.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51D3A6E414DFEEBB1336C18DE3F6D747 /* ZXKitUtil+media.swift */; }; + 78924D39E7097213219C82EB88AFCD45 /* ZXKitUtil+permission.swift in Sources */ = {isa = PBXBuildFile; fileRef = 87130BA77292B96A33E4AF94B47ACC7C /* ZXKitUtil+permission.swift */; }; + 7C1702076F3A31D8D2D45A4A9F09B266 /* ConstraintMakerEditable.swift in Sources */ = {isa = PBXBuildFile; fileRef = CB6DF2EFDDD284F23FB883B8D0957E41 /* ConstraintMakerEditable.swift */; }; + 7E083A9C70097EB3B66B438864F73521 /* UIImage+zx.swift in Sources */ = {isa = PBXBuildFile; fileRef = 57F6283B73DC37ECE3BFE2E32A4B8120 /* UIImage+zx.swift */; }; + 7E69F2E3E9F8FD57565A721563CCFB50 /* ZXKitUtil+system.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4EBBC0EFB679D9284ECFABDC1956A1CE /* ZXKitUtil+system.swift */; }; + 8277256ADEC3C4DCF79957D1CA681A9A /* ConstraintDSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = 057CB5908D4066E36FC3B0A4C396C587 /* ConstraintDSL.swift */; }; + 8705BBF0D428BF0AE1B554A377ECC540 /* ConstraintOffsetTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = A71E9B44D63637BFCC6C5906205A966E /* ConstraintOffsetTarget.swift */; }; + 98DBC664CD8B4F17ABF3D923980D6F86 /* ZXKitPluginProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 897EBF6D516849B56BD3E7CE77160565 /* ZXKitPluginProtocol.swift */; }; + 99B5296A5EDECE0557B9DA53D9E19CA1 /* ConstraintItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2B73C68142401F7C06B36395E12E5B18 /* ConstraintItem.swift */; }; + 9B09968922C73D50040C6EEF57890D6E /* ConstraintConfig.swift in Sources */ = {isa = PBXBuildFile; fileRef = CAA9A9F36F1EDD77669BE54055F23D62 /* ConstraintConfig.swift */; }; + 9F9E270CA2E3AF12AF984DBBFA6032D6 /* ZXKitCore.bundle in Resources */ = {isa = PBXBuildFile; fileRef = B462C8B2CB78AE609523A787505C2EB4 /* ZXKitCore.bundle */; }; + A270CD9EC3C541FE86E65AEDCEF500CF /* ConstraintLayoutGuide.swift in Sources */ = {isa = PBXBuildFile; fileRef = D45AB58154A983904FB599DBA18E2E74 /* ConstraintLayoutGuide.swift */; }; + A66ED57B365A35434C5BAF4B990819B7 /* SnapKit-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DE550BDE076C9C889E228887E64AF93 /* SnapKit-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + AC35C9341C4BB156BB26FDD237EE3721 /* ConstraintDirectionalInsets.swift in Sources */ = {isa = PBXBuildFile; fileRef = 62B43BC53493CC57B282843A3D94FA3D /* ConstraintDirectionalInsets.swift */; }; + AE61CD20C86CD7A48A92CE96068220B6 /* String+zx.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2CF3A879A77630A1B029F15563E45B3C /* String+zx.swift */; }; + B562BD5D60168494C5DC313C94668F07 /* Pods-ZXUserDefaultManager-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = B3239E3BC5E1E67D8CA34F38D342CE6B /* Pods-ZXUserDefaultManager-dummy.m */; }; + B599696DFEF6B2A5ECF528F4E5BB1846 /* ConstraintDescription.swift in Sources */ = {isa = PBXBuildFile; fileRef = AFDD2CD98A5168B7F864BDAD312D94AE /* ConstraintDescription.swift */; }; + B780B272106411CBE258BB60FFC45410 /* Debugging.swift in Sources */ = {isa = PBXBuildFile; fileRef = E57CCAFFAC30C649FC153B2090CA60F0 /* Debugging.swift */; }; + B8524CE210825149C17B17F0F342B7C7 /* Localizable.strings in Sources */ = {isa = PBXBuildFile; fileRef = F0A161F77F86166E187BB709900E9A8C /* Localizable.strings */; }; + BECA67DFB5E0984DFAEFCB775C31972E /* ConstraintView.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE31F2F89ADEE6F1A8394F28B252FCEF /* ConstraintView.swift */; }; + C412F27D75AFC0DF0F0289DBB270931C /* ConstraintMakerFinalizable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 73AF4CEA18054AA0A60AC6D696AB9066 /* ConstraintMakerFinalizable.swift */; }; + C6CC3F80D008B9B389CF398BB5D534EA /* Localizable.strings in Sources */ = {isa = PBXBuildFile; fileRef = D98A8B0009868F2A73C6B09283B50C62 /* Localizable.strings */; }; + CCA873A718E9BF3A2F9C9ABBC2056A1B /* UIView+zx.swift in Sources */ = {isa = PBXBuildFile; fileRef = 64A0FC2B6E454F854A3C2990A505343A /* UIView+zx.swift */; }; + CE62FEABA57B2B53EABF8C7DCCC6B2C4 /* ConstraintRelation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 65513158E98C9A567AFD553A96389162 /* ConstraintRelation.swift */; }; + D4697DC40F3B059E4A0867838CA1814E /* ConstraintMultiplierTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = 38DEC2D750D9049CA81034CAAF1A2177 /* ConstraintMultiplierTarget.swift */; }; + D659139092325A3AD6DA169962987861 /* ZXKitNameSpace.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3B00BF77C1897629B04F405BFF16AF7B /* ZXKitNameSpace.swift */; }; + DF248DEE1775D76F7EFB4335E9FAAAA9 /* ZXKitUtil+UI.swift in Sources */ = {isa = PBXBuildFile; fileRef = F1928300B077AE96284536C4940CE9BE /* ZXKitUtil+UI.swift */; }; + E8F2429683B3015CBD39CE883770BCA7 /* ConstraintPriorityTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80CE97135D611ABAFCC8BD3327867E2C /* ConstraintPriorityTarget.swift */; }; + E9A970BC24EA15832F248EA020072746 /* LayoutConstraintItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = C90269EF7F59D389D0D85F0652EBDD4C /* LayoutConstraintItem.swift */; }; + EB1726F5E0D0EEBA20E4528B1E37A8FA /* ConstraintViewDSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = 063A5AAB41AAC85A51210F95F2448B7E /* ConstraintViewDSL.swift */; }; + EE909C7C786140109051BC9562EEC7C8 /* ConstraintMakerPriortizable.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA965EFAD7AD9B80A645A9B18C7368BB /* ConstraintMakerPriortizable.swift */; }; + F1FC48766446DA1450DCD0FAA9742499 /* ZXKitWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8E92AC87E18D7260783C317E8003D136 /* ZXKitWindow.swift */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 6468500FC67E8B1755A17DDCEE4F7D21 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 6535447A49D8AE5353316E9D3CA44597; + remoteInfo = "ZXKitCore-ZXKitCore"; + }; + 6576EA00636A777F002BE41B8945606F /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 4B09DDD2A3083E311C984F301582897A; + remoteInfo = ZXKitUtil; + }; + A5516DE4CB2B1F7079B13EC16A1530F0 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 19622742EBA51E823D6DAE3F8CDBFAD4; + remoteInfo = SnapKit; + }; + D3083A53D63D48D2D6329519F42259D0 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 23CC5B423FA68CF6FCACD593F1FEDCF6; + remoteInfo = ZXKitCore; + }; + D626E72845514DFC288832206B21289A /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 19622742EBA51E823D6DAE3F8CDBFAD4; + remoteInfo = SnapKit; + }; + FA9E0EA0AF7166B3E12D5A174921707C /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 4B09DDD2A3083E311C984F301582897A; + remoteInfo = ZXKitUtil; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXFileReference section */ + 0449C20BA141D70FD0BDD256E096ADD8 /* ConstraintInsetTarget.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintInsetTarget.swift; path = Source/ConstraintInsetTarget.swift; sourceTree = ""; }; + 057CB5908D4066E36FC3B0A4C396C587 /* ConstraintDSL.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintDSL.swift; path = Source/ConstraintDSL.swift; sourceTree = ""; }; + 063A5AAB41AAC85A51210F95F2448B7E /* ConstraintViewDSL.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintViewDSL.swift; path = Source/ConstraintViewDSL.swift; sourceTree = ""; }; + 0D89B8244C10B763BAAF552A044E6774 /* ConstraintMaker.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintMaker.swift; path = Source/ConstraintMaker.swift; sourceTree = ""; }; + 1169B8A7C454B0FED102286AF5B91C63 /* ZXKitCore.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = ZXKitCore.debug.xcconfig; sourceTree = ""; }; + 11B3CF7AB85BD0C25899D32C3BD83AAE /* ZXKitUtil.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = ZXKitUtil.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 1219F10EAB3A36F4773EFD89AA72860F /* ConstraintView+Extensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "ConstraintView+Extensions.swift"; path = "Source/ConstraintView+Extensions.swift"; sourceTree = ""; }; + 14D59D3FCBDC49F1676270F8CBA464A6 /* ZXKitUtil-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ZXKitUtil-Info.plist"; sourceTree = ""; }; + 15832CD907465A8F6CD8D5749874B979 /* SnapKit-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SnapKit-dummy.m"; sourceTree = ""; }; + 19B4CCFF6F020B12DD03BF84C2EC2D54 /* ZXKitCore.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = ZXKitCore.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 1A209ABF4053021774AD52B71097CAD1 /* ZXKitCore-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ZXKitCore-Info.plist"; sourceTree = ""; }; + 1C91C6595BEE44B00E79FD3DA80DB418 /* ConstraintAttributes.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintAttributes.swift; path = Source/ConstraintAttributes.swift; sourceTree = ""; }; + 1F04346321D2DF0777E25812012B29C1 /* Pods_ZXUserDefaultManager.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_ZXUserDefaultManager.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 23BDA9C6F54C56258B5F86F21A4DC4C5 /* ConstraintPriority.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintPriority.swift; path = Source/ConstraintPriority.swift; sourceTree = ""; }; + 23EF529530F867C9C9B84AFF2BE464DB /* ZXKitFloatWindow.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ZXKitFloatWindow.swift; path = pod/ZXKitFloatWindow.swift; sourceTree = ""; }; + 252B693E132E271DC17D29651B41EE05 /* ZXKitUtil-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "ZXKitUtil-umbrella.h"; sourceTree = ""; }; + 254BC37D2B7AC6DD53B0CA2C7EEC23E4 /* ConstraintMakerRelatable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintMakerRelatable.swift; path = Source/ConstraintMakerRelatable.swift; sourceTree = ""; }; + 27272A81F225F76DD6BD04BA3B7A3790 /* UIColor+zx.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIColor+zx.swift"; path = "pod/extend/UIColor+zx.swift"; sourceTree = ""; }; + 2B73C68142401F7C06B36395E12E5B18 /* ConstraintItem.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintItem.swift; path = Source/ConstraintItem.swift; sourceTree = ""; }; + 2CF3A879A77630A1B029F15563E45B3C /* String+zx.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "String+zx.swift"; path = "pod/extend/String+zx.swift"; sourceTree = ""; }; + 2DD86A35A440A3D03F4341584B93EF64 /* ZXKitUtil.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = ZXKitUtil.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 3237A5F8896E21B05E94F8BCB5BF5E4B /* Pods-ZXUserDefaultManager-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-ZXUserDefaultManager-acknowledgements.plist"; sourceTree = ""; }; + 34444DC77783E86C921718355F197A03 /* ZXKitCore-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "ZXKitCore-umbrella.h"; sourceTree = ""; }; + 3577283D42AED0BC9F5594739C18399D /* SnapKit-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "SnapKit-Info.plist"; sourceTree = ""; }; + 3868D8C95718853DB8F428B100921C58 /* ConstraintLayoutGuideDSL.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintLayoutGuideDSL.swift; path = Source/ConstraintLayoutGuideDSL.swift; sourceTree = ""; }; + 38863F4DFDA5EF25DA6F329309C5F18F /* Date+zx.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Date+zx.swift"; path = "pod/extend/Date+zx.swift"; sourceTree = ""; }; + 38DEC2D750D9049CA81034CAAF1A2177 /* ConstraintMultiplierTarget.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintMultiplierTarget.swift; path = Source/ConstraintMultiplierTarget.swift; sourceTree = ""; }; + 3B00BF77C1897629B04F405BFF16AF7B /* ZXKitNameSpace.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ZXKitNameSpace.swift; path = pod/extend/ZXKitNameSpace.swift; sourceTree = ""; }; + 3DE550BDE076C9C889E228887E64AF93 /* SnapKit-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SnapKit-umbrella.h"; sourceTree = ""; }; + 40772A2F7E7251C3B283019D080D8A0C /* ConstraintLayoutGuide+Extensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "ConstraintLayoutGuide+Extensions.swift"; path = "Source/ConstraintLayoutGuide+Extensions.swift"; sourceTree = ""; }; + 425971344E64A0BD506733CFD485A640 /* SnapKit-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SnapKit-prefix.pch"; sourceTree = ""; }; + 450FFF2A08894252E1F1F3587E71A039 /* ZXKitPluginCollectionViewCell.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ZXKitPluginCollectionViewCell.swift; path = pod/ZXKitPluginCollectionViewCell.swift; sourceTree = ""; }; + 456ACA398A6834F9B42C448D8627E420 /* ZXKitCore-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "ZXKitCore-dummy.m"; sourceTree = ""; }; + 4CFF2A0E01EC50DA45D6BCD61900BB8A /* ZXKitUtil.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = ZXKitUtil.debug.xcconfig; sourceTree = ""; }; + 4EBBC0EFB679D9284ECFABDC1956A1CE /* ZXKitUtil+system.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "ZXKitUtil+system.swift"; path = "pod/ZXKitUtil+system.swift"; sourceTree = ""; }; + 50AA4000BA76BB73FC49C7247FF375D0 /* Constraint.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Constraint.swift; path = Source/Constraint.swift; sourceTree = ""; }; + 51D3A6E414DFEEBB1336C18DE3F6D747 /* ZXKitUtil+media.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "ZXKitUtil+media.swift"; path = "pod/ZXKitUtil+media.swift"; sourceTree = ""; }; + 57F6283B73DC37ECE3BFE2E32A4B8120 /* UIImage+zx.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIImage+zx.swift"; path = "pod/extend/UIImage+zx.swift"; sourceTree = ""; }; + 584086170A2678DA3CF08FBC57F16EA6 /* ZXKit.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ZXKit.swift; path = pod/ZXKit.swift; sourceTree = ""; }; + 5C3ED04CCE8265580124579C6D4181E7 /* ConstraintDirectionalInsetTarget.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintDirectionalInsetTarget.swift; path = Source/ConstraintDirectionalInsetTarget.swift; sourceTree = ""; }; + 5DE689AF33EC11C66A73F0F7F64C4431 /* SnapKit.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = SnapKit.modulemap; sourceTree = ""; }; + 5F70106848CE7B831C85AEB0641261A3 /* ZXKitUtil-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "ZXKitUtil-prefix.pch"; sourceTree = ""; }; + 62B43BC53493CC57B282843A3D94FA3D /* ConstraintDirectionalInsets.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintDirectionalInsets.swift; path = Source/ConstraintDirectionalInsets.swift; sourceTree = ""; }; + 646E40308FD97CEA384E2045A178900C /* ZXKitUtil.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = ZXKitUtil.modulemap; sourceTree = ""; }; + 64A0FC2B6E454F854A3C2990A505343A /* UIView+zx.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIView+zx.swift"; path = "pod/extend/UIView+zx.swift"; sourceTree = ""; }; + 65513158E98C9A567AFD553A96389162 /* ConstraintRelation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintRelation.swift; path = Source/ConstraintRelation.swift; sourceTree = ""; }; + 67A75B72B5CF0289492BCCA9CAB6C68A /* Typealiases.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Typealiases.swift; path = Source/Typealiases.swift; sourceTree = ""; }; + 681E621F79F610364C72CB92DD4DBFED /* Pods-ZXUserDefaultManager.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-ZXUserDefaultManager.release.xcconfig"; sourceTree = ""; }; + 6B97C28D1FB0C441D3F1F3B4E0B88189 /* ZXKitUtil.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = ZXKitUtil.release.xcconfig; sourceTree = ""; }; + 6C83403C24C207705E43DAB70BA6E1CF /* Data+zx.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Data+zx.swift"; path = "pod/extend/Data+zx.swift"; sourceTree = ""; }; + 6F8747D51C16E5D397C657D385BBC429 /* UILayoutSupport+Extensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UILayoutSupport+Extensions.swift"; path = "Source/UILayoutSupport+Extensions.swift"; sourceTree = ""; }; + 6F9844C741B865915D6F6D08928CEB71 /* ZXKitCore.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = ZXKitCore.release.xcconfig; sourceTree = ""; }; + 73354188EFCE9F9ABC3454FC55D5BB46 /* ConstraintLayoutSupportDSL.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintLayoutSupportDSL.swift; path = Source/ConstraintLayoutSupportDSL.swift; sourceTree = ""; }; + 73AF4CEA18054AA0A60AC6D696AB9066 /* ConstraintMakerFinalizable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintMakerFinalizable.swift; path = Source/ConstraintMakerFinalizable.swift; sourceTree = ""; }; + 74F8DB0FAEA58F4DAF9823CD8831B9BE /* Pods-ZXUserDefaultManager.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-ZXUserDefaultManager.modulemap"; sourceTree = ""; }; + 753EF59389BB1B8D29B58C5DC3EDB22D /* SnapKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SnapKit.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 7A38108293946FA8219B2C534CEA4FD4 /* Pods-ZXUserDefaultManager-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-ZXUserDefaultManager-umbrella.h"; sourceTree = ""; }; + 80CE97135D611ABAFCC8BD3327867E2C /* ConstraintPriorityTarget.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintPriorityTarget.swift; path = Source/ConstraintPriorityTarget.swift; sourceTree = ""; }; + 8691FBD297D1B36956D89EC30EFEC9B1 /* ResourceBundle-ZXKitCore-ZXKitCore-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-ZXKitCore-ZXKitCore-Info.plist"; sourceTree = ""; }; + 87130BA77292B96A33E4AF94B47ACC7C /* ZXKitUtil+permission.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "ZXKitUtil+permission.swift"; path = "pod/ZXKitUtil+permission.swift"; sourceTree = ""; }; + 897EBF6D516849B56BD3E7CE77160565 /* ZXKitPluginProtocol.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ZXKitPluginProtocol.swift; path = pod/ZXKitPluginProtocol.swift; sourceTree = ""; }; + 89E88406AF35FB61B2151956825E5217 /* ZXKitCore.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = ZXKitCore.modulemap; sourceTree = ""; }; + 8E92AC87E18D7260783C317E8003D136 /* ZXKitWindow.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ZXKitWindow.swift; path = pod/ZXKitWindow.swift; sourceTree = ""; }; + 8F5CC54089C9142109C096A54E138712 /* ConstraintInsets.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintInsets.swift; path = Source/ConstraintInsets.swift; sourceTree = ""; }; + 8FCD2675B89B6F52EE2AE6707BEC09EC /* SnapKit.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SnapKit.release.xcconfig; sourceTree = ""; }; + 979486118B3E90C08386079D57962701 /* SnapKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SnapKit.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; + 9E2C0A0665E52DD33B1F298634F279ED /* Pods-ZXUserDefaultManager-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-ZXUserDefaultManager-acknowledgements.markdown"; sourceTree = ""; }; + 9ED498B0F3DB2B069E95E50B8B872B5E /* SnapKit.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SnapKit.debug.xcconfig; sourceTree = ""; }; + A18F1896C1271D2A674732232ED8053C /* Pods-ZXUserDefaultManager.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-ZXUserDefaultManager.debug.xcconfig"; sourceTree = ""; }; + A71E9B44D63637BFCC6C5906205A966E /* ConstraintOffsetTarget.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintOffsetTarget.swift; path = Source/ConstraintOffsetTarget.swift; sourceTree = ""; }; + A92176EC71727F60E62BA5CDDE0495EF /* Pods-ZXUserDefaultManager-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-ZXUserDefaultManager-frameworks.sh"; sourceTree = ""; }; + AE31F2F89ADEE6F1A8394F28B252FCEF /* ConstraintView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintView.swift; path = Source/ConstraintView.swift; sourceTree = ""; }; + AFDD2CD98A5168B7F864BDAD312D94AE /* ConstraintDescription.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintDescription.swift; path = Source/ConstraintDescription.swift; sourceTree = ""; }; + B3239E3BC5E1E67D8CA34F38D342CE6B /* Pods-ZXUserDefaultManager-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-ZXUserDefaultManager-dummy.m"; sourceTree = ""; }; + B462C8B2CB78AE609523A787505C2EB4 /* ZXKitCore.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = ZXKitCore.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; + BBD13F58C2DC6695AFB10D81022E8070 /* ConstraintMakerExtendable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintMakerExtendable.swift; path = Source/ConstraintMakerExtendable.swift; sourceTree = ""; }; + C2F51D543DFF68021C788944CB8D2050 /* ZXKitCore-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "ZXKitCore-prefix.pch"; sourceTree = ""; }; + C90269EF7F59D389D0D85F0652EBDD4C /* LayoutConstraintItem.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LayoutConstraintItem.swift; path = Source/LayoutConstraintItem.swift; sourceTree = ""; }; + CAA9A9F36F1EDD77669BE54055F23D62 /* ConstraintConfig.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintConfig.swift; path = Source/ConstraintConfig.swift; sourceTree = ""; }; + CB6DF2EFDDD284F23FB883B8D0957E41 /* ConstraintMakerEditable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintMakerEditable.swift; path = Source/ConstraintMakerEditable.swift; sourceTree = ""; }; + CFC3E2D652691CB4AA5448D65A8E96DE /* ZXKitCollectionViewHeaderView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ZXKitCollectionViewHeaderView.swift; path = pod/ZXKitCollectionViewHeaderView.swift; sourceTree = ""; }; + D00D3E3E2EA89331E49B2DFAE98AB531 /* ZXKitUtil-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "ZXKitUtil-dummy.m"; sourceTree = ""; }; + D2CE81D81724CC05BEC222FEAA800BBE /* ConstraintConstantTarget.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintConstantTarget.swift; path = Source/ConstraintConstantTarget.swift; sourceTree = ""; }; + D45AB58154A983904FB599DBA18E2E74 /* ConstraintLayoutGuide.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintLayoutGuide.swift; path = Source/ConstraintLayoutGuide.swift; sourceTree = ""; }; + D98A8B0009868F2A73C6B09283B50C62 /* Localizable.strings */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.strings; name = Localizable.strings; path = "zh-Hans.lproj/Localizable.strings"; sourceTree = ""; }; + D9E6A4BB0873BA58BADD23B8EEFF5698 /* Pods-ZXUserDefaultManager-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-ZXUserDefaultManager-Info.plist"; sourceTree = ""; }; + DA3981AE88AC0ECB94D684474CB0F7DA /* ConstraintLayoutSupport.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintLayoutSupport.swift; path = Source/ConstraintLayoutSupport.swift; sourceTree = ""; }; + DA965EFAD7AD9B80A645A9B18C7368BB /* ConstraintMakerPriortizable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintMakerPriortizable.swift; path = Source/ConstraintMakerPriortizable.swift; sourceTree = ""; }; + DEA4D034D5F6E98D92EEF6A7F0B5C6FE /* ZXKitUtil+file.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "ZXKitUtil+file.swift"; path = "pod/ZXKitUtil+file.swift"; sourceTree = ""; }; + E57CCAFFAC30C649FC153B2090CA60F0 /* Debugging.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Debugging.swift; path = Source/Debugging.swift; sourceTree = ""; }; + E786978EDBE2F8E5787D84E1987697C9 /* ConstraintRelatableTarget.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintRelatableTarget.swift; path = Source/ConstraintRelatableTarget.swift; sourceTree = ""; }; + E792327924BEEC9F8E2BA4CD51318E41 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.2.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; + F0A161F77F86166E187BB709900E9A8C /* Localizable.strings */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.strings; name = Localizable.strings; path = en.lproj/Localizable.strings; sourceTree = ""; }; + F1928300B077AE96284536C4940CE9BE /* ZXKitUtil+UI.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "ZXKitUtil+UI.swift"; path = "pod/ZXKitUtil+UI.swift"; sourceTree = ""; }; + F2158F2E48A86A14A7897525E10368B2 /* ZXKitUtil.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ZXKitUtil.swift; path = pod/ZXKitUtil.swift; sourceTree = ""; }; + F59A1DD537259552A3630926647873BC /* LayoutConstraint.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LayoutConstraint.swift; path = Source/LayoutConstraint.swift; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 106CAA4BAA362D4A7882A3E5E3B8E94B /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 6956EC0664E9D52A0396C468EFCA4E7D /* Foundation.framework in Frameworks */, + 1E90D961B4EA217F6B05D917FD7FA5F7 /* SnapKit.framework in Frameworks */, + 5E2B9316621DF86F2288F5B6FAE7353E /* ZXKitUtil.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 3C8B1704CC97EF12D3409771318C6433 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 04543980C4A7CE442330B0F1BC4A9A54 /* Foundation.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 660DB059165E773BE44A7D9461D2A0E4 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 33000BA87BB53B1B25D27B055BDAF69A /* Foundation.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + C457564519306F5D27DA1C9E9D8F4DC2 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 1312138B863B3A2BA2BEF8420F7A77A2 /* Foundation.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + D70B2F2D01A1873E3BEA894560EA855C /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 021E236A20EB8F0AB65EF24FE57595C4 /* core */ = { + isa = PBXGroup; + children = ( + 6C83403C24C207705E43DAB70BA6E1CF /* Data+zx.swift */, + 38863F4DFDA5EF25DA6F329309C5F18F /* Date+zx.swift */, + 2CF3A879A77630A1B029F15563E45B3C /* String+zx.swift */, + 27272A81F225F76DD6BD04BA3B7A3790 /* UIColor+zx.swift */, + 57F6283B73DC37ECE3BFE2E32A4B8120 /* UIImage+zx.swift */, + 64A0FC2B6E454F854A3C2990A505343A /* UIView+zx.swift */, + 3B00BF77C1897629B04F405BFF16AF7B /* ZXKitNameSpace.swift */, + F2158F2E48A86A14A7897525E10368B2 /* ZXKitUtil.swift */, + DEA4D034D5F6E98D92EEF6A7F0B5C6FE /* ZXKitUtil+file.swift */, + 51D3A6E414DFEEBB1336C18DE3F6D747 /* ZXKitUtil+media.swift */, + 87130BA77292B96A33E4AF94B47ACC7C /* ZXKitUtil+permission.swift */, + 4EBBC0EFB679D9284ECFABDC1956A1CE /* ZXKitUtil+system.swift */, + F1928300B077AE96284536C4940CE9BE /* ZXKitUtil+UI.swift */, + ); + name = core; + sourceTree = ""; + }; + 1F6AC9C036CE0E418484E5F3F171478B /* iOS */ = { + isa = PBXGroup; + children = ( + E792327924BEEC9F8E2BA4CD51318E41 /* Foundation.framework */, + ); + name = iOS; + sourceTree = ""; + }; + 4351105C80FB5DF0188F66AF40C680DC /* Frameworks */ = { + isa = PBXGroup; + children = ( + 753EF59389BB1B8D29B58C5DC3EDB22D /* SnapKit.framework */, + 11B3CF7AB85BD0C25899D32C3BD83AAE /* ZXKitUtil.framework */, + 1F6AC9C036CE0E418484E5F3F171478B /* iOS */, + ); + name = Frameworks; + sourceTree = ""; + }; + 6C3CC76799921054CFAD45CD4B4AF748 /* Support Files */ = { + isa = PBXGroup; + children = ( + 646E40308FD97CEA384E2045A178900C /* ZXKitUtil.modulemap */, + D00D3E3E2EA89331E49B2DFAE98AB531 /* ZXKitUtil-dummy.m */, + 14D59D3FCBDC49F1676270F8CBA464A6 /* ZXKitUtil-Info.plist */, + 5F70106848CE7B831C85AEB0641261A3 /* ZXKitUtil-prefix.pch */, + 252B693E132E271DC17D29651B41EE05 /* ZXKitUtil-umbrella.h */, + 4CFF2A0E01EC50DA45D6BCD61900BB8A /* ZXKitUtil.debug.xcconfig */, + 6B97C28D1FB0C441D3F1F3B4E0B88189 /* ZXKitUtil.release.xcconfig */, + ); + name = "Support Files"; + path = "../Target Support Files/ZXKitUtil"; + sourceTree = ""; + }; + 6D3C5446B5E13BFAE962066238F8DE0D /* Pods-ZXUserDefaultManager */ = { + isa = PBXGroup; + children = ( + 74F8DB0FAEA58F4DAF9823CD8831B9BE /* Pods-ZXUserDefaultManager.modulemap */, + 9E2C0A0665E52DD33B1F298634F279ED /* Pods-ZXUserDefaultManager-acknowledgements.markdown */, + 3237A5F8896E21B05E94F8BCB5BF5E4B /* Pods-ZXUserDefaultManager-acknowledgements.plist */, + B3239E3BC5E1E67D8CA34F38D342CE6B /* Pods-ZXUserDefaultManager-dummy.m */, + A92176EC71727F60E62BA5CDDE0495EF /* Pods-ZXUserDefaultManager-frameworks.sh */, + D9E6A4BB0873BA58BADD23B8EEFF5698 /* Pods-ZXUserDefaultManager-Info.plist */, + 7A38108293946FA8219B2C534CEA4FD4 /* Pods-ZXUserDefaultManager-umbrella.h */, + A18F1896C1271D2A674732232ED8053C /* Pods-ZXUserDefaultManager.debug.xcconfig */, + 681E621F79F610364C72CB92DD4DBFED /* Pods-ZXUserDefaultManager.release.xcconfig */, + ); + name = "Pods-ZXUserDefaultManager"; + path = "Target Support Files/Pods-ZXUserDefaultManager"; + sourceTree = ""; + }; + 6D52025CDA2DA9592C1D23E04DAB0BAE /* Targets Support Files */ = { + isa = PBXGroup; + children = ( + 6D3C5446B5E13BFAE962066238F8DE0D /* Pods-ZXUserDefaultManager */, + ); + name = "Targets Support Files"; + sourceTree = ""; + }; + 7F229BB46A773229E8AA8A7A3D21A4E4 /* Support Files */ = { + isa = PBXGroup; + children = ( + 8691FBD297D1B36956D89EC30EFEC9B1 /* ResourceBundle-ZXKitCore-ZXKitCore-Info.plist */, + 89E88406AF35FB61B2151956825E5217 /* ZXKitCore.modulemap */, + 456ACA398A6834F9B42C448D8627E420 /* ZXKitCore-dummy.m */, + 1A209ABF4053021774AD52B71097CAD1 /* ZXKitCore-Info.plist */, + C2F51D543DFF68021C788944CB8D2050 /* ZXKitCore-prefix.pch */, + 34444DC77783E86C921718355F197A03 /* ZXKitCore-umbrella.h */, + 1169B8A7C454B0FED102286AF5B91C63 /* ZXKitCore.debug.xcconfig */, + 6F9844C741B865915D6F6D08928CEB71 /* ZXKitCore.release.xcconfig */, + ); + name = "Support Files"; + path = "../Target Support Files/ZXKitCore"; + sourceTree = ""; + }; + 873FDECF52618903CAB6C896C579CD3F /* ZXKitUtil */ = { + isa = PBXGroup; + children = ( + 021E236A20EB8F0AB65EF24FE57595C4 /* core */, + 6C3CC76799921054CFAD45CD4B4AF748 /* Support Files */, + ); + path = ZXKitUtil; + sourceTree = ""; + }; + 9D3411CCC017C4E0546B78ED3B39A4BB /* Products */ = { + isa = PBXGroup; + children = ( + 1F04346321D2DF0777E25812012B29C1 /* Pods_ZXUserDefaultManager.framework */, + 979486118B3E90C08386079D57962701 /* SnapKit.framework */, + B462C8B2CB78AE609523A787505C2EB4 /* ZXKitCore.bundle */, + 19B4CCFF6F020B12DD03BF84C2EC2D54 /* ZXKitCore.framework */, + 2DD86A35A440A3D03F4341584B93EF64 /* ZXKitUtil.framework */, + ); + name = Products; + sourceTree = ""; + }; + AA11AEEF5105BD553142FCB73B309464 /* Pods */ = { + isa = PBXGroup; + children = ( + DDE12AA0230A30F9BDEF186507BD27D5 /* SnapKit */, + C9CF436FB583E1739FCED1B4BE6FECF2 /* ZXKitCore */, + 873FDECF52618903CAB6C896C579CD3F /* ZXKitUtil */, + ); + name = Pods; + sourceTree = ""; + }; + C9CF436FB583E1739FCED1B4BE6FECF2 /* ZXKitCore */ = { + isa = PBXGroup; + children = ( + CE9FDF07CB7A5B2D1952B1E72F8AB178 /* core */, + 7F229BB46A773229E8AA8A7A3D21A4E4 /* Support Files */, + ); + path = ZXKitCore; + sourceTree = ""; + }; + CBB6441BF52A9E7C832E0427566F892F /* Resources */ = { + isa = PBXGroup; + children = ( + ); + name = Resources; + sourceTree = ""; + }; + CE9FDF07CB7A5B2D1952B1E72F8AB178 /* core */ = { + isa = PBXGroup; + children = ( + B136659FA2976EC1AC4C8842DBB9E090 /* Localizable.strings */, + 584086170A2678DA3CF08FBC57F16EA6 /* ZXKit.swift */, + CFC3E2D652691CB4AA5448D65A8E96DE /* ZXKitCollectionViewHeaderView.swift */, + 23EF529530F867C9C9B84AFF2BE464DB /* ZXKitFloatWindow.swift */, + 450FFF2A08894252E1F1F3587E71A039 /* ZXKitPluginCollectionViewCell.swift */, + 897EBF6D516849B56BD3E7CE77160565 /* ZXKitPluginProtocol.swift */, + 8E92AC87E18D7260783C317E8003D136 /* ZXKitWindow.swift */, + CBB6441BF52A9E7C832E0427566F892F /* Resources */, + ); + name = core; + sourceTree = ""; + }; + CF1408CF629C7361332E53B88F7BD30C = { + isa = PBXGroup; + children = ( + 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */, + 4351105C80FB5DF0188F66AF40C680DC /* Frameworks */, + AA11AEEF5105BD553142FCB73B309464 /* Pods */, + 9D3411CCC017C4E0546B78ED3B39A4BB /* Products */, + 6D52025CDA2DA9592C1D23E04DAB0BAE /* Targets Support Files */, + ); + sourceTree = ""; + }; + DDE12AA0230A30F9BDEF186507BD27D5 /* SnapKit */ = { + isa = PBXGroup; + children = ( + 50AA4000BA76BB73FC49C7247FF375D0 /* Constraint.swift */, + 1C91C6595BEE44B00E79FD3DA80DB418 /* ConstraintAttributes.swift */, + CAA9A9F36F1EDD77669BE54055F23D62 /* ConstraintConfig.swift */, + D2CE81D81724CC05BEC222FEAA800BBE /* ConstraintConstantTarget.swift */, + AFDD2CD98A5168B7F864BDAD312D94AE /* ConstraintDescription.swift */, + 62B43BC53493CC57B282843A3D94FA3D /* ConstraintDirectionalInsets.swift */, + 5C3ED04CCE8265580124579C6D4181E7 /* ConstraintDirectionalInsetTarget.swift */, + 057CB5908D4066E36FC3B0A4C396C587 /* ConstraintDSL.swift */, + 8F5CC54089C9142109C096A54E138712 /* ConstraintInsets.swift */, + 0449C20BA141D70FD0BDD256E096ADD8 /* ConstraintInsetTarget.swift */, + 2B73C68142401F7C06B36395E12E5B18 /* ConstraintItem.swift */, + D45AB58154A983904FB599DBA18E2E74 /* ConstraintLayoutGuide.swift */, + 40772A2F7E7251C3B283019D080D8A0C /* ConstraintLayoutGuide+Extensions.swift */, + 3868D8C95718853DB8F428B100921C58 /* ConstraintLayoutGuideDSL.swift */, + DA3981AE88AC0ECB94D684474CB0F7DA /* ConstraintLayoutSupport.swift */, + 73354188EFCE9F9ABC3454FC55D5BB46 /* ConstraintLayoutSupportDSL.swift */, + 0D89B8244C10B763BAAF552A044E6774 /* ConstraintMaker.swift */, + CB6DF2EFDDD284F23FB883B8D0957E41 /* ConstraintMakerEditable.swift */, + BBD13F58C2DC6695AFB10D81022E8070 /* ConstraintMakerExtendable.swift */, + 73AF4CEA18054AA0A60AC6D696AB9066 /* ConstraintMakerFinalizable.swift */, + DA965EFAD7AD9B80A645A9B18C7368BB /* ConstraintMakerPriortizable.swift */, + 254BC37D2B7AC6DD53B0CA2C7EEC23E4 /* ConstraintMakerRelatable.swift */, + 38DEC2D750D9049CA81034CAAF1A2177 /* ConstraintMultiplierTarget.swift */, + A71E9B44D63637BFCC6C5906205A966E /* ConstraintOffsetTarget.swift */, + 23BDA9C6F54C56258B5F86F21A4DC4C5 /* ConstraintPriority.swift */, + 80CE97135D611ABAFCC8BD3327867E2C /* ConstraintPriorityTarget.swift */, + E786978EDBE2F8E5787D84E1987697C9 /* ConstraintRelatableTarget.swift */, + 65513158E98C9A567AFD553A96389162 /* ConstraintRelation.swift */, + AE31F2F89ADEE6F1A8394F28B252FCEF /* ConstraintView.swift */, + 1219F10EAB3A36F4773EFD89AA72860F /* ConstraintView+Extensions.swift */, + 063A5AAB41AAC85A51210F95F2448B7E /* ConstraintViewDSL.swift */, + E57CCAFFAC30C649FC153B2090CA60F0 /* Debugging.swift */, + F59A1DD537259552A3630926647873BC /* LayoutConstraint.swift */, + C90269EF7F59D389D0D85F0652EBDD4C /* LayoutConstraintItem.swift */, + 67A75B72B5CF0289492BCCA9CAB6C68A /* Typealiases.swift */, + 6F8747D51C16E5D397C657D385BBC429 /* UILayoutSupport+Extensions.swift */, + F37789840775270632E2BE1A90CB538F /* Support Files */, + ); + path = SnapKit; + sourceTree = ""; + }; + F37789840775270632E2BE1A90CB538F /* Support Files */ = { + isa = PBXGroup; + children = ( + 5DE689AF33EC11C66A73F0F7F64C4431 /* SnapKit.modulemap */, + 15832CD907465A8F6CD8D5749874B979 /* SnapKit-dummy.m */, + 3577283D42AED0BC9F5594739C18399D /* SnapKit-Info.plist */, + 425971344E64A0BD506733CFD485A640 /* SnapKit-prefix.pch */, + 3DE550BDE076C9C889E228887E64AF93 /* SnapKit-umbrella.h */, + 9ED498B0F3DB2B069E95E50B8B872B5E /* SnapKit.debug.xcconfig */, + 8FCD2675B89B6F52EE2AE6707BEC09EC /* SnapKit.release.xcconfig */, + ); + name = "Support Files"; + path = "../Target Support Files/SnapKit"; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXHeadersBuildPhase section */ + 153B61B08205B9CB666EBFD0C3278848 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 5A404D2F437CB0DA1BB51F7A11E21A6A /* ZXKitCore-umbrella.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 42E7BAE63C7E6820DB8AE9E1FF9EB885 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 1AF211ACFA5230A9422432050B5712E2 /* ZXKitUtil-umbrella.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 5CC475EA93EB23620A379B165B83798D /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 372BED9E35F5B2B2A988668E49F23A9A /* Pods-ZXUserDefaultManager-umbrella.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 7DFCF5F12AEEED0500986DBC9BF76170 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + A66ED57B365A35434C5BAF4B990819B7 /* SnapKit-umbrella.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXHeadersBuildPhase section */ + +/* Begin PBXNativeTarget section */ + 19622742EBA51E823D6DAE3F8CDBFAD4 /* SnapKit */ = { + isa = PBXNativeTarget; + buildConfigurationList = 7F8CE4DC18DBEA01587212F09727DB3D /* Build configuration list for PBXNativeTarget "SnapKit" */; + buildPhases = ( + 7DFCF5F12AEEED0500986DBC9BF76170 /* Headers */, + 89222AF845A30312C284F407BA48B98F /* Sources */, + 3C8B1704CC97EF12D3409771318C6433 /* Frameworks */, + 9C691CAA90D9565F2EFF5EF823D8A80C /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = SnapKit; + productName = SnapKit; + productReference = 979486118B3E90C08386079D57962701 /* SnapKit.framework */; + productType = "com.apple.product-type.framework"; + }; + 23CC5B423FA68CF6FCACD593F1FEDCF6 /* ZXKitCore */ = { + isa = PBXNativeTarget; + buildConfigurationList = 899A76DC37EB3531788217469BDC79E1 /* Build configuration list for PBXNativeTarget "ZXKitCore" */; + buildPhases = ( + 153B61B08205B9CB666EBFD0C3278848 /* Headers */, + C0DBD0B475D60EE7D16445E2CC9D6065 /* Sources */, + 106CAA4BAA362D4A7882A3E5E3B8E94B /* Frameworks */, + BA7A6716C128027B4F78886C7DADD172 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 3696F6F1A253596C8488C120DD3A2C12 /* PBXTargetDependency */, + 905E1ADE4BD0C32C8B4ACFD291749DAA /* PBXTargetDependency */, + 18AAF462B3680BF7F7974AF326EE5733 /* PBXTargetDependency */, + ); + name = ZXKitCore; + productName = ZXKitCore; + productReference = 19B4CCFF6F020B12DD03BF84C2EC2D54 /* ZXKitCore.framework */; + productType = "com.apple.product-type.framework"; + }; + 4B09DDD2A3083E311C984F301582897A /* ZXKitUtil */ = { + isa = PBXNativeTarget; + buildConfigurationList = 624663CA30D29AE49F3F5B2B0DBA3B2E /* Build configuration list for PBXNativeTarget "ZXKitUtil" */; + buildPhases = ( + 42E7BAE63C7E6820DB8AE9E1FF9EB885 /* Headers */, + 71683AC785B567DC29498A32C6A3937A /* Sources */, + 660DB059165E773BE44A7D9461D2A0E4 /* Frameworks */, + C22D37C1B80CAB2088EC53F2686C3E11 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = ZXKitUtil; + productName = ZXKitUtil; + productReference = 2DD86A35A440A3D03F4341584B93EF64 /* ZXKitUtil.framework */; + productType = "com.apple.product-type.framework"; + }; + 6535447A49D8AE5353316E9D3CA44597 /* ZXKitCore-ZXKitCore */ = { + isa = PBXNativeTarget; + buildConfigurationList = EBC35A661EFA45880EBECF0A3412076C /* Build configuration list for PBXNativeTarget "ZXKitCore-ZXKitCore" */; + buildPhases = ( + 498F1FA11ABF9942E594E68D51F382DC /* Sources */, + D70B2F2D01A1873E3BEA894560EA855C /* Frameworks */, + 97C48569A2488BB18E352D0012D08750 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "ZXKitCore-ZXKitCore"; + productName = "ZXKitCore-ZXKitCore"; + productReference = B462C8B2CB78AE609523A787505C2EB4 /* ZXKitCore.bundle */; + productType = "com.apple.product-type.bundle"; + }; + 682BDF132D138452F91F839F0A531D66 /* Pods-ZXUserDefaultManager */ = { + isa = PBXNativeTarget; + buildConfigurationList = 7BD97CC4F71CE1C8DE730B91754DC70B /* Build configuration list for PBXNativeTarget "Pods-ZXUserDefaultManager" */; + buildPhases = ( + 5CC475EA93EB23620A379B165B83798D /* Headers */, + B00287878D21E056B381F60BF03440D1 /* Sources */, + C457564519306F5D27DA1C9E9D8F4DC2 /* Frameworks */, + FE178992B064A6549C2EB102D6D8D0F5 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + E8E5500054A91937AA32847E70AF05E9 /* PBXTargetDependency */, + ECFD7CE1857BF75766137BF57940F521 /* PBXTargetDependency */, + 585ED8D77619A832E1524780D2D55E34 /* PBXTargetDependency */, + ); + name = "Pods-ZXUserDefaultManager"; + productName = "Pods-ZXUserDefaultManager"; + productReference = 1F04346321D2DF0777E25812012B29C1 /* Pods_ZXUserDefaultManager.framework */; + productType = "com.apple.product-type.framework"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + BFDFE7DC352907FC980B868725387E98 /* Project object */ = { + isa = PBXProject; + attributes = { + LastSwiftUpdateCheck = 1100; + LastUpgradeCheck = 1100; + }; + buildConfigurationList = 4821239608C13582E20E6DA73FD5F1F9 /* Build configuration list for PBXProject "Pods" */; + compatibilityVersion = "Xcode 9.3"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + "zh-Hans", + ); + mainGroup = CF1408CF629C7361332E53B88F7BD30C; + productRefGroup = 9D3411CCC017C4E0546B78ED3B39A4BB /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 682BDF132D138452F91F839F0A531D66 /* Pods-ZXUserDefaultManager */, + 19622742EBA51E823D6DAE3F8CDBFAD4 /* SnapKit */, + 23CC5B423FA68CF6FCACD593F1FEDCF6 /* ZXKitCore */, + 6535447A49D8AE5353316E9D3CA44597 /* ZXKitCore-ZXKitCore */, + 4B09DDD2A3083E311C984F301582897A /* ZXKitUtil */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 97C48569A2488BB18E352D0012D08750 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 6C65EA91D874842596DB219BA9849C2D /* Localizable.strings in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 9C691CAA90D9565F2EFF5EF823D8A80C /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + BA7A6716C128027B4F78886C7DADD172 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 9F9E270CA2E3AF12AF984DBBFA6032D6 /* ZXKitCore.bundle in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + C22D37C1B80CAB2088EC53F2686C3E11 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + FE178992B064A6549C2EB102D6D8D0F5 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 498F1FA11ABF9942E594E68D51F382DC /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 71683AC785B567DC29498A32C6A3937A /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 602A743535C8535A30576FC0E24F970B /* Data+zx.swift in Sources */, + 3FD4D5CFDA72F49865A619A767C6B4A9 /* Date+zx.swift in Sources */, + AE61CD20C86CD7A48A92CE96068220B6 /* String+zx.swift in Sources */, + 357A328382314B3087207316C2DA7D13 /* UIColor+zx.swift in Sources */, + 7E083A9C70097EB3B66B438864F73521 /* UIImage+zx.swift in Sources */, + CCA873A718E9BF3A2F9C9ABBC2056A1B /* UIView+zx.swift in Sources */, + D659139092325A3AD6DA169962987861 /* ZXKitNameSpace.swift in Sources */, + 14B9EA9DBCEFEBFAB44BF784FDE5402D /* ZXKitUtil+file.swift in Sources */, + 77D17A2D0BEB8D415C47005F8C6C927D /* ZXKitUtil+media.swift in Sources */, + 78924D39E7097213219C82EB88AFCD45 /* ZXKitUtil+permission.swift in Sources */, + 7E69F2E3E9F8FD57565A721563CCFB50 /* ZXKitUtil+system.swift in Sources */, + DF248DEE1775D76F7EFB4335E9FAAAA9 /* ZXKitUtil+UI.swift in Sources */, + 3651DFEFB2D3FE752F006F7512FD3B79 /* ZXKitUtil-dummy.m in Sources */, + 38C2F2CD61477AC0288B26DFDD20D6C2 /* ZXKitUtil.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 89222AF845A30312C284F407BA48B98F /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 3BFC243AB9BD579969F0D5756560BCAA /* Constraint.swift in Sources */, + 2A1BBBC87AC2367BD14610A9D10D285E /* ConstraintAttributes.swift in Sources */, + 9B09968922C73D50040C6EEF57890D6E /* ConstraintConfig.swift in Sources */, + 5854DF509E8A016B6235793D04083035 /* ConstraintConstantTarget.swift in Sources */, + B599696DFEF6B2A5ECF528F4E5BB1846 /* ConstraintDescription.swift in Sources */, + AC35C9341C4BB156BB26FDD237EE3721 /* ConstraintDirectionalInsets.swift in Sources */, + 71DE9DC2FA583526AB4D1FD7F00C099C /* ConstraintDirectionalInsetTarget.swift in Sources */, + 8277256ADEC3C4DCF79957D1CA681A9A /* ConstraintDSL.swift in Sources */, + 21AB1101BBE4D28D74ED4EDF0D59025A /* ConstraintInsets.swift in Sources */, + 2C06F2E972444D359754D21AC46BFFE2 /* ConstraintInsetTarget.swift in Sources */, + 99B5296A5EDECE0557B9DA53D9E19CA1 /* ConstraintItem.swift in Sources */, + 1AFB1E9136716C0B61D6C700FF1E60FD /* ConstraintLayoutGuide+Extensions.swift in Sources */, + A270CD9EC3C541FE86E65AEDCEF500CF /* ConstraintLayoutGuide.swift in Sources */, + 77C9889055A3B32EA13A9616824DB0ED /* ConstraintLayoutGuideDSL.swift in Sources */, + 57B1876F2BE4168E5BFDB63D8CC849A0 /* ConstraintLayoutSupport.swift in Sources */, + 01C550A53C9E2047C83F8E85BBB558E6 /* ConstraintLayoutSupportDSL.swift in Sources */, + 51CD5887014967E77E58F5A163996454 /* ConstraintMaker.swift in Sources */, + 7C1702076F3A31D8D2D45A4A9F09B266 /* ConstraintMakerEditable.swift in Sources */, + 69CCBEEDFCA6D743D80026568D961919 /* ConstraintMakerExtendable.swift in Sources */, + C412F27D75AFC0DF0F0289DBB270931C /* ConstraintMakerFinalizable.swift in Sources */, + EE909C7C786140109051BC9562EEC7C8 /* ConstraintMakerPriortizable.swift in Sources */, + 75E146C12D1287228A0B493E87CDE31F /* ConstraintMakerRelatable.swift in Sources */, + D4697DC40F3B059E4A0867838CA1814E /* ConstraintMultiplierTarget.swift in Sources */, + 8705BBF0D428BF0AE1B554A377ECC540 /* ConstraintOffsetTarget.swift in Sources */, + 232B2F922E972D9F43D2EE15ACECE734 /* ConstraintPriority.swift in Sources */, + E8F2429683B3015CBD39CE883770BCA7 /* ConstraintPriorityTarget.swift in Sources */, + 69E3A06BBDFDC7D06A9D4BDC4E895E73 /* ConstraintRelatableTarget.swift in Sources */, + CE62FEABA57B2B53EABF8C7DCCC6B2C4 /* ConstraintRelation.swift in Sources */, + 3E5285F4F36EAD77ECABBFB7F36BB1BB /* ConstraintView+Extensions.swift in Sources */, + BECA67DFB5E0984DFAEFCB775C31972E /* ConstraintView.swift in Sources */, + EB1726F5E0D0EEBA20E4528B1E37A8FA /* ConstraintViewDSL.swift in Sources */, + B780B272106411CBE258BB60FFC45410 /* Debugging.swift in Sources */, + 039EAFE7935113805F3FC21BF1B7C9D5 /* LayoutConstraint.swift in Sources */, + E9A970BC24EA15832F248EA020072746 /* LayoutConstraintItem.swift in Sources */, + 4C7A676DAE95EEAC3787A75349F0862D /* SnapKit-dummy.m in Sources */, + 1956E392D500F3CD899D39A5F805736D /* Typealiases.swift in Sources */, + 6E0EB9E7FAAEDBB7A73ECF3095F69C4A /* UILayoutSupport+Extensions.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + B00287878D21E056B381F60BF03440D1 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + B562BD5D60168494C5DC313C94668F07 /* Pods-ZXUserDefaultManager-dummy.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + C0DBD0B475D60EE7D16445E2CC9D6065 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + B8524CE210825149C17B17F0F342B7C7 /* Localizable.strings in Sources */, + C6CC3F80D008B9B389CF398BB5D534EA /* Localizable.strings in Sources */, + 42F8910EB5378855142043C61476B910 /* ZXKit.swift in Sources */, + 38991EB845EB572636F415BF5689B915 /* ZXKitCollectionViewHeaderView.swift in Sources */, + 754B22E781910077DDC4BFACB3FDAD2E /* ZXKitCore-dummy.m in Sources */, + 549FCCFD9CC45005B9B1CBA3A41492BB /* ZXKitFloatWindow.swift in Sources */, + 3B27B0261D4A73C7C928DBDAE5DCE873 /* ZXKitPluginCollectionViewCell.swift in Sources */, + 98DBC664CD8B4F17ABF3D923980D6F86 /* ZXKitPluginProtocol.swift in Sources */, + F1FC48766446DA1450DCD0FAA9742499 /* ZXKitWindow.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 18AAF462B3680BF7F7974AF326EE5733 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = ZXKitUtil; + target = 4B09DDD2A3083E311C984F301582897A /* ZXKitUtil */; + targetProxy = FA9E0EA0AF7166B3E12D5A174921707C /* PBXContainerItemProxy */; + }; + 3696F6F1A253596C8488C120DD3A2C12 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = SnapKit; + target = 19622742EBA51E823D6DAE3F8CDBFAD4 /* SnapKit */; + targetProxy = D626E72845514DFC288832206B21289A /* PBXContainerItemProxy */; + }; + 585ED8D77619A832E1524780D2D55E34 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = ZXKitUtil; + target = 4B09DDD2A3083E311C984F301582897A /* ZXKitUtil */; + targetProxy = 6576EA00636A777F002BE41B8945606F /* PBXContainerItemProxy */; + }; + 905E1ADE4BD0C32C8B4ACFD291749DAA /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "ZXKitCore-ZXKitCore"; + target = 6535447A49D8AE5353316E9D3CA44597 /* ZXKitCore-ZXKitCore */; + targetProxy = 6468500FC67E8B1755A17DDCEE4F7D21 /* PBXContainerItemProxy */; + }; + E8E5500054A91937AA32847E70AF05E9 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = SnapKit; + target = 19622742EBA51E823D6DAE3F8CDBFAD4 /* SnapKit */; + targetProxy = A5516DE4CB2B1F7079B13EC16A1530F0 /* PBXContainerItemProxy */; + }; + ECFD7CE1857BF75766137BF57940F521 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = ZXKitCore; + target = 23CC5B423FA68CF6FCACD593F1FEDCF6 /* ZXKitCore */; + targetProxy = D3083A53D63D48D2D6329519F42259D0 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin PBXVariantGroup section */ + B136659FA2976EC1AC4C8842DBB9E090 /* Localizable.strings */ = { + isa = PBXVariantGroup; + children = ( + F0A161F77F86166E187BB709900E9A8C /* Localizable.strings */, + D98A8B0009868F2A73C6B09283B50C62 /* Localizable.strings */, + ); + name = Localizable.strings; + path = pod/localizable; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 10E07F081016E7EA8085425509B961D4 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = A18F1896C1271D2A674732232ED8053C /* Pods-ZXUserDefaultManager.debug.xcconfig */; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; + CLANG_ENABLE_OBJC_WEAK = 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-ZXUserDefaultManager/Pods-ZXUserDefaultManager-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-ZXUserDefaultManager/Pods-ZXUserDefaultManager.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; + }; + 257497152829C177993B5EC99C1D227A /* 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 = 11.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 = 5.0; + SYMROOT = "${SRCROOT}/../build"; + }; + name = Release; + }; + 3699ADA9C2A67B1749C7154BA211D832 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 6F9844C741B865915D6F6D08928CEB71 /* ZXKitCore.release.xcconfig */; + buildSettings = { + CLANG_ENABLE_OBJC_WEAK = 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"; + GCC_PREFIX_HEADER = "Target Support Files/ZXKitCore/ZXKitCore-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/ZXKitCore/ZXKitCore-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MODULEMAP_FILE = "Target Support Files/ZXKitCore/ZXKitCore.modulemap"; + PRODUCT_MODULE_NAME = ZXKitCore; + PRODUCT_NAME = ZXKitCore; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; + 4528E86A9401BB91E9094D9043606632 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 681E621F79F610364C72CB92DD4DBFED /* Pods-ZXUserDefaultManager.release.xcconfig */; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; + CLANG_ENABLE_OBJC_WEAK = 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-ZXUserDefaultManager/Pods-ZXUserDefaultManager-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-ZXUserDefaultManager/Pods-ZXUserDefaultManager.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; + }; + 4849317E4F84769A4EF4AAADD8C777AB /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 6F9844C741B865915D6F6D08928CEB71 /* ZXKitCore.release.xcconfig */; + buildSettings = { + CODE_SIGN_IDENTITY = "iPhone Developer"; + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/ZXKitCore"; + IBSC_MODULE = ZXKitCore; + INFOPLIST_FILE = "Target Support Files/ZXKitCore/ResourceBundle-ZXKitCore-ZXKitCore-Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; + PRODUCT_NAME = ZXKitCore; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + WRAPPER_EXTENSION = bundle; + }; + name = Release; + }; + 73B201A0641E8BDF892BA0B27E0AF833 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 8FCD2675B89B6F52EE2AE6707BEC09EC /* SnapKit.release.xcconfig */; + buildSettings = { + CLANG_ENABLE_OBJC_WEAK = 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"; + 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 = 10.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 = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; + B3A7C60FC79FE82C2AC12E5CE6CE517F /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 6B97C28D1FB0C441D3F1F3B4E0B88189 /* ZXKitUtil.release.xcconfig */; + buildSettings = { + CLANG_ENABLE_OBJC_WEAK = 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"; + GCC_PREFIX_HEADER = "Target Support Files/ZXKitUtil/ZXKitUtil-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/ZXKitUtil/ZXKitUtil-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 10.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MODULEMAP_FILE = "Target Support Files/ZXKitUtil/ZXKitUtil.modulemap"; + PRODUCT_MODULE_NAME = ZXKitUtil; + PRODUCT_NAME = ZXKitUtil; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; + BEBF3AA1E80550503068017003A1699B /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 4CFF2A0E01EC50DA45D6BCD61900BB8A /* ZXKitUtil.debug.xcconfig */; + buildSettings = { + CLANG_ENABLE_OBJC_WEAK = 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"; + GCC_PREFIX_HEADER = "Target Support Files/ZXKitUtil/ZXKitUtil-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/ZXKitUtil/ZXKitUtil-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 10.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MODULEMAP_FILE = "Target Support Files/ZXKitUtil/ZXKitUtil.modulemap"; + PRODUCT_MODULE_NAME = ZXKitUtil; + PRODUCT_NAME = ZXKitUtil; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + DD8F832993327D1DD8046C3CBCBD97CD /* 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 = 11.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 = 5.0; + SYMROOT = "${SRCROOT}/../build"; + }; + name = Debug; + }; + DD967D95A30BFA7EC30946A85F97B7D8 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 1169B8A7C454B0FED102286AF5B91C63 /* ZXKitCore.debug.xcconfig */; + buildSettings = { + CLANG_ENABLE_OBJC_WEAK = 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"; + GCC_PREFIX_HEADER = "Target Support Files/ZXKitCore/ZXKitCore-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/ZXKitCore/ZXKitCore-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MODULEMAP_FILE = "Target Support Files/ZXKitCore/ZXKitCore.modulemap"; + PRODUCT_MODULE_NAME = ZXKitCore; + PRODUCT_NAME = ZXKitCore; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + F4177BDB985EA54F3D3235666D7EC412 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 1169B8A7C454B0FED102286AF5B91C63 /* ZXKitCore.debug.xcconfig */; + buildSettings = { + CODE_SIGN_IDENTITY = "iPhone Developer"; + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/ZXKitCore"; + IBSC_MODULE = ZXKitCore; + INFOPLIST_FILE = "Target Support Files/ZXKitCore/ResourceBundle-ZXKitCore-ZXKitCore-Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; + PRODUCT_NAME = ZXKitCore; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + WRAPPER_EXTENSION = bundle; + }; + name = Debug; + }; + F93AF49C1CAF2486F9DC6AE9F85C0739 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 9ED498B0F3DB2B069E95E50B8B872B5E /* SnapKit.debug.xcconfig */; + buildSettings = { + CLANG_ENABLE_OBJC_WEAK = 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"; + 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 = 10.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 = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 4821239608C13582E20E6DA73FD5F1F9 /* Build configuration list for PBXProject "Pods" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + DD8F832993327D1DD8046C3CBCBD97CD /* Debug */, + 257497152829C177993B5EC99C1D227A /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 624663CA30D29AE49F3F5B2B0DBA3B2E /* Build configuration list for PBXNativeTarget "ZXKitUtil" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + BEBF3AA1E80550503068017003A1699B /* Debug */, + B3A7C60FC79FE82C2AC12E5CE6CE517F /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 7BD97CC4F71CE1C8DE730B91754DC70B /* Build configuration list for PBXNativeTarget "Pods-ZXUserDefaultManager" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 10E07F081016E7EA8085425509B961D4 /* Debug */, + 4528E86A9401BB91E9094D9043606632 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 7F8CE4DC18DBEA01587212F09727DB3D /* Build configuration list for PBXNativeTarget "SnapKit" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + F93AF49C1CAF2486F9DC6AE9F85C0739 /* Debug */, + 73B201A0641E8BDF892BA0B27E0AF833 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 899A76DC37EB3531788217469BDC79E1 /* Build configuration list for PBXNativeTarget "ZXKitCore" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + DD967D95A30BFA7EC30946A85F97B7D8 /* Debug */, + 3699ADA9C2A67B1749C7154BA211D832 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + EBC35A661EFA45880EBECF0A3412076C /* Build configuration list for PBXNativeTarget "ZXKitCore-ZXKitCore" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + F4177BDB985EA54F3D3235666D7EC412 /* Debug */, + 4849317E4F84769A4EF4AAADD8C777AB /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = BFDFE7DC352907FC980B868725387E98 /* Project object */; +} diff --git a/example/Pods/Pods.xcodeproj/xcuserdata/damon.xcuserdatad/xcschemes/Pods-ZXUserDefaultManager.xcscheme b/example/Pods/Pods.xcodeproj/xcuserdata/damon.xcuserdatad/xcschemes/Pods-ZXUserDefaultManager.xcscheme new file mode 100644 index 0000000..be43aad --- /dev/null +++ b/example/Pods/Pods.xcodeproj/xcuserdata/damon.xcuserdatad/xcschemes/Pods-ZXUserDefaultManager.xcscheme @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/example/Pods/Pods.xcodeproj/xcuserdata/damon.xcuserdatad/xcschemes/SnapKit.xcscheme b/example/Pods/Pods.xcodeproj/xcuserdata/damon.xcuserdatad/xcschemes/SnapKit.xcscheme new file mode 100644 index 0000000..54bc836 --- /dev/null +++ b/example/Pods/Pods.xcodeproj/xcuserdata/damon.xcuserdatad/xcschemes/SnapKit.xcscheme @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/example/Pods/Pods.xcodeproj/xcuserdata/damon.xcuserdatad/xcschemes/ZXKitCore-ZXKitCore.xcscheme b/example/Pods/Pods.xcodeproj/xcuserdata/damon.xcuserdatad/xcschemes/ZXKitCore-ZXKitCore.xcscheme new file mode 100644 index 0000000..6977c47 --- /dev/null +++ b/example/Pods/Pods.xcodeproj/xcuserdata/damon.xcuserdatad/xcschemes/ZXKitCore-ZXKitCore.xcscheme @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/example/Pods/Pods.xcodeproj/xcuserdata/damon.xcuserdatad/xcschemes/ZXKitCore.xcscheme b/example/Pods/Pods.xcodeproj/xcuserdata/damon.xcuserdatad/xcschemes/ZXKitCore.xcscheme new file mode 100644 index 0000000..89f01ec --- /dev/null +++ b/example/Pods/Pods.xcodeproj/xcuserdata/damon.xcuserdatad/xcschemes/ZXKitCore.xcscheme @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/example/Pods/Pods.xcodeproj/xcuserdata/damon.xcuserdatad/xcschemes/ZXKitUtil.xcscheme b/example/Pods/Pods.xcodeproj/xcuserdata/damon.xcuserdatad/xcschemes/ZXKitUtil.xcscheme new file mode 100644 index 0000000..8e9b6c6 --- /dev/null +++ b/example/Pods/Pods.xcodeproj/xcuserdata/damon.xcuserdatad/xcschemes/ZXKitUtil.xcscheme @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/example/Pods/Pods.xcodeproj/xcuserdata/damon.xcuserdatad/xcschemes/xcschememanagement.plist b/example/Pods/Pods.xcodeproj/xcuserdata/damon.xcuserdatad/xcschemes/xcschememanagement.plist new file mode 100644 index 0000000..5646d74 --- /dev/null +++ b/example/Pods/Pods.xcodeproj/xcuserdata/damon.xcuserdatad/xcschemes/xcschememanagement.plist @@ -0,0 +1,46 @@ + + + + + SchemeUserState + + Pods-ZXUserDefaultManager.xcscheme + + isShown + + orderHint + 0 + + SnapKit.xcscheme + + isShown + + orderHint + 1 + + ZXKitCore-ZXKitCore.xcscheme + + isShown + + orderHint + 3 + + ZXKitCore.xcscheme + + isShown + + orderHint + 2 + + ZXKitUtil.xcscheme + + isShown + + orderHint + 4 + + + SuppressBuildableAutocreation + + + diff --git a/example/Pods/SnapKit/LICENSE b/example/Pods/SnapKit/LICENSE new file mode 100644 index 0000000..a18ccfb --- /dev/null +++ b/example/Pods/SnapKit/LICENSE @@ -0,0 +1,19 @@ +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. diff --git a/example/Pods/SnapKit/README.md b/example/Pods/SnapKit/README.md new file mode 100644 index 0000000..0945ce6 --- /dev/null +++ b/example/Pods/SnapKit/README.md @@ -0,0 +1,136 @@ + + +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 4.x please ensure you are using >= 4.0.0** ⚠️ +#### ⚠️ **To use with Swift 5.x please ensure you are using >= 5.0.0** ⚠️ + +## Contents + +- [Requirements](#requirements) +- [Migration Guides](#migration-guides) +- [Communication](#communication) +- [Installation](#installation) +- [Usage](#usage) +- [Credits](#credits) +- [License](#license) + +## Requirements + +- iOS 10.0+ / Mac OS X 10.12+ / tvOS 10.0+ +- Xcode 10.0+ +- Swift 4.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', '~> 5.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" ~> 5.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) + } + } + +} +``` + +### Playground +You can try SnapKit in Playground. + +**Note:** + +> To try SnapKit in playground, open `SnapKit.xcworkspace` and build SnapKit.framework for any simulator first. + +### 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. diff --git a/example/Pods/SnapKit/Source/Constraint.swift b/example/Pods/SnapKit/Source/Constraint.swift new file mode 100644 index 0000000..390629e --- /dev/null +++ b/example/Pods/SnapKit/Source/Constraint.swift @@ -0,0 +1,341 @@ +// +// 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 == .directionalEdges && self.to.attributes == .directionalMargins { + switch layoutFromAttribute { + case .leading: + layoutToAttribute = .leadingMargin + case .trailing: + layoutToAttribute = .trailingMargin + case .top: + layoutToAttribute = .topMargin + case .bottom: + layoutToAttribute = .bottomMargin + default: + fatalError() + } + } else if self.from.attributes == .directionalMargins && self.to.attributes == .directionalEdges { + switch layoutFromAttribute { + case .leadingMargin: + layoutToAttribute = .leading + case .trailingMargin: + layoutToAttribute = .trailing + 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, message:"Use activate().") + public func install() { + self.activate() + } + + @available(*, deprecated, 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 + } + + #if os(iOS) || os(tvOS) + @discardableResult + @available(iOS 11.0, tvOS 11.0, *) + public func update(inset: ConstraintDirectionalInsetTarget) -> Constraint { + self.constant = inset.constraintDirectionalInsetTargetValue + return self + } + #endif + + @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, message:"Use update(offset: ConstraintOffsetTarget) instead.") + public func updateOffset(amount: ConstraintOffsetTarget) -> Void { self.update(offset: amount) } + + @available(*, deprecated, message:"Use update(inset: ConstraintInsetTarget) instead.") + public func updateInsets(amount: ConstraintInsetTarget) -> Void { self.update(inset: amount) } + + @available(*, deprecated, message:"Use update(priority: ConstraintPriorityTarget) instead.") + public func updatePriority(amount: ConstraintPriorityTarget) -> Void { self.update(priority: amount) } + + @available(*, deprecated, message:"Use update(priority: ConstraintPriorityTarget) instead.") + public func updatePriorityRequired() -> Void {} + + @available(*, deprecated, message:"Use update(priority: ConstraintPriorityTarget) instead.") + public func updatePriorityHigh() -> Void { fatalError("Must be implemented by Concrete subclass.") } + + @available(*, deprecated, message:"Use update(priority: ConstraintPriorityTarget) instead.") + public func updatePriorityMedium() -> Void { fatalError("Must be implemented by Concrete subclass.") } + + @available(*, deprecated, 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]) + } +} diff --git a/example/Pods/SnapKit/Source/ConstraintAttributes.swift b/example/Pods/SnapKit/Source/ConstraintAttributes.swift new file mode 100644 index 0000000..2f0fbe9 --- /dev/null +++ b/example/Pods/SnapKit/Source/ConstraintAttributes.swift @@ -0,0 +1,199 @@ +// +// 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 directionalEdges: ConstraintAttributes { return 58 } + 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 directionalMargins: ConstraintAttributes { return 245760 } + + @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 +} diff --git a/example/Pods/SnapKit/Source/ConstraintConfig.swift b/example/Pods/SnapKit/Source/ConstraintConfig.swift new file mode 100644 index 0000000..2746b7d --- /dev/null +++ b/example/Pods/SnapKit/Source/ConstraintConfig.swift @@ -0,0 +1,37 @@ +// +// 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 + +} diff --git a/example/Pods/SnapKit/Source/ConstraintConstantTarget.swift b/example/Pods/SnapKit/Source/ConstraintConstantTarget.swift new file mode 100644 index 0000000..7f54907 --- /dev/null +++ b/example/Pods/SnapKit/Source/ConstraintConstantTarget.swift @@ -0,0 +1,213 @@ +// +// 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 { +} + +#if os(iOS) || os(tvOS) +@available(iOS 11.0, tvOS 11.0, *) +extension ConstraintDirectionalInsets: ConstraintConstantTarget { +} +#endif + +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 + #if swift(>=5.0) + @unknown default: + return 0.0 + #endif + } + #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 + #if swift(>=5.0) + @unknown default: + return 0.0 + #endif + } + #endif + } + + if let value = self as? ConstraintInsets { + #if os(iOS) || os(tvOS) + switch layoutAttribute { + case .left, .leftMargin: + return value.left + case .top, .topMargin, .firstBaseline: + return value.top + case .right, .rightMargin: + return -value.right + case .bottom, .bottomMargin, .lastBaseline: + 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 .centerX, .centerXWithinMargins: + return (value.left - value.right) / 2 + case .centerY, .centerYWithinMargins: + return (value.top - value.bottom) / 2 + case .width: + return -(value.left + value.right) + case .height: + return -(value.top + value.bottom) + case .notAnAttribute: + return 0.0 + #if swift(>=5.0) + @unknown default: + return 0.0 + #endif + } + #else + switch layoutAttribute { + case .left: + return value.left + case .top, .firstBaseline: + return value.top + case .right: + return -value.right + case .bottom, .lastBaseline: + return -value.bottom + case .leading: + return (ConstraintConfig.interfaceLayoutDirection == .leftToRight) ? value.left : value.right + case .trailing: + return (ConstraintConfig.interfaceLayoutDirection == .leftToRight) ? -value.right : -value.left + case .centerX: + return (value.left - value.right) / 2 + case .centerY: + return (value.top - value.bottom) / 2 + case .width: + return -(value.left + value.right) + case .height: + return -(value.top + value.bottom) + case .notAnAttribute: + return 0.0 + #if swift(>=5.0) + @unknown default: + return 0.0 + #endif + } + #endif + } + + #if os(iOS) || os(tvOS) + if #available(iOS 11.0, tvOS 11.0, *), let value = self as? ConstraintDirectionalInsets { + switch layoutAttribute { + case .left, .leftMargin: + return (ConstraintConfig.interfaceLayoutDirection == .leftToRight) ? value.leading : value.trailing + case .top, .topMargin, .firstBaseline: + return value.top + case .right, .rightMargin: + return (ConstraintConfig.interfaceLayoutDirection == .leftToRight) ? -value.trailing : -value.leading + case .bottom, .bottomMargin, .lastBaseline: + return -value.bottom + case .leading, .leadingMargin: + return value.leading + case .trailing, .trailingMargin: + return -value.trailing + case .centerX, .centerXWithinMargins: + return (value.leading - value.trailing) / 2 + case .centerY, .centerYWithinMargins: + return (value.top - value.bottom) / 2 + case .width: + return -(value.leading + value.trailing) + case .height: + return -(value.top + value.bottom) + case .notAnAttribute: + return 0.0 + #if swift(>=5.0) + @unknown default: + return 0.0 + #else + default: + return 0.0 + #endif + } + } + #endif + + return 0.0 + } + +} diff --git a/example/Pods/SnapKit/Source/ConstraintDSL.swift b/example/Pods/SnapKit/Source/ConstraintDSL.swift new file mode 100644 index 0000000..ecc5173 --- /dev/null +++ b/example/Pods/SnapKit/Source/ConstraintDSL.swift @@ -0,0 +1,194 @@ +// +// 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 directionalEdges: ConstraintItem { + return ConstraintItem(target: self.target, attributes: ConstraintAttributes.directionalEdges) + } + + 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, 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 directionalMargins: ConstraintItem { + return ConstraintItem(target: self.target, attributes: ConstraintAttributes.directionalMargins) + } + + @available(iOS 8.0, *) + public var centerWithinMargins: ConstraintItem { + return ConstraintItem(target: self.target, attributes: ConstraintAttributes.centerWithinMargins) + } + +} diff --git a/example/Pods/SnapKit/Source/ConstraintDescription.swift b/example/Pods/SnapKit/Source/ConstraintDescription.swift new file mode 100644 index 0000000..3521f9f --- /dev/null +++ b/example/Pods/SnapKit/Source/ConstraintDescription.swift @@ -0,0 +1,69 @@ +// +// 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 + } + +} diff --git a/example/Pods/SnapKit/Source/ConstraintDirectionalInsetTarget.swift b/example/Pods/SnapKit/Source/ConstraintDirectionalInsetTarget.swift new file mode 100644 index 0000000..955aec3 --- /dev/null +++ b/example/Pods/SnapKit/Source/ConstraintDirectionalInsetTarget.swift @@ -0,0 +1,49 @@ +// +// 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 protocol ConstraintDirectionalInsetTarget: ConstraintConstantTarget { +} + +@available(iOS 11.0, tvOS 11.0, *) +extension ConstraintDirectionalInsets: ConstraintDirectionalInsetTarget { +} + +extension ConstraintDirectionalInsetTarget { + + @available(iOS 11.0, tvOS 11.0, *) + internal var constraintDirectionalInsetTargetValue: ConstraintDirectionalInsets { + if let amount = self as? ConstraintDirectionalInsets { + return amount + } else { + return ConstraintDirectionalInsets(top: 0, leading: 0, bottom: 0, trailing: 0) + } + } +} +#endif diff --git a/example/Pods/SnapKit/Source/ConstraintDirectionalInsets.swift b/example/Pods/SnapKit/Source/ConstraintDirectionalInsets.swift new file mode 100644 index 0000000..ada8ed5 --- /dev/null +++ b/example/Pods/SnapKit/Source/ConstraintDirectionalInsets.swift @@ -0,0 +1,34 @@ +// +// 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 11.0, tvOS 11.0, *) + public typealias ConstraintDirectionalInsets = NSDirectionalEdgeInsets +#endif diff --git a/example/Pods/SnapKit/Source/ConstraintInsetTarget.swift b/example/Pods/SnapKit/Source/ConstraintInsetTarget.swift new file mode 100644 index 0000000..ba8a0f3 --- /dev/null +++ b/example/Pods/SnapKit/Source/ConstraintInsetTarget.swift @@ -0,0 +1,72 @@ +// +// 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) + } + } + +} diff --git a/example/Pods/SnapKit/Source/ConstraintInsets.swift b/example/Pods/SnapKit/Source/ConstraintInsets.swift new file mode 100644 index 0000000..738ca05 --- /dev/null +++ b/example/Pods/SnapKit/Source/ConstraintInsets.swift @@ -0,0 +1,35 @@ +// +// 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 diff --git a/example/Pods/SnapKit/Source/ConstraintItem.swift b/example/Pods/SnapKit/Source/ConstraintItem.swift new file mode 100644 index 0000000..a342c1d --- /dev/null +++ b/example/Pods/SnapKit/Source/ConstraintItem.swift @@ -0,0 +1,61 @@ +// +// 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 +} diff --git a/example/Pods/SnapKit/Source/ConstraintLayoutGuide+Extensions.swift b/example/Pods/SnapKit/Source/ConstraintLayoutGuide+Extensions.swift new file mode 100644 index 0000000..d429e0c --- /dev/null +++ b/example/Pods/SnapKit/Source/ConstraintLayoutGuide+Extensions.swift @@ -0,0 +1,36 @@ +// +// 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 { + + var snp: ConstraintLayoutGuideDSL { + return ConstraintLayoutGuideDSL(guide: self) + } + +} diff --git a/example/Pods/SnapKit/Source/ConstraintLayoutGuide.swift b/example/Pods/SnapKit/Source/ConstraintLayoutGuide.swift new file mode 100644 index 0000000..e3e50c8 --- /dev/null +++ b/example/Pods/SnapKit/Source/ConstraintLayoutGuide.swift @@ -0,0 +1,37 @@ +// +// 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 diff --git a/example/Pods/SnapKit/Source/ConstraintLayoutGuideDSL.swift b/example/Pods/SnapKit/Source/ConstraintLayoutGuideDSL.swift new file mode 100644 index 0000000..0007819 --- /dev/null +++ b/example/Pods/SnapKit/Source/ConstraintLayoutGuideDSL.swift @@ -0,0 +1,66 @@ +// +// 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 + + } + +} diff --git a/example/Pods/SnapKit/Source/ConstraintLayoutSupport.swift b/example/Pods/SnapKit/Source/ConstraintLayoutSupport.swift new file mode 100644 index 0000000..e92e9fb --- /dev/null +++ b/example/Pods/SnapKit/Source/ConstraintLayoutSupport.swift @@ -0,0 +1,36 @@ +// +// 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 diff --git a/example/Pods/SnapKit/Source/ConstraintLayoutSupportDSL.swift b/example/Pods/SnapKit/Source/ConstraintLayoutSupportDSL.swift new file mode 100644 index 0000000..5d6ae89 --- /dev/null +++ b/example/Pods/SnapKit/Source/ConstraintLayoutSupportDSL.swift @@ -0,0 +1,56 @@ +// +// 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) + } +} diff --git a/example/Pods/SnapKit/Source/ConstraintMaker.swift b/example/Pods/SnapKit/Source/ConstraintMaker.swift new file mode 100644 index 0000000..38f4d31 --- /dev/null +++ b/example/Pods/SnapKit/Source/ConstraintMaker.swift @@ -0,0 +1,212 @@ +// +// 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, 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 directionalEdges: ConstraintMakerExtendable { + return self.makeExtendableWithAttributes(.directionalEdges) + } + 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 directionalMargins: ConstraintMakerExtendable { + return self.makeExtendableWithAttributes(.directionalMargins) + } + + @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() + } + } + +} diff --git a/example/Pods/SnapKit/Source/ConstraintMakerEditable.swift b/example/Pods/SnapKit/Source/ConstraintMakerEditable.swift new file mode 100644 index 0000000..f768a17 --- /dev/null +++ b/example/Pods/SnapKit/Source/ConstraintMakerEditable.swift @@ -0,0 +1,64 @@ +// +// 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 + } + + #if os(iOS) || os(tvOS) + @discardableResult + @available(iOS 11.0, tvOS 11.0, *) + public func inset(_ amount: ConstraintDirectionalInsetTarget) -> ConstraintMakerEditable { + self.description.constant = amount.constraintDirectionalInsetTargetValue + return self + } + #endif +} diff --git a/example/Pods/SnapKit/Source/ConstraintMakerExtendable.swift b/example/Pods/SnapKit/Source/ConstraintMakerExtendable.swift new file mode 100644 index 0000000..ce47169 --- /dev/null +++ b/example/Pods/SnapKit/Source/ConstraintMakerExtendable.swift @@ -0,0 +1,179 @@ +// +// 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, 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 directionalEdges: ConstraintMakerExtendable { + self.description.attributes += .directionalEdges + 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 directionalMargins: ConstraintMakerExtendable { + self.description.attributes += .directionalMargins + return self + } + + @available(iOS 8.0, *) + public var centerWithinMargins: ConstraintMakerExtendable { + self.description.attributes += .centerWithinMargins + return self + } + +} diff --git a/example/Pods/SnapKit/Source/ConstraintMakerFinalizable.swift b/example/Pods/SnapKit/Source/ConstraintMakerFinalizable.swift new file mode 100644 index 0000000..4e1379e --- /dev/null +++ b/example/Pods/SnapKit/Source/ConstraintMakerFinalizable.swift @@ -0,0 +1,49 @@ +// +// 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! + } + +} diff --git a/example/Pods/SnapKit/Source/ConstraintMakerPriortizable.swift b/example/Pods/SnapKit/Source/ConstraintMakerPriortizable.swift new file mode 100644 index 0000000..e0d452d --- /dev/null +++ b/example/Pods/SnapKit/Source/ConstraintMakerPriortizable.swift @@ -0,0 +1,68 @@ +// +// 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, message:"Use priority(.required) instead.") + @discardableResult + public func priorityRequired() -> ConstraintMakerFinalizable { + return self.priority(.required) + } + + @available(*, deprecated, message:"Use priority(.high) instead.") + @discardableResult + public func priorityHigh() -> ConstraintMakerFinalizable { + return self.priority(.high) + } + + @available(*, deprecated, message:"Use priority(.medium) instead.") + @discardableResult + public func priorityMedium() -> ConstraintMakerFinalizable { + return self.priority(.medium) + } + + @available(*, deprecated, message:"Use priority(.low) instead.") + @discardableResult + public func priorityLow() -> ConstraintMakerFinalizable { + return self.priority(.low) + } +} diff --git a/example/Pods/SnapKit/Source/ConstraintMakerRelatable.swift b/example/Pods/SnapKit/Source/ConstraintMakerRelatable.swift new file mode 100644 index 0000000..7889532 --- /dev/null +++ b/example/Pods/SnapKit/Source/ConstraintMakerRelatable.swift @@ -0,0 +1,115 @@ +// +// 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 || + other.attributes == .directionalEdges && self.description.attributes == .directionalMargins || + other.attributes == .directionalMargins && self.description.attributes == .directionalEdges 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) + } +} diff --git a/example/Pods/SnapKit/Source/ConstraintMultiplierTarget.swift b/example/Pods/SnapKit/Source/ConstraintMultiplierTarget.swift new file mode 100644 index 0000000..6fecd33 --- /dev/null +++ b/example/Pods/SnapKit/Source/ConstraintMultiplierTarget.swift @@ -0,0 +1,75 @@ +// +// 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 + } + +} diff --git a/example/Pods/SnapKit/Source/ConstraintOffsetTarget.swift b/example/Pods/SnapKit/Source/ConstraintOffsetTarget.swift new file mode 100644 index 0000000..bd9e0a1 --- /dev/null +++ b/example/Pods/SnapKit/Source/ConstraintOffsetTarget.swift @@ -0,0 +1,69 @@ +// +// 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 + } + +} diff --git a/example/Pods/SnapKit/Source/ConstraintPriority.swift b/example/Pods/SnapKit/Source/ConstraintPriority.swift new file mode 100644 index 0000000..f9dab16 --- /dev/null +++ b/example/Pods/SnapKit/Source/ConstraintPriority.swift @@ -0,0 +1,77 @@ +// +// 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 + } +} diff --git a/example/Pods/SnapKit/Source/ConstraintPriorityTarget.swift b/example/Pods/SnapKit/Source/ConstraintPriorityTarget.swift new file mode 100644 index 0000000..064f750 --- /dev/null +++ b/example/Pods/SnapKit/Source/ConstraintPriorityTarget.swift @@ -0,0 +1,85 @@ +// +// 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 diff --git a/example/Pods/SnapKit/Source/ConstraintRelatableTarget.swift b/example/Pods/SnapKit/Source/ConstraintRelatableTarget.swift new file mode 100644 index 0000000..d517a61 --- /dev/null +++ b/example/Pods/SnapKit/Source/ConstraintRelatableTarget.swift @@ -0,0 +1,72 @@ +// +// 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 { +} + +#if os(iOS) || os(tvOS) +@available(iOS 11.0, tvOS 11.0, *) +extension ConstraintDirectionalInsets: ConstraintRelatableTarget { +} +#endif + +extension ConstraintItem: ConstraintRelatableTarget { +} + +extension ConstraintView: ConstraintRelatableTarget { +} + +@available(iOS 9.0, OSX 10.11, *) +extension ConstraintLayoutGuide: ConstraintRelatableTarget { +} diff --git a/example/Pods/SnapKit/Source/ConstraintRelation.swift b/example/Pods/SnapKit/Source/ConstraintRelation.swift new file mode 100644 index 0000000..446aaf7 --- /dev/null +++ b/example/Pods/SnapKit/Source/ConstraintRelation.swift @@ -0,0 +1,48 @@ +// +// 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 + } + } + } +} diff --git a/example/Pods/SnapKit/Source/ConstraintView+Extensions.swift b/example/Pods/SnapKit/Source/ConstraintView+Extensions.swift new file mode 100644 index 0000000..a4898dc --- /dev/null +++ b/example/Pods/SnapKit/Source/ConstraintView+Extensions.swift @@ -0,0 +1,152 @@ +// +// 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, message:"Use newer snp.* syntax.") + var snp_left: ConstraintItem { return self.snp.left } + + @available(*, deprecated, message:"Use newer snp.* syntax.") + var snp_top: ConstraintItem { return self.snp.top } + + @available(*, deprecated, message:"Use newer snp.* syntax.") + var snp_right: ConstraintItem { return self.snp.right } + + @available(*, deprecated, message:"Use newer snp.* syntax.") + var snp_bottom: ConstraintItem { return self.snp.bottom } + + @available(*, deprecated, message:"Use newer snp.* syntax.") + var snp_leading: ConstraintItem { return self.snp.leading } + + @available(*, deprecated, message:"Use newer snp.* syntax.") + var snp_trailing: ConstraintItem { return self.snp.trailing } + + @available(*, deprecated, message:"Use newer snp.* syntax.") + var snp_width: ConstraintItem { return self.snp.width } + + @available(*, deprecated, message:"Use newer snp.* syntax.") + var snp_height: ConstraintItem { return self.snp.height } + + @available(*, deprecated, message:"Use newer snp.* syntax.") + var snp_centerX: ConstraintItem { return self.snp.centerX } + + @available(*, deprecated, message:"Use newer snp.* syntax.") + var snp_centerY: ConstraintItem { return self.snp.centerY } + + @available(*, deprecated, message:"Use newer snp.* syntax.") + var snp_baseline: ConstraintItem { return self.snp.baseline } + + @available(*, deprecated, message:"Use newer snp.* syntax.") + @available(iOS 8.0, OSX 10.11, *) + var snp_lastBaseline: ConstraintItem { return self.snp.lastBaseline } + + @available(iOS, deprecated, message:"Use newer snp.* syntax.") + @available(iOS 8.0, OSX 10.11, *) + var snp_firstBaseline: ConstraintItem { return self.snp.firstBaseline } + + @available(iOS, deprecated, message:"Use newer snp.* syntax.") + @available(iOS 8.0, *) + var snp_leftMargin: ConstraintItem { return self.snp.leftMargin } + + @available(iOS, deprecated, message:"Use newer snp.* syntax.") + @available(iOS 8.0, *) + var snp_topMargin: ConstraintItem { return self.snp.topMargin } + + @available(iOS, deprecated, message:"Use newer snp.* syntax.") + @available(iOS 8.0, *) + var snp_rightMargin: ConstraintItem { return self.snp.rightMargin } + + @available(iOS, deprecated, message:"Use newer snp.* syntax.") + @available(iOS 8.0, *) + var snp_bottomMargin: ConstraintItem { return self.snp.bottomMargin } + + @available(iOS, deprecated, message:"Use newer snp.* syntax.") + @available(iOS 8.0, *) + var snp_leadingMargin: ConstraintItem { return self.snp.leadingMargin } + + @available(iOS, deprecated, message:"Use newer snp.* syntax.") + @available(iOS 8.0, *) + var snp_trailingMargin: ConstraintItem { return self.snp.trailingMargin } + + @available(iOS, deprecated, message:"Use newer snp.* syntax.") + @available(iOS 8.0, *) + var snp_centerXWithinMargins: ConstraintItem { return self.snp.centerXWithinMargins } + + @available(iOS, deprecated, message:"Use newer snp.* syntax.") + @available(iOS 8.0, *) + var snp_centerYWithinMargins: ConstraintItem { return self.snp.centerYWithinMargins } + + @available(*, deprecated, message:"Use newer snp.* syntax.") + var snp_edges: ConstraintItem { return self.snp.edges } + + @available(*, deprecated, message:"Use newer snp.* syntax.") + var snp_size: ConstraintItem { return self.snp.size } + + @available(*, deprecated, message:"Use newer snp.* syntax.") + var snp_center: ConstraintItem { return self.snp.center } + + @available(iOS, deprecated, message:"Use newer snp.* syntax.") + @available(iOS 8.0, *) + var snp_margins: ConstraintItem { return self.snp.margins } + + @available(iOS, deprecated, message:"Use newer snp.* syntax.") + @available(iOS 8.0, *) + var snp_centerWithinMargins: ConstraintItem { return self.snp.centerWithinMargins } + + @available(*, deprecated, message:"Use newer snp.* syntax.") + func snp_prepareConstraints(_ closure: (_ make: ConstraintMaker) -> Void) -> [Constraint] { + return self.snp.prepareConstraints(closure) + } + + @available(*, deprecated, message:"Use newer snp.* syntax.") + func snp_makeConstraints(_ closure: (_ make: ConstraintMaker) -> Void) { + self.snp.makeConstraints(closure) + } + + @available(*, deprecated, message:"Use newer snp.* syntax.") + func snp_remakeConstraints(_ closure: (_ make: ConstraintMaker) -> Void) { + self.snp.remakeConstraints(closure) + } + + @available(*, deprecated, message:"Use newer snp.* syntax.") + func snp_updateConstraints(_ closure: (_ make: ConstraintMaker) -> Void) { + self.snp.updateConstraints(closure) + } + + @available(*, deprecated, message:"Use newer snp.* syntax.") + func snp_removeConstraints() { + self.snp.removeConstraints() + } + + var snp: ConstraintViewDSL { + return ConstraintViewDSL(view: self) + } + +} diff --git a/example/Pods/SnapKit/Source/ConstraintView.swift b/example/Pods/SnapKit/Source/ConstraintView.swift new file mode 100644 index 0000000..6ff8a76 --- /dev/null +++ b/example/Pods/SnapKit/Source/ConstraintView.swift @@ -0,0 +1,35 @@ +// +// 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 diff --git a/example/Pods/SnapKit/Source/ConstraintViewDSL.swift b/example/Pods/SnapKit/Source/ConstraintViewDSL.swift new file mode 100644 index 0000000..a0187f9 --- /dev/null +++ b/example/Pods/SnapKit/Source/ConstraintViewDSL.swift @@ -0,0 +1,101 @@ +// +// 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 + } + nonmutating set { + self.view.setContentHuggingPriority(LayoutPriority(rawValue: newValue), for: .horizontal) + } + } + + public var contentHuggingVerticalPriority: Float { + get { + return self.view.contentHuggingPriority(for: .vertical).rawValue + } + nonmutating set { + self.view.setContentHuggingPriority(LayoutPriority(rawValue: newValue), for: .vertical) + } + } + + public var contentCompressionResistanceHorizontalPriority: Float { + get { + return self.view.contentCompressionResistancePriority(for: .horizontal).rawValue + } + nonmutating set { + self.view.setContentCompressionResistancePriority(LayoutPriority(rawValue: newValue), for: .horizontal) + } + } + + public var contentCompressionResistanceVerticalPriority: Float { + get { + return self.view.contentCompressionResistancePriority(for: .vertical).rawValue + } + nonmutating 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 + + } + +} diff --git a/example/Pods/SnapKit/Source/Debugging.swift b/example/Pods/SnapKit/Source/Debugging.swift new file mode 100644 index 0000000..a78579a --- /dev/null +++ b/example/Pods/SnapKit/Source/Debugging.swift @@ -0,0 +1,169 @@ +// +// 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 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 "<=" + #if swift(>=5.0) + @unknown default: return "unknown" + #endif + } +} + +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" + #if swift(>=5.0) + @unknown default: return "unknown" + #endif + } + #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" + #if swift(>=5.0) + @unknown default: return "unknown" + #endif + } + #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 +} diff --git a/example/Pods/SnapKit/Source/LayoutConstraint.swift b/example/Pods/SnapKit/Source/LayoutConstraint.swift new file mode 100644 index 0000000..5425ea8 --- /dev/null +++ b/example/Pods/SnapKit/Source/LayoutConstraint.swift @@ -0,0 +1,61 @@ +// +// 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 { + // If firstItem or secondItem on either constraint has a dangling pointer + // this comparison can cause a crash. The solution for this is to ensure + // your layout code hold strong references to things like Views, LayoutGuides + // and LayoutAnchors as SnapKit will not keep strong references to any of these. + guard lhs.firstAttribute == rhs.firstAttribute && + lhs.secondAttribute == rhs.secondAttribute && + lhs.relation == rhs.relation && + lhs.priority == rhs.priority && + lhs.multiplier == rhs.multiplier && + lhs.secondItem === rhs.secondItem && + lhs.firstItem === rhs.firstItem else { + return false + } + return true +} diff --git a/example/Pods/SnapKit/Source/LayoutConstraintItem.swift b/example/Pods/SnapKit/Source/LayoutConstraintItem.swift new file mode 100644 index 0000000..a59de6b --- /dev/null +++ b/example/Pods/SnapKit/Source/LayoutConstraintItem.swift @@ -0,0 +1,93 @@ +// +// 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 diff --git a/example/Pods/SnapKit/Source/Typealiases.swift b/example/Pods/SnapKit/Source/Typealiases.swift new file mode 100644 index 0000000..ded96cc --- /dev/null +++ b/example/Pods/SnapKit/Source/Typealiases.swift @@ -0,0 +1,42 @@ +// +// 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 + diff --git a/example/Pods/SnapKit/Source/UILayoutSupport+Extensions.swift b/example/Pods/SnapKit/Source/UILayoutSupport+Extensions.swift new file mode 100644 index 0000000..8e7644c --- /dev/null +++ b/example/Pods/SnapKit/Source/UILayoutSupport+Extensions.swift @@ -0,0 +1,36 @@ +// +// 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 { + + var snp: ConstraintLayoutSupportDSL { + return ConstraintLayoutSupportDSL(support: self) + } + +} diff --git a/example/Pods/Target Support Files/Pods-ZXUserDefaultManager/Pods-ZXUserDefaultManager-Info.plist b/example/Pods/Target Support Files/Pods-ZXUserDefaultManager/Pods-ZXUserDefaultManager-Info.plist new file mode 100644 index 0000000..2243fe6 --- /dev/null +++ b/example/Pods/Target Support Files/Pods-ZXUserDefaultManager/Pods-ZXUserDefaultManager-Info.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIdentifier + ${PRODUCT_BUNDLE_IDENTIFIER} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.0.0 + CFBundleSignature + ???? + CFBundleVersion + ${CURRENT_PROJECT_VERSION} + NSPrincipalClass + + + diff --git a/example/Pods/Target Support Files/Pods-ZXUserDefaultManager/Pods-ZXUserDefaultManager-acknowledgements.markdown b/example/Pods/Target Support Files/Pods-ZXUserDefaultManager/Pods-ZXUserDefaultManager-acknowledgements.markdown new file mode 100644 index 0000000..284176e --- /dev/null +++ b/example/Pods/Target Support Files/Pods-ZXUserDefaultManager/Pods-ZXUserDefaultManager-acknowledgements.markdown @@ -0,0 +1,436 @@ +# 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. + + +## ZXKitCore + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + +## ZXKitUtil + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + +Generated by CocoaPods - https://cocoapods.org diff --git a/example/Pods/Target Support Files/Pods-ZXUserDefaultManager/Pods-ZXUserDefaultManager-acknowledgements.plist b/example/Pods/Target Support Files/Pods-ZXUserDefaultManager/Pods-ZXUserDefaultManager-acknowledgements.plist new file mode 100644 index 0000000..5035767 --- /dev/null +++ b/example/Pods/Target Support Files/Pods-ZXUserDefaultManager/Pods-ZXUserDefaultManager-acknowledgements.plist @@ -0,0 +1,480 @@ + + + + + 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 + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + License + Apache-2.0 License + Title + ZXKitCore + Type + PSGroupSpecifier + + + FooterText + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + License + Apache-2.0 License + Title + ZXKitUtil + Type + PSGroupSpecifier + + + FooterText + Generated by CocoaPods - https://cocoapods.org + Title + + Type + PSGroupSpecifier + + + StringsTable + Acknowledgements + Title + Acknowledgements + + diff --git a/example/Pods/Target Support Files/Pods-ZXUserDefaultManager/Pods-ZXUserDefaultManager-dummy.m b/example/Pods/Target Support Files/Pods-ZXUserDefaultManager/Pods-ZXUserDefaultManager-dummy.m new file mode 100644 index 0000000..459ad2a --- /dev/null +++ b/example/Pods/Target Support Files/Pods-ZXUserDefaultManager/Pods-ZXUserDefaultManager-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_Pods_ZXUserDefaultManager : NSObject +@end +@implementation PodsDummy_Pods_ZXUserDefaultManager +@end diff --git a/example/Pods/Target Support Files/Pods-ZXUserDefaultManager/Pods-ZXUserDefaultManager-frameworks-Debug-input-files.xcfilelist b/example/Pods/Target Support Files/Pods-ZXUserDefaultManager/Pods-ZXUserDefaultManager-frameworks-Debug-input-files.xcfilelist new file mode 100644 index 0000000..d1884ee --- /dev/null +++ b/example/Pods/Target Support Files/Pods-ZXUserDefaultManager/Pods-ZXUserDefaultManager-frameworks-Debug-input-files.xcfilelist @@ -0,0 +1,4 @@ +${PODS_ROOT}/Target Support Files/Pods-ZXUserDefaultManager/Pods-ZXUserDefaultManager-frameworks.sh +${BUILT_PRODUCTS_DIR}/SnapKit/SnapKit.framework +${BUILT_PRODUCTS_DIR}/ZXKitCore/ZXKitCore.framework +${BUILT_PRODUCTS_DIR}/ZXKitUtil/ZXKitUtil.framework \ No newline at end of file diff --git a/example/Pods/Target Support Files/Pods-ZXUserDefaultManager/Pods-ZXUserDefaultManager-frameworks-Debug-output-files.xcfilelist b/example/Pods/Target Support Files/Pods-ZXUserDefaultManager/Pods-ZXUserDefaultManager-frameworks-Debug-output-files.xcfilelist new file mode 100644 index 0000000..c4c58fa --- /dev/null +++ b/example/Pods/Target Support Files/Pods-ZXUserDefaultManager/Pods-ZXUserDefaultManager-frameworks-Debug-output-files.xcfilelist @@ -0,0 +1,3 @@ +${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SnapKit.framework +${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/ZXKitCore.framework +${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/ZXKitUtil.framework \ No newline at end of file diff --git a/example/Pods/Target Support Files/Pods-ZXUserDefaultManager/Pods-ZXUserDefaultManager-frameworks-Release-input-files.xcfilelist b/example/Pods/Target Support Files/Pods-ZXUserDefaultManager/Pods-ZXUserDefaultManager-frameworks-Release-input-files.xcfilelist new file mode 100644 index 0000000..d1884ee --- /dev/null +++ b/example/Pods/Target Support Files/Pods-ZXUserDefaultManager/Pods-ZXUserDefaultManager-frameworks-Release-input-files.xcfilelist @@ -0,0 +1,4 @@ +${PODS_ROOT}/Target Support Files/Pods-ZXUserDefaultManager/Pods-ZXUserDefaultManager-frameworks.sh +${BUILT_PRODUCTS_DIR}/SnapKit/SnapKit.framework +${BUILT_PRODUCTS_DIR}/ZXKitCore/ZXKitCore.framework +${BUILT_PRODUCTS_DIR}/ZXKitUtil/ZXKitUtil.framework \ No newline at end of file diff --git a/example/Pods/Target Support Files/Pods-ZXUserDefaultManager/Pods-ZXUserDefaultManager-frameworks-Release-output-files.xcfilelist b/example/Pods/Target Support Files/Pods-ZXUserDefaultManager/Pods-ZXUserDefaultManager-frameworks-Release-output-files.xcfilelist new file mode 100644 index 0000000..c4c58fa --- /dev/null +++ b/example/Pods/Target Support Files/Pods-ZXUserDefaultManager/Pods-ZXUserDefaultManager-frameworks-Release-output-files.xcfilelist @@ -0,0 +1,3 @@ +${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SnapKit.framework +${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/ZXKitCore.framework +${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/ZXKitUtil.framework \ No newline at end of file diff --git a/example/Pods/Target Support Files/Pods-ZXUserDefaultManager/Pods-ZXUserDefaultManager-frameworks.sh b/example/Pods/Target Support Files/Pods-ZXUserDefaultManager/Pods-ZXUserDefaultManager-frameworks.sh new file mode 100755 index 0000000..fe8e12d --- /dev/null +++ b/example/Pods/Target Support Files/Pods-ZXUserDefaultManager/Pods-ZXUserDefaultManager-frameworks.sh @@ -0,0 +1,211 @@ +#!/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[@]}" --links --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${destination}\"" + rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --links --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" + warn_missing_arch=${2:-true} + if [ -r "$source" ]; then + # Copy the dSYM into 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 .dSYM "$source")" + binary_name="$(ls "$source/Contents/Resources/DWARF")" + binary="${DERIVED_FILES_DIR}/${basename}.dSYM/Contents/Resources/DWARF/${binary_name}" + + # Strip invalid architectures so "fat" simulator / device frameworks work on device + if [[ "$(file "$binary")" == *"Mach-O "*"dSYM companion"* ]]; then + strip_invalid_archs "$binary" "$warn_missing_arch" + fi + + if [[ $STRIP_BINARY_RETVAL == 1 ]]; then + # Move the stripped file into its final destination. + echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --links --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[@]}" --links --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${DERIVED_FILES_DIR}/${basename}.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}.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" + warn_missing_arch=${2:-true} + # 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 + if [[ "$warn_missing_arch" == "true" ]]; then + echo "warning: [CP] Vendored binary '$binary' contains architectures ($binary_archs) none of which match the current build architectures ($ARCHS)." + fi + 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 +} + +install_artifact() { + artifact="$1" + base="$(basename "$artifact")" + case $base in + *.framework) + install_framework "$artifact" + ;; + *.dSYM) + # Suppress arch warnings since XCFrameworks will include many dSYM files + install_dsym "$artifact" "false" + ;; + *.bcsymbolmap) + install_bcsymbolmap "$artifact" + ;; + *) + echo "error: Unrecognized artifact "$artifact"" + ;; + esac +} + +copy_artifacts() { + file_list="$1" + while read artifact; do + install_artifact "$artifact" + done <$file_list +} + +ARTIFACT_LIST_FILE="${BUILT_PRODUCTS_DIR}/cocoapods-artifacts-${CONFIGURATION}.txt" +if [ -r "${ARTIFACT_LIST_FILE}" ]; then + copy_artifacts "${ARTIFACT_LIST_FILE}" +fi + +if [[ "$CONFIGURATION" == "Debug" ]]; then + install_framework "${BUILT_PRODUCTS_DIR}/SnapKit/SnapKit.framework" + install_framework "${BUILT_PRODUCTS_DIR}/ZXKitCore/ZXKitCore.framework" + install_framework "${BUILT_PRODUCTS_DIR}/ZXKitUtil/ZXKitUtil.framework" +fi +if [[ "$CONFIGURATION" == "Release" ]]; then + install_framework "${BUILT_PRODUCTS_DIR}/SnapKit/SnapKit.framework" + install_framework "${BUILT_PRODUCTS_DIR}/ZXKitCore/ZXKitCore.framework" + install_framework "${BUILT_PRODUCTS_DIR}/ZXKitUtil/ZXKitUtil.framework" +fi +if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then + wait +fi diff --git a/example/Pods/Target Support Files/Pods-ZXUserDefaultManager/Pods-ZXUserDefaultManager-umbrella.h b/example/Pods/Target Support Files/Pods-ZXUserDefaultManager/Pods-ZXUserDefaultManager-umbrella.h new file mode 100644 index 0000000..61986ab --- /dev/null +++ b/example/Pods/Target Support Files/Pods-ZXUserDefaultManager/Pods-ZXUserDefaultManager-umbrella.h @@ -0,0 +1,16 @@ +#ifdef __OBJC__ +#import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif + + +FOUNDATION_EXPORT double Pods_ZXUserDefaultManagerVersionNumber; +FOUNDATION_EXPORT const unsigned char Pods_ZXUserDefaultManagerVersionString[]; + diff --git a/example/Pods/Target Support Files/Pods-ZXUserDefaultManager/Pods-ZXUserDefaultManager.debug.xcconfig b/example/Pods/Target Support Files/Pods-ZXUserDefaultManager/Pods-ZXUserDefaultManager.debug.xcconfig new file mode 100644 index 0000000..78c323d --- /dev/null +++ b/example/Pods/Target Support Files/Pods-ZXUserDefaultManager/Pods-ZXUserDefaultManager.debug.xcconfig @@ -0,0 +1,12 @@ +ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit" "${PODS_CONFIGURATION_BUILD_DIR}/ZXKitCore" "${PODS_CONFIGURATION_BUILD_DIR}/ZXKitUtil" +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit/SnapKit.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/ZXKitCore/ZXKitCore.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/ZXKitUtil/ZXKitUtil.framework/Headers" +LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' +OTHER_LDFLAGS = $(inherited) -framework "SnapKit" -framework "ZXKitCore" -framework "ZXKitUtil" +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 +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/example/Pods/Target Support Files/Pods-ZXUserDefaultManager/Pods-ZXUserDefaultManager.modulemap b/example/Pods/Target Support Files/Pods-ZXUserDefaultManager/Pods-ZXUserDefaultManager.modulemap new file mode 100644 index 0000000..3c26583 --- /dev/null +++ b/example/Pods/Target Support Files/Pods-ZXUserDefaultManager/Pods-ZXUserDefaultManager.modulemap @@ -0,0 +1,6 @@ +framework module Pods_ZXUserDefaultManager { + umbrella header "Pods-ZXUserDefaultManager-umbrella.h" + + export * + module * { export * } +} diff --git a/example/Pods/Target Support Files/Pods-ZXUserDefaultManager/Pods-ZXUserDefaultManager.release.xcconfig b/example/Pods/Target Support Files/Pods-ZXUserDefaultManager/Pods-ZXUserDefaultManager.release.xcconfig new file mode 100644 index 0000000..78c323d --- /dev/null +++ b/example/Pods/Target Support Files/Pods-ZXUserDefaultManager/Pods-ZXUserDefaultManager.release.xcconfig @@ -0,0 +1,12 @@ +ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit" "${PODS_CONFIGURATION_BUILD_DIR}/ZXKitCore" "${PODS_CONFIGURATION_BUILD_DIR}/ZXKitUtil" +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit/SnapKit.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/ZXKitCore/ZXKitCore.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/ZXKitUtil/ZXKitUtil.framework/Headers" +LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' +OTHER_LDFLAGS = $(inherited) -framework "SnapKit" -framework "ZXKitCore" -framework "ZXKitUtil" +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 +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/example/Pods/Target Support Files/SnapKit/SnapKit-Info.plist b/example/Pods/Target Support Files/SnapKit/SnapKit-Info.plist new file mode 100644 index 0000000..8d87a1a --- /dev/null +++ b/example/Pods/Target Support Files/SnapKit/SnapKit-Info.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIdentifier + ${PRODUCT_BUNDLE_IDENTIFIER} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + FMWK + CFBundleShortVersionString + 5.0.1 + CFBundleSignature + ???? + CFBundleVersion + ${CURRENT_PROJECT_VERSION} + NSPrincipalClass + + + diff --git a/example/Pods/Target Support Files/SnapKit/SnapKit-dummy.m b/example/Pods/Target Support Files/SnapKit/SnapKit-dummy.m new file mode 100644 index 0000000..b44e8e5 --- /dev/null +++ b/example/Pods/Target Support Files/SnapKit/SnapKit-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_SnapKit : NSObject +@end +@implementation PodsDummy_SnapKit +@end diff --git a/example/Pods/Target Support Files/SnapKit/SnapKit-prefix.pch b/example/Pods/Target Support Files/SnapKit/SnapKit-prefix.pch new file mode 100644 index 0000000..beb2a24 --- /dev/null +++ b/example/Pods/Target Support Files/SnapKit/SnapKit-prefix.pch @@ -0,0 +1,12 @@ +#ifdef __OBJC__ +#import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif + diff --git a/example/Pods/Target Support Files/SnapKit/SnapKit-umbrella.h b/example/Pods/Target Support Files/SnapKit/SnapKit-umbrella.h new file mode 100644 index 0000000..1b1be64 --- /dev/null +++ b/example/Pods/Target Support Files/SnapKit/SnapKit-umbrella.h @@ -0,0 +1,16 @@ +#ifdef __OBJC__ +#import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif + + +FOUNDATION_EXPORT double SnapKitVersionNumber; +FOUNDATION_EXPORT const unsigned char SnapKitVersionString[]; + diff --git a/example/Pods/Target Support Files/SnapKit/SnapKit.debug.xcconfig b/example/Pods/Target Support Files/SnapKit/SnapKit.debug.xcconfig new file mode 100644 index 0000000..6b0071d --- /dev/null +++ b/example/Pods/Target Support Files/SnapKit/SnapKit.debug.xcconfig @@ -0,0 +1,10 @@ +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 +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/example/Pods/Target Support Files/SnapKit/SnapKit.modulemap b/example/Pods/Target Support Files/SnapKit/SnapKit.modulemap new file mode 100644 index 0000000..4b3e47b --- /dev/null +++ b/example/Pods/Target Support Files/SnapKit/SnapKit.modulemap @@ -0,0 +1,6 @@ +framework module SnapKit { + umbrella header "SnapKit-umbrella.h" + + export * + module * { export * } +} diff --git a/example/Pods/Target Support Files/SnapKit/SnapKit.release.xcconfig b/example/Pods/Target Support Files/SnapKit/SnapKit.release.xcconfig new file mode 100644 index 0000000..6b0071d --- /dev/null +++ b/example/Pods/Target Support Files/SnapKit/SnapKit.release.xcconfig @@ -0,0 +1,10 @@ +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 +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/example/Pods/Target Support Files/ZXKitCore/ResourceBundle-ZXKitCore-ZXKitCore-Info.plist b/example/Pods/Target Support Files/ZXKitCore/ResourceBundle-ZXKitCore-ZXKitCore-Info.plist new file mode 100644 index 0000000..ee724e9 --- /dev/null +++ b/example/Pods/Target Support Files/ZXKitCore/ResourceBundle-ZXKitCore-ZXKitCore-Info.plist @@ -0,0 +1,24 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleIdentifier + ${PRODUCT_BUNDLE_IDENTIFIER} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + BNDL + CFBundleShortVersionString + 0.1.5 + CFBundleSignature + ???? + CFBundleVersion + 1 + NSPrincipalClass + + + diff --git a/example/Pods/Target Support Files/ZXKitCore/ZXKitCore-Info.plist b/example/Pods/Target Support Files/ZXKitCore/ZXKitCore-Info.plist new file mode 100644 index 0000000..d0e9821 --- /dev/null +++ b/example/Pods/Target Support Files/ZXKitCore/ZXKitCore-Info.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIdentifier + ${PRODUCT_BUNDLE_IDENTIFIER} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + FMWK + CFBundleShortVersionString + 0.1.5 + CFBundleSignature + ???? + CFBundleVersion + ${CURRENT_PROJECT_VERSION} + NSPrincipalClass + + + diff --git a/example/Pods/Target Support Files/ZXKitCore/ZXKitCore-dummy.m b/example/Pods/Target Support Files/ZXKitCore/ZXKitCore-dummy.m new file mode 100644 index 0000000..258d81f --- /dev/null +++ b/example/Pods/Target Support Files/ZXKitCore/ZXKitCore-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_ZXKitCore : NSObject +@end +@implementation PodsDummy_ZXKitCore +@end diff --git a/example/Pods/Target Support Files/ZXKitCore/ZXKitCore-prefix.pch b/example/Pods/Target Support Files/ZXKitCore/ZXKitCore-prefix.pch new file mode 100644 index 0000000..beb2a24 --- /dev/null +++ b/example/Pods/Target Support Files/ZXKitCore/ZXKitCore-prefix.pch @@ -0,0 +1,12 @@ +#ifdef __OBJC__ +#import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif + diff --git a/example/Pods/Target Support Files/ZXKitCore/ZXKitCore-umbrella.h b/example/Pods/Target Support Files/ZXKitCore/ZXKitCore-umbrella.h new file mode 100644 index 0000000..0933419 --- /dev/null +++ b/example/Pods/Target Support Files/ZXKitCore/ZXKitCore-umbrella.h @@ -0,0 +1,16 @@ +#ifdef __OBJC__ +#import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif + + +FOUNDATION_EXPORT double ZXKitCoreVersionNumber; +FOUNDATION_EXPORT const unsigned char ZXKitCoreVersionString[]; + diff --git a/example/Pods/Target Support Files/ZXKitCore/ZXKitCore.debug.xcconfig b/example/Pods/Target Support Files/ZXKitCore/ZXKitCore.debug.xcconfig new file mode 100644 index 0000000..76cd443 --- /dev/null +++ b/example/Pods/Target Support Files/ZXKitCore/ZXKitCore.debug.xcconfig @@ -0,0 +1,11 @@ +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/ZXKitCore +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit" "${PODS_CONFIGURATION_BUILD_DIR}/ZXKitUtil" +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}/ZXKitCore +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/example/Pods/Target Support Files/ZXKitCore/ZXKitCore.modulemap b/example/Pods/Target Support Files/ZXKitCore/ZXKitCore.modulemap new file mode 100644 index 0000000..d1afa8f --- /dev/null +++ b/example/Pods/Target Support Files/ZXKitCore/ZXKitCore.modulemap @@ -0,0 +1,6 @@ +framework module ZXKitCore { + umbrella header "ZXKitCore-umbrella.h" + + export * + module * { export * } +} diff --git a/example/Pods/Target Support Files/ZXKitCore/ZXKitCore.release.xcconfig b/example/Pods/Target Support Files/ZXKitCore/ZXKitCore.release.xcconfig new file mode 100644 index 0000000..76cd443 --- /dev/null +++ b/example/Pods/Target Support Files/ZXKitCore/ZXKitCore.release.xcconfig @@ -0,0 +1,11 @@ +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/ZXKitCore +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit" "${PODS_CONFIGURATION_BUILD_DIR}/ZXKitUtil" +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}/ZXKitCore +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/example/Pods/Target Support Files/ZXKitUtil/ZXKitUtil-Info.plist b/example/Pods/Target Support Files/ZXKitUtil/ZXKitUtil-Info.plist new file mode 100644 index 0000000..b0b461e --- /dev/null +++ b/example/Pods/Target Support Files/ZXKitUtil/ZXKitUtil-Info.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIdentifier + ${PRODUCT_BUNDLE_IDENTIFIER} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + FMWK + CFBundleShortVersionString + 3.0.1 + CFBundleSignature + ???? + CFBundleVersion + ${CURRENT_PROJECT_VERSION} + NSPrincipalClass + + + diff --git a/example/Pods/Target Support Files/ZXKitUtil/ZXKitUtil-dummy.m b/example/Pods/Target Support Files/ZXKitUtil/ZXKitUtil-dummy.m new file mode 100644 index 0000000..ba861b6 --- /dev/null +++ b/example/Pods/Target Support Files/ZXKitUtil/ZXKitUtil-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_ZXKitUtil : NSObject +@end +@implementation PodsDummy_ZXKitUtil +@end diff --git a/example/Pods/Target Support Files/ZXKitUtil/ZXKitUtil-prefix.pch b/example/Pods/Target Support Files/ZXKitUtil/ZXKitUtil-prefix.pch new file mode 100644 index 0000000..beb2a24 --- /dev/null +++ b/example/Pods/Target Support Files/ZXKitUtil/ZXKitUtil-prefix.pch @@ -0,0 +1,12 @@ +#ifdef __OBJC__ +#import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif + diff --git a/example/Pods/Target Support Files/ZXKitUtil/ZXKitUtil-umbrella.h b/example/Pods/Target Support Files/ZXKitUtil/ZXKitUtil-umbrella.h new file mode 100644 index 0000000..148f5a6 --- /dev/null +++ b/example/Pods/Target Support Files/ZXKitUtil/ZXKitUtil-umbrella.h @@ -0,0 +1,16 @@ +#ifdef __OBJC__ +#import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif + + +FOUNDATION_EXPORT double ZXKitUtilVersionNumber; +FOUNDATION_EXPORT const unsigned char ZXKitUtilVersionString[]; + diff --git a/example/Pods/Target Support Files/ZXKitUtil/ZXKitUtil.debug.xcconfig b/example/Pods/Target Support Files/ZXKitUtil/ZXKitUtil.debug.xcconfig new file mode 100644 index 0000000..727de42 --- /dev/null +++ b/example/Pods/Target Support Files/ZXKitUtil/ZXKitUtil.debug.xcconfig @@ -0,0 +1,10 @@ +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/ZXKitUtil +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}/ZXKitUtil +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/example/Pods/Target Support Files/ZXKitUtil/ZXKitUtil.modulemap b/example/Pods/Target Support Files/ZXKitUtil/ZXKitUtil.modulemap new file mode 100644 index 0000000..75677cf --- /dev/null +++ b/example/Pods/Target Support Files/ZXKitUtil/ZXKitUtil.modulemap @@ -0,0 +1,6 @@ +framework module ZXKitUtil { + umbrella header "ZXKitUtil-umbrella.h" + + export * + module * { export * } +} diff --git a/example/Pods/Target Support Files/ZXKitUtil/ZXKitUtil.release.xcconfig b/example/Pods/Target Support Files/ZXKitUtil/ZXKitUtil.release.xcconfig new file mode 100644 index 0000000..727de42 --- /dev/null +++ b/example/Pods/Target Support Files/ZXKitUtil/ZXKitUtil.release.xcconfig @@ -0,0 +1,10 @@ +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/ZXKitUtil +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}/ZXKitUtil +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/example/Pods/ZXKitCore/LICENSE b/example/Pods/ZXKitCore/LICENSE new file mode 100644 index 0000000..261eeb9 --- /dev/null +++ b/example/Pods/ZXKitCore/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/example/Pods/ZXKitCore/README.md b/example/Pods/ZXKitCore/README.md new file mode 100644 index 0000000..8dc8233 --- /dev/null +++ b/example/Pods/ZXKitCore/README.md @@ -0,0 +1,124 @@ +# ZXKitCore + +[中文文档](./README_zh.md) + +`ZXKitSwift` is a development and debugging tool integrated with iOS platform, named after my favorite novel "Zhu Xian". `ZXKitCore` is the supporting framework of `ZXKitSwift`, which is mainly used by developers of `ZXKitSwift`. + +> 天地不仁,以万物为刍狗 +> +> The world is not benevolent, and everything is a dog + +## 1、Add plugin for ZXKit + +If you need to develop a custom plug-in, you only need to implement `ZXKitPluginProtocol`. The way of implementation is very simple. + +## 1. Import the core file + +Project import `ZXKitCore`, you can use cocoapods to quickly import core files + +``` +pod 'ZXKitCore/core' +``` + +## 2. Implement the agreement + +Declare an object and follow the `ZXKitPluginProtocol` protocol. Respectively return the unique ID of the plug-in, the corresponding icon, plug-in name, plug-in type grouping, and startup function + +``` +class PluginDemo: NSObject { + var isPluginRunning = true +} + +extension PluginDemo: ZXKitPluginProtocol { + var pluginIdentifier: String { + return "com.zxkit.pluginDemo" + } + + var pluginIcon: UIImage? { + return UIImage(named: "zxkit") + } + + var pluginTitle: String { + return "title" + } + + var pluginType: ZXKitPluginType { + return .ui + } + + func start() { + print("start plugin") + isPluginRunning = true + } + + var isRunning: Bool { + return isPluginRunning + } + + func stop() { + print("plugin stop running") + isPluginRunning = false + } +} +``` + +## 3. Register the plug-in + +After that, you can register the plug-in, you only need to register once globally + +## 4. Done + +After cocoapods is released and online, when the user opens `ZXKit`, your plug-in will appear on the debug collection page + +## 5. More configurations + +### 5.1、get floate button + +``` +ZXKit.floatButton +``` + +### 5.2、reset Float Button + +``` +ZXKit.resetFloatButton() +``` + +### 5.3、Display textField + +``` +ZXKit.showInput { (text) in + print(text) +} +``` + +### 5.4、get textField + +``` +ZXKit.textField +``` + +## 2、NSNotification + +`ZXKitCore` provides the following message notifications, you can get the frame display, hide, close, and register new plug-in timing by binding the following notifications + +``` +//new plug-in regist +NSNotification.Name.ZXKitPluginRegist +//show +NSNotification.Name.ZXKitShow +//hide +NSNotification.Name.ZXKitHide +//close +NSNotification.Name.ZXKitClose +``` + +## Default installation + +We will collect excellent debugging libraries from time to time. When users execute the installation of `ZXKitSwift`, they will be installed by default. If you want to include the plug-in in the default integrated library of `ZXKitSwift`, first confirm that you are not using the `iOS` private functions and other illegal factors that affect the App Store listing, and then you can download it in [ZXKitSwift](https://github.com/ZXKitCode/ZXKitSwift) just notify us + +## License + +![](https://camo.githubusercontent.com/eb9066a6d8e0950066f3757c420e3a607c0929583b48ebda6fd9a6f50ccfc8f1/68747470733a2f2f7777772e6170616368652e6f72672f696d672f41534632307468416e6e69766572736172792e6a7067) + +Base on Apache-2.0 License diff --git a/example/Pods/ZXKitCore/pod/ZXKit.swift b/example/Pods/ZXKitCore/pod/ZXKit.swift new file mode 100644 index 0000000..cc91409 --- /dev/null +++ b/example/Pods/ZXKitCore/pod/ZXKit.swift @@ -0,0 +1,133 @@ +// +// ZXKit.swift +// ZXKit +// +// Created by Damon on 2021/4/23. +// + +import UIKit + +extension String{ + var ZXLocaleString: String { + guard let bundlePath = Bundle(for: ZXKit.self).path(forResource: "ZXKitCore", ofType: "bundle") else { return NSLocalizedString(self, comment: "") } + guard let bundle = Bundle(path: bundlePath) else { return NSLocalizedString(self, comment: "") } + let msg = NSLocalizedString(self, tableName: nil, bundle: bundle, value: "", comment: "") + return msg + } +} + +public extension NSNotification.Name { + static let ZXKitPluginRegist = NSNotification.Name("ZXKitPluginRegist") + static let ZXKitShow = NSNotification.Name("ZXKitShow") + static let ZXKitHide = NSNotification.Name("ZXKitHide") + static let ZXKitClose = NSNotification.Name("ZXKitClose") +} + +public class ZXKit: NSObject { + private static var window: ZXKitWindow? + private static var floatWindow: ZXKitFloatWindow? + static var pluginList = [[ZXKitPluginProtocol](), [ZXKitPluginProtocol](), [ZXKitPluginProtocol]()] + + public static var floatButton: UIButton? { + return self.floatWindow?.mButton + } + + public static var textField: UITextField? { + return self.window?.mTextField + } + + + public static func resetFloatButton() { + self.floatButton?.backgroundColor = UIColor.zx.color(hexValue: 0x5dae8b) + self.floatButton?.setTitle("Z".ZXLocaleString, for: UIControl.State.normal) + self.floatButton?.titleLabel?.font = UIFont.systemFont(ofSize: 23, weight: .bold) + self.floatButton?.layer.borderColor = UIColor.zx.color(hexValue: 0xffffff).cgColor + self.floatButton?.zx.addLayerShadow(color: UIColor.zx.color(hexValue: 0x333333), offset: CGSize(width: 2, height: 2), radius: 4, cornerRadius: 30) + self.floatButton?.layer.borderWidth = 4.0 + self.floatButton?.frame = CGRect(x: 0, y: 0, width: 60, height: 60) + } + + public static func regist(plugin: ZXKitPluginProtocol) { + var index = 0 + switch plugin.pluginType { + case .ui: + index = 0 + case .data: + index = 1 + case .other: + index = 2 + } + if !self.pluginList[index].contains(where: { (tPlugin) -> Bool in + return tPlugin.pluginIdentifier == plugin.pluginIdentifier + }) { + self.pluginList[index].append(plugin) + } + if let window = self.window, !window.isHidden { + DispatchQueue.main.async { + window.reloadData() + } + } + NotificationCenter.default.post(name: .ZXKitPluginRegist, object: self.pluginList) + } + + public static func show() { + NotificationCenter.default.post(name: .ZXKitShow, object: nil) + DispatchQueue.main.async { + self.floatWindow?.isHidden = true + if let window = self.window { + window.isHidden = false + } else { + if #available(iOS 13.0, *) { + for windowScene:UIWindowScene in ((UIApplication.shared.connectedScenes as? Set)!) { + if windowScene.activationState == .foregroundActive { + self.window = ZXKitWindow(windowScene: windowScene) + self.window?.frame = UIScreen.main.bounds + } + } + } + if self.window == nil { + self.window = ZXKitWindow(frame: UIScreen.main.bounds) + } + self.window?.isHidden = false + self.window?.reloadData() + } + } + } + + public static func hide() { + NotificationCenter.default.post(name: .ZXKitHide, object: nil) + DispatchQueue.main.async { + self.window?.isHidden = true + //float window + if let window = self.floatWindow { + window.isHidden = false + } else { + if #available(iOS 13.0, *) { + for windowScene:UIWindowScene in ((UIApplication.shared.connectedScenes as? Set)!) { + if windowScene.activationState == .foregroundActive { + self.floatWindow = ZXKitFloatWindow(windowScene: windowScene) + self.floatWindow?.frame = CGRect(x: UIScreen.main.bounds.size.width - 80, y: 100, width: 60, height: 60) + } + } + } + if self.floatWindow == nil { + self.floatWindow = ZXKitFloatWindow(frame: CGRect(x: UIScreen.main.bounds.size.width - 80, y: 100, width: 60, height: 60)) + } + self.floatWindow?.isHidden = false + } + } + } + + public static func close() { + NotificationCenter.default.post(name: .ZXKitClose, object: nil) + DispatchQueue.main.async { + self.window?.isHidden = true + self.floatWindow?.isHidden = true + } + } + + public static func showInput(complete: ((String)->Void)?) { + ZXKit.show() + self.window?.showInput(complete: complete) + } +} diff --git a/example/Pods/ZXKitCore/pod/ZXKitCollectionViewHeaderView.swift b/example/Pods/ZXKitCore/pod/ZXKitCollectionViewHeaderView.swift new file mode 100644 index 0000000..fe996ca --- /dev/null +++ b/example/Pods/ZXKitCore/pod/ZXKitCollectionViewHeaderView.swift @@ -0,0 +1,44 @@ +// +// ZXKitCollectionViewHeaderView.swift +// ZXKit +// +// Created by Damon on 2021/4/23. +// + +import UIKit + +class ZXKitCollectionViewHeaderView: UICollectionViewCell { + override init(frame: CGRect) { + super.init(frame: frame) + self.createUI() + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + func createUI() { +// self.contentView.backgroundColor = UIColor(displayP3Red: 112.0/255.0, green: 161.0/255.0, blue: 255.0/255.0, alpha: 1.0) + self.contentView.backgroundColor = UIColor.zx.color(hexValue: 0x5dae8b) + self.contentView.addSubview(mTitleLabel) + mTitleLabel.snp.makeConstraints { + $0.left.equalToSuperview().offset(20) + $0.right.equalToSuperview().offset(-20) + $0.centerY.equalToSuperview() + } + } + + func updateUI(title: String) { + mTitleLabel.text = title + } + + //MARK: UI + lazy var mTitleLabel: UILabel = { + let tLabel = UILabel() + tLabel.numberOfLines = 2 + tLabel.textAlignment = .left + tLabel.font = .systemFont(ofSize: 18, weight: .medium) + tLabel.textColor = UIColor.zx.color(hexValue: 0xffffff) + return tLabel + }() +} diff --git a/example/Pods/ZXKitCore/pod/ZXKitFloatWindow.swift b/example/Pods/ZXKitCore/pod/ZXKitFloatWindow.swift new file mode 100644 index 0000000..990b632 --- /dev/null +++ b/example/Pods/ZXKitCore/pod/ZXKitFloatWindow.swift @@ -0,0 +1,91 @@ +// +// ZXKitFloatWindow.swift +// ZXKit +// +// Created by Damon on 2021/4/25. +// + +import UIKit +import ZXKitUtil + +class ZXKitFloatWindow: UIWindow { + + @available(iOS 13.0, *) + override init(windowScene: UIWindowScene) { + super.init(windowScene: windowScene) + self._initVC() + self._createUI() + } + + override init(frame: CGRect) { + super.init(frame: frame) + self._initVC() + self._createUI() + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + lazy var mButton: UIButton = { + let button = UIButton(type: .custom) + button.backgroundColor = UIColor.zx.color(hexValue: 0x5dae8b) + button.setTitle("Z".ZXLocaleString, for: UIControl.State.normal) + button.titleLabel?.font = UIFont.systemFont(ofSize: 23, weight: .bold) + button.layer.borderColor = UIColor.zx.color(hexValue: 0xffffff).cgColor + button.zx.addLayerShadow(color: UIColor.zx.color(hexValue: 0x333333), offset: CGSize(width: 2, height: 2), radius: 4, cornerRadius: 30) + button.layer.borderWidth = 4.0 + button.addTarget(self, action: #selector(_show), for: UIControl.Event.touchUpInside) + button.frame = CGRect(x: 0, y: 0, width: 60, height: 60) + + let pan = UIPanGestureRecognizer(target: self, action: #selector(p_touchMove(p:))) + button.addGestureRecognizer(pan) + return button + }() +} + +private extension ZXKitFloatWindow { + + func _initVC() { + self.rootViewController = UIViewController() + self.windowLevel = UIWindow.Level.alert + self.isUserInteractionEnabled = true + } + + @objc func _show() { + ZXKit.show() + } + + func _createUI() { + guard let rootViewController = self.rootViewController else { + return + } + + rootViewController.view.addSubview(mButton) + mButton.snp.makeConstraints { + $0.edges.equalToSuperview() + } + } + + @objc private func p_touchMove(p:UIPanGestureRecognizer) { + guard let window = ZXKitUtil.shared.getCurrentNormalWindow() else { return } + let panPoint = p.location(in: window) + //跟随手指拖拽 + if p.state == .changed { + self.center = CGPoint(x: panPoint.x, y: panPoint.y) + p.setTranslation(CGPoint.zero, in: self) + } + //弹回边界 + if p.state == .ended || p.state == .cancelled { + var x: CGFloat = 50 + if panPoint.x > (window.bounds.size.width) / 2.0 { + x = window.bounds.size.width - 50 + } + let y = min(max(130, panPoint.y), window.bounds.size.height - 140) + p.setTranslation(CGPoint.zero, in: self) + UIView.animate(withDuration: 0.35) { + self.center = CGPoint(x: x, y: y) + } + } + } +} diff --git a/example/Pods/ZXKitCore/pod/ZXKitPluginCollectionViewCell.swift b/example/Pods/ZXKitCore/pod/ZXKitPluginCollectionViewCell.swift new file mode 100644 index 0000000..b86b10c --- /dev/null +++ b/example/Pods/ZXKitCore/pod/ZXKitPluginCollectionViewCell.swift @@ -0,0 +1,76 @@ +// +// ZXKitPluginCollectionViewCell.swift +// ZXKit +// +// Created by Damon on 2021/4/23. +// + +import UIKit +import SnapKit + +class ZXKitPluginCollectionViewCell: UICollectionViewCell { + override init(frame: CGRect) { + super.init(frame: frame) + self.createUI() + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + func createUI() { + self.layer.borderWidth = 0.5 + self.layer.borderColor = UIColor.zx.color(hexValue: 0xd8e3e7).cgColor + self.contentView.addSubview(mImageView) + mImageView.snp.makeConstraints { + $0.top.equalToSuperview().offset(13) + $0.centerX.equalToSuperview() + $0.width.height.equalTo(44) + } + self.contentView.addSubview(mStatusView) + mStatusView.snp.makeConstraints { + $0.left.equalTo(mImageView.snp.right).offset(-5) + $0.top.equalTo(mImageView).offset(-5) + $0.width.height.equalTo(10) + } + self.contentView.addSubview(mTitleLabel) + mTitleLabel.snp.makeConstraints { + $0.left.equalToSuperview().offset(10) + $0.right.equalToSuperview().offset(-10) + $0.top.equalTo(mImageView.snp.bottom).offset(5) + } + } + + func updateUI(plugin: ZXKitPluginProtocol) { + mImageView.image = plugin.pluginIcon + mTitleLabel.text = plugin.pluginTitle + mStatusView.isHidden = !plugin.isRunning + } + + //MARK: UI + lazy var mImageView: UIImageView = { + let tImageView = UIImageView() + tImageView.backgroundColor = UIColor(displayP3Red: 62.0/255.0, green: 183.0/255.0, blue: 142.0/255.0, alpha: 1.0) + tImageView.layer.masksToBounds = true + tImageView.layer.cornerRadius = 10 + return tImageView + }() + + lazy var mTitleLabel: UILabel = { + let tLabel = UILabel() + tLabel.numberOfLines = 2 + tLabel.textAlignment = .center + tLabel.font = .systemFont(ofSize: 13, weight: .medium) + tLabel.textColor = UIColor.zx.color(hexValue: 0x666666) + return tLabel + }() + + lazy var mStatusView: UIView = { + let tView = UIView() + tView.isHidden = true + tView.backgroundColor = UIColor.zx.color(hexValue: 0x81b214) + tView.layer.masksToBounds = true + tView.layer.cornerRadius = 5 + return tView + }() +} diff --git a/example/Pods/ZXKitCore/pod/ZXKitPluginProtocol.swift b/example/Pods/ZXKitCore/pod/ZXKitPluginProtocol.swift new file mode 100644 index 0000000..f034977 --- /dev/null +++ b/example/Pods/ZXKitCore/pod/ZXKitPluginProtocol.swift @@ -0,0 +1,25 @@ +// +// ZXKitPluginProtocol.swift +// ZXKit +// +// Created by Damon on 2021/4/23. +// + +import UIKit + +public enum ZXKitPluginType { + case ui + case data + case other +} + +public protocol ZXKitPluginProtocol { + var pluginIdentifier: String { get } + var pluginIcon: UIImage? { get } + var pluginTitle: String { get } + var pluginType: ZXKitPluginType { get } + var isRunning: Bool { get } + + func start() + func stop() +} diff --git a/example/Pods/ZXKitCore/pod/ZXKitWindow.swift b/example/Pods/ZXKitCore/pod/ZXKitWindow.swift new file mode 100644 index 0000000..a01e992 --- /dev/null +++ b/example/Pods/ZXKitCore/pod/ZXKitWindow.swift @@ -0,0 +1,228 @@ +// +// ZXKitWindow.swift +// ZXKit +// +// Created by Damon on 2021/4/23. +// + +import UIKit + +class ZXKitWindow: UIWindow { + private var inputComplete: ((String)->Void)? + + @available(iOS 13.0, *) + override init(windowScene: UIWindowScene) { + super.init(windowScene: windowScene) + self._initVC() + self._createUI() + } + + override init(frame: CGRect) { + super.init(frame: frame) + self._initVC() + self._createUI() + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + //MARK: UI + lazy var mCollectionView: UICollectionView = { + let tCollectionViewLayout = UICollectionViewFlowLayout() + tCollectionViewLayout.itemSize = CGSize(width: UIScreen.main.bounds.width / 4, height: UIScreen.main.bounds.width / 4) + tCollectionViewLayout.scrollDirection = UICollectionView.ScrollDirection.vertical + tCollectionViewLayout.minimumLineSpacing = 0 + tCollectionViewLayout.minimumInteritemSpacing = 0 + tCollectionViewLayout.headerReferenceSize = CGSize(width: UIScreen.main.bounds.width, height: 40) + let tCollectionView = UICollectionView(frame: CGRect.zero, collectionViewLayout: tCollectionViewLayout) + tCollectionView.contentInsetAdjustmentBehavior = .never + tCollectionView.backgroundColor = UIColor.clear + tCollectionView.dataSource = self + tCollectionView.delegate = self + tCollectionView.isPagingEnabled = false + tCollectionView.showsHorizontalScrollIndicator = false + tCollectionView.register(ZXKitPluginCollectionViewCell.self, forCellWithReuseIdentifier: "ZXKitPluginCollectionViewCell") + tCollectionView.register(ZXKitCollectionViewHeaderView.self, forSupplementaryViewOfKind: UICollectionView.elementKindSectionHeader, withReuseIdentifier: "ZXKitCollectionViewHeaderView") + return tCollectionView + }() + + lazy var mInputBGView: UIView = { + let tView = UIView() + tView.isHidden = true + tView.backgroundColor = UIColor.zx.color(hexValue: 0x000000, alpha: 0.7) + let tap = UITapGestureRecognizer(target: self, action: #selector(_endTextField)) + tView.addGestureRecognizer(tap) + return tView + }() + + lazy var mTextField: UITextField = { + let tTextField = UITextField() + tTextField.leftViewMode = .always + tTextField.leftView = UIView(frame: CGRect(x: 0, y: 0, width: 14, height: 10)) + tTextField.backgroundColor = UIColor.zx.color(hexValue: 0xffffff, alpha: 0.8) + tTextField.font = .systemFont(ofSize: 14) + tTextField.placeholder = "input text".ZXLocaleString + tTextField.clearButtonMode = .always + tTextField.layer.borderWidth = 1.0 + tTextField.layer.borderColor = UIColor.zx.color(hexValue: 0xcccccc).cgColor + tTextField.delegate = self + tTextField.textColor = UIColor.zx.color(hexValue: 0x333333) + return tTextField + }() + + lazy var mButton: UIButton = { + let tButton = UIButton(type: .custom) + tButton.addTarget(self, action: #selector(_endTextField), for: .touchUpInside) + tButton.setTitle("confirm".ZXLocaleString, for: .normal) + tButton.setTitleColor(UIColor.zx.color(hexValue: 0xffffff), for: .normal) + tButton.backgroundColor = UIColor.zx.color(hexValue: 0x5dae8b) + tButton.layer.borderWidth = 1.0 + tButton.layer.borderColor = UIColor.zx.color(hexValue: 0xcccccc).cgColor + return tButton + }() +} + +extension ZXKitWindow { + func reloadData() { + self.mCollectionView.reloadData() + } + + func showInput(complete: ((String)->Void)?) { + self.inputComplete = complete + self.mInputBGView.isHidden = false + self.mTextField.becomeFirstResponder() + } + + func hideInput() { + self.mTextField.endEditing(true) + self.mInputBGView.isHidden = true + self.mTextField.placeholder = "input text".ZXLocaleString + self.mTextField.text = "" + } +} + +extension ZXKitWindow: UICollectionViewDelegate,UICollectionViewDataSource { + func numberOfSections(in collectionView: UICollectionView) -> Int { + return ZXKit.pluginList.count + } + func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { + return ZXKit.pluginList[section].count + } + + func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { + let plugin = ZXKit.pluginList[indexPath.section][indexPath.item] + let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "ZXKitPluginCollectionViewCell", for: indexPath) as! ZXKitPluginCollectionViewCell + cell.updateUI(plugin: plugin) + return cell + } + + func collectionView(_ collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, at indexPath: IndexPath) -> UICollectionReusableView { + let title = ["UI".ZXLocaleString, "Data".ZXLocaleString, "Other".ZXLocaleString] + let cell = collectionView.dequeueReusableSupplementaryView(ofKind: kind, withReuseIdentifier: "ZXKitCollectionViewHeaderView", for: indexPath) as! ZXKitCollectionViewHeaderView + cell.updateUI(title: title[indexPath.section]) + return cell + } + + func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { + let plugin = ZXKit.pluginList[indexPath.section][indexPath.item] + if plugin.isRunning { + plugin.stop() + self.reloadData() + } else { + plugin.start() + self.reloadData() + } + + } +} + +extension ZXKitWindow: UITextFieldDelegate { + func textFieldDidEndEditing(_ textField: UITextField) { + if let complete = self.inputComplete { + complete(textField.text ?? "") + self.reloadData() + } + } + + func textFieldShouldReturn(_ textField: UITextField) -> Bool { + return textField.resignFirstResponder() + } +} + +private extension ZXKitWindow { + + func _initVC() { + self.backgroundColor = UIColor.zx.color(hexValue: 0xfcecdd, alpha: 0.93) + let rootViewController = UIViewController() + + let navigation = UINavigationController(rootViewController: rootViewController) + navigation.navigationBar.barTintColor = UIColor.white + //set title + let view = UIView() + let label = UILabel() + label.attributedText = NSAttributedString(string: "ZXKIT", attributes: [NSAttributedString.Key.font:UIFont.systemFont(ofSize: 18, weight: .medium), NSAttributedString.Key.foregroundColor:UIColor.black]) + view.addSubview(label) + label.snp.makeConstraints { (make) in + make.center.equalToSuperview() + } + rootViewController.navigationItem.titleView = view + //navigationBar + let leftBarItem = UIBarButtonItem(title: "close".ZXLocaleString, style: .plain, target: self, action: #selector(_leftBarItemClick)) + rootViewController.navigationItem.leftBarButtonItem = leftBarItem + let rightBarItem = UIBarButtonItem(title: "hide".ZXLocaleString, style: .plain, target: self, action: #selector(_rightBarItemClick)) + rootViewController.navigationItem.rightBarButtonItem = rightBarItem + // + self.rootViewController = navigation + self.windowLevel = UIWindow.Level.alert + self.isUserInteractionEnabled = true + } + + @objc func _leftBarItemClick() { + ZXKit.close() + } + + @objc func _rightBarItemClick() { + ZXKit.hide() + } + + @objc func _endTextField() { + self.hideInput() + } + + func _createUI() { + guard let navigationController = self.rootViewController as? UINavigationController, let rootViewController = navigationController.topViewController else { + return + } + + rootViewController.view.addSubview(mCollectionView) + mCollectionView.snp.makeConstraints { + $0.left.right.equalToSuperview() + $0.top.equalTo(rootViewController.view.safeAreaLayoutGuide.snp.top) + $0.bottom.equalTo(rootViewController.view.safeAreaLayoutGuide.snp.bottom) + } + + rootViewController.view.addSubview(mInputBGView) + mInputBGView.snp.makeConstraints { + $0.left.right.equalToSuperview() + $0.top.equalTo(rootViewController.view.safeAreaLayoutGuide.snp.top) + $0.bottom.equalTo(rootViewController.view.safeAreaLayoutGuide.snp.bottom) + } + + mInputBGView.addSubview(mTextField) + mTextField.snp.makeConstraints { + $0.left.equalToSuperview() + $0.width.equalTo(UIScreen.main.bounds.width*2.0/3.0) + $0.top.equalTo(rootViewController.view.safeAreaLayoutGuide.snp.top) + $0.height.equalTo(38) + } + + mInputBGView.addSubview(mButton) + mButton.snp.makeConstraints { + $0.left.equalTo(mTextField.snp.right) + $0.right.equalToSuperview() + $0.top.equalTo(mTextField) + $0.height.equalTo(38) + } + } +} diff --git a/example/Pods/ZXKitCore/pod/localizable/en.lproj/Localizable.strings b/example/Pods/ZXKitCore/pod/localizable/en.lproj/Localizable.strings new file mode 100644 index 0000000..4204c00 --- /dev/null +++ b/example/Pods/ZXKitCore/pod/localizable/en.lproj/Localizable.strings @@ -0,0 +1,14 @@ +/* + Localizable.strings + ZXKit + + Created by Damon on 2021/4/25. + +*/ +"UI" = "UI"; +"Data" = "Data"; +"Other" = "Other"; +"close" = "close"; +"hide" = "hide"; +"confirm" = "confirm"; +"input text" = "input text"; diff --git a/example/Pods/ZXKitCore/pod/localizable/zh-Hans.lproj/Localizable.strings b/example/Pods/ZXKitCore/pod/localizable/zh-Hans.lproj/Localizable.strings new file mode 100644 index 0000000..8346c43 --- /dev/null +++ b/example/Pods/ZXKitCore/pod/localizable/zh-Hans.lproj/Localizable.strings @@ -0,0 +1,14 @@ +/* + Localizable.strings + ZXKit + + Created by Damon on 2021/4/25. + +*/ +"UI" = "界面"; +"Data" = "数据"; +"Other" = "其他"; +"close" = "关闭"; +"hide" = "隐藏"; +"confirm" = "确定"; +"input text" = "输入内容"; diff --git a/example/Pods/ZXKitUtil/LICENSE b/example/Pods/ZXKitUtil/LICENSE new file mode 100644 index 0000000..261eeb9 --- /dev/null +++ b/example/Pods/ZXKitUtil/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/example/Pods/ZXKitUtil/README.md b/example/Pods/ZXKitUtil/README.md new file mode 100644 index 0000000..3e857d0 --- /dev/null +++ b/example/Pods/ZXKitUtil/README.md @@ -0,0 +1,120 @@ +# ZXKitUtil + +[中文说明](./README_zh.md) + +`ZXKitUtil` is a collection of commonly used functions. This tool is updated and modified by [HDCommonTools](https://github.com/DamonHu/HDCommonTools), which integrates common functions simply and efficiently. In addition, ZXKitUtilCommonTools has an OC version available. + +## import the project + +### Import via cocoapods + +``` +pod 'ZXKitUtil' +``` + +If you need the function of `idfa`, you can choose to import + +``` +pod 'ZXKitUtil/idfa' +``` + +### Import via file + +Download the project and import the contents of the `pod` folder under the project file into the project + +## API list + +Existing data type operations can be used through the syntax of `.zx`, and other operations can be used through the singleton of `ZXKitUtil.shared`. + +* There is no difference between singleton and `.zx`, singleton will be more unified and simple. The advantage of `.zx` syntax is that it does not need to be imported where it is used + +### UI related + +|Name|Function description|Example| +|----|----|----| +|func getCurrentNormalWindow()|Get the current NormalWindow|ZXKitUtil.shared.getCurrentNormalWindow()| +|func getCurrentVC()|Get the current ViewController|ZXKitUtil.shared.getCurrentVC()| +|func getImage(color: UIColor)|Generate a solid color background image by color|ZXKitUtil.shared.getImage(color: UIColor.red)
or
UIImage.zx.getImage(color: UIColor .red)| +|func getLinearGradientImage(colors: [UIColor], directionType: ZXKitUtilGradientDirection, size: CGSize = CGSize(width: 100, height: 100))|Generate a linear gradient image|ZXKitUtil.shared.getLinearGradientImage(colors: [UIColor.red , UIColor.black, UIColor.blue]
or
UIImage.zx.getLinearGradientImage(colors: [UIColor.red, UIColor.black, UIColor.blue], directionType: .leftToRight)| +|func getRadialGradientImage(colors: [UIColor], raduis: CGFloat, size: CGSize = CGSize(width: 100, height: 100))|Generate an angular gradient image|ZXKitUtil.shared.getRadialGradientImage(colors: [UIColor.red , UIColor.black, UIColor.blue], raduis: 45)
or
UIImage.zx.getRadialGradientImage(colors: [UIColor.red, UIColor.black, UIColor.blue], raduis: 45)| +|func getColor(hexString: String, alpha: CGFloat = 1.0)|Get color by hexadecimal string| UIColor.zx.color(hexString: "#FFFFFF")| +|func UIColor(hexValue: Int, darkHexValue: Int = 0x333333, alpha: Float = 1.0, darkAlpha: Float = 1.0)|Get color by hexadecimal| UIColor.zx.color(hexValue: 0xffffff)| +|UIScreenWidth|Screen width|| +|UIScreenHeight|Screen height|| +|ZXKitUtil_StatusBar_Height|Status Bar Height|| +|func ZXKitUtil_Default_NavigationBar_Height(vc: UIViewController? = nil)|Navigation Bar Height|ZXKitUtil_Default_NavigationBar_Height()| +|func func ZXKitUtil_Default_Tabbar_Height(vc: UIViewController? = nil)|tabbar height|ZXKitUtil_Default_Tabbar_Height()| +|func addLayerShadow(color: UIColor, offset: CGSize, radius: CGFloat, cornerRadius: CGFloat? = nil)|Add a shadow to the view|view.zx.addLayerShadow(color: UIColor.black, offset: CGSize(width: 2, height : 0), radius: 10)| +|func setFrame(x: CGFloat? = nil, y: CGFloat? = nil, width: CGFloat? = nil, height: CGFloat? = nil)|view individually sets a certain value of Frame|view.zx.setFrame(x: 10)| + +### System and software information + +|Name|Function description|Example| +|----|----|----| +|func getAppVersionString()|Get software version|ZXKitUtil.shared.getAppVersionString()| +|func getAppBuildVersionString()|Get software build version|ZXKitUtil.shared.getAppBuildVersionString()| +|func getIOSVersionString()|Get the iOS version of the system|ZXKitUtil.shared.getIOSVersionString()| +|func getIOSLanguageStr()|Get system language|ZXKitUtil.shared.getIOSLanguageStr()| +|func getBundleIdentifier()|Get Software Bundle Identifier|ZXKitUtil.shared.getBundleIdentifier()| +|func getSystemHardware()|Get the machine model identification|ZXKitUtil.shared.getSystemHardware()| +|func getSystemUpTime()|Get the last restart time of this machine|ZXKitUtil.shared.getSystemUpTime()| +|func getIDFAString(idfvIfFailed: Bool = true)|The unique identification of the simulation software|ZXKitUtil.shared.getIDFAString()| +|func getMacAddress()|To get the MAC address of the mobile phone WIFI, you need to enable Access WiFi information|ZXKitUtil.shared.getMacAddress()| +|func openSystemSetting()|Open system settings|ZXKitUtil.shared.openSystemSetting()| +|func openAppStorePage(openType: ZXKitUtilOpenAppStoreType, appleID: String)|Open the App Store page corresponding to the software|ZXKitUtil.shared.openAppStorePage(openType: .app, appleID: "1123211")| +|func openAppStoreReviewPage(openType: ZXKitUtilOpenAppStoreType, appleID: String = "")|Open the score page corresponding to the software|ZXKitUtil.shared.openAppStoreReviewPage(openType: .app)| + +### Software permissions + +|Name|Function description|Example| +|----|----|----| +|func requestPermission(type: ZXKitUtilPermissionType, complete: @escaping ((ZXKitUtilPermissionStatus) -> Void))|Request permission|ZXKitUtil.shared.requestPermission(type: .notification) {(status) in print("Permission setting callback" , status) }| +|func checkPermission(type: ZXKitUtilPermissionType, complete: @escaping ((ZXKitUtilPermissionStatus) -> Void))|Checking software permissions|ZXKitUtil.shared.checkPermission(type: .notification) {(status) in print("Current permission status ", status) }| +|func requestIDFAPermission(complete: @escaping ((ZXKitUtilPermissionStatus) -> Void)) -> Void|Detection software IDFA permission|ZXKitUtil.shared.requestIDFAPermission {(status) in print("Current idfa permission status", status)} | +|func checkIDFAPermission(type: ZXKitUtilPermissionType, complete: @escaping ((ZXKitUtilPermissionStatus) -> Void)) -> Void|Detection software idfa permission|ZXKitUtil.shared.checkIDFAPermission {(status) in print("Current Permission Status", status) }| + +### Multimedia operation + +|Name|Function description|Example| +|----|----|----| +|func getVideoDuration(videoURL: URL) -> Double|Get the duration of the specified video, in seconds | ZXKitUtil.shared.getVideoDuration(videoURL: URL(fileURLWithPath: path))| +|func getVideoSize(videoURL: URL)|Get the specified video resolution, support local or network address|ZXKitUtil.shared.getVideoSize(videoURL: URL(fileURLWithPath: path))| +|func playMusic(url: URL?, repeated: Bool = false, audioSessionCategory: AVAudioSession.Category = AVAudioSession.Category.playback)|Play music|ZXKitUtil.shared.playMusic(url: url, repeated: false)| +|func stopMusic()|Turn off music playback|ZXKitUtil.shared.stopMusic()| +|func playEffect(url: URL?, vibrate: Bool = false)|Play sound effects, silent mode will not play sound effects|ZXKitUtil.shared.playEffect(url: url, vibrate: true)| +|func startVibrate(repeated: Bool = false)|Start vibration|ZXKitUtil.shared.startVibrate()| +|func stopVibrate()|End vibration|ZXKitUtil.shared.stopVibrate()| + +### File operations + +|Name|Function description|Example| +|----|----|----| +|func getFileDirectory(type: ZXKitUtilFileDirectoryType)|Get folder path|ZXKitUtil.shared.getFileDirectory(type: .documents)| +|func createFileDirectory(in type: ZXKitUtilFileDirectoryType, directoryName: String)|Create a folder in the specified folder|ZXKitUtil.shared.createFileDirectory(in: .documents, directoryName: "filePath")| +|func getFileSize(filePath: URL)|Get the size of the specified file|ZXKitUtil.shared.getFileSize(filePath: url)| +|func getFileDirectorySize(fileDirectoryPth: URL)|Get the size of the specified folder|ZXKitUtil.shared.getFileDirectorySize(fileDirectoryPth: url)| + +### Other + +|Name|Function description|Example| +|----|----|----| +|func compare(anotherDate: Date, ignoreTime: Bool = false)|Compare dates and set whether to ignore time|Date().zx.compare(anotherDate: date)| +|func subString(rang: NSRange)|Intercept string|string.zx.subString(rang: NSRange(location: 2, length: 5))| +|func unicodeDecode()|unicode to Chinese|"\\u54c8\\u54c8\\u54c8".zx.unicodeDecode()| +|func unicodeEncode()|Character string to unicode|"Haha is the phone charge".zx.unicodeEncode()| +|func base64Decode(lowercase: Bool = true)|base64 decoding|"5ZOI5ZOI5piv55S16K+d6LS5".zx.base64Decode()| +|func aes256Decrypt(password: String, ivString: String = "abcdefghijklmnop")|aes256 decrypt|string.zx.aes256Decrypt(password: "password")| +|func aes256Encrypt(password: String, ivString: String = "abcdefghijklmnop")|aes256 encryption|string.zx.aes256Encrypt(password: "password")| +|func encryptString(encryType: ZXKitUtilEncryType, lowercase: Bool = true)|String encryption|string.zx.encryptString(encryType: ZXKitUtilEncryType.md5)
Support md5/sha1/sha224/sha256/sha384/sha512/base64 encryption | + +## other + +Welcome to exchange and learn from each other + +Project gitHub address: [https://github.com/ZXKitCode/util](https://github.com/ZXKitCode/util) + +## License + +![](https://camo.githubusercontent.com/eb9066a6d8e0950066f3757c420e3a607c0929583b48ebda6fd9a6f50ccfc8f1/68747470733a2f2f7777772e6170616368652e6f72672f696d672f41534632307468416e6e69766572736172792e6a7067) + +Base on Apache-2.0 License \ No newline at end of file diff --git a/example/Pods/ZXKitUtil/pod/ZXKitUtil+UI.swift b/example/Pods/ZXKitUtil/pod/ZXKitUtil+UI.swift new file mode 100644 index 0000000..f604cdb --- /dev/null +++ b/example/Pods/ZXKitUtil/pod/ZXKitUtil+UI.swift @@ -0,0 +1,231 @@ +// +// ZXKitUtil+UI.swift +// ZXKitUtil +// +// Created by Damon on 2020/7/2. +// Copyright © 2020 Damon. All rights reserved. +// + +import UIKit + +public enum ZXKitUtilGradientDirection { + case leftToRight //AC - BD + case topToBottom //AB - CD + case leftTopToRightBottom //A - D + case leftBottomToRightTop //C - B +} +// A B +// _________ +// | | +// | | +// --------- +// C D + +public extension ZXKitUtil { + ///获取当前的normalwindow + func getCurrentNormalWindow() -> UIWindow? { + var window:UIWindow? = UIApplication.shared.keyWindow + if #available(iOS 13.0, *) { + for windowScene:UIWindowScene in ((UIApplication.shared.connectedScenes as? Set)!) { + if windowScene.activationState == .foregroundActive { + window = windowScene.windows.first + for tmpWin in windowScene.windows { + if tmpWin.windowLevel == .normal { + window = tmpWin + break + } + } + break + } + } + } + if window == nil || window?.windowLevel != UIWindow.Level.normal { + for tmpWin in UIApplication.shared.windows { + if tmpWin.windowLevel == UIWindow.Level.normal { + window = tmpWin + break + } + } + } + return window + } + + ///获取当前显示的vc + func getCurrentVC() -> UIViewController? { + let currentWindow = self.getCurrentNormalWindow() + guard let window = currentWindow else { return nil } + var vc: UIViewController? + let frontView = window.subviews.first + if let nextResponder = frontView?.next { + if nextResponder is UIViewController { + vc = nextResponder as? UIViewController + } else { + vc = window.rootViewController + } + } else { + vc = window.rootViewController + } + + if let currentVC = vc { + if currentVC is UITabBarController { + let tabBarController = currentVC as! UITabBarController + vc = tabBarController.selectedViewController + } + } + if let currentVC = vc { + if currentVC is UINavigationController { + let navigationController = currentVC as! UINavigationController + vc = navigationController.visibleViewController + } + } + return vc + } + + ///通过颜色获取纯色图片 + func getImage(color: UIColor) -> UIImage { + let rect = CGRect(x: 0, y: 0, width: 1, height: 1) + var image: UIImage? + + UIGraphicsBeginImageContextWithOptions(rect.size, false, 0) + let context: CGContext? = UIGraphicsGetCurrentContext() + if let context = context { + context.setFillColor(color.cgColor) + context.fill(rect) + image = UIGraphicsGetImageFromCurrentImageContext() + UIGraphicsEndImageContext() + } + return image ?? UIImage() + } + + ///线性渐变 + func getLinearGradientImage(colors: [UIColor], directionType: ZXKitUtilGradientDirection, size: CGSize = CGSize(width: 100, height: 100)) -> UIImage { + if (colors.count == 0) { + return UIImage() + } else if (colors.count == 1) { + return self.getImage(color: colors.first!) + } + let gradientLayer = CAGradientLayer() + var cgColors = [CGColor]() + var locations = [NSNumber]() + for i in 0.. UIImage { + if (colors.count == 0) { + return UIImage() + } else if (colors.count == 1) { + return self.getImage(color: colors.first!) + } + + UIGraphicsBeginImageContext(size); + let path = CGMutablePath() + path.addArc(center: CGPoint(x: size.width/2.0, y: size.height / 2.0), radius: raduis, startAngle: 0, endAngle: CGFloat(Double.pi) * 2, clockwise: false) + + let colorSpace = CGColorSpaceCreateDeviceRGB() + + var cgColors = [CGColor]() + var locations = [CGFloat]() + for i in 0.. CGFloat { + if let navigationController = vc?.navigationController { + return navigationController.navigationBar.frame.size.height + } else { + return UINavigationController(nibName: nil, bundle: nil).navigationBar.frame.size.height + } +} + +///tabbar高度 +public func ZXKitUtil_Default_Tabbar_Height(vc: UIViewController? = nil) -> CGFloat { + if let tabbarViewController = vc?.tabBarController { + return tabbarViewController.tabBar.frame.size.height + } else { + return UITabBarController(nibName: nil, bundle: nil).tabBar.frame.size.height + } +} + +///状态栏和导航栏总高度 +public func ZXKitUtil_Default_Nav_And_Status_Height(vc: UIViewController? = nil) -> CGFloat { + return ZXKitUtil_Default_NavigationBar_Height(vc: vc) + ZXKitUtil_StatusBar_Height +} diff --git a/example/Pods/ZXKitUtil/pod/ZXKitUtil+file.swift b/example/Pods/ZXKitUtil/pod/ZXKitUtil+file.swift new file mode 100644 index 0000000..760b0c1 --- /dev/null +++ b/example/Pods/ZXKitUtil/pod/ZXKitUtil+file.swift @@ -0,0 +1,82 @@ +// +// ZXKitUtil+file.swift +// ZXKitUtil +// +// Created by Damon on 2020/7/4. +// Copyright © 2020 Damon. All rights reserved. +// + +import Foundation +import CommonCrypto + +public enum ZXKitUtilFileDirectoryType { + case home //程序主目录 + case documents //应用中用户数据可以放在这里,iTunes备份和恢复的时候会包括此目录 + case tmp //存放临时文件,iTunes不会备份和恢复此目录,此目录下文件可能会在应用退出后删除 + case caches //存放缓存文件,iTunes不会备份此目录,此目录下文件不会在应用退出删除,硬盘资源紧张时会被删除 +} + +public extension ZXKitUtil { + ///获取文件夹路径 + func getFileDirectory(type: ZXKitUtilFileDirectoryType) -> URL { + let homePath = NSHomeDirectory() + switch type { + case .home: + return URL(fileURLWithPath: homePath) + case .documents: + return URL(fileURLWithPath: homePath.appending("/Documents")) + case .tmp: + return URL(fileURLWithPath: homePath.appending("/tmp")) + case .caches: + return URL(fileURLWithPath: homePath.appending("/Library/Caches")) + } + } + + /// 在指定文件夹中创建文件夹 + /// - Parameters: + /// - type: 浮层文件夹类型 + /// - directoryName: 文件夹名称 + /// - Returns: 创建的文件夹路径 + func createFileDirectory(in type: ZXKitUtilFileDirectoryType, directoryName: String) -> URL { + let manager = FileManager.default + let superDirectory = self.getFileDirectory(type: type) + + let newFolder = superDirectory.appendingPathComponent(directoryName, isDirectory: true) + + var isDirectory: ObjCBool = false + let isDirExist = manager.fileExists(atPath: newFolder.path, isDirectory: &isDirectory) + if !isDirectory.boolValue || !isDirExist { + do { + try manager.createDirectory(at: newFolder, withIntermediateDirectories: true, attributes: nil) + } catch { + print("创建目录失败\(error)") + return newFolder + } + } + return newFolder + } + + ///获取指定文件的大小 + func getFileSize(filePath: URL) -> Double { + let manager = FileManager.default + if manager.fileExists(atPath: filePath.path) { + let fileSize = try? manager.attributesOfItem(atPath: filePath.path) + return fileSize?[FileAttributeKey.size] as? Double ?? 0 + } + return 0 + } + + ///获取文件夹大小 + func getFileDirectorySize(fileDirectoryPth: URL) -> Double { + let manager = FileManager.default + var size: Double = 0 + + if manager.fileExists(atPath: fileDirectoryPth.path), let subPath = manager.subpaths(atPath: fileDirectoryPth.path) { + for fileName in subPath { + let filePath = fileDirectoryPth.path.appending("/\(fileName)") + size = size + self.getFileSize(filePath: URL(fileURLWithPath: filePath)) + } + } + return size + } +} diff --git a/example/Pods/ZXKitUtil/pod/ZXKitUtil+media.swift b/example/Pods/ZXKitUtil/pod/ZXKitUtil+media.swift new file mode 100644 index 0000000..c12d8d7 --- /dev/null +++ b/example/Pods/ZXKitUtil/pod/ZXKitUtil+media.swift @@ -0,0 +1,111 @@ +// +// ZXKitUtil+media.swift +// ZXKitUtil +// +// Created by Damon on 2020/7/4. +// Copyright © 2020 Damon. All rights reserved. +// + +import Foundation +import AVFoundation + +private var vibrateRepeat = false //标记是否循环震动 +private var audioPlayer: AVAudioPlayer? //音乐播放器 + +public extension ZXKitUtil { + + ///获取指定video的时长, 单位秒 + func getVideoDuration(videoURL: URL) -> Double { + let asset = AVURLAsset(url: videoURL, options: [AVURLAssetPreferPreciseDurationAndTimingKey: false]) + return Double(asset.duration.value) / Double(asset.duration.timescale) + } + + ///获取指定视频的分辨率,支持本地或者网络地址 + func getVideoSize(videoURL: URL) -> CGSize { + let asset = AVURLAsset(url: videoURL, options: nil) + if let track = asset.tracks(withMediaType: AVMediaType.video).first { + return CGSize(width: abs(track.naturalSize.applying(track.preferredTransform).width), height: abs(track.naturalSize.applying(track.preferredTransform).height)) + } else { + return CGSize(width: 0, height: 0) + } + } + + /// 播放音乐 + /// - Parameters: + /// - url: 文件地址 + /// - repeated: 是否重复播放 + /// - audioSessionCategory: 播放模式 .playback 扬声器播放,.playAndRecord听筒模式 + @discardableResult + func playMusic(url: URL?, repeated: Bool = false, audioSessionCategory: AVAudioSession.Category = AVAudioSession.Category.playback) -> AVAudioPlayer? { + guard var musicURL = url else { return nil } + audioPlayer?.stop() + + let audioSession = AVAudioSession.sharedInstance() + try? audioSession.setCategory(audioSessionCategory) + try? audioSession.setActive(true, options: AVAudioSession.SetActiveOptions.init()) + + + if musicURL.absoluteString.hasPrefix("http://") || musicURL.absoluteString.hasPrefix("https://") { + guard let name = musicURL.path.zx.encryptString(encryType: .md5) else { return nil } + let path = ZXKitUtil.shared.createFileDirectory(in: .caches, directoryName: "music").appendingPathComponent(name, isDirectory: false) + let audioData = try? Data(contentsOf: musicURL) + try? audioData?.write(to: path) + musicURL = path + } + + audioPlayer = try? AVAudioPlayer(contentsOf: musicURL, fileTypeHint: nil) + if repeated { + audioPlayer?.numberOfLoops = -1 + } else { + audioPlayer?.numberOfLoops = 0 + } + audioPlayer?.play() + return audioPlayer + } + + ///关闭音乐播放 + func stopMusic() -> Void { + audioPlayer?.stop() + } + + + /// 播放音效,静音模式不会播放音效 + /// - Parameters: + /// - effectURL: 音效文件地址 + /// - vibrate: 是否震动 + func playEffect(url: URL?, vibrate: Bool = false) -> Void { + var soundID = SystemSoundID() + + if let effect = url { + AudioServicesCreateSystemSoundID(effect as CFURL, &soundID) + } else if vibrate { + soundID = kSystemSoundID_Vibrate + } + if vibrate { + AudioServicesPlayAlertSoundWithCompletion(soundID, nil) + } else { + AudioServicesPlaySystemSoundWithCompletion(soundID, nil) + } + } + + /// 开始震动 + /// - Parameter repeated: 是否循环震动 + func startVibrate(repeated: Bool = false) -> Void { + vibrateRepeat = repeated + if repeated { + AudioServicesPlaySystemSoundWithCompletion(kSystemSoundID_Vibrate) { + self.startVibrate(repeated: vibrateRepeat) + } + } else { + AudioServicesPlaySystemSoundWithCompletion(kSystemSoundID_Vibrate) { + + } + } + } + + ///结束震动 + func stopVibrate() -> Void { + vibrateRepeat = false + AudioServicesDisposeSystemSoundID(kSystemSoundID_Vibrate) + } +} diff --git a/example/Pods/ZXKitUtil/pod/ZXKitUtil+permission.swift b/example/Pods/ZXKitUtil/pod/ZXKitUtil+permission.swift new file mode 100644 index 0000000..cd888dd --- /dev/null +++ b/example/Pods/ZXKitUtil/pod/ZXKitUtil+permission.swift @@ -0,0 +1,200 @@ +// +// ZXKitUtil+permission.swift +// ZXKitUtil +// +// Created by Damon on 2020/7/3. +// Copyright © 2020 Damon. All rights reserved. +// + +import Foundation +import AVFoundation +import Photos +import UserNotifications + +private var mLocationManager: CLLocationManager? //定位管理 +private var locationComplete: ((ZXKitUtilPermissionStatus) -> Void)? //定位结束 + +public enum ZXKitUtilPermissionType { + case audio //麦克风权限 + case video //相机权限 + case photoLibrary //相册权限 + case GPS //定位权限 + case notification //通知权限 +} + +public enum ZXKitUtilPermissionStatus { + case authorized //用户允许 + case restricted //被限制修改不了状态,比如家长控制选项等 + case denied //用户拒绝 + case notDetermined //用户尚未选择 + case limited //部分允许,iOS14之后增加的特性 +} + +public extension ZXKitUtil { + ///请求权限 + func requestPermission(type: ZXKitUtilPermissionType, complete: @escaping ((ZXKitUtilPermissionStatus) -> Void)) -> Void { + switch type { + case .audio: + AVCaptureDevice.requestAccess(for: .audio) { (granted) in + if granted { + complete(.authorized) + } else { + complete(.denied) + } + } + case .video: + AVCaptureDevice.requestAccess(for: .video) { (granted) in + if granted { + complete(.authorized) + } else { + complete(.denied) + } + } + case .photoLibrary: + PHPhotoLibrary.requestAuthorization { (status) in + switch status { + case .notDetermined: + complete(.notDetermined) + case .restricted: + complete(.restricted) + case .denied: + complete(.denied) + case .authorized: + complete(.authorized) + case .limited: + complete(.limited) + default: + complete(.authorized) + } + } + case .GPS: + mLocationManager = CLLocationManager() + mLocationManager?.delegate = self + mLocationManager?.requestWhenInUseAuthorization() + mLocationManager?.requestAlwaysAuthorization() + locationComplete = complete + case .notification: + UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .sound, .badge]) { (granted, error) in + if granted { + complete(.authorized) + } else { + complete(.denied) + } + } + } + } + + ///检测权限 + func checkPermission(type: ZXKitUtilPermissionType, complete: @escaping ((ZXKitUtilPermissionStatus) -> Void)) -> Void { + switch type { + case .audio: + let status = AVCaptureDevice.authorizationStatus(for: AVMediaType.audio) + switch status { + case .notDetermined: + complete(.notDetermined) + case .restricted: + complete(.restricted) + case .denied: + complete(.denied) + case .authorized: + complete(.authorized) + default: + complete(.authorized) + } + case .video: + let status = AVCaptureDevice.authorizationStatus(for: AVMediaType.video) + switch status { + case .notDetermined: + complete(.notDetermined) + case .restricted: + complete(.restricted) + case .denied: + complete(.denied) + case .authorized: + complete(.authorized) + default: + complete(.authorized) + } + case .photoLibrary: + let status = PHPhotoLibrary.authorizationStatus() + switch status { + case .notDetermined: + complete(.notDetermined) + case .restricted: + complete(.restricted) + case .denied: + complete(.denied) + case .authorized: + complete(.authorized) + case .limited: + complete(.limited) + default: + complete(.authorized) + } + case .GPS: + if CLLocationManager.locationServicesEnabled() && CLLocationManager.authorizationStatus() == .authorizedAlways || CLLocationManager.authorizationStatus() == .authorizedWhenInUse { + complete(.authorized) + } else if CLLocationManager.authorizationStatus() == .notDetermined { + complete(.notDetermined) + } else if CLLocationManager.authorizationStatus() == .restricted { + complete(.restricted) + } else if CLLocationManager.authorizationStatus() == .denied { + complete(.denied) + } + case .notification: + UNUserNotificationCenter.current().getNotificationSettings { (notificationSettings) in + switch notificationSettings.authorizationStatus { + case .notDetermined: + complete(.notDetermined) + case .denied: + complete(.denied) + case .authorized: + complete(.authorized) + case .provisional: + complete (.authorized) + default: + complete(.authorized) + } + } + } + } +} + +extension ZXKitUtil: CLLocationManagerDelegate { + public func locationManager(_ manager: CLLocationManager, didChangeAuthorization status: CLAuthorizationStatus) { + guard let locationComplete = locationComplete else { return } + switch status { + case .notDetermined: + locationComplete(.notDetermined) + case .restricted: + locationComplete(.restricted) + case .denied: + locationComplete(.denied) + case .authorizedAlways: + locationComplete(.authorized) + case .authorizedWhenInUse: + locationComplete(.authorized) + default: + locationComplete(.authorized) + } + } + + @available(iOS 14.0, *) + public func locationManagerDidChangeAuthorization(_ manager: CLLocationManager) { + guard let locationComplete = locationComplete else { return } + switch manager.authorizationStatus { + case .notDetermined: + locationComplete(.notDetermined) + case .restricted: + locationComplete(.restricted) + case .denied: + locationComplete(.denied) + case .authorizedAlways: + locationComplete(.authorized) + case .authorizedWhenInUse: + locationComplete(.authorized) + default: + locationComplete(.authorized) + } + } +} diff --git a/example/Pods/ZXKitUtil/pod/ZXKitUtil+system.swift b/example/Pods/ZXKitUtil/pod/ZXKitUtil+system.swift new file mode 100644 index 0000000..729ced1 --- /dev/null +++ b/example/Pods/ZXKitUtil/pod/ZXKitUtil+system.swift @@ -0,0 +1,157 @@ +// +// ZXKitUtil+system.swift +// ZXKitUtil +// +// Created by Damon on 2020/7/3. +// Copyright © 2020 Damon. All rights reserved. +// + +import Foundation +import UIKit +import SystemConfiguration.CaptiveNetwork +#if canImport(StoreKit) +import StoreKit +#endif + +public enum ZXKitUtilOpenAppStoreType { + case app //应用内打开,ios10.3以下无反应 + case appStore //跳转到App Store + case auto //ios10.3以上应用内打开,以下跳转到App Store打开 +} + +public extension ZXKitUtil { + ///获取软件版本 + func getAppVersionString() -> String { + let version = Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString") as? String + return version ?? "" + } + + ///获取软件构建版本 + func getAppBuildVersionString() -> String { + let version = Bundle.main.object(forInfoDictionaryKey: "CFBundleVersion") as? String + return version ?? "" + } + + ///获取软件名 + func getAppNameString() -> String { + let version = Bundle.main.object(forInfoDictionaryKey: "CFBundleDisplayName") as? String + return version ?? "" + } + + ///获取系统的iOS版本 + func getIOSVersionString() -> String { + return UIDevice.current.systemVersion + } + + ///获取系统语言 + func getIOSLanguageStr() -> String { + let language = Bundle.main.preferredLocalizations.first + return language ?? "" + } + + ///获取软件Bundle Identifier + func getBundleIdentifier() -> String { + return Bundle.main.bundleIdentifier ?? "" + } + + ///获取本机机型标识 + func getSystemHardware() -> String { + var systemInfo = utsname() + uname(&systemInfo) + let machineMirror = Mirror(reflecting: systemInfo.machine) + let identifier = machineMirror.children.reduce("") { identifier, element in + guard let value = element.value as? Int8, value != 0 else { return identifier } + return identifier + String(UnicodeScalar(UInt8(value))) + } + return identifier + } + + ///获取本机上次重启时间 + func getSystemUpTime() -> TimeInterval { + let timeInterval = ProcessInfo.processInfo.systemUptime + return Date().timeIntervalSince1970 - timeInterval + } + + ///获取手机WIFI的MAC地址,需要开启Access WiFi information + func getMacAddress() -> (ssid: String?, mac: String?) { + let interfaces:NSArray = CNCopySupportedInterfaces()! + var ssid: String? + var mac: String? + for sub in interfaces { + if let dict = CFBridgingRetain(CNCopyCurrentNetworkInfo(sub as! CFString)) { + ssid = dict["SSID"] as? String + mac = dict["BSSID"] as? String + break + } + } + return (ssid: ssid, mac: mac) + } + + ///打开系统设置 + func openSystemSetting() -> Void { + let url = URL(string: UIApplication.openSettingsURLString)! + UIApplication.shared.open(url, options: [:], completionHandler: nil) + } + + ///打开软件对应的App Store页面 + func openAppStorePage(openType: ZXKitUtilOpenAppStoreType, appleID: String) -> Void { + switch openType { + case .app: + let storeProductVC = SKStoreProductViewController() + storeProductVC.delegate = self + storeProductVC.loadProduct(withParameters: [SKStoreProductParameterITunesItemIdentifier : appleID]) { (success, error) in + if success { + self.getCurrentVC()?.present(storeProductVC, animated: true, completion: nil) + } + } + case .appStore: + let url = URL(string: "https://itunes.apple.com/app/id\(appleID)")! + UIApplication.shared.open(url, options: [:], completionHandler: nil) + case .auto: + let storeProductVC = SKStoreProductViewController() + storeProductVC.delegate = self + storeProductVC.loadProduct(withParameters: [SKStoreProductParameterITunesItemIdentifier : appleID]) { (success, error) in + if success { + self.getCurrentVC()?.present(storeProductVC, animated: true, completion: nil) + } else { + let url = URL(string: "https://itunes.apple.com/app/id\(appleID)")! + UIApplication.shared.open(url, options: [:], completionHandler: nil) + } + } + } + } + + /// 打开软件对应的评分页面 + /// - Parameters: + /// - openType: 打开评分页面的类型 + /// - appleID: 打开的appid + /// - openWriteAction: 是否直接到输入评论的页面,仅对跳转到appStore有效 + func openAppStoreReviewPage(openType: ZXKitUtilOpenAppStoreType, appleID: String = "", openWriteAction: Bool = true) -> Void { + switch openType { + case .app: + if #available(iOS 10.3, *) { + SKStoreReviewController.requestReview() + } else { + assert(false, "ios10.3以下版本不支持") + }; + case .appStore: + var url = URL(string: "itms-apps://itunes.apple.com/WebObjects/MZStore.woa/wa/viewContentsUserReviews?type=Purple+Software&id=\(appleID)&mt=8")! + if openWriteAction { + url = URL(string: "itms-apps://itunes.apple.com/cn/app/id\(appleID)?mt=8&action=write-review")! + } + UIApplication.shared.open(url, options: [:], completionHandler: nil) + case .auto: + if #available(iOS 10.3, *) { + self.openAppStoreReviewPage(openType: .app, appleID: appleID) + } else { + self.openAppStoreReviewPage(openType: .appStore, appleID: appleID) + } + } + } +} + +extension ZXKitUtil : SKStoreProductViewControllerDelegate { + public func productViewControllerDidFinish(_ viewController: SKStoreProductViewController) { + viewController.dismiss(animated: true, completion: nil) + } +} diff --git a/example/Pods/ZXKitUtil/pod/ZXKitUtil.swift b/example/Pods/ZXKitUtil/pod/ZXKitUtil.swift new file mode 100644 index 0000000..96a0ca8 --- /dev/null +++ b/example/Pods/ZXKitUtil/pod/ZXKitUtil.swift @@ -0,0 +1,16 @@ +// +// ZXKitUtil.swift +// ZXKitUtil +// +// Created by Damon on 2020/7/2. +// Copyright © 2020 Damon. All rights reserved. +// + +import Foundation + +open class ZXKitUtil: NSObject { + private static let instance = ZXKitUtil() + open class var shared: ZXKitUtil { + return instance + } +} diff --git a/example/Pods/ZXKitUtil/pod/extend/Data+zx.swift b/example/Pods/ZXKitUtil/pod/extend/Data+zx.swift new file mode 100644 index 0000000..44f99ee --- /dev/null +++ b/example/Pods/ZXKitUtil/pod/extend/Data+zx.swift @@ -0,0 +1,163 @@ +// +// Data+zx.swift +// ZXKitUtil +// +// Created by Damon on 2021/5/31. +// Copyright © 2021 Damon. All rights reserved. +// + +import Foundation +import CommonCrypto + +public enum ZXKitUtilEncryType { + case md5 + case sha1 + case sha224 + case sha256 + case sha384 + case sha512 + case base64 +} + +extension Data: ZXKitUtilNameSpaceWrappable { + +} + +public extension ZXKitUtilNameSpace where T == Data { + ///base64解码 + func base64Decode(lowercase: Bool = true) -> String? { + guard var string = String(data: object, encoding: String.Encoding.utf8) else { + return nil + } + if !lowercase { + string = string.uppercased() + } + return string + } + + ///aes256解密 + func aes256Decrypt(password: String, ivString: String = "abcdefghijklmnop") -> String? { + let encryptData = self._crypt(data: object, password: password, ivString: ivString, option: CCOperation(kCCDecrypt)) + return String(data: encryptData, encoding: String.Encoding.utf8) + } + + ///aes256加密 + func aes256Encrypt(password: String, ivString: String = "abcdefghijklmnop") -> String { + let encryptData = self._crypt(data: object, password: password, ivString: ivString, option: CCOperation(kCCEncrypt)) + return encryptData.base64EncodedString() + } + + //MARK: 加密 + func encryptString(encryType: ZXKitUtilEncryType, lowercase: Bool = true) -> String { + var output = NSMutableString() + + switch encryType { + case .md5: + var digest = [UInt8](repeating: 0, count: Int(CC_MD5_DIGEST_LENGTH)) + _ = object.withUnsafeBytes { (messageBytes) -> Bool in + CC_MD5(messageBytes.baseAddress, CC_LONG(object.count), &digest) + return true + } + + output = NSMutableString(capacity: Int(CC_MD5_DIGEST_LENGTH)) + for byte in digest{ + output.appendFormat("%02x", byte) + } + case .sha1: + var digest = [UInt8](repeating: 0, count: Int(CC_SHA1_DIGEST_LENGTH)) + _ = object.withUnsafeBytes { (messageBytes) -> Bool in + CC_SHA1(messageBytes.baseAddress, CC_LONG(object.count), &digest) + return true + } + + output = NSMutableString(capacity: Int(CC_SHA1_DIGEST_LENGTH)) + for byte in digest{ + output.appendFormat("%02x", byte) + } + case .sha224: + var digest = [UInt8](repeating: 0, count: Int(CC_SHA224_DIGEST_LENGTH)) + _ = object.withUnsafeBytes { (messageBytes) -> Bool in + CC_SHA224(messageBytes.baseAddress, CC_LONG(object.count), &digest) + return true + } + + output = NSMutableString(capacity: Int(CC_SHA224_DIGEST_LENGTH)) + for byte in digest{ + output.appendFormat("%02x", byte) + } + case .sha256: + var digest = [UInt8](repeating: 0, count: Int(CC_SHA256_DIGEST_LENGTH)) + _ = object.withUnsafeBytes { (messageBytes) -> Bool in + CC_SHA256(messageBytes.baseAddress, CC_LONG(object.count), &digest) + return true + } + + output = NSMutableString(capacity: Int(CC_SHA256_DIGEST_LENGTH)) + for byte in digest{ + output.appendFormat("%02x", byte) + } + case .sha384: + var digest = [UInt8](repeating: 0, count: Int(CC_SHA384_DIGEST_LENGTH)) + _ = object.withUnsafeBytes { (messageBytes) -> Bool in + CC_SHA384(messageBytes.baseAddress, CC_LONG(object.count), &digest) + return true + } + + output = NSMutableString(capacity: Int(CC_SHA384_DIGEST_LENGTH)) + for byte in digest{ + output.appendFormat("%02x", byte) + } + case .sha512: + var digest = [UInt8](repeating: 0, count: Int(CC_SHA512_DIGEST_LENGTH)) + _ = object.withUnsafeBytes { (messageBytes) -> Bool in + CC_SHA512(messageBytes.baseAddress, CC_LONG(object.count), &digest) + return true + } + + output = NSMutableString(capacity: Int(CC_SHA512_DIGEST_LENGTH)) + for byte in digest{ + output.appendFormat("%02x", byte) + } + case .base64: + let base64Encoded:String = object.base64EncodedString() + output = NSMutableString (string: base64Encoded) + } + + if !lowercase { + return String(output).uppercased() + } + return String(output) + } +} + +private extension ZXKitUtilNameSpace where T == Data { + func _crypt(data: Data, password: String, ivString: String, option: CCOperation) -> Data { + guard let iv = ivString.data(using:String.Encoding.utf8) else { return Data() } + guard let key = password.data(using:String.Encoding.utf8) else { return Data() } + + let cryptLength = data.count + kCCBlockSizeAES128 + var cryptData = Data(count: cryptLength) + + let keyLength = kCCKeySizeAES256 + let options = CCOptions(kCCOptionPKCS7Padding) + + var bytesLength = Int(0) + + let status = cryptData.withUnsafeMutableBytes { cryptBytes in + data.withUnsafeBytes { dataBytes in + iv.withUnsafeBytes { ivBytes in + key.withUnsafeBytes { keyBytes in + CCCrypt(option, CCAlgorithm(kCCAlgorithmAES), options, keyBytes.baseAddress, keyLength, ivBytes.baseAddress, dataBytes.baseAddress, data.count, cryptBytes.baseAddress, cryptLength, &bytesLength) + } + } + } + } + + guard UInt32(status) == UInt32(kCCSuccess) else { + return Data() + } + + cryptData.removeSubrange(bytesLength.. ComparisonResult { + if !ignoreTime { + return object.compare(anotherDate) + } else { + let calendar = Calendar.current + if calendar.compare(object, to: anotherDate, toGranularity: Calendar.Component.year) != .orderedSame { + return calendar.compare(object, to: anotherDate, toGranularity: Calendar.Component.year) + } + if calendar.compare(object, to: anotherDate, toGranularity: Calendar.Component.month) != .orderedSame { + return calendar.compare(object, to: anotherDate, toGranularity: Calendar.Component.month) + } + return calendar.compare(object, to: anotherDate, toGranularity: Calendar.Component.day) + } + } +} diff --git a/example/Pods/ZXKitUtil/pod/extend/String+zx.swift b/example/Pods/ZXKitUtil/pod/extend/String+zx.swift new file mode 100644 index 0000000..173d5bc --- /dev/null +++ b/example/Pods/ZXKitUtil/pod/extend/String+zx.swift @@ -0,0 +1,80 @@ +// +// String+zx.swift +// ZXKitUtil +// +// Created by Damon on 2020/7/3. +// Copyright © 2020 Damon. All rights reserved. +// + +import Foundation + +extension String: ZXKitUtilNameSpaceWrappable { + +} + +public extension ZXKitUtilNameSpace where T == String { + ///截取字符串 + func subString(rang: NSRange) -> String { + var string = String() + var subRange = rang + if rang.location < 0 { + subRange = NSRange(location: 0, length: rang.length) + } + if object.count < subRange.location + subRange.length { + //直接返回完整的 + subRange = NSRange(location: subRange.location, length: object.count - subRange.location) + } + let startIndex = object.index(object.startIndex,offsetBy: subRange.location) + let endIndex = object.index(object.startIndex,offsetBy: (subRange.location + subRange.length)) + let subString = object[startIndex.. String { + let tempStr1 = object.replacingOccurrences(of: "\\u", with: "\\U") + let tempStr2 = tempStr1.replacingOccurrences(of: "\"", with: "\\\"") + let tempStr3 = "\"".appending(tempStr2).appending("\"") + let tempData = tempStr3.data(using: String.Encoding.utf8) + var returnStr:String = "" + do { + returnStr = try PropertyListSerialization.propertyList(from: tempData!, options: [.mutableContainers], format: nil) as! String + } catch { + print("unicodeDecode转义失败\(error)") + return object + } + return returnStr.replacingOccurrences(of: "\\r\\n", with: "\n") + } + + ///字符串转unicode + func unicodeEncode() -> String? { + guard let dataEncode = object.data(using: String.Encoding.nonLossyASCII) else { return nil } + let unicodeStr = String(data: dataEncode, encoding: String.Encoding.utf8) + return unicodeStr + } + + ///base64解码 + func base64Decode(lowercase: Bool = true) -> String? { + let decodeData = Data(base64Encoded: object) + return decodeData?.zx.base64Decode(lowercase: lowercase) + } + + ///aes256解密 + func aes256Decrypt(password: String, ivString: String = "abcdefghijklmnop") -> String? { + let data = Data(base64Encoded: object) + return data?.zx.aes256Decrypt(password: password, ivString: ivString) + } + + ///aes256加密 + func aes256Encrypt(password: String, ivString: String = "abcdefghijklmnop") -> String? { + let data = object.data(using:String.Encoding.utf8) + return data?.zx.aes256Encrypt(password: password, ivString: ivString) + } + + //MARK: 加密 + func encryptString(encryType: ZXKitUtilEncryType, lowercase: Bool = true) -> String? { + let data = object.data(using: String.Encoding.utf8) + return data?.zx.encryptString(encryType: encryType, lowercase: lowercase) + } +} diff --git a/example/Pods/ZXKitUtil/pod/extend/UIColor+zx.swift b/example/Pods/ZXKitUtil/pod/extend/UIColor+zx.swift new file mode 100644 index 0000000..8d99da5 --- /dev/null +++ b/example/Pods/ZXKitUtil/pod/extend/UIColor+zx.swift @@ -0,0 +1,86 @@ +// +// UIColor+zx.swift +// ZXKitUtil +// +// Created by Damon on 2020/7/9. +// Copyright © 2020 Damon. All rights reserved. +// + +import UIKit + +extension UIColor: ZXKitUtilNameSpaceWrappable { + +} + +public extension ZXKitUtilNameSpace where T : UIColor { + ///16进制颜色转为UIColor 0xffffff + static func color(hexValue: Int, darkHexValue: Int = 0x333333, alpha: Float = 1.0, darkAlpha: Float = 1.0) -> UIColor { + if #available(iOS 10.0, *) { + if #available(iOS 13.0, *) { + let dyColor = UIColor { (traitCollection) -> UIColor in + if traitCollection.userInterfaceStyle == .light { + return UIColor(displayP3Red: CGFloat(((Float)((hexValue & 0xFF0000) >> 16))/255.0), green: CGFloat(((Float)((hexValue & 0xFF00) >> 8))/255.0), blue: CGFloat(((Float)(hexValue & 0xFF))/255.0), alpha: CGFloat(alpha)) + } else { + return UIColor(displayP3Red: CGFloat(((Float)((darkHexValue & 0xFF0000) >> 16))/255.0), green: CGFloat(((Float)((darkHexValue & 0xFF00) >> 8))/255.0), blue: CGFloat(((Float)(darkHexValue & 0xFF))/255.0), alpha: CGFloat(darkAlpha)) + } + } + return dyColor + } else { + return UIColor(displayP3Red: CGFloat(((Float)((hexValue & 0xFF0000) >> 16))/255.0), green: CGFloat(((Float)((hexValue & 0xFF00) >> 8))/255.0), blue: CGFloat(((Float)(hexValue & 0xFF))/255.0), alpha: CGFloat(alpha)) + } + } else { + return UIColor(red: CGFloat(((Float)((hexValue & 0xFF0000) >> 16))/255.0), green: CGFloat(((Float)((hexValue & 0xFF00) >> 8))/255.0), blue: CGFloat(((Float)(hexValue & 0xFF))/255.0), alpha: CGFloat(alpha)) + }; + } + + ///16进制字符串转为UIColor #ffffff + static func color(hexString: String, darkHexString: String = "#333333", alpha: CGFloat = 1.0, darkAlpha: CGFloat = 1.0) -> UIColor { + if #available(iOS 13.0, *) { + let dyColor = UIColor { (traitCollection) -> UIColor in + if traitCollection.userInterfaceStyle == .light { + return self._getColor(hexString: hexString, alpha: alpha) + } else { + return self._getColor(hexString: darkHexString, alpha: darkAlpha) + } + } + return dyColor + } else { + return self._getColor(hexString: hexString, alpha: alpha) + } + } +} + +private extension ZXKitUtilNameSpace where T : UIColor { + ///通过十六进制字符串获取颜色 + static func _getColor(hexString: String, alpha: CGFloat = 1.0) -> UIColor { + var hex = "" + if hexString.hasPrefix("#") { + hex = String(hexString.suffix(hexString.count - 1)) + } else if (hexString.hasPrefix("0x") || hexString.hasPrefix("0X")) { + hex = String(hexString.suffix(hexString.count - 2)) + } + guard hex.count == 6 else { + //不足6位不符合 + return UIColor.clear + } + + var red: UInt32 = 0 + var green: UInt32 = 0 + var blue: UInt32 = 0 + + var startIndex = hex.startIndex + var endIndex = hex.index(hex.startIndex, offsetBy: 2) + + Scanner(string: String(hex[startIndex.. UIImage { + return ZXKitUtil.shared.getImage(color: color) + } + + ///线性渐变 + static func getLinearGradientImage(colors: [UIColor], directionType: ZXKitUtilGradientDirection, size: CGSize = CGSize(width: 100, height: 100)) -> UIImage { + return ZXKitUtil.shared.getLinearGradientImage(colors: colors, directionType: directionType, size: size) + } + + ///角度渐变 + static func getRadialGradientImage(colors: [UIColor], raduis: CGFloat, size: CGSize = CGSize(width: 100, height: 100)) -> UIImage { + return ZXKitUtil.shared.getRadialGradientImage(colors: colors, raduis: raduis, size: size) + } +} diff --git a/example/Pods/ZXKitUtil/pod/extend/UIView+zx.swift b/example/Pods/ZXKitUtil/pod/extend/UIView+zx.swift new file mode 100644 index 0000000..efe7761 --- /dev/null +++ b/example/Pods/ZXKitUtil/pod/extend/UIView+zx.swift @@ -0,0 +1,48 @@ +// +// UIView+zx.swift +// ZXKitUtil +// +// Created by Damon on 2020/7/5. +// Copyright © 2020 Damon. All rights reserved. +// + +import UIKit + +extension UIView: ZXKitUtilNameSpaceWrappable { + +} + +public extension ZXKitUtilNameSpace where T : UIView { + ///添加阴影 + func addLayerShadow(color: UIColor, offset: CGSize, radius: CGFloat, cornerRadius: CGFloat? = nil) -> Void { + object.layer.shadowColor = color.cgColor + object.layer.shadowOffset = offset + object.layer.shadowRadius = radius + object.layer.shadowOpacity = 1 + object.layer.shouldRasterize = true + object.layer.rasterizationScale = UIScreen.main.scale + if let cornerRadius = cornerRadius { + object.layer.cornerRadius = cornerRadius + } + } + + ///设置Frame + func setFrame(x: CGFloat? = nil, y: CGFloat? = nil, width: CGFloat? = nil, height: CGFloat? = nil) -> Void { + var frame = object.frame + if let x = x { + object.frame = CGRect(x: x, y: frame.origin.y, width: frame.size.width, height: frame.size.height) + } + frame = object.frame + if let y = y { + object.frame = CGRect(x: frame.origin.x, y: y, width: frame.size.width, height: frame.size.height) + } + frame = object.frame + if let width = width { + object.frame = CGRect(x: frame.origin.x, y: frame.origin.y, width: width, height: frame.size.height) + } + frame = object.frame + if let height = height { + object.frame = CGRect(x: frame.origin.x, y: frame.origin.y, width: frame.size.width, height: height) + } + } +} diff --git a/example/Pods/ZXKitUtil/pod/extend/ZXKitNameSpace.swift b/example/Pods/ZXKitUtil/pod/extend/ZXKitNameSpace.swift new file mode 100644 index 0000000..7c6ad62 --- /dev/null +++ b/example/Pods/ZXKitUtil/pod/extend/ZXKitNameSpace.swift @@ -0,0 +1,36 @@ +// +// ZXKitUtilNameSpace.swift +// ZXKitUtil +// +// Created by Damon on 2020/7/3. +// Copyright © 2020 Damon. All rights reserved. +// + +import Foundation + +public struct ZXKitUtilNameSpace { + let object: T //存储的实例对象 + + internal init(object: T) { + self.object = object + } +} + +//实现命名空间需遵守的协议 +public protocol ZXKitUtilNameSpaceWrappable { + associatedtype WrapperType + var zx: WrapperType { get } + static var zx: WrapperType.Type { get } +} + + +//协议默认的实现方式 +public extension ZXKitUtilNameSpaceWrappable { + var zx: ZXKitUtilNameSpace { + return ZXKitUtilNameSpace(object: self) + } + + static var zx: ZXKitUtilNameSpace.Type { + return ZXKitUtilNameSpace.self + } +} diff --git a/example/ZXUserDefaultManager.xcodeproj/project.pbxproj b/example/ZXUserDefaultManager.xcodeproj/project.pbxproj new file mode 100644 index 0000000..34ac374 --- /dev/null +++ b/example/ZXUserDefaultManager.xcodeproj/project.pbxproj @@ -0,0 +1,508 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 51; + objects = { + +/* Begin PBXBuildFile section */ + D93FF40FC9FA821F3861487E /* Pods_ZXUserDefaultManager.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1723D3D976FA370D6E9E4DE5 /* Pods_ZXUserDefaultManager.framework */; }; + E4292D3426A01D6900D5F6E2 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = E4292D3326A01D6800D5F6E2 /* AppDelegate.swift */; }; + E4292D3826A01D6900D5F6E2 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = E4292D3726A01D6900D5F6E2 /* ViewController.swift */; }; + E4292D3B26A01D6900D5F6E2 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = E4292D3926A01D6900D5F6E2 /* Main.storyboard */; }; + E4292D3D26A01D6C00D5F6E2 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = E4292D3C26A01D6C00D5F6E2 /* Assets.xcassets */; }; + E4292D4026A01D6C00D5F6E2 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = E4292D3E26A01D6C00D5F6E2 /* LaunchScreen.storyboard */; }; + E4292D4A26A028C800D5F6E2 /* ZXUserDefaultVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = E4292D4926A028C800D5F6E2 /* ZXUserDefaultVC.swift */; }; + E4292D4C26A028DB00D5F6E2 /* ZXUserDefaultManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = E4292D4B26A028DB00D5F6E2 /* ZXUserDefaultManager.swift */; }; + E4292D4F26A028F600D5F6E2 /* ZXUserDefaultManager+zxkit.swift in Sources */ = {isa = PBXBuildFile; fileRef = E4292D4E26A028F600D5F6E2 /* ZXUserDefaultManager+zxkit.swift */; }; + E4292D5226A0292C00D5F6E2 /* ZXDataTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = E4292D5126A0292C00D5F6E2 /* ZXDataTableViewCell.swift */; }; + E4292D5826A02F3A00D5F6E2 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = E4292D5526A02F3A00D5F6E2 /* Localizable.strings */; }; + E4292D5A26A030EE00D5F6E2 /* ZXUserDefaultManager.png in Resources */ = {isa = PBXBuildFile; fileRef = E4292D5926A030EE00D5F6E2 /* ZXUserDefaultManager.png */; }; + E4292D5D26A0476700D5F6E2 /* ZXDataCellModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = E4292D5C26A0476700D5F6E2 /* ZXDataCellModel.swift */; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + 1723D3D976FA370D6E9E4DE5 /* Pods_ZXUserDefaultManager.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_ZXUserDefaultManager.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 5A721AEB4DA516A5D4857D7A /* Pods-ZXUserDefaultManager.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ZXUserDefaultManager.release.xcconfig"; path = "Target Support Files/Pods-ZXUserDefaultManager/Pods-ZXUserDefaultManager.release.xcconfig"; sourceTree = ""; }; + 8AD78C5507F03FFF6754E14A /* Pods-ZXUserDefaultManager.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ZXUserDefaultManager.debug.xcconfig"; path = "Target Support Files/Pods-ZXUserDefaultManager/Pods-ZXUserDefaultManager.debug.xcconfig"; sourceTree = ""; }; + E4292D3026A01D6800D5F6E2 /* ZXUserDefaultManager.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = ZXUserDefaultManager.app; sourceTree = BUILT_PRODUCTS_DIR; }; + E4292D3326A01D6800D5F6E2 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + E4292D3726A01D6900D5F6E2 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; + E4292D3A26A01D6900D5F6E2 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + E4292D3C26A01D6C00D5F6E2 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + E4292D3F26A01D6C00D5F6E2 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; + E4292D4126A01D6C00D5F6E2 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + E4292D4926A028C800D5F6E2 /* ZXUserDefaultVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ZXUserDefaultVC.swift; sourceTree = ""; }; + E4292D4B26A028DB00D5F6E2 /* ZXUserDefaultManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ZXUserDefaultManager.swift; sourceTree = ""; }; + E4292D4E26A028F600D5F6E2 /* ZXUserDefaultManager+zxkit.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "ZXUserDefaultManager+zxkit.swift"; sourceTree = ""; }; + E4292D5126A0292C00D5F6E2 /* ZXDataTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ZXDataTableViewCell.swift; sourceTree = ""; }; + E4292D5626A02F3A00D5F6E2 /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/Localizable.strings"; sourceTree = ""; }; + E4292D5726A02F3A00D5F6E2 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Localizable.strings; sourceTree = ""; }; + E4292D5926A030EE00D5F6E2 /* ZXUserDefaultManager.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = ZXUserDefaultManager.png; sourceTree = ""; }; + E4292D5C26A0476700D5F6E2 /* ZXDataCellModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ZXDataCellModel.swift; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + E4292D2D26A01D6800D5F6E2 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + D93FF40FC9FA821F3861487E /* Pods_ZXUserDefaultManager.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 30121892440E027AC5E86870 /* Pods */ = { + isa = PBXGroup; + children = ( + 8AD78C5507F03FFF6754E14A /* Pods-ZXUserDefaultManager.debug.xcconfig */, + 5A721AEB4DA516A5D4857D7A /* Pods-ZXUserDefaultManager.release.xcconfig */, + ); + path = Pods; + sourceTree = ""; + }; + B3EC11008A62008152FBBEA2 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 1723D3D976FA370D6E9E4DE5 /* Pods_ZXUserDefaultManager.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; + E4292D2726A01D6800D5F6E2 = { + isa = PBXGroup; + children = ( + E4292D3226A01D6800D5F6E2 /* ZXUserDefaultManager */, + E4292D3126A01D6800D5F6E2 /* Products */, + 30121892440E027AC5E86870 /* Pods */, + B3EC11008A62008152FBBEA2 /* Frameworks */, + ); + sourceTree = ""; + }; + E4292D3126A01D6800D5F6E2 /* Products */ = { + isa = PBXGroup; + children = ( + E4292D3026A01D6800D5F6E2 /* ZXUserDefaultManager.app */, + ); + name = Products; + sourceTree = ""; + }; + E4292D3226A01D6800D5F6E2 /* ZXUserDefaultManager */ = { + isa = PBXGroup; + children = ( + E4292D4726A0286C00D5F6E2 /* pod */, + E4292D3326A01D6800D5F6E2 /* AppDelegate.swift */, + E4292D3726A01D6900D5F6E2 /* ViewController.swift */, + E4292D3926A01D6900D5F6E2 /* Main.storyboard */, + E4292D3C26A01D6C00D5F6E2 /* Assets.xcassets */, + E4292D3E26A01D6C00D5F6E2 /* LaunchScreen.storyboard */, + E4292D4126A01D6C00D5F6E2 /* Info.plist */, + ); + path = ZXUserDefaultManager; + sourceTree = ""; + }; + E4292D4726A0286C00D5F6E2 /* pod */ = { + isa = PBXGroup; + children = ( + E4292D5B26A0474400D5F6E2 /* model */, + E4292D5326A02F0100D5F6E2 /* assets */, + E4292D5026A0290500D5F6E2 /* view */, + E4292D4D26A028E100D5F6E2 /* zxkit */, + E4292D4826A0288200D5F6E2 /* vc */, + E4292D4B26A028DB00D5F6E2 /* ZXUserDefaultManager.swift */, + ); + name = pod; + path = ../../pod; + sourceTree = ""; + }; + E4292D4826A0288200D5F6E2 /* vc */ = { + isa = PBXGroup; + children = ( + E4292D4926A028C800D5F6E2 /* ZXUserDefaultVC.swift */, + ); + path = vc; + sourceTree = ""; + }; + E4292D4D26A028E100D5F6E2 /* zxkit */ = { + isa = PBXGroup; + children = ( + E4292D4E26A028F600D5F6E2 /* ZXUserDefaultManager+zxkit.swift */, + ); + path = zxkit; + sourceTree = ""; + }; + E4292D5026A0290500D5F6E2 /* view */ = { + isa = PBXGroup; + children = ( + E4292D5126A0292C00D5F6E2 /* ZXDataTableViewCell.swift */, + ); + path = view; + sourceTree = ""; + }; + E4292D5326A02F0100D5F6E2 /* assets */ = { + isa = PBXGroup; + children = ( + E4292D5926A030EE00D5F6E2 /* ZXUserDefaultManager.png */, + E4292D5426A02F3A00D5F6E2 /* localizable */, + ); + path = assets; + sourceTree = ""; + }; + E4292D5426A02F3A00D5F6E2 /* localizable */ = { + isa = PBXGroup; + children = ( + E4292D5526A02F3A00D5F6E2 /* Localizable.strings */, + ); + path = localizable; + sourceTree = ""; + }; + E4292D5B26A0474400D5F6E2 /* model */ = { + isa = PBXGroup; + children = ( + E4292D5C26A0476700D5F6E2 /* ZXDataCellModel.swift */, + ); + path = model; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + E4292D2F26A01D6800D5F6E2 /* ZXUserDefaultManager */ = { + isa = PBXNativeTarget; + buildConfigurationList = E4292D4426A01D6C00D5F6E2 /* Build configuration list for PBXNativeTarget "ZXUserDefaultManager" */; + buildPhases = ( + 26EDAC953867089CC4C02A26 /* [CP] Check Pods Manifest.lock */, + E4292D2C26A01D6800D5F6E2 /* Sources */, + E4292D2D26A01D6800D5F6E2 /* Frameworks */, + E4292D2E26A01D6800D5F6E2 /* Resources */, + B60766A9E52FAE634FBE11CB /* [CP] Embed Pods Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = ZXUserDefaultManager; + productName = ZXUserDefaultManager; + productReference = E4292D3026A01D6800D5F6E2 /* ZXUserDefaultManager.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + E4292D2826A01D6800D5F6E2 /* Project object */ = { + isa = PBXProject; + attributes = { + LastSwiftUpdateCheck = 1250; + LastUpgradeCheck = 1250; + TargetAttributes = { + E4292D2F26A01D6800D5F6E2 = { + CreatedOnToolsVersion = 12.5.1; + }; + }; + }; + buildConfigurationList = E4292D2B26A01D6800D5F6E2 /* Build configuration list for PBXProject "ZXUserDefaultManager" */; + compatibilityVersion = "Xcode 9.3"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + "zh-Hans", + ); + mainGroup = E4292D2726A01D6800D5F6E2; + productRefGroup = E4292D3126A01D6800D5F6E2 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + E4292D2F26A01D6800D5F6E2 /* ZXUserDefaultManager */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + E4292D2E26A01D6800D5F6E2 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + E4292D4026A01D6C00D5F6E2 /* LaunchScreen.storyboard in Resources */, + E4292D5826A02F3A00D5F6E2 /* Localizable.strings in Resources */, + E4292D3D26A01D6C00D5F6E2 /* Assets.xcassets in Resources */, + E4292D3B26A01D6900D5F6E2 /* Main.storyboard in Resources */, + E4292D5A26A030EE00D5F6E2 /* ZXUserDefaultManager.png in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + 26EDAC953867089CC4C02A26 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-ZXUserDefaultManager-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; + }; + B60766A9E52FAE634FBE11CB /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-ZXUserDefaultManager/Pods-ZXUserDefaultManager-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-ZXUserDefaultManager/Pods-ZXUserDefaultManager-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-ZXUserDefaultManager/Pods-ZXUserDefaultManager-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + E4292D2C26A01D6800D5F6E2 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + E4292D4A26A028C800D5F6E2 /* ZXUserDefaultVC.swift in Sources */, + E4292D3826A01D6900D5F6E2 /* ViewController.swift in Sources */, + E4292D5D26A0476700D5F6E2 /* ZXDataCellModel.swift in Sources */, + E4292D4C26A028DB00D5F6E2 /* ZXUserDefaultManager.swift in Sources */, + E4292D3426A01D6900D5F6E2 /* AppDelegate.swift in Sources */, + E4292D4F26A028F600D5F6E2 /* ZXUserDefaultManager+zxkit.swift in Sources */, + E4292D5226A0292C00D5F6E2 /* ZXDataTableViewCell.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXVariantGroup section */ + E4292D3926A01D6900D5F6E2 /* Main.storyboard */ = { + isa = PBXVariantGroup; + children = ( + E4292D3A26A01D6900D5F6E2 /* Base */, + ); + name = Main.storyboard; + sourceTree = ""; + }; + E4292D3E26A01D6C00D5F6E2 /* LaunchScreen.storyboard */ = { + isa = PBXVariantGroup; + children = ( + E4292D3F26A01D6C00D5F6E2 /* Base */, + ); + name = LaunchScreen.storyboard; + sourceTree = ""; + }; + E4292D5526A02F3A00D5F6E2 /* Localizable.strings */ = { + isa = PBXVariantGroup; + children = ( + E4292D5626A02F3A00D5F6E2 /* zh-Hans */, + E4292D5726A02F3A00D5F6E2 /* en */, + ); + name = Localizable.strings; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + E4292D4226A01D6C00D5F6E2 /* 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_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + 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 = ( + "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 = 14.5; + 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; + }; + E4292D4326A01D6C00D5F6E2 /* 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_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + 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_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 = 14.5; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + SDKROOT = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + E4292D4526A01D6C00D5F6E2 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 8AD78C5507F03FFF6754E14A /* Pods-ZXUserDefaultManager.debug.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CODE_SIGN_STYLE = Automatic; + INFOPLIST_FILE = ZXUserDefaultManager/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.lazypig.ZXUserDefaultManager; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + E4292D4626A01D6C00D5F6E2 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 5A721AEB4DA516A5D4857D7A /* Pods-ZXUserDefaultManager.release.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CODE_SIGN_STYLE = Automatic; + INFOPLIST_FILE = ZXUserDefaultManager/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.lazypig.ZXUserDefaultManager; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + E4292D2B26A01D6800D5F6E2 /* Build configuration list for PBXProject "ZXUserDefaultManager" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + E4292D4226A01D6C00D5F6E2 /* Debug */, + E4292D4326A01D6C00D5F6E2 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + E4292D4426A01D6C00D5F6E2 /* Build configuration list for PBXNativeTarget "ZXUserDefaultManager" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + E4292D4526A01D6C00D5F6E2 /* Debug */, + E4292D4626A01D6C00D5F6E2 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = E4292D2826A01D6800D5F6E2 /* Project object */; +} diff --git a/example/ZXUserDefaultManager.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/example/ZXUserDefaultManager.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..919434a --- /dev/null +++ b/example/ZXUserDefaultManager.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/example/ZXUserDefaultManager.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/example/ZXUserDefaultManager.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/example/ZXUserDefaultManager.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/example/ZXUserDefaultManager.xcodeproj/project.xcworkspace/xcuserdata/damon.xcuserdatad/UserInterfaceState.xcuserstate b/example/ZXUserDefaultManager.xcodeproj/project.xcworkspace/xcuserdata/damon.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000000000000000000000000000000000000..90ea84f36e40ca7c548602f4ae24e388d636415d GIT binary patch literal 29426 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 + + + + SchemeUserState + + ZXUserDefaultManager.xcscheme_^#shared#^_ + + orderHint + 5 + + + + diff --git a/example/ZXUserDefaultManager.xcworkspace/contents.xcworkspacedata b/example/ZXUserDefaultManager.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..0e0c837 --- /dev/null +++ b/example/ZXUserDefaultManager.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,10 @@ + + + + + + + diff --git a/example/ZXUserDefaultManager.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/example/ZXUserDefaultManager.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/example/ZXUserDefaultManager.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/example/ZXUserDefaultManager.xcworkspace/xcuserdata/damon.xcuserdatad/UserInterfaceState.xcuserstate b/example/ZXUserDefaultManager.xcworkspace/xcuserdata/damon.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000000000000000000000000000000000000..ba9bf1ce160165fe86a31c1db4b114e6892d2fd7 GIT binary patch literal 34081 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%0Darsr+X7ALVz; zA5=J2_*VE=1Va3o{uS{RNfjv-BPy~h$}1EV$_jPGs0vd>YsJ`#85OfC=2Xn9SXJ?E z#rqXoDz;U8Q*p84ZpDL&hn1+3tQ1vRSK3udDxE8XD|=P;sSK^`R~cCuRXLzCrgBK- zu*%ZPv6Zh^?y9_?uu_C7G87F8lVY@DoMM7vx?-N1YZV(58x`*= zK2U5?98;WE{G|9x?lB|5>paNN@=g`p_D3R%3x(LWnX1KWu!7n znV?KorYh5vEy^j%>B{Gnvy}^#i}H@<@d^~ z%HNgOmA9&Gsy(W`s(V!XRrjrqt4^#=sUA_CUY%8)Tb*BBR9#x#SlwK0s5Vu%R*$V7 zUp=vUa`lwzY1M7jyQ_ax(W>669FbB~x>b}}t9jNZ5?xPM<_g6=&2dW3DN2m+brRs9ELakQUsO!}A>apro>ci^4 zG{Kr)n!cJaO@t;&Gf*=aq6Ech5;Ucn3QZNfG`mKl)iglR^~stkn(3OEnmL+znin;% zYnE%;HLEo5YCh0x)$GuGt~sFjO7pemJIy)G51Nab8=BjiJDU47jy1kD(i&M!P)$Tl zX-!2(j;T{U}Z z_SPJ(IaYI`=2Xq~nuoQhmZ+s`ZEHPieQJGc{cFQ&BWnBC4yaA4O|2bKn_gR8tFIkZ zYpQLnT~^y(yQ+3g?Yi2xYB$xsSG&1(Ywh;hqqQe$Pt~5O{l4~x+8=9wt-V|Op!Q)M zsw3+}byjt5b)I$Jb-s0j>xS2jtjny+sVk_fuG7@j*45XIt{Yc3p>A^B+`1R)UaEVw zZhhU>y6ts4>vq+hsQbR|hq{Y(m+P);ZM6>lZ0&sQYuY8+H?(cqmD<(X_q3a}TeUm1pKA|j4{8r<&uY(WFKB<# z-qik~y{mmtFRr(#x2u=bhtx;a52znhKLlbmmDN|)E9=$uwe|J&jrGm-#`@O!S@m=4 z=heSh|8o8O`i1q2>X+2NQNO%?XZ@K5tRbKwwL#bLV#CIUgAFGezHRuf;roWm4c8lP zHr#Hw({QihfljQm(b?-9buKzLU4LD?E=4z7H&U0a%hkzs1v<5El&)1bMmJu^=%(nV z>1OEW>)z09*6q+8)m_xx&^^#SY($M@qo`5R=-lYm=-KGg=-U|57|}SiF~3pSSl`&# z*xYDrY;By}$Tm)GoZk3c2mr{%O8Wo+ literal 0 HcmV?d00001 diff --git a/example/ZXUserDefaultManager/AppDelegate.swift b/example/ZXUserDefaultManager/AppDelegate.swift new file mode 100644 index 0000000..c8aa0a1 --- /dev/null +++ b/example/ZXUserDefaultManager/AppDelegate.swift @@ -0,0 +1,28 @@ +// +// AppDelegate.swift +// ZXUserDefaultManager +// +// Created by Damon on 2021/7/15. +// + +import UIKit + +@main +class AppDelegate: UIResponder, UIApplicationDelegate { + + var window: UIWindow? + + func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { + // Override point for customization after application launch. + + let vc = ViewController() + window?.rootViewController = vc + window?.makeKeyAndVisible() + return true + } + + + + +} + diff --git a/example/ZXUserDefaultManager/Assets.xcassets/AccentColor.colorset/Contents.json b/example/ZXUserDefaultManager/Assets.xcassets/AccentColor.colorset/Contents.json new file mode 100644 index 0000000..eb87897 --- /dev/null +++ b/example/ZXUserDefaultManager/Assets.xcassets/AccentColor.colorset/Contents.json @@ -0,0 +1,11 @@ +{ + "colors" : [ + { + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/example/ZXUserDefaultManager/Assets.xcassets/AppIcon.appiconset/Contents.json b/example/ZXUserDefaultManager/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000..9221b9b --- /dev/null +++ b/example/ZXUserDefaultManager/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,98 @@ +{ + "images" : [ + { + "idiom" : "iphone", + "scale" : "2x", + "size" : "20x20" + }, + { + "idiom" : "iphone", + "scale" : "3x", + "size" : "20x20" + }, + { + "idiom" : "iphone", + "scale" : "2x", + "size" : "29x29" + }, + { + "idiom" : "iphone", + "scale" : "3x", + "size" : "29x29" + }, + { + "idiom" : "iphone", + "scale" : "2x", + "size" : "40x40" + }, + { + "idiom" : "iphone", + "scale" : "3x", + "size" : "40x40" + }, + { + "idiom" : "iphone", + "scale" : "2x", + "size" : "60x60" + }, + { + "idiom" : "iphone", + "scale" : "3x", + "size" : "60x60" + }, + { + "idiom" : "ipad", + "scale" : "1x", + "size" : "20x20" + }, + { + "idiom" : "ipad", + "scale" : "2x", + "size" : "20x20" + }, + { + "idiom" : "ipad", + "scale" : "1x", + "size" : "29x29" + }, + { + "idiom" : "ipad", + "scale" : "2x", + "size" : "29x29" + }, + { + "idiom" : "ipad", + "scale" : "1x", + "size" : "40x40" + }, + { + "idiom" : "ipad", + "scale" : "2x", + "size" : "40x40" + }, + { + "idiom" : "ipad", + "scale" : "1x", + "size" : "76x76" + }, + { + "idiom" : "ipad", + "scale" : "2x", + "size" : "76x76" + }, + { + "idiom" : "ipad", + "scale" : "2x", + "size" : "83.5x83.5" + }, + { + "idiom" : "ios-marketing", + "scale" : "1x", + "size" : "1024x1024" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/example/ZXUserDefaultManager/Assets.xcassets/Contents.json b/example/ZXUserDefaultManager/Assets.xcassets/Contents.json new file mode 100644 index 0000000..73c0059 --- /dev/null +++ b/example/ZXUserDefaultManager/Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/example/ZXUserDefaultManager/Base.lproj/LaunchScreen.storyboard b/example/ZXUserDefaultManager/Base.lproj/LaunchScreen.storyboard new file mode 100644 index 0000000..865e932 --- /dev/null +++ b/example/ZXUserDefaultManager/Base.lproj/LaunchScreen.storyboard @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/example/ZXUserDefaultManager/Base.lproj/Main.storyboard b/example/ZXUserDefaultManager/Base.lproj/Main.storyboard new file mode 100644 index 0000000..25a7638 --- /dev/null +++ b/example/ZXUserDefaultManager/Base.lproj/Main.storyboard @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/example/ZXUserDefaultManager/Info.plist b/example/ZXUserDefaultManager/Info.plist new file mode 100644 index 0000000..1993c7f --- /dev/null +++ b/example/ZXUserDefaultManager/Info.plist @@ -0,0 +1,47 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + $(PRODUCT_BUNDLE_PACKAGE_TYPE) + CFBundleShortVersionString + 1.0 + CFBundleVersion + 1 + LSRequiresIPhoneOS + + UIApplicationSupportsIndirectInputEvents + + UILaunchStoryboardName + LaunchScreen + UIMainStoryboardFile + Main + UIRequiredDeviceCapabilities + + armv7 + + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + + diff --git a/example/ZXUserDefaultManager/ViewController.swift b/example/ZXUserDefaultManager/ViewController.swift new file mode 100644 index 0000000..303c9ff --- /dev/null +++ b/example/ZXUserDefaultManager/ViewController.swift @@ -0,0 +1,33 @@ +// +// ViewController.swift +// ZXUserDefaultManager +// +// Created by Damon on 2021/7/15. +// + +import UIKit +import ZXKitCore + +class ViewController: UIViewController { + + override func viewDidLoad() { + super.viewDidLoad() + + self.createUI() + ZXKit.regist(plugin: ZXUserDefaultManager.shared) + } + + func createUI() { + self.view.backgroundColor = UIColor.white + let button = UIButton(frame: CGRect(x: 100, y: 100, width: 100, height: 100)) + button.backgroundColor = UIColor.red + self.view.addSubview(button) + button.addTarget(self, action: #selector(_click), for: .touchUpInside) + } + + @objc func _click() { + ZXKit.show() + } + +} + diff --git a/pod/ZXUserDefaultManager.swift b/pod/ZXUserDefaultManager.swift new file mode 100644 index 0000000..136a2c3 --- /dev/null +++ b/pod/ZXUserDefaultManager.swift @@ -0,0 +1,40 @@ +// +// ZXUserDefaultManager.swift +// ZXUserDefaultManager +// +// Created by Damon on 2021/7/15. +// + +import UIKit +import ZXKitUtil +#if canImport(ZXKitCore) +import ZXKitCore +#endif + +open class ZXUserDefaultManager: NSObject { + private static let instance = ZXUserDefaultManager() + open class var shared: ZXUserDefaultManager { + return instance + } + + //MARK: UI + lazy var mNavigationController: UINavigationController = { + let rootViewController = ZXUserDefaultVC() + let navigation = UINavigationController(rootViewController: rootViewController) + navigation.navigationBar.barTintColor = UIColor.white + return navigation + }() + +} + +public extension ZXUserDefaultManager { + func start() { + #if canImport(ZXKitCore) + ZXKit.hide() + #endif + self.mNavigationController.dismiss(animated: false) { [weak self] in + guard let self = self else { return } + ZXKitUtil.shared.getCurrentVC()?.present(self.mNavigationController, animated: true, completion: nil) + } + } +} diff --git a/pod/assets/ZXUserDefaultManager.png b/pod/assets/ZXUserDefaultManager.png new file mode 100644 index 0000000000000000000000000000000000000000..156df7eb3dfb77686e76ccd559c61a1f54e1d551 GIT binary patch literal 22019 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 literal 0 HcmV?d00001 diff --git a/pod/assets/localizable/en.lproj/Localizable.strings b/pod/assets/localizable/en.lproj/Localizable.strings new file mode 100644 index 0000000..6a5f123 --- /dev/null +++ b/pod/assets/localizable/en.lproj/Localizable.strings @@ -0,0 +1,19 @@ +/* + Localizable.strings + ZXKitLogger + + Created by Damon on 2019/6/24. + Copyright © 2019 Damon. All rights reserved. +*/ +"close" = "close"; +"back" = "back"; +"File operations" = "File operations"; +"share" = "share"; +"copy" = "copy"; +"move" = "move"; +"delete" = "delete"; +"cancel" = "cancel"; +"paste here" = "paste here"; +"move here" = "move here"; +"UserDefaultManager" = "UserDefaultManager"; +"Hash value of the file" = "Hash value of the file"; diff --git a/pod/assets/localizable/zh-Hans.lproj/Localizable.strings b/pod/assets/localizable/zh-Hans.lproj/Localizable.strings new file mode 100644 index 0000000..be45856 --- /dev/null +++ b/pod/assets/localizable/zh-Hans.lproj/Localizable.strings @@ -0,0 +1,19 @@ +/* + Localizable.strings + ZXKitLogger + + Created by Damon on 2019/6/24. + Copyright © 2019 Damon. All rights reserved. +*/ +"close" = "关闭"; +"back" = "返回"; +"File operations" = "文件操作"; +"share" = "分享"; +"copy" = "复制"; +"move" = "移动"; +"delete" = "删除"; +"cancel" = "取消"; +"paste here" = "粘贴到此处"; +"move here" = "移动到此处"; +"UserDefaultManager" = "UserDefault管理"; +"Hash value of the file" = "文件的hash值"; diff --git a/pod/model/ZXDataCellModel.swift b/pod/model/ZXDataCellModel.swift new file mode 100644 index 0000000..2e474bc --- /dev/null +++ b/pod/model/ZXDataCellModel.swift @@ -0,0 +1,12 @@ +// +// ZXDataCellModel.swift +// ZXUserDefaultManager +// +// Created by Damon on 2021/7/15. +// + +import UIKit + +class ZXDataCellModel: NSObject { + +} diff --git a/pod/vc/ZXUserDefaultVC.swift b/pod/vc/ZXUserDefaultVC.swift new file mode 100644 index 0000000..3d20323 --- /dev/null +++ b/pod/vc/ZXUserDefaultVC.swift @@ -0,0 +1,156 @@ +// +// ZXUserDefaultVC.swift +// ZXUserDefaultManager +// +// Created by Damon on 2021/7/15. +// + +import UIKit + +func UIImageHDBoundle(named: String?) -> UIImage? { + guard let name = named else { return nil } + guard let bundlePath = Bundle(for: ZXUserDefaultManager.self).path(forResource: "ZXUserDefaultManager", ofType: "bundle") else { return UIImage(named: name) } + guard let bundle = Bundle(path: bundlePath) else { return UIImage(named: name) } + return UIImage(named: name, in: bundle, compatibleWith: nil) +} + +extension String{ + var ZXLocaleString: String { + guard let bundlePath = Bundle(for: ZXUserDefaultManager.self).path(forResource: "ZXUserDefaultManager", ofType: "bundle") else { return NSLocalizedString(self, comment: "") } + guard let bundle = Bundle(path: bundlePath) else { return NSLocalizedString(self, comment: "") } + let msg = NSLocalizedString(self, tableName: nil, bundle: bundle, value: "", comment: "") + return msg + } +} + +class ZXUserDefaultVC: UIViewController { + + override func viewDidLoad() { + super.viewDidLoad() + let rightBarItem = UIBarButtonItem(title: "close".ZXLocaleString, style: .plain, target: self, action: #selector(_rightBarItemClick)) + self.navigationItem.rightBarButtonItem = rightBarItem + + self._createUI() + self._loadData() + } + + @objc func _rightBarItemClick() { + self.dismiss(animated: true, completion: nil) + } + + @objc func _leftBarItemClick() { + + self._loadData() + } + + lazy var mTableView: UITableView = { + let tTableView = UITableView(frame: CGRect.zero, style: UITableView.Style.grouped) + tTableView.rowHeight = 60 + tTableView.estimatedRowHeight = 60 + tTableView.backgroundColor = UIColor.clear + tTableView.showsVerticalScrollIndicator = false + tTableView.separatorStyle = UITableViewCell.SeparatorStyle.singleLine + tTableView.dataSource = self + tTableView.delegate = self + tTableView.register(ZXDataTableViewCell.self, forCellReuseIdentifier: "ZXDataTableViewCell") + return tTableView + }() +} + +extension ZXUserDefaultVC { + func _createUI() { + self.view.backgroundColor = UIColor.zx.color(hexValue: 0xffffff) + self.view.addSubview(mTableView) + mTableView.snp.makeConstraints { + $0.edges.equalToSuperview() + } + } + + func _loadData() { + UserDefaults.standard.dictionaryRepresentation() + } +} + +extension ZXUserDefaultVC: UITableViewDelegate, UITableViewDataSource { + func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { + return mTableViewList.count + } + + func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + let model = self.mTableViewList[indexPath.row] + let cell = tableView.dequeueReusableCell(withIdentifier: "ZXDataTableViewCell") as! ZXDataTableViewCell + cell.selectionStyle = UITableViewCell.SelectionStyle.none + if model.fileType == .folder { + cell.accessoryType = UITableViewCell.AccessoryType.disclosureIndicator + } else { + cell.accessoryType = UITableViewCell.AccessoryType.none + } + + cell.updateUI(model: model) + return cell + } + + func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat { + return 0.1 + } + + func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? { + return UIView() + } + + func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat { + return 0.1 + } + + func tableView(_ tableView: UITableView, viewForFooterInSection section: Int) -> UIView? { + return UIView() + } + + func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { + let model = self.mTableViewList[indexPath.row] + if model.fileType == .folder { + extensionDirectoryPath = extensionDirectoryPath + "/" + model.name + self._loadData() + } else { + let rightBarItem = UIBarButtonItem(title: "close".ZXLocaleString, style: .plain, target: self, action: #selector(_rightBarItemClick)) + self.navigationItem.rightBarButtonItem = rightBarItem + self.operateFilePath = self.currentDirectoryPath.appendingPathComponent(model.name, isDirectory: false) + //preview + let previewVC = QLPreviewController() + previewVC.delegate = self + previewVC.dataSource = self + self.navigationController?.pushViewController(previewVC, animated: true) + } + } + + func tableView(_ tableView: UITableView, canPerformAction action: Selector, forRowAt indexPath: IndexPath, withSender sender: Any?) -> Bool { + return false + } + + func tableView(_ tableView: UITableView, shouldShowMenuForRowAt indexPath: IndexPath) -> Bool { + let model = self.mTableViewList[indexPath.row] + if model.fileType == .folder { + self.operateFilePath = self.currentDirectoryPath.appendingPathComponent(model.name, isDirectory: true) + self._showMore(isDirectory: true) + } else { + self.operateFilePath = self.currentDirectoryPath.appendingPathComponent(model.name, isDirectory: false) + self._showMore(isDirectory: false) + } + + return true + } + + func tableView(_ tableView: UITableView, performAction action: Selector, forRowAt indexPath: IndexPath, withSender sender: Any?) { + + } +} + +extension ZXUserDefaultVC: QLPreviewControllerDelegate, QLPreviewControllerDataSource { + func numberOfPreviewItems(in controller: QLPreviewController) -> Int { + return 1 + } + + func previewController(_ controller: QLPreviewController, previewItemAt index: Int) -> QLPreviewItem { + return self.operateFilePath! as QLPreviewItem + } +} diff --git a/pod/view/ZXDataTableViewCell.swift b/pod/view/ZXDataTableViewCell.swift new file mode 100644 index 0000000..bd31b0f --- /dev/null +++ b/pod/view/ZXDataTableViewCell.swift @@ -0,0 +1,60 @@ +// +// ZXDataTableViewCell.swift +// ZXUserDefaultManager +// +// Created by Damon on 2021/7/15. +// + +import UIKit + +class ZXDataTableViewCell: UITableViewCell { + + override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) { + super.init(style: style, reuseIdentifier: reuseIdentifier) + self._createUI() + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + override func awakeFromNib() { + super.awakeFromNib() + // Initialization code + } + + override func setSelected(_ selected: Bool, animated: Bool) { + super.setSelected(selected, animated: animated) + } + + lazy var mIconButton: UIButton = { + let button = UIButton() + return button + }() + + lazy var mTitleLabel: UILabel = { + let tLabel = UILabel() + tLabel.font = .systemFont(ofSize: 14) + tLabel.textColor = UIColor.zx.color(hexValue: 0x333333) + return tLabel + }() +} + +extension ZXDataTableViewCell { + func _createUI() { + self.contentView.addSubview(mIconButton) + mIconButton.snp.makeConstraints { + $0.left.equalToSuperview().offset(10) + $0.centerY.equalToSuperview() + $0.width.equalTo(60) + $0.height.equalTo(30) + } + + self.contentView.addSubview(mTitleLabel) + mTitleLabel.snp.makeConstraints { + $0.left.equalTo(mIconButton.snp.right).offset(10) + $0.top.equalToSuperview().offset(5) + $0.right.equalToSuperview().offset(-20) + } + } +} diff --git a/pod/zxkit/ZXUserDefaultManager+zxkit.swift b/pod/zxkit/ZXUserDefaultManager+zxkit.swift new file mode 100644 index 0000000..71f38ec --- /dev/null +++ b/pod/zxkit/ZXUserDefaultManager+zxkit.swift @@ -0,0 +1,38 @@ +// +// ZXUserDefaultManager+zxkit.swift +// ZXUserDefaultManager +// +// Created by Damon on 2021/7/15. +// + +import Foundation +import ZXKitCore + +extension ZXUserDefaultManager: ZXKitPluginProtocol { + public var pluginIdentifier: String { + return "com.zxkit.userDefaultManager" + } + + public var pluginIcon: UIImage? { + return UIImageHDBoundle(named: "ZXUserDefaultManager") + } + + public var pluginTitle: String { + return "ZXUserDefaultManager".ZXLocaleString + } + + public var pluginType: ZXKitPluginType { + return .other + } + + public var isRunning: Bool { + return false + } + + public func stop() { + + } + + +} +