├── .gitignore
├── .swiftpm
└── xcode
│ ├── package.xcworkspace
│ └── contents.xcworkspacedata
│ └── xcshareddata
│ └── xcschemes
│ └── SSSwiftUISpinnerButton.xcscheme
├── Example
├── Podfile
├── Podfile.lock
├── Pods
│ ├── Local Podspecs
│ │ └── SSSwiftUISpinnerButton.podspec.json
│ ├── Manifest.lock
│ ├── Pods.xcodeproj
│ │ └── project.pbxproj
│ └── Target Support Files
│ │ ├── Pods-SSSwiftUISpinnerButtonDemo
│ │ ├── Pods-SSSwiftUISpinnerButtonDemo-Info.plist
│ │ ├── Pods-SSSwiftUISpinnerButtonDemo-acknowledgements.markdown
│ │ ├── Pods-SSSwiftUISpinnerButtonDemo-acknowledgements.plist
│ │ ├── Pods-SSSwiftUISpinnerButtonDemo-dummy.m
│ │ ├── Pods-SSSwiftUISpinnerButtonDemo-frameworks-Debug-input-files.xcfilelist
│ │ ├── Pods-SSSwiftUISpinnerButtonDemo-frameworks-Debug-output-files.xcfilelist
│ │ ├── Pods-SSSwiftUISpinnerButtonDemo-frameworks-Release-input-files.xcfilelist
│ │ ├── Pods-SSSwiftUISpinnerButtonDemo-frameworks-Release-output-files.xcfilelist
│ │ ├── Pods-SSSwiftUISpinnerButtonDemo-frameworks.sh
│ │ ├── Pods-SSSwiftUISpinnerButtonDemo-umbrella.h
│ │ ├── Pods-SSSwiftUISpinnerButtonDemo.debug.xcconfig
│ │ ├── Pods-SSSwiftUISpinnerButtonDemo.modulemap
│ │ └── Pods-SSSwiftUISpinnerButtonDemo.release.xcconfig
│ │ └── SSSwiftUISpinnerButton
│ │ ├── SSSwiftUISpinnerButton-Info.plist
│ │ ├── SSSwiftUISpinnerButton-dummy.m
│ │ ├── SSSwiftUISpinnerButton-prefix.pch
│ │ ├── SSSwiftUISpinnerButton-umbrella.h
│ │ ├── SSSwiftUISpinnerButton.debug.xcconfig
│ │ ├── SSSwiftUISpinnerButton.modulemap
│ │ └── SSSwiftUISpinnerButton.release.xcconfig
├── SSSwiftUISpinnerButtonDemo.xcodeproj
│ ├── project.pbxproj
│ ├── project.xcworkspace
│ │ ├── contents.xcworkspacedata
│ │ └── xcshareddata
│ │ │ └── IDEWorkspaceChecks.plist
│ └── xcshareddata
│ │ └── xcschemes
│ │ └── SSSwiftUISpinnerButtonDemo.xcscheme
├── SSSwiftUISpinnerButtonDemo.xcworkspace
│ ├── contents.xcworkspacedata
│ └── xcshareddata
│ │ └── IDEWorkspaceChecks.plist
└── SSSwiftUISpinnerButtonDemo
│ ├── Assets.xcassets
│ ├── AccentColor.colorset
│ │ └── Contents.json
│ ├── AppIcon.appiconset
│ │ └── Contents.json
│ └── Contents.json
│ ├── ContentView.swift
│ ├── HelperClass
│ ├── Color+Extension.swift
│ └── Enumerations.swift
│ ├── Info.plist
│ ├── Preview Content
│ └── Preview Assets.xcassets
│ │ └── Contents.json
│ └── SSSwiftUISpinnerButtonDemoApp.swift
├── LICENSE
├── Package.swift
├── README.md
├── SSSwiftUISpinnerButton.gif
├── SSSwiftUISpinnerButton.podspec
├── Sources
└── SSSwiftUISpinnerButton
│ ├── SpinnerButton.swift
│ ├── SpinnerButtonAnimationStyle
│ ├── ArcsRotateChaseAnimation.swift
│ ├── BallRotateFadeAnimation.swift
│ ├── BallSpinChaseAnimation.swift
│ └── LineSpinFadeAnimation.swift
│ ├── SpinnerButtonAnimationView.swift
│ └── SpinnerButtonViewStyle.swift
├── Tests
├── LinuxMain.swift
└── SSSwiftUISpinnerButtonTests
│ ├── SSSwiftUISpinnerButtonTests.swift
│ └── XCTestManifests.swift
└── simformBanner.png
/.gitignore:
--------------------------------------------------------------------------------
1 | # Xcode
2 | #
3 | # gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore
4 |
5 | ## User settings
6 | xcuserdata/
7 |
8 | ## compatibility with Xcode 8 and earlier (ignoring not required starting Xcode 9)
9 | *.xcscmblueprint
10 | *.xccheckout
11 |
12 | ## compatibility with Xcode 3 and earlier (ignoring not required starting Xcode 4)
13 | build/
14 | DerivedData/
15 | *.moved-aside
16 | *.pbxuser
17 | !default.pbxuser
18 | *.mode1v3
19 | !default.mode1v3
20 | *.mode2v3
21 | !default.mode2v3
22 | *.perspectivev3
23 | !default.perspectivev3
24 |
25 | ## Obj-C/Swift specific
26 | *.hmap
27 |
28 | ## App packaging
29 | *.ipa
30 | *.dSYM.zip
31 | *.dSYM
32 |
33 | ## Playgrounds
34 | timeline.xctimeline
35 | playground.xcworkspace
36 |
37 | # Swift Package Manager
38 | #
39 | # Add this line if you want to avoid checking in source code from Swift Package Manager dependencies.
40 | # Packages/
41 | # Package.pins
42 | # Package.resolved
43 | # *.xcodeproj
44 | #
45 | # Xcode automatically generates this directory with a .xcworkspacedata file and xcuserdata
46 | # hence it is not needed unless you have added a package configuration file to your project
47 | # .swiftpm
48 |
49 | .build/
50 |
51 | # CocoaPods
52 | #
53 | # We recommend against adding the Pods directory to your .gitignore. However
54 | # you should judge for yourself, the pros and cons are mentioned at:
55 | # https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control
56 | #
57 | # Pods/
58 | #
59 | # Add this line if you want to avoid checking in source code from the Xcode workspace
60 | # *.xcworkspace
61 |
62 | # Carthage
63 | #
64 | # Add this line if you want to avoid checking in source code from Carthage dependencies.
65 | # Carthage/Checkouts
66 |
67 | Carthage/Build/
68 |
69 | # Accio dependency management
70 | Dependencies/
71 | .accio/
72 |
73 | # fastlane
74 | #
75 | # It is recommended to not store the screenshots in the git repo.
76 | # Instead, use fastlane to re-generate the screenshots whenever they are needed.
77 | # For more information about the recommended setup visit:
78 | # https://docs.fastlane.tools/best-practices/source-control/#source-control
79 |
80 | fastlane/report.xml
81 | fastlane/Preview.html
82 | fastlane/screenshots/**/*.png
83 | fastlane/test_output
84 |
85 | # Code Injection
86 | #
87 | # After new code Injection tools there's a generated folder /iOSInjectionProject
88 | # https://github.com/johnno1962/injectionforxcode
89 |
90 | iOSInjectionProject/
91 |
--------------------------------------------------------------------------------
/.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/.swiftpm/xcode/xcshareddata/xcschemes/SSSwiftUISpinnerButton.xcscheme:
--------------------------------------------------------------------------------
1 |
2 |
5 |
8 |
9 |
15 |
21 |
22 |
23 |
24 |
25 |
30 |
31 |
32 |
33 |
43 |
44 |
50 |
51 |
57 |
58 |
59 |
60 |
62 |
63 |
66 |
67 |
68 |
--------------------------------------------------------------------------------
/Example/Podfile:
--------------------------------------------------------------------------------
1 | use_frameworks!
2 | platform :ios, '13.0'
3 |
4 | target 'SSSwiftUISpinnerButtonDemo' do
5 |
6 | pod 'SSSwiftUISpinnerButton', :path => '../'
7 |
8 | end
9 |
--------------------------------------------------------------------------------
/Example/Podfile.lock:
--------------------------------------------------------------------------------
1 | PODS:
2 | - SSSwiftUISpinnerButton (0.0.2)
3 |
4 | DEPENDENCIES:
5 | - SSSwiftUISpinnerButton (from `../`)
6 |
7 | EXTERNAL SOURCES:
8 | SSSwiftUISpinnerButton:
9 | :path: "../"
10 |
11 | SPEC CHECKSUMS:
12 | SSSwiftUISpinnerButton: fb2c15c4455311962db6fb58627507a19499a20b
13 |
14 | PODFILE CHECKSUM: 91de88df75cf889d0215da32bcf49596e3245789
15 |
16 | COCOAPODS: 1.10.1
17 |
--------------------------------------------------------------------------------
/Example/Pods/Local Podspecs/SSSwiftUISpinnerButton.podspec.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "SSSwiftUISpinnerButton",
3 | "version": "0.0.2",
4 | "summary": "Button with different spinner animation styles.",
5 | "description": "SpinnerButton is a custom button with different spinner animation styles.",
6 | "homepage": "https://github.com/mobile-simformsolutions/SSSwiftUISpinnerButton",
7 | "license": {
8 | "type": "MIT",
9 | "file": "LICENSE"
10 | },
11 | "authors": {
12 | "Chaitali Lad": "chaitali.l@simformsolutions.com"
13 | },
14 | "platforms": {
15 | "ios": "13.0"
16 | },
17 | "swift_versions": "5.0",
18 | "source": {
19 | "git": "https://github.com/mobile-simformsolutions/SSSwiftUISpinnerButton.git",
20 | "tag": "0.0.2"
21 | },
22 | "source_files": "Sources/**/*",
23 | "swift_version": "5.0"
24 | }
25 |
--------------------------------------------------------------------------------
/Example/Pods/Manifest.lock:
--------------------------------------------------------------------------------
1 | PODS:
2 | - SSSwiftUISpinnerButton (0.0.2)
3 |
4 | DEPENDENCIES:
5 | - SSSwiftUISpinnerButton (from `../`)
6 |
7 | EXTERNAL SOURCES:
8 | SSSwiftUISpinnerButton:
9 | :path: "../"
10 |
11 | SPEC CHECKSUMS:
12 | SSSwiftUISpinnerButton: fb2c15c4455311962db6fb58627507a19499a20b
13 |
14 | PODFILE CHECKSUM: 91de88df75cf889d0215da32bcf49596e3245789
15 |
16 | COCOAPODS: 1.10.1
17 |
--------------------------------------------------------------------------------
/Example/Pods/Pods.xcodeproj/project.pbxproj:
--------------------------------------------------------------------------------
1 | // !$*UTF8*$!
2 | {
3 | archiveVersion = 1;
4 | classes = {
5 | };
6 | objectVersion = 51;
7 | objects = {
8 |
9 | /* Begin PBXBuildFile section */
10 | 17171DF024650A170FB16827056F1641 /* BallSpinChaseAnimation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5F8B1F0D8BBA4F7EE3655E8BEBB1DFDF /* BallSpinChaseAnimation.swift */; };
11 | 1CA7FE270EE7AB3BB8EF93B960B09935 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 73010CC983E3809BECEE5348DA1BB8C6 /* Foundation.framework */; };
12 | 28497D1CB9006BBE28F13BF2F5BC1F7B /* BallRotateFadeAnimation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6FC0556FDD13070815C62F0D9933B69D /* BallRotateFadeAnimation.swift */; };
13 | 32ED36F6CD7EA11C9AF0DE99C722E7C4 /* SSSwiftUISpinnerButton-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 1D72B62FC9FC70DC4EC9B051ADC6C66A /* SSSwiftUISpinnerButton-dummy.m */; };
14 | 733BD72A392B56C1B9E9AA5E6AF41267 /* SpinnerButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = E5014E674D41833C1D428CA893CB7072 /* SpinnerButton.swift */; };
15 | 7CC1478F67D30393EDDB89B261E94525 /* SpinnerButtonViewStyle.swift in Sources */ = {isa = PBXBuildFile; fileRef = 23BBDB66D3A953CB43C6EFECCEB30844 /* SpinnerButtonViewStyle.swift */; };
16 | A311B480923931DC744EBB27C7B31313 /* SSSwiftUISpinnerButton-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 638BB588EDBB08D5AFD1958D1AEBAF9A /* SSSwiftUISpinnerButton-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };
17 | B39098035928BB870C4117F59B4D20D3 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 73010CC983E3809BECEE5348DA1BB8C6 /* Foundation.framework */; };
18 | B44D9EE8797DE058D317B9B27DEB09CC /* Pods-SSSwiftUISpinnerButtonDemo-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = C43A0634462B0D75D9D102F2B495B1F1 /* Pods-SSSwiftUISpinnerButtonDemo-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };
19 | C03B5E462B296241297AA120FE927224 /* SpinnerButtonAnimationView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4E99EC64F3AD978A5DC3767CD86B8BBC /* SpinnerButtonAnimationView.swift */; };
20 | C25D65A9EAD72E9B55F9B3A64A67E13B /* ArcsRotateChaseAnimation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 48D9712B60491F910AC2CD02BE37CA92 /* ArcsRotateChaseAnimation.swift */; };
21 | CE6E682A6D7FE94DB9406BD3C8384145 /* LineSpinFadeAnimation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 40D80250BFD2FA1BB2084C20D34C297D /* LineSpinFadeAnimation.swift */; };
22 | DA60344EEB6E29D7A5AD489D0185958D /* Pods-SSSwiftUISpinnerButtonDemo-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = B880073B82A47453243AFC670769862B /* Pods-SSSwiftUISpinnerButtonDemo-dummy.m */; };
23 | /* End PBXBuildFile section */
24 |
25 | /* Begin PBXContainerItemProxy section */
26 | F8C6F145A57D3FB8206BC02568BEEE29 /* PBXContainerItemProxy */ = {
27 | isa = PBXContainerItemProxy;
28 | containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
29 | proxyType = 1;
30 | remoteGlobalIDString = AC9F0D1F55E9380DB94198699F0659FD;
31 | remoteInfo = SSSwiftUISpinnerButton;
32 | };
33 | /* End PBXContainerItemProxy section */
34 |
35 | /* Begin PBXFileReference section */
36 | 06F98A67C2088AD1D5F34A1120140FF8 /* Pods-SSSwiftUISpinnerButtonDemo-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-SSSwiftUISpinnerButtonDemo-Info.plist"; sourceTree = ""; };
37 | 1D72B62FC9FC70DC4EC9B051ADC6C66A /* SSSwiftUISpinnerButton-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SSSwiftUISpinnerButton-dummy.m"; sourceTree = ""; };
38 | 20E100DCCE017276266DF9DBFD6178B8 /* SSSwiftUISpinnerButton-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "SSSwiftUISpinnerButton-Info.plist"; sourceTree = ""; };
39 | 21F8970714B8EB78415A44FDFFD894EE /* LICENSE */ = {isa = PBXFileReference; includeInIndex = 1; path = LICENSE; sourceTree = ""; };
40 | 23A54CBE2B45004E7F1BF3B65BFD5F4B /* SSSwiftUISpinnerButton-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SSSwiftUISpinnerButton-prefix.pch"; sourceTree = ""; };
41 | 23BBDB66D3A953CB43C6EFECCEB30844 /* SpinnerButtonViewStyle.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SpinnerButtonViewStyle.swift; path = Sources/SSSwiftUISpinnerButton/SpinnerButtonViewStyle.swift; sourceTree = ""; };
42 | 3C35F0C0D79DAF8E23130BBC477F3740 /* SSSwiftUISpinnerButton.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = SSSwiftUISpinnerButton.modulemap; sourceTree = ""; };
43 | 40D80250BFD2FA1BB2084C20D34C297D /* LineSpinFadeAnimation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = LineSpinFadeAnimation.swift; sourceTree = ""; };
44 | 457F0608AE83D6F5BF621805EE06C2AE /* SSSwiftUISpinnerButton.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = SSSwiftUISpinnerButton.framework; path = SSSwiftUISpinnerButton.framework; sourceTree = BUILT_PRODUCTS_DIR; };
45 | 48D9712B60491F910AC2CD02BE37CA92 /* ArcsRotateChaseAnimation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ArcsRotateChaseAnimation.swift; sourceTree = ""; };
46 | 4BCCD93B4EAE75D850BECF072CF1F065 /* SSSwiftUISpinnerButton.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SSSwiftUISpinnerButton.release.xcconfig; sourceTree = ""; };
47 | 4E99EC64F3AD978A5DC3767CD86B8BBC /* SpinnerButtonAnimationView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SpinnerButtonAnimationView.swift; path = Sources/SSSwiftUISpinnerButton/SpinnerButtonAnimationView.swift; sourceTree = ""; };
48 | 5CC60E4E0EDFB187DC6F3B8AAADE0B49 /* Pods-SSSwiftUISpinnerButtonDemo-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-SSSwiftUISpinnerButtonDemo-frameworks.sh"; sourceTree = ""; };
49 | 5F8B1F0D8BBA4F7EE3655E8BEBB1DFDF /* BallSpinChaseAnimation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = BallSpinChaseAnimation.swift; sourceTree = ""; };
50 | 638BB588EDBB08D5AFD1958D1AEBAF9A /* SSSwiftUISpinnerButton-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SSSwiftUISpinnerButton-umbrella.h"; sourceTree = ""; };
51 | 68AB613917D4C1E19C8B7219FAB7824C /* Pods_SSSwiftUISpinnerButtonDemo.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Pods_SSSwiftUISpinnerButtonDemo.framework; path = "Pods-SSSwiftUISpinnerButtonDemo.framework"; sourceTree = BUILT_PRODUCTS_DIR; };
52 | 6FC0556FDD13070815C62F0D9933B69D /* BallRotateFadeAnimation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = BallRotateFadeAnimation.swift; sourceTree = ""; };
53 | 73010CC983E3809BECEE5348DA1BB8C6 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.0.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; };
54 | 875DCED9B5D4F113BEFF40D786E69D02 /* SSSwiftUISpinnerButton.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SSSwiftUISpinnerButton.debug.xcconfig; sourceTree = ""; };
55 | 886263A340320201DA7E2AFA0D8715A3 /* Pods-SSSwiftUISpinnerButtonDemo-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-SSSwiftUISpinnerButtonDemo-acknowledgements.markdown"; sourceTree = ""; };
56 | 92FFFACF64BE180C06845D5FFD5FD753 /* README.md */ = {isa = PBXFileReference; includeInIndex = 1; path = README.md; sourceTree = ""; };
57 | 9A934AC70FD41BFADCF9901A656D8F8C /* Pods-SSSwiftUISpinnerButtonDemo-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-SSSwiftUISpinnerButtonDemo-acknowledgements.plist"; sourceTree = ""; };
58 | 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; };
59 | AF09B56010EDBB2763BB20CE783FB0C5 /* Pods-SSSwiftUISpinnerButtonDemo.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-SSSwiftUISpinnerButtonDemo.debug.xcconfig"; sourceTree = ""; };
60 | B880073B82A47453243AFC670769862B /* Pods-SSSwiftUISpinnerButtonDemo-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-SSSwiftUISpinnerButtonDemo-dummy.m"; sourceTree = ""; };
61 | BCF3C98459DC7C79BA4FF4E7C79028B1 /* Pods-SSSwiftUISpinnerButtonDemo.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-SSSwiftUISpinnerButtonDemo.release.xcconfig"; sourceTree = ""; };
62 | C43A0634462B0D75D9D102F2B495B1F1 /* Pods-SSSwiftUISpinnerButtonDemo-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-SSSwiftUISpinnerButtonDemo-umbrella.h"; sourceTree = ""; };
63 | C6289E9FA35294F1359B92D5EF1E9C89 /* SSSwiftUISpinnerButton.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; path = SSSwiftUISpinnerButton.podspec; sourceTree = ""; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; };
64 | E5014E674D41833C1D428CA893CB7072 /* SpinnerButton.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SpinnerButton.swift; path = Sources/SSSwiftUISpinnerButton/SpinnerButton.swift; sourceTree = ""; };
65 | F917AFA2D13F90426C3AC6D77AECB987 /* Pods-SSSwiftUISpinnerButtonDemo.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-SSSwiftUISpinnerButtonDemo.modulemap"; sourceTree = ""; };
66 | /* End PBXFileReference section */
67 |
68 | /* Begin PBXFrameworksBuildPhase section */
69 | 168E08FB7AD3E8AB967DCAAAAE683AE1 /* Frameworks */ = {
70 | isa = PBXFrameworksBuildPhase;
71 | buildActionMask = 2147483647;
72 | files = (
73 | B39098035928BB870C4117F59B4D20D3 /* Foundation.framework in Frameworks */,
74 | );
75 | runOnlyForDeploymentPostprocessing = 0;
76 | };
77 | 383A853EB02D340AD4B8158909598770 /* Frameworks */ = {
78 | isa = PBXFrameworksBuildPhase;
79 | buildActionMask = 2147483647;
80 | files = (
81 | 1CA7FE270EE7AB3BB8EF93B960B09935 /* Foundation.framework in Frameworks */,
82 | );
83 | runOnlyForDeploymentPostprocessing = 0;
84 | };
85 | /* End PBXFrameworksBuildPhase section */
86 |
87 | /* Begin PBXGroup section */
88 | 0C020D4B8DF162F66872A936A508ACD1 /* Pods-SSSwiftUISpinnerButtonDemo */ = {
89 | isa = PBXGroup;
90 | children = (
91 | F917AFA2D13F90426C3AC6D77AECB987 /* Pods-SSSwiftUISpinnerButtonDemo.modulemap */,
92 | 886263A340320201DA7E2AFA0D8715A3 /* Pods-SSSwiftUISpinnerButtonDemo-acknowledgements.markdown */,
93 | 9A934AC70FD41BFADCF9901A656D8F8C /* Pods-SSSwiftUISpinnerButtonDemo-acknowledgements.plist */,
94 | B880073B82A47453243AFC670769862B /* Pods-SSSwiftUISpinnerButtonDemo-dummy.m */,
95 | 5CC60E4E0EDFB187DC6F3B8AAADE0B49 /* Pods-SSSwiftUISpinnerButtonDemo-frameworks.sh */,
96 | 06F98A67C2088AD1D5F34A1120140FF8 /* Pods-SSSwiftUISpinnerButtonDemo-Info.plist */,
97 | C43A0634462B0D75D9D102F2B495B1F1 /* Pods-SSSwiftUISpinnerButtonDemo-umbrella.h */,
98 | AF09B56010EDBB2763BB20CE783FB0C5 /* Pods-SSSwiftUISpinnerButtonDemo.debug.xcconfig */,
99 | BCF3C98459DC7C79BA4FF4E7C79028B1 /* Pods-SSSwiftUISpinnerButtonDemo.release.xcconfig */,
100 | );
101 | name = "Pods-SSSwiftUISpinnerButtonDemo";
102 | path = "Target Support Files/Pods-SSSwiftUISpinnerButtonDemo";
103 | sourceTree = "";
104 | };
105 | 2F2FE7A5521A276E499EEDCC6CFC4EC8 /* Development Pods */ = {
106 | isa = PBXGroup;
107 | children = (
108 | 9AEFF512E6D0070947C70F110FACDAB9 /* SSSwiftUISpinnerButton */,
109 | );
110 | name = "Development Pods";
111 | sourceTree = "";
112 | };
113 | 453C68C99D37F3F31F58ACB070F7AD8A /* SpinnerButtonAnimationStyle */ = {
114 | isa = PBXGroup;
115 | children = (
116 | 48D9712B60491F910AC2CD02BE37CA92 /* ArcsRotateChaseAnimation.swift */,
117 | 6FC0556FDD13070815C62F0D9933B69D /* BallRotateFadeAnimation.swift */,
118 | 5F8B1F0D8BBA4F7EE3655E8BEBB1DFDF /* BallSpinChaseAnimation.swift */,
119 | 40D80250BFD2FA1BB2084C20D34C297D /* LineSpinFadeAnimation.swift */,
120 | );
121 | name = SpinnerButtonAnimationStyle;
122 | path = Sources/SSSwiftUISpinnerButton/SpinnerButtonAnimationStyle;
123 | sourceTree = "";
124 | };
125 | 46DD3909B1C6867932F74D80CA09E157 /* Pod */ = {
126 | isa = PBXGroup;
127 | children = (
128 | 21F8970714B8EB78415A44FDFFD894EE /* LICENSE */,
129 | 92FFFACF64BE180C06845D5FFD5FD753 /* README.md */,
130 | C6289E9FA35294F1359B92D5EF1E9C89 /* SSSwiftUISpinnerButton.podspec */,
131 | );
132 | name = Pod;
133 | sourceTree = "";
134 | };
135 | 578452D2E740E91742655AC8F1636D1F /* iOS */ = {
136 | isa = PBXGroup;
137 | children = (
138 | 73010CC983E3809BECEE5348DA1BB8C6 /* Foundation.framework */,
139 | );
140 | name = iOS;
141 | sourceTree = "";
142 | };
143 | 9AEFF512E6D0070947C70F110FACDAB9 /* SSSwiftUISpinnerButton */ = {
144 | isa = PBXGroup;
145 | children = (
146 | E5014E674D41833C1D428CA893CB7072 /* SpinnerButton.swift */,
147 | 4E99EC64F3AD978A5DC3767CD86B8BBC /* SpinnerButtonAnimationView.swift */,
148 | 23BBDB66D3A953CB43C6EFECCEB30844 /* SpinnerButtonViewStyle.swift */,
149 | 46DD3909B1C6867932F74D80CA09E157 /* Pod */,
150 | 453C68C99D37F3F31F58ACB070F7AD8A /* SpinnerButtonAnimationStyle */,
151 | C24EBCBB2156BA40EA66C32FA630B3EF /* Support Files */,
152 | );
153 | name = SSSwiftUISpinnerButton;
154 | path = ../..;
155 | sourceTree = "";
156 | };
157 | C0CC15797B9A3382DFAED9669424FB13 /* Products */ = {
158 | isa = PBXGroup;
159 | children = (
160 | 68AB613917D4C1E19C8B7219FAB7824C /* Pods_SSSwiftUISpinnerButtonDemo.framework */,
161 | 457F0608AE83D6F5BF621805EE06C2AE /* SSSwiftUISpinnerButton.framework */,
162 | );
163 | name = Products;
164 | sourceTree = "";
165 | };
166 | C24EBCBB2156BA40EA66C32FA630B3EF /* Support Files */ = {
167 | isa = PBXGroup;
168 | children = (
169 | 3C35F0C0D79DAF8E23130BBC477F3740 /* SSSwiftUISpinnerButton.modulemap */,
170 | 1D72B62FC9FC70DC4EC9B051ADC6C66A /* SSSwiftUISpinnerButton-dummy.m */,
171 | 20E100DCCE017276266DF9DBFD6178B8 /* SSSwiftUISpinnerButton-Info.plist */,
172 | 23A54CBE2B45004E7F1BF3B65BFD5F4B /* SSSwiftUISpinnerButton-prefix.pch */,
173 | 638BB588EDBB08D5AFD1958D1AEBAF9A /* SSSwiftUISpinnerButton-umbrella.h */,
174 | 875DCED9B5D4F113BEFF40D786E69D02 /* SSSwiftUISpinnerButton.debug.xcconfig */,
175 | 4BCCD93B4EAE75D850BECF072CF1F065 /* SSSwiftUISpinnerButton.release.xcconfig */,
176 | );
177 | name = "Support Files";
178 | path = "Example/Pods/Target Support Files/SSSwiftUISpinnerButton";
179 | sourceTree = "";
180 | };
181 | CEB52D895399B1FA7F06DDFF70AB2EA4 /* Targets Support Files */ = {
182 | isa = PBXGroup;
183 | children = (
184 | 0C020D4B8DF162F66872A936A508ACD1 /* Pods-SSSwiftUISpinnerButtonDemo */,
185 | );
186 | name = "Targets Support Files";
187 | sourceTree = "";
188 | };
189 | CF1408CF629C7361332E53B88F7BD30C = {
190 | isa = PBXGroup;
191 | children = (
192 | 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */,
193 | 2F2FE7A5521A276E499EEDCC6CFC4EC8 /* Development Pods */,
194 | D210D550F4EA176C3123ED886F8F87F5 /* Frameworks */,
195 | C0CC15797B9A3382DFAED9669424FB13 /* Products */,
196 | CEB52D895399B1FA7F06DDFF70AB2EA4 /* Targets Support Files */,
197 | );
198 | sourceTree = "";
199 | };
200 | D210D550F4EA176C3123ED886F8F87F5 /* Frameworks */ = {
201 | isa = PBXGroup;
202 | children = (
203 | 578452D2E740E91742655AC8F1636D1F /* iOS */,
204 | );
205 | name = Frameworks;
206 | sourceTree = "";
207 | };
208 | /* End PBXGroup section */
209 |
210 | /* Begin PBXHeadersBuildPhase section */
211 | 6C02734DBEDBA2CB3B917F165C11AAD1 /* Headers */ = {
212 | isa = PBXHeadersBuildPhase;
213 | buildActionMask = 2147483647;
214 | files = (
215 | A311B480923931DC744EBB27C7B31313 /* SSSwiftUISpinnerButton-umbrella.h in Headers */,
216 | );
217 | runOnlyForDeploymentPostprocessing = 0;
218 | };
219 | B5B902A833490679F1B7F7AE35314CA3 /* Headers */ = {
220 | isa = PBXHeadersBuildPhase;
221 | buildActionMask = 2147483647;
222 | files = (
223 | B44D9EE8797DE058D317B9B27DEB09CC /* Pods-SSSwiftUISpinnerButtonDemo-umbrella.h in Headers */,
224 | );
225 | runOnlyForDeploymentPostprocessing = 0;
226 | };
227 | /* End PBXHeadersBuildPhase section */
228 |
229 | /* Begin PBXNativeTarget section */
230 | AC9F0D1F55E9380DB94198699F0659FD /* SSSwiftUISpinnerButton */ = {
231 | isa = PBXNativeTarget;
232 | buildConfigurationList = ED6B977F49BC3E2F0E3916A55F2569FF /* Build configuration list for PBXNativeTarget "SSSwiftUISpinnerButton" */;
233 | buildPhases = (
234 | 6C02734DBEDBA2CB3B917F165C11AAD1 /* Headers */,
235 | F7903348CD139E0565D48F7A79D4F51D /* Sources */,
236 | 168E08FB7AD3E8AB967DCAAAAE683AE1 /* Frameworks */,
237 | 981D934DCF0AADFC1D83225284EC4219 /* Resources */,
238 | );
239 | buildRules = (
240 | );
241 | dependencies = (
242 | );
243 | name = SSSwiftUISpinnerButton;
244 | productName = SSSwiftUISpinnerButton;
245 | productReference = 457F0608AE83D6F5BF621805EE06C2AE /* SSSwiftUISpinnerButton.framework */;
246 | productType = "com.apple.product-type.framework";
247 | };
248 | CE6325BC9B07C519E6FB27657FB630E3 /* Pods-SSSwiftUISpinnerButtonDemo */ = {
249 | isa = PBXNativeTarget;
250 | buildConfigurationList = 994F47F3D652905DDE93E1D9FB084C48 /* Build configuration list for PBXNativeTarget "Pods-SSSwiftUISpinnerButtonDemo" */;
251 | buildPhases = (
252 | B5B902A833490679F1B7F7AE35314CA3 /* Headers */,
253 | 5923284B0E19F77EBBFAEFAA210BD8F2 /* Sources */,
254 | 383A853EB02D340AD4B8158909598770 /* Frameworks */,
255 | 3A945A826022F7CF2FFFB8B63E325999 /* Resources */,
256 | );
257 | buildRules = (
258 | );
259 | dependencies = (
260 | 9B0BB1D398921A0247583F6C4FB355A9 /* PBXTargetDependency */,
261 | );
262 | name = "Pods-SSSwiftUISpinnerButtonDemo";
263 | productName = "Pods-SSSwiftUISpinnerButtonDemo";
264 | productReference = 68AB613917D4C1E19C8B7219FAB7824C /* Pods_SSSwiftUISpinnerButtonDemo.framework */;
265 | productType = "com.apple.product-type.framework";
266 | };
267 | /* End PBXNativeTarget section */
268 |
269 | /* Begin PBXProject section */
270 | BFDFE7DC352907FC980B868725387E98 /* Project object */ = {
271 | isa = PBXProject;
272 | attributes = {
273 | LastSwiftUpdateCheck = 1100;
274 | LastUpgradeCheck = 1100;
275 | };
276 | buildConfigurationList = 4821239608C13582E20E6DA73FD5F1F9 /* Build configuration list for PBXProject "Pods" */;
277 | compatibilityVersion = "Xcode 10.0";
278 | developmentRegion = en;
279 | hasScannedForEncodings = 0;
280 | knownRegions = (
281 | en,
282 | Base,
283 | );
284 | mainGroup = CF1408CF629C7361332E53B88F7BD30C;
285 | productRefGroup = C0CC15797B9A3382DFAED9669424FB13 /* Products */;
286 | projectDirPath = "";
287 | projectRoot = "";
288 | targets = (
289 | CE6325BC9B07C519E6FB27657FB630E3 /* Pods-SSSwiftUISpinnerButtonDemo */,
290 | AC9F0D1F55E9380DB94198699F0659FD /* SSSwiftUISpinnerButton */,
291 | );
292 | };
293 | /* End PBXProject section */
294 |
295 | /* Begin PBXResourcesBuildPhase section */
296 | 3A945A826022F7CF2FFFB8B63E325999 /* Resources */ = {
297 | isa = PBXResourcesBuildPhase;
298 | buildActionMask = 2147483647;
299 | files = (
300 | );
301 | runOnlyForDeploymentPostprocessing = 0;
302 | };
303 | 981D934DCF0AADFC1D83225284EC4219 /* Resources */ = {
304 | isa = PBXResourcesBuildPhase;
305 | buildActionMask = 2147483647;
306 | files = (
307 | );
308 | runOnlyForDeploymentPostprocessing = 0;
309 | };
310 | /* End PBXResourcesBuildPhase section */
311 |
312 | /* Begin PBXSourcesBuildPhase section */
313 | 5923284B0E19F77EBBFAEFAA210BD8F2 /* Sources */ = {
314 | isa = PBXSourcesBuildPhase;
315 | buildActionMask = 2147483647;
316 | files = (
317 | DA60344EEB6E29D7A5AD489D0185958D /* Pods-SSSwiftUISpinnerButtonDemo-dummy.m in Sources */,
318 | );
319 | runOnlyForDeploymentPostprocessing = 0;
320 | };
321 | F7903348CD139E0565D48F7A79D4F51D /* Sources */ = {
322 | isa = PBXSourcesBuildPhase;
323 | buildActionMask = 2147483647;
324 | files = (
325 | C25D65A9EAD72E9B55F9B3A64A67E13B /* ArcsRotateChaseAnimation.swift in Sources */,
326 | 28497D1CB9006BBE28F13BF2F5BC1F7B /* BallRotateFadeAnimation.swift in Sources */,
327 | 17171DF024650A170FB16827056F1641 /* BallSpinChaseAnimation.swift in Sources */,
328 | CE6E682A6D7FE94DB9406BD3C8384145 /* LineSpinFadeAnimation.swift in Sources */,
329 | 733BD72A392B56C1B9E9AA5E6AF41267 /* SpinnerButton.swift in Sources */,
330 | C03B5E462B296241297AA120FE927224 /* SpinnerButtonAnimationView.swift in Sources */,
331 | 7CC1478F67D30393EDDB89B261E94525 /* SpinnerButtonViewStyle.swift in Sources */,
332 | 32ED36F6CD7EA11C9AF0DE99C722E7C4 /* SSSwiftUISpinnerButton-dummy.m in Sources */,
333 | );
334 | runOnlyForDeploymentPostprocessing = 0;
335 | };
336 | /* End PBXSourcesBuildPhase section */
337 |
338 | /* Begin PBXTargetDependency section */
339 | 9B0BB1D398921A0247583F6C4FB355A9 /* PBXTargetDependency */ = {
340 | isa = PBXTargetDependency;
341 | name = SSSwiftUISpinnerButton;
342 | target = AC9F0D1F55E9380DB94198699F0659FD /* SSSwiftUISpinnerButton */;
343 | targetProxy = F8C6F145A57D3FB8206BC02568BEEE29 /* PBXContainerItemProxy */;
344 | };
345 | /* End PBXTargetDependency section */
346 |
347 | /* Begin XCBuildConfiguration section */
348 | 0375DD6B939103092E8E61A90D99C798 /* Release */ = {
349 | isa = XCBuildConfiguration;
350 | baseConfigurationReference = BCF3C98459DC7C79BA4FF4E7C79028B1 /* Pods-SSSwiftUISpinnerButtonDemo.release.xcconfig */;
351 | buildSettings = {
352 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO;
353 | CLANG_ENABLE_OBJC_WEAK = NO;
354 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = "";
355 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
356 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = "";
357 | CURRENT_PROJECT_VERSION = 1;
358 | DEFINES_MODULE = YES;
359 | DYLIB_COMPATIBILITY_VERSION = 1;
360 | DYLIB_CURRENT_VERSION = 1;
361 | DYLIB_INSTALL_NAME_BASE = "@rpath";
362 | INFOPLIST_FILE = "Target Support Files/Pods-SSSwiftUISpinnerButtonDemo/Pods-SSSwiftUISpinnerButtonDemo-Info.plist";
363 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
364 | IPHONEOS_DEPLOYMENT_TARGET = 13.0;
365 | LD_RUNPATH_SEARCH_PATHS = (
366 | "$(inherited)",
367 | "@executable_path/Frameworks",
368 | "@loader_path/Frameworks",
369 | );
370 | MACH_O_TYPE = staticlib;
371 | MODULEMAP_FILE = "Target Support Files/Pods-SSSwiftUISpinnerButtonDemo/Pods-SSSwiftUISpinnerButtonDemo.modulemap";
372 | OTHER_LDFLAGS = "";
373 | OTHER_LIBTOOLFLAGS = "";
374 | PODS_ROOT = "$(SRCROOT)";
375 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}";
376 | PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
377 | SDKROOT = iphoneos;
378 | SKIP_INSTALL = YES;
379 | TARGETED_DEVICE_FAMILY = "1,2";
380 | VALIDATE_PRODUCT = YES;
381 | VERSIONING_SYSTEM = "apple-generic";
382 | VERSION_INFO_PREFIX = "";
383 | };
384 | name = Release;
385 | };
386 | 6AC9ED9172F6A08E24EBC2B26DEDCAEC /* Debug */ = {
387 | isa = XCBuildConfiguration;
388 | baseConfigurationReference = 875DCED9B5D4F113BEFF40D786E69D02 /* SSSwiftUISpinnerButton.debug.xcconfig */;
389 | buildSettings = {
390 | CLANG_ENABLE_OBJC_WEAK = NO;
391 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = "";
392 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
393 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = "";
394 | CURRENT_PROJECT_VERSION = 1;
395 | DEFINES_MODULE = YES;
396 | DYLIB_COMPATIBILITY_VERSION = 1;
397 | DYLIB_CURRENT_VERSION = 1;
398 | DYLIB_INSTALL_NAME_BASE = "@rpath";
399 | GCC_PREFIX_HEADER = "Target Support Files/SSSwiftUISpinnerButton/SSSwiftUISpinnerButton-prefix.pch";
400 | INFOPLIST_FILE = "Target Support Files/SSSwiftUISpinnerButton/SSSwiftUISpinnerButton-Info.plist";
401 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
402 | IPHONEOS_DEPLOYMENT_TARGET = 13.0;
403 | LD_RUNPATH_SEARCH_PATHS = (
404 | "$(inherited)",
405 | "@executable_path/Frameworks",
406 | "@loader_path/Frameworks",
407 | );
408 | MODULEMAP_FILE = "Target Support Files/SSSwiftUISpinnerButton/SSSwiftUISpinnerButton.modulemap";
409 | PRODUCT_MODULE_NAME = SSSwiftUISpinnerButton;
410 | PRODUCT_NAME = SSSwiftUISpinnerButton;
411 | SDKROOT = iphoneos;
412 | SKIP_INSTALL = YES;
413 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) ";
414 | SWIFT_VERSION = 5.0;
415 | TARGETED_DEVICE_FAMILY = "1,2";
416 | VERSIONING_SYSTEM = "apple-generic";
417 | VERSION_INFO_PREFIX = "";
418 | };
419 | name = Debug;
420 | };
421 | 8DE5143C03248BB6CD542DE3963D6F3A /* Debug */ = {
422 | isa = XCBuildConfiguration;
423 | buildSettings = {
424 | ALWAYS_SEARCH_USER_PATHS = NO;
425 | CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
426 | CLANG_ANALYZER_NONNULL = YES;
427 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
428 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
429 | CLANG_CXX_LIBRARY = "libc++";
430 | CLANG_ENABLE_MODULES = YES;
431 | CLANG_ENABLE_OBJC_ARC = YES;
432 | CLANG_ENABLE_OBJC_WEAK = YES;
433 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
434 | CLANG_WARN_BOOL_CONVERSION = YES;
435 | CLANG_WARN_COMMA = YES;
436 | CLANG_WARN_CONSTANT_CONVERSION = YES;
437 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
438 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
439 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
440 | CLANG_WARN_EMPTY_BODY = YES;
441 | CLANG_WARN_ENUM_CONVERSION = YES;
442 | CLANG_WARN_INFINITE_RECURSION = YES;
443 | CLANG_WARN_INT_CONVERSION = YES;
444 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
445 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
446 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
447 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
448 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
449 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
450 | CLANG_WARN_STRICT_PROTOTYPES = YES;
451 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
452 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
453 | CLANG_WARN_UNREACHABLE_CODE = YES;
454 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
455 | COPY_PHASE_STRIP = NO;
456 | DEBUG_INFORMATION_FORMAT = dwarf;
457 | ENABLE_STRICT_OBJC_MSGSEND = YES;
458 | ENABLE_TESTABILITY = YES;
459 | GCC_C_LANGUAGE_STANDARD = gnu11;
460 | GCC_DYNAMIC_NO_PIC = NO;
461 | GCC_NO_COMMON_BLOCKS = YES;
462 | GCC_OPTIMIZATION_LEVEL = 0;
463 | GCC_PREPROCESSOR_DEFINITIONS = (
464 | "POD_CONFIGURATION_DEBUG=1",
465 | "DEBUG=1",
466 | "$(inherited)",
467 | );
468 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
469 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
470 | GCC_WARN_UNDECLARED_SELECTOR = YES;
471 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
472 | GCC_WARN_UNUSED_FUNCTION = YES;
473 | GCC_WARN_UNUSED_VARIABLE = YES;
474 | IPHONEOS_DEPLOYMENT_TARGET = 13.0;
475 | MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
476 | MTL_FAST_MATH = YES;
477 | ONLY_ACTIVE_ARCH = YES;
478 | PRODUCT_NAME = "$(TARGET_NAME)";
479 | STRIP_INSTALLED_PRODUCT = NO;
480 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
481 | SWIFT_OPTIMIZATION_LEVEL = "-Onone";
482 | SWIFT_VERSION = 5.0;
483 | SYMROOT = "${SRCROOT}/../build";
484 | };
485 | name = Debug;
486 | };
487 | 9E406C6AAF85E580207CD97B0044DEAB /* Release */ = {
488 | isa = XCBuildConfiguration;
489 | buildSettings = {
490 | ALWAYS_SEARCH_USER_PATHS = NO;
491 | CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
492 | CLANG_ANALYZER_NONNULL = YES;
493 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
494 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
495 | CLANG_CXX_LIBRARY = "libc++";
496 | CLANG_ENABLE_MODULES = YES;
497 | CLANG_ENABLE_OBJC_ARC = YES;
498 | CLANG_ENABLE_OBJC_WEAK = YES;
499 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
500 | CLANG_WARN_BOOL_CONVERSION = YES;
501 | CLANG_WARN_COMMA = YES;
502 | CLANG_WARN_CONSTANT_CONVERSION = YES;
503 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
504 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
505 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
506 | CLANG_WARN_EMPTY_BODY = YES;
507 | CLANG_WARN_ENUM_CONVERSION = YES;
508 | CLANG_WARN_INFINITE_RECURSION = YES;
509 | CLANG_WARN_INT_CONVERSION = YES;
510 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
511 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
512 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
513 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
514 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
515 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
516 | CLANG_WARN_STRICT_PROTOTYPES = YES;
517 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
518 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
519 | CLANG_WARN_UNREACHABLE_CODE = YES;
520 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
521 | COPY_PHASE_STRIP = NO;
522 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
523 | ENABLE_NS_ASSERTIONS = NO;
524 | ENABLE_STRICT_OBJC_MSGSEND = YES;
525 | GCC_C_LANGUAGE_STANDARD = gnu11;
526 | GCC_NO_COMMON_BLOCKS = YES;
527 | GCC_PREPROCESSOR_DEFINITIONS = (
528 | "POD_CONFIGURATION_RELEASE=1",
529 | "$(inherited)",
530 | );
531 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
532 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
533 | GCC_WARN_UNDECLARED_SELECTOR = YES;
534 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
535 | GCC_WARN_UNUSED_FUNCTION = YES;
536 | GCC_WARN_UNUSED_VARIABLE = YES;
537 | IPHONEOS_DEPLOYMENT_TARGET = 13.0;
538 | MTL_ENABLE_DEBUG_INFO = NO;
539 | MTL_FAST_MATH = YES;
540 | PRODUCT_NAME = "$(TARGET_NAME)";
541 | STRIP_INSTALLED_PRODUCT = NO;
542 | SWIFT_COMPILATION_MODE = wholemodule;
543 | SWIFT_OPTIMIZATION_LEVEL = "-O";
544 | SWIFT_VERSION = 5.0;
545 | SYMROOT = "${SRCROOT}/../build";
546 | };
547 | name = Release;
548 | };
549 | C5E1DB6CA5F1551E9075E54CDC8D81C4 /* Debug */ = {
550 | isa = XCBuildConfiguration;
551 | baseConfigurationReference = AF09B56010EDBB2763BB20CE783FB0C5 /* Pods-SSSwiftUISpinnerButtonDemo.debug.xcconfig */;
552 | buildSettings = {
553 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO;
554 | CLANG_ENABLE_OBJC_WEAK = NO;
555 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = "";
556 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
557 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = "";
558 | CURRENT_PROJECT_VERSION = 1;
559 | DEFINES_MODULE = YES;
560 | DYLIB_COMPATIBILITY_VERSION = 1;
561 | DYLIB_CURRENT_VERSION = 1;
562 | DYLIB_INSTALL_NAME_BASE = "@rpath";
563 | INFOPLIST_FILE = "Target Support Files/Pods-SSSwiftUISpinnerButtonDemo/Pods-SSSwiftUISpinnerButtonDemo-Info.plist";
564 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
565 | IPHONEOS_DEPLOYMENT_TARGET = 13.0;
566 | LD_RUNPATH_SEARCH_PATHS = (
567 | "$(inherited)",
568 | "@executable_path/Frameworks",
569 | "@loader_path/Frameworks",
570 | );
571 | MACH_O_TYPE = staticlib;
572 | MODULEMAP_FILE = "Target Support Files/Pods-SSSwiftUISpinnerButtonDemo/Pods-SSSwiftUISpinnerButtonDemo.modulemap";
573 | OTHER_LDFLAGS = "";
574 | OTHER_LIBTOOLFLAGS = "";
575 | PODS_ROOT = "$(SRCROOT)";
576 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}";
577 | PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
578 | SDKROOT = iphoneos;
579 | SKIP_INSTALL = YES;
580 | TARGETED_DEVICE_FAMILY = "1,2";
581 | VERSIONING_SYSTEM = "apple-generic";
582 | VERSION_INFO_PREFIX = "";
583 | };
584 | name = Debug;
585 | };
586 | D7920D3FFA7E645B5D9BF8E22E7F94BA /* Release */ = {
587 | isa = XCBuildConfiguration;
588 | baseConfigurationReference = 4BCCD93B4EAE75D850BECF072CF1F065 /* SSSwiftUISpinnerButton.release.xcconfig */;
589 | buildSettings = {
590 | CLANG_ENABLE_OBJC_WEAK = NO;
591 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = "";
592 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
593 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = "";
594 | CURRENT_PROJECT_VERSION = 1;
595 | DEFINES_MODULE = YES;
596 | DYLIB_COMPATIBILITY_VERSION = 1;
597 | DYLIB_CURRENT_VERSION = 1;
598 | DYLIB_INSTALL_NAME_BASE = "@rpath";
599 | GCC_PREFIX_HEADER = "Target Support Files/SSSwiftUISpinnerButton/SSSwiftUISpinnerButton-prefix.pch";
600 | INFOPLIST_FILE = "Target Support Files/SSSwiftUISpinnerButton/SSSwiftUISpinnerButton-Info.plist";
601 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
602 | IPHONEOS_DEPLOYMENT_TARGET = 13.0;
603 | LD_RUNPATH_SEARCH_PATHS = (
604 | "$(inherited)",
605 | "@executable_path/Frameworks",
606 | "@loader_path/Frameworks",
607 | );
608 | MODULEMAP_FILE = "Target Support Files/SSSwiftUISpinnerButton/SSSwiftUISpinnerButton.modulemap";
609 | PRODUCT_MODULE_NAME = SSSwiftUISpinnerButton;
610 | PRODUCT_NAME = SSSwiftUISpinnerButton;
611 | SDKROOT = iphoneos;
612 | SKIP_INSTALL = YES;
613 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) ";
614 | SWIFT_VERSION = 5.0;
615 | TARGETED_DEVICE_FAMILY = "1,2";
616 | VALIDATE_PRODUCT = YES;
617 | VERSIONING_SYSTEM = "apple-generic";
618 | VERSION_INFO_PREFIX = "";
619 | };
620 | name = Release;
621 | };
622 | /* End XCBuildConfiguration section */
623 |
624 | /* Begin XCConfigurationList section */
625 | 4821239608C13582E20E6DA73FD5F1F9 /* Build configuration list for PBXProject "Pods" */ = {
626 | isa = XCConfigurationList;
627 | buildConfigurations = (
628 | 8DE5143C03248BB6CD542DE3963D6F3A /* Debug */,
629 | 9E406C6AAF85E580207CD97B0044DEAB /* Release */,
630 | );
631 | defaultConfigurationIsVisible = 0;
632 | defaultConfigurationName = Release;
633 | };
634 | 994F47F3D652905DDE93E1D9FB084C48 /* Build configuration list for PBXNativeTarget "Pods-SSSwiftUISpinnerButtonDemo" */ = {
635 | isa = XCConfigurationList;
636 | buildConfigurations = (
637 | C5E1DB6CA5F1551E9075E54CDC8D81C4 /* Debug */,
638 | 0375DD6B939103092E8E61A90D99C798 /* Release */,
639 | );
640 | defaultConfigurationIsVisible = 0;
641 | defaultConfigurationName = Release;
642 | };
643 | ED6B977F49BC3E2F0E3916A55F2569FF /* Build configuration list for PBXNativeTarget "SSSwiftUISpinnerButton" */ = {
644 | isa = XCConfigurationList;
645 | buildConfigurations = (
646 | 6AC9ED9172F6A08E24EBC2B26DEDCAEC /* Debug */,
647 | D7920D3FFA7E645B5D9BF8E22E7F94BA /* Release */,
648 | );
649 | defaultConfigurationIsVisible = 0;
650 | defaultConfigurationName = Release;
651 | };
652 | /* End XCConfigurationList section */
653 | };
654 | rootObject = BFDFE7DC352907FC980B868725387E98 /* Project object */;
655 | }
656 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/Pods-SSSwiftUISpinnerButtonDemo/Pods-SSSwiftUISpinnerButtonDemo-Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleExecutable
8 | ${EXECUTABLE_NAME}
9 | CFBundleIdentifier
10 | ${PRODUCT_BUNDLE_IDENTIFIER}
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | ${PRODUCT_NAME}
15 | CFBundlePackageType
16 | FMWK
17 | CFBundleShortVersionString
18 | 1.0.0
19 | CFBundleSignature
20 | ????
21 | CFBundleVersion
22 | ${CURRENT_PROJECT_VERSION}
23 | NSPrincipalClass
24 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/Pods-SSSwiftUISpinnerButtonDemo/Pods-SSSwiftUISpinnerButtonDemo-acknowledgements.markdown:
--------------------------------------------------------------------------------
1 | # Acknowledgements
2 | This application makes use of the following third party libraries:
3 |
4 | ## SSSwiftUISpinnerButton
5 |
6 | MIT License
7 |
8 | Copyright (c) 2020 Simform Solutions
9 |
10 | Permission is hereby granted, free of charge, to any person obtaining a copy
11 | of this software and associated documentation files (the "Software"), to deal
12 | in the Software without restriction, including without limitation the rights
13 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
14 | copies of the Software, and to permit persons to whom the Software is
15 | furnished to do so, subject to the following conditions:
16 |
17 | The above copyright notice and this permission notice shall be included in all
18 | copies or substantial portions of the Software.
19 |
20 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
21 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
22 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
23 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
24 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
25 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
26 | SOFTWARE.
27 |
28 | Generated by CocoaPods - https://cocoapods.org
29 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/Pods-SSSwiftUISpinnerButtonDemo/Pods-SSSwiftUISpinnerButtonDemo-acknowledgements.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | PreferenceSpecifiers
6 |
7 |
8 | FooterText
9 | This application makes use of the following third party libraries:
10 | Title
11 | Acknowledgements
12 | Type
13 | PSGroupSpecifier
14 |
15 |
16 | FooterText
17 | MIT License
18 |
19 | Copyright (c) 2020 Simform Solutions
20 |
21 | Permission is hereby granted, free of charge, to any person obtaining a copy
22 | of this software and associated documentation files (the "Software"), to deal
23 | in the Software without restriction, including without limitation the rights
24 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
25 | copies of the Software, and to permit persons to whom the Software is
26 | furnished to do so, subject to the following conditions:
27 |
28 | The above copyright notice and this permission notice shall be included in all
29 | copies or substantial portions of the Software.
30 |
31 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
32 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
33 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
34 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
35 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
36 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
37 | SOFTWARE.
38 |
39 | License
40 | MIT
41 | Title
42 | SSSwiftUISpinnerButton
43 | Type
44 | PSGroupSpecifier
45 |
46 |
47 | FooterText
48 | Generated by CocoaPods - https://cocoapods.org
49 | Title
50 |
51 | Type
52 | PSGroupSpecifier
53 |
54 |
55 | StringsTable
56 | Acknowledgements
57 | Title
58 | Acknowledgements
59 |
60 |
61 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/Pods-SSSwiftUISpinnerButtonDemo/Pods-SSSwiftUISpinnerButtonDemo-dummy.m:
--------------------------------------------------------------------------------
1 | #import
2 | @interface PodsDummy_Pods_SSSwiftUISpinnerButtonDemo : NSObject
3 | @end
4 | @implementation PodsDummy_Pods_SSSwiftUISpinnerButtonDemo
5 | @end
6 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/Pods-SSSwiftUISpinnerButtonDemo/Pods-SSSwiftUISpinnerButtonDemo-frameworks-Debug-input-files.xcfilelist:
--------------------------------------------------------------------------------
1 | ${PODS_ROOT}/Target Support Files/Pods-SSSwiftUISpinnerButtonDemo/Pods-SSSwiftUISpinnerButtonDemo-frameworks.sh
2 | ${BUILT_PRODUCTS_DIR}/SSSwiftUISpinnerButton/SSSwiftUISpinnerButton.framework
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/Pods-SSSwiftUISpinnerButtonDemo/Pods-SSSwiftUISpinnerButtonDemo-frameworks-Debug-output-files.xcfilelist:
--------------------------------------------------------------------------------
1 | ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SSSwiftUISpinnerButton.framework
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/Pods-SSSwiftUISpinnerButtonDemo/Pods-SSSwiftUISpinnerButtonDemo-frameworks-Release-input-files.xcfilelist:
--------------------------------------------------------------------------------
1 | ${PODS_ROOT}/Target Support Files/Pods-SSSwiftUISpinnerButtonDemo/Pods-SSSwiftUISpinnerButtonDemo-frameworks.sh
2 | ${BUILT_PRODUCTS_DIR}/SSSwiftUISpinnerButton/SSSwiftUISpinnerButton.framework
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/Pods-SSSwiftUISpinnerButtonDemo/Pods-SSSwiftUISpinnerButtonDemo-frameworks-Release-output-files.xcfilelist:
--------------------------------------------------------------------------------
1 | ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SSSwiftUISpinnerButton.framework
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/Pods-SSSwiftUISpinnerButtonDemo/Pods-SSSwiftUISpinnerButtonDemo-frameworks.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 | set -e
3 | set -u
4 | set -o pipefail
5 |
6 | function on_error {
7 | echo "$(realpath -mq "${0}"):$1: error: Unexpected failure"
8 | }
9 | trap 'on_error $LINENO' ERR
10 |
11 | if [ -z ${FRAMEWORKS_FOLDER_PATH+x} ]; then
12 | # If FRAMEWORKS_FOLDER_PATH is not set, then there's nowhere for us to copy
13 | # frameworks to, so exit 0 (signalling the script phase was successful).
14 | exit 0
15 | fi
16 |
17 | echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}"
18 | mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}"
19 |
20 | COCOAPODS_PARALLEL_CODE_SIGN="${COCOAPODS_PARALLEL_CODE_SIGN:-false}"
21 | SWIFT_STDLIB_PATH="${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}"
22 | BCSYMBOLMAP_DIR="BCSymbolMaps"
23 |
24 |
25 | # This protects against multiple targets copying the same framework dependency at the same time. The solution
26 | # was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html
27 | RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????")
28 |
29 | # Copies and strips a vendored framework
30 | install_framework()
31 | {
32 | if [ -r "${BUILT_PRODUCTS_DIR}/$1" ]; then
33 | local source="${BUILT_PRODUCTS_DIR}/$1"
34 | elif [ -r "${BUILT_PRODUCTS_DIR}/$(basename "$1")" ]; then
35 | local source="${BUILT_PRODUCTS_DIR}/$(basename "$1")"
36 | elif [ -r "$1" ]; then
37 | local source="$1"
38 | fi
39 |
40 | local destination="${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}"
41 |
42 | if [ -L "${source}" ]; then
43 | echo "Symlinked..."
44 | source="$(readlink "${source}")"
45 | fi
46 |
47 | if [ -d "${source}/${BCSYMBOLMAP_DIR}" ]; then
48 | # Locate and install any .bcsymbolmaps if present, and remove them from the .framework before the framework is copied
49 | find "${source}/${BCSYMBOLMAP_DIR}" -name "*.bcsymbolmap"|while read f; do
50 | echo "Installing $f"
51 | install_bcsymbolmap "$f" "$destination"
52 | rm "$f"
53 | done
54 | rmdir "${source}/${BCSYMBOLMAP_DIR}"
55 | fi
56 |
57 | # Use filter instead of exclude so missing patterns don't throw errors.
58 | 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}\""
59 | rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --links --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${destination}"
60 |
61 | local basename
62 | basename="$(basename -s .framework "$1")"
63 | binary="${destination}/${basename}.framework/${basename}"
64 |
65 | if ! [ -r "$binary" ]; then
66 | binary="${destination}/${basename}"
67 | elif [ -L "${binary}" ]; then
68 | echo "Destination binary is symlinked..."
69 | dirname="$(dirname "${binary}")"
70 | binary="${dirname}/$(readlink "${binary}")"
71 | fi
72 |
73 | # Strip invalid architectures so "fat" simulator / device frameworks work on device
74 | if [[ "$(file "$binary")" == *"dynamically linked shared library"* ]]; then
75 | strip_invalid_archs "$binary"
76 | fi
77 |
78 | # Resign the code if required by the build settings to avoid unstable apps
79 | code_sign_if_enabled "${destination}/$(basename "$1")"
80 |
81 | # Embed linked Swift runtime libraries. No longer necessary as of Xcode 7.
82 | if [ "${XCODE_VERSION_MAJOR}" -lt 7 ]; then
83 | local swift_runtime_libs
84 | swift_runtime_libs=$(xcrun otool -LX "$binary" | grep --color=never @rpath/libswift | sed -E s/@rpath\\/\(.+dylib\).*/\\1/g | uniq -u)
85 | for lib in $swift_runtime_libs; do
86 | echo "rsync -auv \"${SWIFT_STDLIB_PATH}/${lib}\" \"${destination}\""
87 | rsync -auv "${SWIFT_STDLIB_PATH}/${lib}" "${destination}"
88 | code_sign_if_enabled "${destination}/${lib}"
89 | done
90 | fi
91 | }
92 | # Copies and strips a vendored dSYM
93 | install_dsym() {
94 | local source="$1"
95 | warn_missing_arch=${2:-true}
96 | if [ -r "$source" ]; then
97 | # Copy the dSYM into the targets temp dir.
98 | 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}\""
99 | 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}"
100 |
101 | local basename
102 | basename="$(basename -s .dSYM "$source")"
103 | binary_name="$(ls "$source/Contents/Resources/DWARF")"
104 | binary="${DERIVED_FILES_DIR}/${basename}.dSYM/Contents/Resources/DWARF/${binary_name}"
105 |
106 | # Strip invalid architectures from the dSYM.
107 | if [[ "$(file "$binary")" == *"Mach-O "*"dSYM companion"* ]]; then
108 | strip_invalid_archs "$binary" "$warn_missing_arch"
109 | fi
110 | if [[ $STRIP_BINARY_RETVAL == 0 ]]; then
111 | # Move the stripped file into its final destination.
112 | 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}\""
113 | 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}"
114 | else
115 | # 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.
116 | touch "${DWARF_DSYM_FOLDER_PATH}/${basename}.dSYM"
117 | fi
118 | fi
119 | }
120 |
121 | # Used as a return value for each invocation of `strip_invalid_archs` function.
122 | STRIP_BINARY_RETVAL=0
123 |
124 | # Strip invalid architectures
125 | strip_invalid_archs() {
126 | binary="$1"
127 | warn_missing_arch=${2:-true}
128 | # Get architectures for current target binary
129 | binary_archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | awk '{$1=$1;print}' | rev)"
130 | # Intersect them with the architectures we are building for
131 | intersected_archs="$(echo ${ARCHS[@]} ${binary_archs[@]} | tr ' ' '\n' | sort | uniq -d)"
132 | # If there are no archs supported by this binary then warn the user
133 | if [[ -z "$intersected_archs" ]]; then
134 | if [[ "$warn_missing_arch" == "true" ]]; then
135 | echo "warning: [CP] Vendored binary '$binary' contains architectures ($binary_archs) none of which match the current build architectures ($ARCHS)."
136 | fi
137 | STRIP_BINARY_RETVAL=1
138 | return
139 | fi
140 | stripped=""
141 | for arch in $binary_archs; do
142 | if ! [[ "${ARCHS}" == *"$arch"* ]]; then
143 | # Strip non-valid architectures in-place
144 | lipo -remove "$arch" -output "$binary" "$binary"
145 | stripped="$stripped $arch"
146 | fi
147 | done
148 | if [[ "$stripped" ]]; then
149 | echo "Stripped $binary of architectures:$stripped"
150 | fi
151 | STRIP_BINARY_RETVAL=0
152 | }
153 |
154 | # Copies the bcsymbolmap files of a vendored framework
155 | install_bcsymbolmap() {
156 | local bcsymbolmap_path="$1"
157 | local destination="${BUILT_PRODUCTS_DIR}"
158 | 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}""
159 | rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${bcsymbolmap_path}" "${destination}"
160 | }
161 |
162 | # Signs a framework with the provided identity
163 | code_sign_if_enabled() {
164 | if [ -n "${EXPANDED_CODE_SIGN_IDENTITY:-}" -a "${CODE_SIGNING_REQUIRED:-}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then
165 | # Use the current code_sign_identity
166 | echo "Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}"
167 | local code_sign_cmd="/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS:-} --preserve-metadata=identifier,entitlements '$1'"
168 |
169 | if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then
170 | code_sign_cmd="$code_sign_cmd &"
171 | fi
172 | echo "$code_sign_cmd"
173 | eval "$code_sign_cmd"
174 | fi
175 | }
176 |
177 | if [[ "$CONFIGURATION" == "Debug" ]]; then
178 | install_framework "${BUILT_PRODUCTS_DIR}/SSSwiftUISpinnerButton/SSSwiftUISpinnerButton.framework"
179 | fi
180 | if [[ "$CONFIGURATION" == "Release" ]]; then
181 | install_framework "${BUILT_PRODUCTS_DIR}/SSSwiftUISpinnerButton/SSSwiftUISpinnerButton.framework"
182 | fi
183 | if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then
184 | wait
185 | fi
186 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/Pods-SSSwiftUISpinnerButtonDemo/Pods-SSSwiftUISpinnerButtonDemo-umbrella.h:
--------------------------------------------------------------------------------
1 | #ifdef __OBJC__
2 | #import
3 | #else
4 | #ifndef FOUNDATION_EXPORT
5 | #if defined(__cplusplus)
6 | #define FOUNDATION_EXPORT extern "C"
7 | #else
8 | #define FOUNDATION_EXPORT extern
9 | #endif
10 | #endif
11 | #endif
12 |
13 |
14 | FOUNDATION_EXPORT double Pods_SSSwiftUISpinnerButtonDemoVersionNumber;
15 | FOUNDATION_EXPORT const unsigned char Pods_SSSwiftUISpinnerButtonDemoVersionString[];
16 |
17 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/Pods-SSSwiftUISpinnerButtonDemo/Pods-SSSwiftUISpinnerButtonDemo.debug.xcconfig:
--------------------------------------------------------------------------------
1 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES
2 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO
3 | FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/SSSwiftUISpinnerButton"
4 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
5 | HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/SSSwiftUISpinnerButton/SSSwiftUISpinnerButton.framework/Headers"
6 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks'
7 | OTHER_LDFLAGS = $(inherited) -framework "SSSwiftUISpinnerButton"
8 | OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS
9 | PODS_BUILD_DIR = ${BUILD_DIR}
10 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
11 | PODS_PODFILE_DIR_PATH = ${SRCROOT}/.
12 | PODS_ROOT = ${SRCROOT}/Pods
13 | PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates
14 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES
15 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/Pods-SSSwiftUISpinnerButtonDemo/Pods-SSSwiftUISpinnerButtonDemo.modulemap:
--------------------------------------------------------------------------------
1 | framework module Pods_SSSwiftUISpinnerButtonDemo {
2 | umbrella header "Pods-SSSwiftUISpinnerButtonDemo-umbrella.h"
3 |
4 | export *
5 | module * { export * }
6 | }
7 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/Pods-SSSwiftUISpinnerButtonDemo/Pods-SSSwiftUISpinnerButtonDemo.release.xcconfig:
--------------------------------------------------------------------------------
1 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES
2 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO
3 | FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/SSSwiftUISpinnerButton"
4 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
5 | HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/SSSwiftUISpinnerButton/SSSwiftUISpinnerButton.framework/Headers"
6 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks'
7 | OTHER_LDFLAGS = $(inherited) -framework "SSSwiftUISpinnerButton"
8 | OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS
9 | PODS_BUILD_DIR = ${BUILD_DIR}
10 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
11 | PODS_PODFILE_DIR_PATH = ${SRCROOT}/.
12 | PODS_ROOT = ${SRCROOT}/Pods
13 | PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates
14 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES
15 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/SSSwiftUISpinnerButton/SSSwiftUISpinnerButton-Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleExecutable
8 | ${EXECUTABLE_NAME}
9 | CFBundleIdentifier
10 | ${PRODUCT_BUNDLE_IDENTIFIER}
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | ${PRODUCT_NAME}
15 | CFBundlePackageType
16 | FMWK
17 | CFBundleShortVersionString
18 | 0.0.2
19 | CFBundleSignature
20 | ????
21 | CFBundleVersion
22 | ${CURRENT_PROJECT_VERSION}
23 | NSPrincipalClass
24 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/SSSwiftUISpinnerButton/SSSwiftUISpinnerButton-dummy.m:
--------------------------------------------------------------------------------
1 | #import
2 | @interface PodsDummy_SSSwiftUISpinnerButton : NSObject
3 | @end
4 | @implementation PodsDummy_SSSwiftUISpinnerButton
5 | @end
6 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/SSSwiftUISpinnerButton/SSSwiftUISpinnerButton-prefix.pch:
--------------------------------------------------------------------------------
1 | #ifdef __OBJC__
2 | #import
3 | #else
4 | #ifndef FOUNDATION_EXPORT
5 | #if defined(__cplusplus)
6 | #define FOUNDATION_EXPORT extern "C"
7 | #else
8 | #define FOUNDATION_EXPORT extern
9 | #endif
10 | #endif
11 | #endif
12 |
13 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/SSSwiftUISpinnerButton/SSSwiftUISpinnerButton-umbrella.h:
--------------------------------------------------------------------------------
1 | #ifdef __OBJC__
2 | #import
3 | #else
4 | #ifndef FOUNDATION_EXPORT
5 | #if defined(__cplusplus)
6 | #define FOUNDATION_EXPORT extern "C"
7 | #else
8 | #define FOUNDATION_EXPORT extern
9 | #endif
10 | #endif
11 | #endif
12 |
13 |
14 | FOUNDATION_EXPORT double SSSwiftUISpinnerButtonVersionNumber;
15 | FOUNDATION_EXPORT const unsigned char SSSwiftUISpinnerButtonVersionString[];
16 |
17 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/SSSwiftUISpinnerButton/SSSwiftUISpinnerButton.debug.xcconfig:
--------------------------------------------------------------------------------
1 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO
2 | CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/SSSwiftUISpinnerButton
3 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
4 | OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS
5 | PODS_BUILD_DIR = ${BUILD_DIR}
6 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
7 | PODS_ROOT = ${SRCROOT}
8 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/../..
9 | PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates
10 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}
11 | SKIP_INSTALL = YES
12 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES
13 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/SSSwiftUISpinnerButton/SSSwiftUISpinnerButton.modulemap:
--------------------------------------------------------------------------------
1 | framework module SSSwiftUISpinnerButton {
2 | umbrella header "SSSwiftUISpinnerButton-umbrella.h"
3 |
4 | export *
5 | module * { export * }
6 | }
7 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/SSSwiftUISpinnerButton/SSSwiftUISpinnerButton.release.xcconfig:
--------------------------------------------------------------------------------
1 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO
2 | CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/SSSwiftUISpinnerButton
3 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
4 | OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS
5 | PODS_BUILD_DIR = ${BUILD_DIR}
6 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
7 | PODS_ROOT = ${SRCROOT}
8 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/../..
9 | PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates
10 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}
11 | SKIP_INSTALL = YES
12 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES
13 |
--------------------------------------------------------------------------------
/Example/SSSwiftUISpinnerButtonDemo.xcodeproj/project.pbxproj:
--------------------------------------------------------------------------------
1 | // !$*UTF8*$!
2 | {
3 | archiveVersion = 1;
4 | classes = {
5 | };
6 | objectVersion = 51;
7 | objects = {
8 |
9 | /* Begin PBXBuildFile section */
10 | AA2A4948268CC92B00189154 /* Color+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = AA2A4947268CC92A00189154 /* Color+Extension.swift */; };
11 | AA2A494A268CC97400189154 /* Enumerations.swift in Sources */ = {isa = PBXBuildFile; fileRef = AA2A4949268CC97400189154 /* Enumerations.swift */; };
12 | AA8E91A1269303070093E989 /* SSSwiftUISpinnerButtonDemoApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = AA8E91A0269303070093E989 /* SSSwiftUISpinnerButtonDemoApp.swift */; };
13 | C2FE74BB25D6DABF005B5998 /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C2FE74BA25D6DABF005B5998 /* ContentView.swift */; };
14 | C2FE74BD25D6DAC0005B5998 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = C2FE74BC25D6DAC0005B5998 /* Assets.xcassets */; };
15 | C2FE74C025D6DAC0005B5998 /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = C2FE74BF25D6DAC0005B5998 /* Preview Assets.xcassets */; };
16 | E53D394C6CD8637BBDFC71C4 /* Pods_SSSwiftUISpinnerButtonDemo.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B8036AA54AAEF9380BCCDB59 /* Pods_SSSwiftUISpinnerButtonDemo.framework */; };
17 | /* End PBXBuildFile section */
18 |
19 | /* Begin PBXCopyFilesBuildPhase section */
20 | AAB82F19268B36A200C8FF49 /* Embed Frameworks */ = {
21 | isa = PBXCopyFilesBuildPhase;
22 | buildActionMask = 2147483647;
23 | dstPath = "";
24 | dstSubfolderSpec = 10;
25 | files = (
26 | );
27 | name = "Embed Frameworks";
28 | runOnlyForDeploymentPostprocessing = 0;
29 | };
30 | /* End PBXCopyFilesBuildPhase section */
31 |
32 | /* Begin PBXFileReference section */
33 | 2263A54CD7E10CBF240C46E8 /* Pods-SSSwiftUISpinnerButton.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SSSwiftUISpinnerButton.debug.xcconfig"; path = "Target Support Files/Pods-SSSwiftUISpinnerButton/Pods-SSSwiftUISpinnerButton.debug.xcconfig"; sourceTree = ""; };
34 | 65FD2CE938DA0A8244B162DB /* Pods-SSSwiftUISpinnerButtonDemo.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SSSwiftUISpinnerButtonDemo.debug.xcconfig"; path = "Target Support Files/Pods-SSSwiftUISpinnerButtonDemo/Pods-SSSwiftUISpinnerButtonDemo.debug.xcconfig"; sourceTree = ""; };
35 | 739DFA407AD72206B563D10E /* Pods-SSSwiftUISpinnerButtonDemo.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SSSwiftUISpinnerButtonDemo.release.xcconfig"; path = "Target Support Files/Pods-SSSwiftUISpinnerButtonDemo/Pods-SSSwiftUISpinnerButtonDemo.release.xcconfig"; sourceTree = ""; };
36 | AA2A4947268CC92A00189154 /* Color+Extension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Color+Extension.swift"; sourceTree = ""; };
37 | AA2A4949268CC97400189154 /* Enumerations.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Enumerations.swift; sourceTree = ""; };
38 | AA8E91A0269303070093E989 /* SSSwiftUISpinnerButtonDemoApp.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SSSwiftUISpinnerButtonDemoApp.swift; sourceTree = ""; };
39 | B8036AA54AAEF9380BCCDB59 /* Pods_SSSwiftUISpinnerButtonDemo.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_SSSwiftUISpinnerButtonDemo.framework; sourceTree = BUILT_PRODUCTS_DIR; };
40 | BD949CFBFFC125D068BB1D1E /* Pods-SSSwiftUISpinnerButton.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SSSwiftUISpinnerButton.release.xcconfig"; path = "Target Support Files/Pods-SSSwiftUISpinnerButton/Pods-SSSwiftUISpinnerButton.release.xcconfig"; sourceTree = ""; };
41 | C2FE74B525D6DABF005B5998 /* SSSwiftUISpinnerButtonDemo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = SSSwiftUISpinnerButtonDemo.app; sourceTree = BUILT_PRODUCTS_DIR; };
42 | C2FE74BA25D6DABF005B5998 /* ContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentView.swift; sourceTree = ""; };
43 | C2FE74BC25D6DAC0005B5998 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; };
44 | C2FE74BF25D6DAC0005B5998 /* Preview Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = "Preview Assets.xcassets"; sourceTree = ""; };
45 | C2FE74C125D6DAC0005B5998 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
46 | /* End PBXFileReference section */
47 |
48 | /* Begin PBXFrameworksBuildPhase section */
49 | C2FE74B225D6DABF005B5998 /* Frameworks */ = {
50 | isa = PBXFrameworksBuildPhase;
51 | buildActionMask = 2147483647;
52 | files = (
53 | E53D394C6CD8637BBDFC71C4 /* Pods_SSSwiftUISpinnerButtonDemo.framework in Frameworks */,
54 | );
55 | runOnlyForDeploymentPostprocessing = 0;
56 | };
57 | /* End PBXFrameworksBuildPhase section */
58 |
59 | /* Begin PBXGroup section */
60 | 12E81EB5142C31A175468F08 /* Pods */ = {
61 | isa = PBXGroup;
62 | children = (
63 | 2263A54CD7E10CBF240C46E8 /* Pods-SSSwiftUISpinnerButton.debug.xcconfig */,
64 | BD949CFBFFC125D068BB1D1E /* Pods-SSSwiftUISpinnerButton.release.xcconfig */,
65 | 65FD2CE938DA0A8244B162DB /* Pods-SSSwiftUISpinnerButtonDemo.debug.xcconfig */,
66 | 739DFA407AD72206B563D10E /* Pods-SSSwiftUISpinnerButtonDemo.release.xcconfig */,
67 | );
68 | path = Pods;
69 | sourceTree = "";
70 | };
71 | AA2A494B268CC97C00189154 /* HelperClass */ = {
72 | isa = PBXGroup;
73 | children = (
74 | AA2A4947268CC92A00189154 /* Color+Extension.swift */,
75 | AA2A4949268CC97400189154 /* Enumerations.swift */,
76 | );
77 | path = HelperClass;
78 | sourceTree = "";
79 | };
80 | B1E6CB95185E5528C39E2A54 /* Frameworks */ = {
81 | isa = PBXGroup;
82 | children = (
83 | B8036AA54AAEF9380BCCDB59 /* Pods_SSSwiftUISpinnerButtonDemo.framework */,
84 | );
85 | name = Frameworks;
86 | sourceTree = "";
87 | };
88 | C2FE74AC25D6DABF005B5998 = {
89 | isa = PBXGroup;
90 | children = (
91 | C2FE74B725D6DABF005B5998 /* SSSwiftUISpinnerButtonDemo */,
92 | C2FE74B625D6DABF005B5998 /* Products */,
93 | 12E81EB5142C31A175468F08 /* Pods */,
94 | B1E6CB95185E5528C39E2A54 /* Frameworks */,
95 | );
96 | sourceTree = "";
97 | };
98 | C2FE74B625D6DABF005B5998 /* Products */ = {
99 | isa = PBXGroup;
100 | children = (
101 | C2FE74B525D6DABF005B5998 /* SSSwiftUISpinnerButtonDemo.app */,
102 | );
103 | name = Products;
104 | sourceTree = "";
105 | };
106 | C2FE74B725D6DABF005B5998 /* SSSwiftUISpinnerButtonDemo */ = {
107 | isa = PBXGroup;
108 | children = (
109 | AA2A494B268CC97C00189154 /* HelperClass */,
110 | C2FE74BA25D6DABF005B5998 /* ContentView.swift */,
111 | AA8E91A0269303070093E989 /* SSSwiftUISpinnerButtonDemoApp.swift */,
112 | C2FE74BC25D6DAC0005B5998 /* Assets.xcassets */,
113 | C2FE74C125D6DAC0005B5998 /* Info.plist */,
114 | C2FE74BE25D6DAC0005B5998 /* Preview Content */,
115 | );
116 | path = SSSwiftUISpinnerButtonDemo;
117 | sourceTree = "";
118 | };
119 | C2FE74BE25D6DAC0005B5998 /* Preview Content */ = {
120 | isa = PBXGroup;
121 | children = (
122 | C2FE74BF25D6DAC0005B5998 /* Preview Assets.xcassets */,
123 | );
124 | path = "Preview Content";
125 | sourceTree = "";
126 | };
127 | /* End PBXGroup section */
128 |
129 | /* Begin PBXNativeTarget section */
130 | C2FE74B425D6DABF005B5998 /* SSSwiftUISpinnerButtonDemo */ = {
131 | isa = PBXNativeTarget;
132 | buildConfigurationList = C2FE74C425D6DAC0005B5998 /* Build configuration list for PBXNativeTarget "SSSwiftUISpinnerButtonDemo" */;
133 | buildPhases = (
134 | 92918E7A2C8CB80D136B028D /* [CP] Check Pods Manifest.lock */,
135 | C2FE74B125D6DABF005B5998 /* Sources */,
136 | C2FE74B225D6DABF005B5998 /* Frameworks */,
137 | C2FE74B325D6DABF005B5998 /* Resources */,
138 | AAB82F19268B36A200C8FF49 /* Embed Frameworks */,
139 | B548ABCBFF48BBE0BDC65C30 /* [CP] Embed Pods Frameworks */,
140 | );
141 | buildRules = (
142 | );
143 | dependencies = (
144 | );
145 | name = SSSwiftUISpinnerButtonDemo;
146 | productName = SSSwiftUISpinnerButton;
147 | productReference = C2FE74B525D6DABF005B5998 /* SSSwiftUISpinnerButtonDemo.app */;
148 | productType = "com.apple.product-type.application";
149 | };
150 | /* End PBXNativeTarget section */
151 |
152 | /* Begin PBXProject section */
153 | C2FE74AD25D6DABF005B5998 /* Project object */ = {
154 | isa = PBXProject;
155 | attributes = {
156 | LastSwiftUpdateCheck = 1220;
157 | LastUpgradeCheck = 1220;
158 | TargetAttributes = {
159 | C2FE74B425D6DABF005B5998 = {
160 | CreatedOnToolsVersion = 12.2;
161 | };
162 | };
163 | };
164 | buildConfigurationList = C2FE74B025D6DABF005B5998 /* Build configuration list for PBXProject "SSSwiftUISpinnerButtonDemo" */;
165 | compatibilityVersion = "Xcode 9.3";
166 | developmentRegion = en;
167 | hasScannedForEncodings = 0;
168 | knownRegions = (
169 | en,
170 | Base,
171 | );
172 | mainGroup = C2FE74AC25D6DABF005B5998;
173 | productRefGroup = C2FE74B625D6DABF005B5998 /* Products */;
174 | projectDirPath = "";
175 | projectRoot = "";
176 | targets = (
177 | C2FE74B425D6DABF005B5998 /* SSSwiftUISpinnerButtonDemo */,
178 | );
179 | };
180 | /* End PBXProject section */
181 |
182 | /* Begin PBXResourcesBuildPhase section */
183 | C2FE74B325D6DABF005B5998 /* Resources */ = {
184 | isa = PBXResourcesBuildPhase;
185 | buildActionMask = 2147483647;
186 | files = (
187 | C2FE74C025D6DAC0005B5998 /* Preview Assets.xcassets in Resources */,
188 | C2FE74BD25D6DAC0005B5998 /* Assets.xcassets in Resources */,
189 | );
190 | runOnlyForDeploymentPostprocessing = 0;
191 | };
192 | /* End PBXResourcesBuildPhase section */
193 |
194 | /* Begin PBXShellScriptBuildPhase section */
195 | 92918E7A2C8CB80D136B028D /* [CP] Check Pods Manifest.lock */ = {
196 | isa = PBXShellScriptBuildPhase;
197 | buildActionMask = 2147483647;
198 | files = (
199 | );
200 | inputFileListPaths = (
201 | );
202 | inputPaths = (
203 | "${PODS_PODFILE_DIR_PATH}/Podfile.lock",
204 | "${PODS_ROOT}/Manifest.lock",
205 | );
206 | name = "[CP] Check Pods Manifest.lock";
207 | outputFileListPaths = (
208 | );
209 | outputPaths = (
210 | "$(DERIVED_FILE_DIR)/Pods-SSSwiftUISpinnerButtonDemo-checkManifestLockResult.txt",
211 | );
212 | runOnlyForDeploymentPostprocessing = 0;
213 | shellPath = /bin/sh;
214 | 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";
215 | showEnvVarsInLog = 0;
216 | };
217 | B548ABCBFF48BBE0BDC65C30 /* [CP] Embed Pods Frameworks */ = {
218 | isa = PBXShellScriptBuildPhase;
219 | buildActionMask = 2147483647;
220 | files = (
221 | );
222 | inputFileListPaths = (
223 | "${PODS_ROOT}/Target Support Files/Pods-SSSwiftUISpinnerButtonDemo/Pods-SSSwiftUISpinnerButtonDemo-frameworks-${CONFIGURATION}-input-files.xcfilelist",
224 | );
225 | name = "[CP] Embed Pods Frameworks";
226 | outputFileListPaths = (
227 | "${PODS_ROOT}/Target Support Files/Pods-SSSwiftUISpinnerButtonDemo/Pods-SSSwiftUISpinnerButtonDemo-frameworks-${CONFIGURATION}-output-files.xcfilelist",
228 | );
229 | runOnlyForDeploymentPostprocessing = 0;
230 | shellPath = /bin/sh;
231 | shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-SSSwiftUISpinnerButtonDemo/Pods-SSSwiftUISpinnerButtonDemo-frameworks.sh\"\n";
232 | showEnvVarsInLog = 0;
233 | };
234 | /* End PBXShellScriptBuildPhase section */
235 |
236 | /* Begin PBXSourcesBuildPhase section */
237 | C2FE74B125D6DABF005B5998 /* Sources */ = {
238 | isa = PBXSourcesBuildPhase;
239 | buildActionMask = 2147483647;
240 | files = (
241 | AA2A4948268CC92B00189154 /* Color+Extension.swift in Sources */,
242 | C2FE74BB25D6DABF005B5998 /* ContentView.swift in Sources */,
243 | AA2A494A268CC97400189154 /* Enumerations.swift in Sources */,
244 | AA8E91A1269303070093E989 /* SSSwiftUISpinnerButtonDemoApp.swift in Sources */,
245 | );
246 | runOnlyForDeploymentPostprocessing = 0;
247 | };
248 | /* End PBXSourcesBuildPhase section */
249 |
250 | /* Begin XCBuildConfiguration section */
251 | C2FE74C225D6DAC0005B5998 /* Debug */ = {
252 | isa = XCBuildConfiguration;
253 | buildSettings = {
254 | ALWAYS_SEARCH_USER_PATHS = NO;
255 | CLANG_ANALYZER_NONNULL = YES;
256 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
257 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
258 | CLANG_CXX_LIBRARY = "libc++";
259 | CLANG_ENABLE_MODULES = YES;
260 | CLANG_ENABLE_OBJC_ARC = YES;
261 | CLANG_ENABLE_OBJC_WEAK = YES;
262 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
263 | CLANG_WARN_BOOL_CONVERSION = YES;
264 | CLANG_WARN_COMMA = YES;
265 | CLANG_WARN_CONSTANT_CONVERSION = YES;
266 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
267 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
268 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
269 | CLANG_WARN_EMPTY_BODY = YES;
270 | CLANG_WARN_ENUM_CONVERSION = YES;
271 | CLANG_WARN_INFINITE_RECURSION = YES;
272 | CLANG_WARN_INT_CONVERSION = YES;
273 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
274 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
275 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
276 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
277 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
278 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
279 | CLANG_WARN_STRICT_PROTOTYPES = YES;
280 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
281 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
282 | CLANG_WARN_UNREACHABLE_CODE = YES;
283 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
284 | COPY_PHASE_STRIP = NO;
285 | DEBUG_INFORMATION_FORMAT = dwarf;
286 | ENABLE_STRICT_OBJC_MSGSEND = YES;
287 | ENABLE_TESTABILITY = YES;
288 | GCC_C_LANGUAGE_STANDARD = gnu11;
289 | GCC_DYNAMIC_NO_PIC = NO;
290 | GCC_NO_COMMON_BLOCKS = YES;
291 | GCC_OPTIMIZATION_LEVEL = 0;
292 | GCC_PREPROCESSOR_DEFINITIONS = (
293 | "DEBUG=1",
294 | "$(inherited)",
295 | );
296 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
297 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
298 | GCC_WARN_UNDECLARED_SELECTOR = YES;
299 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
300 | GCC_WARN_UNUSED_FUNCTION = YES;
301 | GCC_WARN_UNUSED_VARIABLE = YES;
302 | IPHONEOS_DEPLOYMENT_TARGET = 14.2;
303 | MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
304 | MTL_FAST_MATH = YES;
305 | ONLY_ACTIVE_ARCH = YES;
306 | SDKROOT = iphoneos;
307 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
308 | SWIFT_OPTIMIZATION_LEVEL = "-Onone";
309 | };
310 | name = Debug;
311 | };
312 | C2FE74C325D6DAC0005B5998 /* Release */ = {
313 | isa = XCBuildConfiguration;
314 | buildSettings = {
315 | ALWAYS_SEARCH_USER_PATHS = NO;
316 | CLANG_ANALYZER_NONNULL = YES;
317 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
318 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
319 | CLANG_CXX_LIBRARY = "libc++";
320 | CLANG_ENABLE_MODULES = YES;
321 | CLANG_ENABLE_OBJC_ARC = YES;
322 | CLANG_ENABLE_OBJC_WEAK = YES;
323 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
324 | CLANG_WARN_BOOL_CONVERSION = YES;
325 | CLANG_WARN_COMMA = YES;
326 | CLANG_WARN_CONSTANT_CONVERSION = YES;
327 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
328 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
329 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
330 | CLANG_WARN_EMPTY_BODY = YES;
331 | CLANG_WARN_ENUM_CONVERSION = YES;
332 | CLANG_WARN_INFINITE_RECURSION = YES;
333 | CLANG_WARN_INT_CONVERSION = YES;
334 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
335 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
336 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
337 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
338 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
339 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
340 | CLANG_WARN_STRICT_PROTOTYPES = YES;
341 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
342 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
343 | CLANG_WARN_UNREACHABLE_CODE = YES;
344 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
345 | COPY_PHASE_STRIP = NO;
346 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
347 | ENABLE_NS_ASSERTIONS = NO;
348 | ENABLE_STRICT_OBJC_MSGSEND = YES;
349 | GCC_C_LANGUAGE_STANDARD = gnu11;
350 | GCC_NO_COMMON_BLOCKS = YES;
351 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
352 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
353 | GCC_WARN_UNDECLARED_SELECTOR = YES;
354 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
355 | GCC_WARN_UNUSED_FUNCTION = YES;
356 | GCC_WARN_UNUSED_VARIABLE = YES;
357 | IPHONEOS_DEPLOYMENT_TARGET = 14.2;
358 | MTL_ENABLE_DEBUG_INFO = NO;
359 | MTL_FAST_MATH = YES;
360 | SDKROOT = iphoneos;
361 | SWIFT_COMPILATION_MODE = wholemodule;
362 | SWIFT_OPTIMIZATION_LEVEL = "-O";
363 | VALIDATE_PRODUCT = YES;
364 | };
365 | name = Release;
366 | };
367 | C2FE74C525D6DAC0005B5998 /* Debug */ = {
368 | isa = XCBuildConfiguration;
369 | baseConfigurationReference = 65FD2CE938DA0A8244B162DB /* Pods-SSSwiftUISpinnerButtonDemo.debug.xcconfig */;
370 | buildSettings = {
371 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
372 | ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
373 | CODE_SIGN_STYLE = Automatic;
374 | DEVELOPMENT_ASSET_PATHS = "\"SSSwiftUISpinnerButtonDemo/Preview Content\"";
375 | DEVELOPMENT_TEAM = UH3C932562;
376 | ENABLE_PREVIEWS = YES;
377 | INFOPLIST_FILE = SSSwiftUISpinnerButtonDemo/Info.plist;
378 | IPHONEOS_DEPLOYMENT_TARGET = 14.0;
379 | LD_RUNPATH_SEARCH_PATHS = (
380 | "$(inherited)",
381 | "@executable_path/Frameworks",
382 | );
383 | PRODUCT_BUNDLE_IDENTIFIER = com.simform.SSSwiftUISpinnerButton;
384 | PRODUCT_NAME = "$(TARGET_NAME)";
385 | SWIFT_VERSION = 5.0;
386 | TARGETED_DEVICE_FAMILY = "1,2";
387 | };
388 | name = Debug;
389 | };
390 | C2FE74C625D6DAC0005B5998 /* Release */ = {
391 | isa = XCBuildConfiguration;
392 | baseConfigurationReference = 739DFA407AD72206B563D10E /* Pods-SSSwiftUISpinnerButtonDemo.release.xcconfig */;
393 | buildSettings = {
394 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
395 | ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
396 | CODE_SIGN_STYLE = Automatic;
397 | DEVELOPMENT_ASSET_PATHS = "\"SSSwiftUISpinnerButtonDemo/Preview Content\"";
398 | DEVELOPMENT_TEAM = UH3C932562;
399 | ENABLE_PREVIEWS = YES;
400 | INFOPLIST_FILE = SSSwiftUISpinnerButtonDemo/Info.plist;
401 | IPHONEOS_DEPLOYMENT_TARGET = 14.0;
402 | LD_RUNPATH_SEARCH_PATHS = (
403 | "$(inherited)",
404 | "@executable_path/Frameworks",
405 | );
406 | PRODUCT_BUNDLE_IDENTIFIER = com.simform.SSSwiftUISpinnerButton;
407 | PRODUCT_NAME = "$(TARGET_NAME)";
408 | SWIFT_VERSION = 5.0;
409 | TARGETED_DEVICE_FAMILY = "1,2";
410 | };
411 | name = Release;
412 | };
413 | /* End XCBuildConfiguration section */
414 |
415 | /* Begin XCConfigurationList section */
416 | C2FE74B025D6DABF005B5998 /* Build configuration list for PBXProject "SSSwiftUISpinnerButtonDemo" */ = {
417 | isa = XCConfigurationList;
418 | buildConfigurations = (
419 | C2FE74C225D6DAC0005B5998 /* Debug */,
420 | C2FE74C325D6DAC0005B5998 /* Release */,
421 | );
422 | defaultConfigurationIsVisible = 0;
423 | defaultConfigurationName = Release;
424 | };
425 | C2FE74C425D6DAC0005B5998 /* Build configuration list for PBXNativeTarget "SSSwiftUISpinnerButtonDemo" */ = {
426 | isa = XCConfigurationList;
427 | buildConfigurations = (
428 | C2FE74C525D6DAC0005B5998 /* Debug */,
429 | C2FE74C625D6DAC0005B5998 /* Release */,
430 | );
431 | defaultConfigurationIsVisible = 0;
432 | defaultConfigurationName = Release;
433 | };
434 | /* End XCConfigurationList section */
435 | };
436 | rootObject = C2FE74AD25D6DABF005B5998 /* Project object */;
437 | }
438 |
--------------------------------------------------------------------------------
/Example/SSSwiftUISpinnerButtonDemo.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/Example/SSSwiftUISpinnerButtonDemo.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/Example/SSSwiftUISpinnerButtonDemo.xcodeproj/xcshareddata/xcschemes/SSSwiftUISpinnerButtonDemo.xcscheme:
--------------------------------------------------------------------------------
1 |
2 |
5 |
8 |
9 |
15 |
21 |
22 |
23 |
24 |
25 |
30 |
31 |
32 |
33 |
43 |
45 |
51 |
52 |
53 |
54 |
60 |
62 |
68 |
69 |
70 |
71 |
73 |
74 |
77 |
78 |
79 |
--------------------------------------------------------------------------------
/Example/SSSwiftUISpinnerButtonDemo.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/Example/SSSwiftUISpinnerButtonDemo.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/Example/SSSwiftUISpinnerButtonDemo/Assets.xcassets/AccentColor.colorset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "colors" : [
3 | {
4 | "idiom" : "universal"
5 | }
6 | ],
7 | "info" : {
8 | "author" : "xcode",
9 | "version" : 1
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/Example/SSSwiftUISpinnerButtonDemo/Assets.xcassets/AppIcon.appiconset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "iphone",
5 | "scale" : "2x",
6 | "size" : "20x20"
7 | },
8 | {
9 | "idiom" : "iphone",
10 | "scale" : "3x",
11 | "size" : "20x20"
12 | },
13 | {
14 | "idiom" : "iphone",
15 | "scale" : "2x",
16 | "size" : "29x29"
17 | },
18 | {
19 | "idiom" : "iphone",
20 | "scale" : "3x",
21 | "size" : "29x29"
22 | },
23 | {
24 | "idiom" : "iphone",
25 | "scale" : "2x",
26 | "size" : "40x40"
27 | },
28 | {
29 | "idiom" : "iphone",
30 | "scale" : "3x",
31 | "size" : "40x40"
32 | },
33 | {
34 | "idiom" : "iphone",
35 | "scale" : "2x",
36 | "size" : "60x60"
37 | },
38 | {
39 | "idiom" : "iphone",
40 | "scale" : "3x",
41 | "size" : "60x60"
42 | },
43 | {
44 | "idiom" : "ipad",
45 | "scale" : "1x",
46 | "size" : "20x20"
47 | },
48 | {
49 | "idiom" : "ipad",
50 | "scale" : "2x",
51 | "size" : "20x20"
52 | },
53 | {
54 | "idiom" : "ipad",
55 | "scale" : "1x",
56 | "size" : "29x29"
57 | },
58 | {
59 | "idiom" : "ipad",
60 | "scale" : "2x",
61 | "size" : "29x29"
62 | },
63 | {
64 | "idiom" : "ipad",
65 | "scale" : "1x",
66 | "size" : "40x40"
67 | },
68 | {
69 | "idiom" : "ipad",
70 | "scale" : "2x",
71 | "size" : "40x40"
72 | },
73 | {
74 | "idiom" : "ipad",
75 | "scale" : "1x",
76 | "size" : "76x76"
77 | },
78 | {
79 | "idiom" : "ipad",
80 | "scale" : "2x",
81 | "size" : "76x76"
82 | },
83 | {
84 | "idiom" : "ipad",
85 | "scale" : "2x",
86 | "size" : "83.5x83.5"
87 | },
88 | {
89 | "idiom" : "ios-marketing",
90 | "scale" : "1x",
91 | "size" : "1024x1024"
92 | }
93 | ],
94 | "info" : {
95 | "author" : "xcode",
96 | "version" : 1
97 | }
98 | }
99 |
--------------------------------------------------------------------------------
/Example/SSSwiftUISpinnerButtonDemo/Assets.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "author" : "xcode",
4 | "version" : 1
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/Example/SSSwiftUISpinnerButtonDemo/ContentView.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ContentView.swift
3 | // SSSwiftUISpinnerButton
4 | //
5 | // Created by Nilisha Gupta on 12/02/21.
6 | //
7 |
8 | import SwiftUI
9 | import SSSwiftUISpinnerButton
10 |
11 | struct ContentView: View {
12 |
13 | // MARK: State variables for animation
14 | @State var isLineSpinFadeButtonAnimating: Bool = false
15 | @State var isBallRotateFadeButtonAnimating: Bool = false
16 | @State var isArcRotateFadeButtonAnimating: Bool = false
17 | @State var isBallSpinChaseButtonAnimating: Bool = false
18 | @State var isCustomShapeSpinChaseButtonAnimating: Bool = false
19 |
20 | // MARK: Variables for button customisation
21 | private var buttonStyleWithBasicDesign = SpinnerButtonViewStyle(width: 300, height: 50, cornerRadius: 5, backgroundColor: Color(hex: Colors.pink.rawValue), spinningButtonBackgroundColor: Color(hex: Colors.pink.rawValue), spinningStrokeColor: .white)
22 |
23 | private var buttonStyleWithBorderAndShadow: SpinnerButtonViewStyle {
24 | var buttonStyle = SpinnerButtonViewStyle()
25 | buttonStyle.cornerRadius = buttonStyle.height / 2
26 | buttonStyle.backgroundColor = Color(hex: Colors.darkBlue.rawValue)
27 | buttonStyle.spinningButtonBackgroundColor = Color(hex: Colors.darkBlue.rawValue)
28 | buttonStyle.spinningStrokeColor = .white
29 | buttonStyle.borderWidth = 2
30 | buttonStyle.borderColor = .white
31 | buttonStyle.shadowColor = Color(hex: Colors.darkBlue.rawValue)
32 | buttonStyle.shadowRadius = 2
33 | buttonStyle.shadowOffset = CGPoint(x: 0, y: 2)
34 | return buttonStyle
35 | }
36 |
37 | private var buttonStyleWithLinearGradient: SpinnerButtonViewStyle {
38 | var buttonStyle = SpinnerButtonViewStyle()
39 | buttonStyle.height = 50
40 | buttonStyle.cornerRadius = buttonStyle.height / 2
41 | buttonStyle.backgroundColor = .green
42 | buttonStyle.spinningStrokeColor = .white
43 | buttonStyle.gradient = LinearGradient(
44 | gradient: .init(colors: [Color(hex: Colors.darkGreen.rawValue),Color(hex: Colors.lightGreen.rawValue),Color(hex: Colors.lightBlue.rawValue)]),
45 | startPoint: .leading,
46 | endPoint: .trailing)
47 | return buttonStyle
48 | }
49 |
50 | private var buttonStyleWithChangedBackground: SpinnerButtonViewStyle {
51 | var buttonStyle = SpinnerButtonViewStyle()
52 | buttonStyle.backgroundColor = Color(hex: Colors.blue.rawValue)
53 | buttonStyle.spinningButtonBackgroundColor = .white
54 | buttonStyle.borderWidth = 1.5
55 | buttonStyle.borderColor = Color(hex: Colors.blue.rawValue)
56 | buttonStyle.spinningStrokeColor = Color(hex: Colors.blue.rawValue)
57 | return buttonStyle
58 | }
59 |
60 | private var buttonStyleWithLesserWidth: SpinnerButtonViewStyle {
61 | var buttonStyle = SpinnerButtonViewStyle()
62 | buttonStyle.width = 280
63 | buttonStyle.height = 60
64 | buttonStyle.cornerRadius = 5
65 | buttonStyle.backgroundColor = Color(hex: Colors.skyBlue.rawValue)
66 | buttonStyle.spinningButtonBackgroundColor = Color(hex: Colors.skyBlue.rawValue)
67 | return buttonStyle
68 | }
69 |
70 | var body: some View {
71 | VStack(spacing: 30) {
72 |
73 | /// Line Spin Fade Spinner Button
74 | SpinnerButton(buttonAction: {
75 | /// Action to perform
76 |
77 | /// Stop animation by toggling value of state variable
78 | /// Added delay of 2 seconds
79 | DispatchQueue.main.asyncAfter(deadline: .now() + 2.0) {
80 | isLineSpinFadeButtonAnimating.toggle()
81 | }
82 | }, isAnimating: $isLineSpinFadeButtonAnimating, buttonStyle: buttonStyleWithBasicDesign, animationType: SpinnerButtonAnimationStyle.lineSpinFade(count: 8, width: 0)) {
83 | /// Add content in button
84 | HStack {
85 | Image(systemName: "pencil")
86 | .renderingMode(.template)
87 | Text("Line Spin Fade")
88 | .fontWeight(.bold)
89 | }
90 | .foregroundColor(.white)
91 | }
92 |
93 | /// Ball Spin Chase Spinner Button
94 | SpinnerButton(buttonAction: {
95 | /// Action to perform
96 |
97 | /// Stop animation by toggling value of state variable
98 | /// Added delay of 2 seconds
99 | DispatchQueue.main.asyncAfter(deadline: .now() + 2.0) {
100 | isBallSpinChaseButtonAnimating.toggle()
101 | }
102 | }, isAnimating: $isBallSpinChaseButtonAnimating, buttonStyle: buttonStyleWithChangedBackground, animationType: .ballRotateFade(count: 5, size: 7)) {
103 | /// Add content in button
104 | HStack {
105 | Text("Ball Spin Chase")
106 | .fontWeight(.bold)
107 | }
108 | .foregroundColor(.white)
109 | }
110 |
111 | /// Custom Spin Chase Spinner Button
112 | SpinnerButton(buttonAction: {
113 | /// Action to perform
114 |
115 | /// Stop animation by toggling value of state variable
116 | /// Added delay of 2 seconds
117 | DispatchQueue.main.asyncAfter(deadline: .now() + 2.0) {
118 | isCustomShapeSpinChaseButtonAnimating.toggle()
119 | }
120 | }, isAnimating: $isCustomShapeSpinChaseButtonAnimating, buttonStyle: buttonStyleWithLesserWidth, animationType: SpinnerButtonAnimationStyle.ballRotateFade(count: 3, content: AnyView(Text("🔥").fixedSize()))) {
121 | /// Add content in button
122 | HStack {
123 | Text("Custom Spin Chase")
124 | .fontWeight(.bold)
125 | }
126 | .foregroundColor(.white)
127 | }
128 |
129 | /// Arcs Rotate Chase Spinner Button
130 | SpinnerButton(buttonAction: {
131 | /// Action to perform
132 |
133 | /// Stop animation by toggling value of state variable
134 | /// Added delay of 2 seconds
135 | DispatchQueue.main.asyncAfter(deadline: .now() + 2.0) {
136 | isArcRotateFadeButtonAnimating.toggle()
137 | }
138 | }, isAnimating: $isArcRotateFadeButtonAnimating, buttonStyle: buttonStyleWithLinearGradient, animationType: SpinnerButtonAnimationStyle.arcsRotateChase(count: 3, width: 2, spacing: 2)) {
139 | /// Add content in button
140 | HStack {
141 | Text("Arcs Rotate Chase")
142 | .fontWeight(.bold)
143 | }
144 | .foregroundColor(.white)
145 | }
146 |
147 | /// Ball Rotate Fade Spinner Button
148 | SpinnerButton(buttonAction: {
149 | /// Action to perform
150 |
151 | /// Stop animation by toggling value of state variable
152 | /// Added delay of 2 seconds
153 | DispatchQueue.main.asyncAfter(deadline: .now() + 2.0) {
154 | isBallRotateFadeButtonAnimating.toggle()
155 | }
156 | }, isAnimating: $isBallRotateFadeButtonAnimating, buttonStyle: buttonStyleWithBorderAndShadow, animationType: SpinnerButtonAnimationStyle.ballSpinChase(count: 7, size: 7)) {
157 | /// Add content in button
158 | ZStack {
159 | Text("Ball Rotate Fade")
160 | .fontWeight(.bold)
161 | }
162 | .foregroundColor(.white)
163 | }
164 |
165 | }
166 | /// Disable view if any button is animating
167 | .disabled(isLineSpinFadeButtonAnimating == true || isBallRotateFadeButtonAnimating == true || isArcRotateFadeButtonAnimating == true || isBallSpinChaseButtonAnimating == true || isCustomShapeSpinChaseButtonAnimating == true)
168 | }
169 | }
170 |
171 | struct ContentView_Previews: PreviewProvider {
172 | static var previews: some View {
173 | ContentView()
174 | }
175 | }
176 |
--------------------------------------------------------------------------------
/Example/SSSwiftUISpinnerButtonDemo/HelperClass/Color+Extension.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Color+Extension.swift
3 | // SSSwiftUISpinnerButton
4 | //
5 | // Created by Chaitali Lad on 30/06/21.
6 | //
7 |
8 | import SwiftUI
9 |
10 | extension Color {
11 |
12 | /// Convert hex to Color
13 | /// - Parameter hex: Hex Code of Color
14 | init(hex: String) {
15 | let hex = hex.trimmingCharacters(in: CharacterSet.alphanumerics.inverted)
16 | var int: UInt64 = 0
17 | Scanner(string: hex).scanHexInt64(&int)
18 | let a, r, g, b: UInt64
19 | switch hex.count {
20 | case 3: // RGB (12-bit)
21 | (a, r, g, b) = (255, (int >> 8) * 17, (int >> 4 & 0xF) * 17, (int & 0xF) * 17)
22 | case 6: // RGB (24-bit)
23 | (a, r, g, b) = (255, int >> 16, int >> 8 & 0xFF, int & 0xFF)
24 | case 8: // ARGB (32-bit)
25 | (a, r, g, b) = (int >> 24, int >> 16 & 0xFF, int >> 8 & 0xFF, int & 0xFF)
26 | default:
27 | (a, r, g, b) = (1, 1, 1, 0)
28 | }
29 | self.init(
30 | .sRGB,
31 | red: Double(r) / 255,
32 | green: Double(g) / 255,
33 | blue: Double(b) / 255,
34 | opacity: Double(a) / 255
35 | )
36 | }
37 | }
38 |
--------------------------------------------------------------------------------
/Example/SSSwiftUISpinnerButtonDemo/HelperClass/Enumerations.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Enumerations.swift
3 | // SSSwiftUISpinnerButton
4 | //
5 | // Created by Chaitali Lad on 30/06/21.
6 | //
7 |
8 | import Foundation
9 |
10 | enum Colors: String {
11 | case blue = "#3FC1C9"
12 | case pink = "#ff68ab"
13 | case darkGreen = "#2c7150"
14 | case lightGreen = "#23d0b1"
15 | case lightBlue = "#3fb0f3"
16 | case skyBlue = "66d1f8"
17 | case darkBlue = "3a67cc"
18 | }
19 |
--------------------------------------------------------------------------------
/Example/SSSwiftUISpinnerButtonDemo/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | $(DEVELOPMENT_LANGUAGE)
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | $(PRODUCT_BUNDLE_IDENTIFIER)
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | $(PRODUCT_NAME)
15 | CFBundlePackageType
16 | $(PRODUCT_BUNDLE_PACKAGE_TYPE)
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleVersion
20 | 1
21 | LSRequiresIPhoneOS
22 |
23 | UIApplicationSceneManifest
24 |
25 | UIApplicationSupportsMultipleScenes
26 |
27 |
28 | UIApplicationSupportsIndirectInputEvents
29 |
30 | UILaunchScreen
31 |
32 | UIRequiredDeviceCapabilities
33 |
34 | armv7
35 |
36 | UISupportedInterfaceOrientations
37 |
38 | UIInterfaceOrientationPortrait
39 | UIInterfaceOrientationLandscapeLeft
40 | UIInterfaceOrientationLandscapeRight
41 |
42 | UISupportedInterfaceOrientations~ipad
43 |
44 | UIInterfaceOrientationPortrait
45 | UIInterfaceOrientationPortraitUpsideDown
46 | UIInterfaceOrientationLandscapeLeft
47 | UIInterfaceOrientationLandscapeRight
48 |
49 |
50 |
51 |
--------------------------------------------------------------------------------
/Example/SSSwiftUISpinnerButtonDemo/Preview Content/Preview Assets.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "author" : "xcode",
4 | "version" : 1
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/Example/SSSwiftUISpinnerButtonDemo/SSSwiftUISpinnerButtonDemoApp.swift:
--------------------------------------------------------------------------------
1 | //
2 | // SSSwiftUISpinnerButtonDemoApp.swift
3 | // SSSwiftUISpinnerButton
4 | //
5 | // Created by Nilisha Gupta on 12/02/21.
6 | //
7 |
8 | import SwiftUI
9 |
10 | @main
11 | struct SSSwiftUISpinnerButtonDemoApp: App {
12 | var body: some Scene {
13 | WindowGroup {
14 | ContentView()
15 | }
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2020 Simform Solutions
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/Package.swift:
--------------------------------------------------------------------------------
1 | // swift-tools-version:5.3
2 | // The swift-tools-version declares the minimum version of Swift required to build this package.
3 |
4 | import PackageDescription
5 |
6 | let package = Package(
7 | name: "SSSwiftUISpinnerButton",
8 | platforms: [
9 | .iOS(.v13),
10 | .macOS(.v10_15)
11 | ],
12 | products: [
13 | // Products define the executables and libraries a package produces, and make them visible to other packages.
14 | .library(
15 | name: "SSSwiftUISpinnerButton",
16 | targets: ["SSSwiftUISpinnerButton"]),
17 | ],
18 | dependencies: [
19 | // Dependencies declare other packages that this package depends on.
20 | // .package(url: /* package url */, from: "1.0.0"),
21 | ],
22 | targets: [
23 | // Targets are the basic building blocks of a package. A target can define a module or a test suite.
24 | // Targets can depend on other targets in this package, and on products in packages this package depends on.
25 | .target(
26 | name: "SSSwiftUISpinnerButton",
27 | dependencies: [])
28 | ],
29 | swiftLanguageVersions: [.v5]
30 | )
31 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 |
2 |
3 | # SSSwiftUISpinnerButton
4 |
5 |
6 | SSSwiftUISpinnerButton is an open-source library in SwiftUI to add different spinning animation to button.
7 |
8 | [![Platform][platform-image]][platform-url]
9 | [](https://developer.apple.com/documentation/swiftui)
10 | [![Swift Version][swift-image]][swift-url]
11 | [![License][license-image]][license-url]
12 | [![PRs Welcome][PR-image]][PR-url]
13 |
14 | 
15 |
16 | # Features!
17 | - Various spinner animation styles
18 | - Rounded button on spinning animation
19 |
20 | # Requirements
21 | - iOS 13.0+
22 | - Xcode 11+
23 |
24 | # Installation
25 | #### CocoaPods
26 |
27 | - You can use CocoaPods to install `SSSwiftUISpinnerButton` by adding it to your Podfile:
28 |
29 | use_frameworks!
30 | pod 'SSSwiftUISpinnerButton'
31 |
32 | - Import SSSwiftUISpinnerButton in your file:
33 |
34 | import SSSwiftUISpinnerButton
35 |
36 | **Manually**
37 | - Download and drop **SSSwiftUISpinnerButton/Sources** folder in your project.
38 | - Congratulations!
39 |
40 | #### Swift Package Manager
41 | - When using Xcode 11 or later, you can install `SSSwiftUISpinnerButton` by going to your Project settings > `Swift Packages` and add the repository by providing the GitHub URL. Alternatively, you can go to `File` > `Swift Packages` > `Add Package Dependencies...`
42 |
43 | dependencies: [
44 | .package(url: "https://github.com/mobile-simformsolutions/SSSwiftUISpinnerButton.git", from: "1.0.0")
45 | ]
46 |
47 | # Usage Examples
48 |
49 | **Add Spinner Button**
50 |
51 | - Add state variable to manage spinner button start and stop animation
52 |
53 | @State var isSpinnerButtonAnimating: Bool = false
54 |
55 | - Add Spinner button:
56 |
57 | SpinnerButton(buttonAction: {
58 | // Your button action code here
59 | }, isAnimating: $isSpinnerButtonAnimating, builder: {
60 | // Add any view or content in button if required
61 | HStack {
62 | Text("Save")
63 | .foregroundColor(.white)
64 | }
65 | }
66 | )
67 |
68 | **Start Animation**
69 | - Animation will start as soon as you will tap on the button (`isSpinnerButtonAnimating` state variable will be set true).
70 |
71 | **Stop Animation**
72 | - To stop the spinner button animation, simply toggle the state variable `isSpinnerButtonAnimating` value.
73 |
74 | isSpinnerButtonAnimating.toggle()
75 |
76 | **Spinner button animation style**
77 | - You can select from different animation styles
78 | - Every animation style has properties such as count, size, etc which can be modified.
79 |
80 | SpinnerButton(buttonAction: {
81 | /// Action to perform
82 | }, isAnimating: $isSpinnerButtonAnimating,
83 | animationType: SpinnerButtonAnimationStyle.lineSpinFade(count: 8, width: 0)) {
84 | /// Add content in button
85 | }
86 | **Spinner button customisation**
87 | - You can modify view of the spinner button using `SpinnerButtonViewStyle`
88 | - Initialise variable with type `SpinnerButtonViewStyle` to design button:
89 |
90 | private var buttonStyleWithBasicDesign: SpinnerButtonViewStyle = SpinnerButtonViewStyle(
91 | width: 300,
92 | height: 50,
93 | cornerRadius: 5,
94 | backgroundColor: .black,
95 | spinningButtonBackgroundColor: .black,
96 | spinningStrokeColor: .white
97 | )
98 |
99 | - Assign it to `buttonstyle`:
100 |
101 | SpinnerButton(buttonAction: {
102 | /// Action to perform
103 | }, isAnimating: $isSpinnerButtonAnimating,
104 | buttonStyle: buttonStyleWithBasicDesign,
105 | animationType: SpinnerButtonAnimationStyle.lineSpinFade(count: 8, width: 0)) {
106 | /// Add content in button
107 | }
108 |
109 | # Swift Library:
110 | - Check out our Swift Library for Spinner Button - [SSSpinnerButton](https://github.com/SimformSolutionsPvtLtd/SSSpinnerButton)
111 |
112 | # Meta
113 | - Distributed under the MIT license. See LICENSE for more information.
114 |
115 | # Inspired By:
116 | - Spinner animations inspired from [iActivityIndicator](https://github.com/MojtabaHs/iActivityIndicator)
117 |
118 | [swift-image]:https://img.shields.io/badge/swift-5.0-orange.svg
119 | [swift-url]: https://swift.org/
120 | [license-image]: https://img.shields.io/badge/License-MIT-blue.svg
121 | [license-url]: LICENSE
122 | [platform-image]:https://img.shields.io/cocoapods/p/LFAlertController.svg?style=flat
123 | [platform-url]:https://github.com/mobile-simformsolutions/SSSwiftUISpinnerButton
124 | [PR-image]:https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat-square
125 | [PR-url]:http://makeapullrequest.com
126 |
--------------------------------------------------------------------------------
/SSSwiftUISpinnerButton.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SimformSolutionsPvtLtd/SSSwiftUISpinnerButton/e2b8ccd95a1f638ec2ba36cbcead6ac57c6d6255/SSSwiftUISpinnerButton.gif
--------------------------------------------------------------------------------
/SSSwiftUISpinnerButton.podspec:
--------------------------------------------------------------------------------
1 | #
2 | # Be sure to run `pod spec lint SSSwiftUISpinnerButton.podspec' to ensure this is a
3 | # valid spec and to remove all comments including this before submitting the spec.
4 | #
5 | # To learn more about Podspec attributes see https://guides.cocoapods.org/syntax/podspec.html
6 | # To see working Podspecs in the CocoaPods repo see https://github.com/CocoaPods/Specs/
7 | #
8 |
9 | Pod::Spec.new do |spec|
10 |
11 | spec.name = "SSSwiftUISpinnerButton"
12 | spec.version = "1.0.0"
13 | spec.summary = "Button with different spinner animation styles."
14 | spec.description = "SpinnerButton is a custom button with different spinner animation styles."
15 | spec.homepage = "https://github.com/mobile-simformsolutions/SSSwiftUISpinnerButton"
16 | spec.license = { :type => "MIT", :file => "LICENSE" }
17 | spec.author = { "Chaitali Lad" => "chaitali.l@simformsolutions.com" }
18 | spec.platform = :ios
19 | spec.ios.deployment_target = "13.0"
20 | spec.swift_versions = '5.0'
21 | spec.source = { :git => "https://github.com/mobile-simformsolutions/SSSwiftUISpinnerButton.git", :tag => "#{spec.version}" }
22 | spec.source_files = "Sources/**/*"
23 | #spec.documentation_url = 'docs/index.html'
24 |
25 | end
--------------------------------------------------------------------------------
/Sources/SSSwiftUISpinnerButton/SpinnerButton.swift:
--------------------------------------------------------------------------------
1 | //
2 | // SpinnerButton.swift
3 | // SSSwiftUISpinnerButton
4 | //
5 | // Created by Chaitali Lad on 28/06/21.
6 | //
7 |
8 | import SwiftUI
9 |
10 | public struct SpinnerButton: View {
11 |
12 | // MARK: Binding Variables
13 | /// State of button animation
14 | @Binding var isButtonAnimating: Bool
15 |
16 | // MARK: Variables
17 |
18 | /// To change design of button view
19 | private var buttonStyle: SpinnerButtonViewStyle
20 |
21 | /// To add any view or content in button
22 | private let content: Content
23 |
24 | /// Add action to be performed after button is tapped
25 | private var buttonAction: (() -> ())
26 |
27 | /// Select button spinning animation type: arcsRotateChase, ballSpinChase, ballRotateFade or lineSpinFade
28 | private var animationType: SpinnerButtonAnimationStyle?
29 |
30 | // MARK: Init Method
31 |
32 | /// Add spinner button with custom design and animation style
33 | /// - Parameters:
34 | /// - buttonAction: Add action to be performed after button is tapped
35 | /// - isAnimating: Binding to determine if button is animating or not
36 | /// - buttonStyle: Change design of button view
37 | /// - animationType: Select button spinning animation type
38 | /// - builder: Add any view or content in button
39 | public init(buttonAction: @escaping () -> Void, isAnimating: Binding, buttonStyle: SpinnerButtonViewStyle? = nil, animationType: SpinnerButtonAnimationStyle? = nil, @ViewBuilder builder: () -> Content) {
40 | content = builder()
41 | self._isButtonAnimating = isAnimating
42 | self.buttonStyle = buttonStyle ?? SpinnerButtonViewStyle()
43 | self.animationType = animationType
44 | self.buttonAction = buttonAction
45 | }
46 |
47 | public var body: some View {
48 | /// Add Button
49 | Button(action: {
50 | /// Perform action on tap of button
51 | /// Toggle `isButtonAnimating` to change the state
52 | if !isButtonAnimating {
53 | buttonAction()
54 | }
55 | isButtonAnimating = true
56 | }) {
57 | /// Add content in button view
58 | ZStack {
59 | /// Customise content view based on button style (before and after animation)
60 | /// Add rectangle in ZStack and add styling customisation
61 | Rectangle()
62 | /// Fill rectandle with given linear gradient
63 | /// or
64 | /// Add linear gradient with background and loading background color
65 | .fill(
66 | buttonStyle.gradient ?? LinearGradient(
67 | gradient: Gradient(
68 | colors: [(isButtonAnimating ? buttonStyle.spinningButtonBackgroundColor:buttonStyle.backgroundColor)]
69 | ),
70 | startPoint: .leading,
71 | endPoint: .trailing
72 | )
73 | )
74 | /// Add given corner radius to rectangle when button is not animating
75 | .cornerRadius(
76 | isButtonAnimating ? (buttonStyle.height/2):buttonStyle.cornerRadius
77 | )
78 | /// Add `overlay` to give border or shadow to button
79 | /// Add Rounded Rectangle View
80 | /// `Stroke`: Add given custom border and border width
81 | /// `Shadow`: Addgiven custom shadow
82 | /// `CornerRadius`: Add given corner radius when button is not animating (For overlay to clip borders)
83 | .overlay(RoundedRectangle(cornerRadius: isButtonAnimating ? buttonStyle.height/2:buttonStyle.cornerRadius)
84 | .stroke(buttonStyle.borderColor, lineWidth: buttonStyle.borderWidth)
85 | .shadow(color: buttonStyle.shadowColor, radius: buttonStyle.shadowRadius, x: buttonStyle.shadowOffset.x, y: buttonStyle.shadowOffset.y))
86 | /// Add animation
87 | .animation(.easeInOut)
88 |
89 | if isButtonAnimating {
90 | /// On animating, add spinning animation to view
91 | SpinnerButtonAnimationView(animationStyle: animationType ?? .arcsRotateChase())
92 | .frame(width: buttonStyle.height / 2, height: buttonStyle.height / 2, alignment: .center)
93 | .foregroundColor(buttonStyle.spinningStrokeColor)
94 | } else {
95 | /// On stopping animation, show animation in user-added content
96 | VStack {
97 | /// Add user added content
98 | content
99 | .animation(.easeInOut)
100 | }
101 | .cornerRadius(isButtonAnimating ? buttonStyle.height/2:buttonStyle.cornerRadius)
102 | }
103 | }
104 | }
105 | /// Add custom frame size
106 | .frame(width: isButtonAnimating ? buttonStyle.height:buttonStyle.width, height: buttonStyle.height)
107 | .buttonStyle(StaticButtonStyle())
108 | /// Disable view while animating
109 | .disabled(isButtonAnimating == true)
110 | }
111 | }
112 |
113 | private struct StaticButtonStyle: ButtonStyle {
114 | func makeBody(configuration: Configuration) -> some View {
115 | configuration.label
116 | }
117 | }
118 |
--------------------------------------------------------------------------------
/Sources/SSSwiftUISpinnerButton/SpinnerButtonAnimationStyle/ArcsRotateChaseAnimation.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ArcsRotateChaseAnimation.swift
3 | // SSSwiftUISpinnerButton
4 | //
5 | // Created by Chaitali Lad on 28/06/21.
6 | //
7 |
8 | import SwiftUI
9 |
10 | public struct ArcsRotateChaseAnimation: View {
11 |
12 | // MARK: Binding Variables
13 | /// State of button animation
14 | @Binding private var isAnimating: Bool
15 |
16 | // MARK: Public Variables
17 | /// Change the number of animating arc
18 | public let count: UInt
19 |
20 | /// Change the width of animating arc
21 | public let width: CGFloat
22 |
23 | /// Change the spacing between animating arcs
24 | public let spacing: CGFloat
25 |
26 | // MARK: Init Method
27 | /// - Parameters:
28 | /// - isAnimating: Binding to determine if button is animating or not
29 | /// - count: Change number of animating arc
30 | /// - width: Change width of animating arc
31 | /// - spacing: Add spacing between animating arcs
32 | public init(isAnimating: Binding, count: UInt = 3, width: CGFloat = 2, spacing: CGFloat = 1) {
33 | self._isAnimating = isAnimating
34 | self.count = count
35 | self.width = width
36 | self.spacing = spacing
37 | }
38 |
39 | public var body: some View {
40 | GeometryReader { geometry in
41 | ForEach(0.. some View {
55 | Group { () -> Path in
56 | var path = Path()
57 | path.addArc(center: CGPoint(x: geometrySize.width/2, y: geometrySize.height/2),
58 | radius: geometrySize.width/2 - width/2 - CGFloat(index) * (width + spacing),
59 | startAngle: .degrees(0),
60 | endAngle: .degrees(Double(Int.random(in: 180...300))),
61 | clockwise: true)
62 | return path.strokedPath(.init(lineWidth: width))
63 | }
64 | .frame(width: geometrySize.width, height: geometrySize.height)
65 | }
66 | }
67 |
--------------------------------------------------------------------------------
/Sources/SSSwiftUISpinnerButton/SpinnerButtonAnimationStyle/BallRotateFadeAnimation.swift:
--------------------------------------------------------------------------------
1 | //
2 | // BallRotateFadeAnimation.swift
3 | // SSSwiftUISpinnerButton
4 | //
5 | // Created by Chaitali Lad on 28/06/21.
6 | //
7 |
8 | import SwiftUI
9 |
10 | public struct BallRotateFadeAnimation: View {
11 |
12 | // MARK: Binding Variables
13 | /// State of button animation
14 | @Binding private var isAnimating: Bool
15 |
16 | // MARK: Public Variables
17 | /// Change the number of animating shapes
18 | public let count: UInt
19 |
20 | /// Change the shape from ball to any given view
21 | public let content: AnyView
22 |
23 | // MARK: Init Methods
24 | /// - Parameters:
25 | /// - isAnimating: Binding to determine if button is animating or not
26 | /// - count: Change the number of animating shapes
27 | /// - size: Change the size of animating shapes
28 | /// - content: Change the shape from ball to any given view
29 | public init(isAnimating: Binding, count: UInt = 6, size: CGFloat = 8, content: () -> Content) {
30 | self._isAnimating = isAnimating
31 | self.count = count
32 | self.content = AnyView(content().frame(width: size, height: size))
33 | }
34 |
35 | /// - Parameters:
36 | /// - isAnimating: Binding to determine if button is animating or not
37 | /// - count: Change the number of animating balls
38 | /// - size: Change the size of animating balls
39 | public init(isAnimating: Binding, count: UInt = 6, size: CGFloat = 8) {
40 | self.init(isAnimating: isAnimating, count: count) {
41 | Circle().frame(width: size, height: size)
42 | }
43 | }
44 |
45 | public var body: some View {
46 | GeometryReader { geometry in
47 | ForEach(0.. CGFloat {
62 | CGFloat(index+1) / CGFloat(count)
63 | }
64 |
65 | private func item(forIndex index: Int, in geometrySize: CGSize) -> some View {
66 | content
67 | .scaleEffect(isAnimating ? animatingScale(forIndex: index) : 1 )
68 | .offset(y: geometrySize.width/10 - geometrySize.height/2)
69 | }
70 | }
71 |
--------------------------------------------------------------------------------
/Sources/SSSwiftUISpinnerButton/SpinnerButtonAnimationStyle/BallSpinChaseAnimation.swift:
--------------------------------------------------------------------------------
1 | //
2 | // BallSpinChaseAnimation.swift
3 | // SSSwiftUISpinnerButton
4 | //
5 | // Created by Chaitali Lad on 28/06/21.
6 | //
7 |
8 | import SwiftUI
9 |
10 | public struct BallSpinChaseAnimation: View {
11 |
12 | // MARK: Binding Variables
13 | /// State of button animation
14 | @Binding private var isAnimating: Bool
15 |
16 | // MARK: Public Variables
17 | /// Change the number of animating ball
18 | public let count: UInt
19 |
20 | /// Change the size of animating ball
21 | public let size: CGFloat
22 |
23 | // MARK: Init Method
24 | /// - Parameters:
25 | /// - isAnimating: Binding to determine if button is animating or not
26 | /// - count: Change the number of animating ball
27 | /// - size: Change the size of animating ball
28 | public init(isAnimating: Binding, count: UInt = 8, size: CGFloat = 16) {
29 | self._isAnimating = isAnimating
30 | self.count = count
31 | self.size = size
32 | }
33 |
34 | public var body: some View {
35 | GeometryReader { geometry in
36 | ForEach(0.. some View {
46 | let angle = 2 * CGFloat.pi / CGFloat(count) * CGFloat(index)
47 | let x = (geometrySize.width/2 - size/2) * cos(angle)
48 | let y = (geometrySize.height/2 - size/2) * sin(angle)
49 | return Circle()
50 | .frame(width: size, height: size)
51 | .scaleEffect(isAnimating ? 0.5 : 1)
52 | .opacity(isAnimating ? 0.25 : 1)
53 | .animation(
54 | Animation
55 | .default
56 | .repeatCount(isAnimating ? .max : 1, autoreverses: true)
57 | .delay(Double(index) / Double(count) / 2)
58 | )
59 | .offset(x: x, y: y)
60 | }
61 | }
62 |
--------------------------------------------------------------------------------
/Sources/SSSwiftUISpinnerButton/SpinnerButtonAnimationStyle/LineSpinFadeAnimation.swift:
--------------------------------------------------------------------------------
1 | //
2 | // LineSpinFadeAnimation.swift
3 | // SSSwiftUISpinnerButton
4 | //
5 | // Created by Chaitali Lad on 28/06/21.
6 | //
7 |
8 | import SwiftUI
9 |
10 | public struct LineSpinFadeAnimation: View {
11 |
12 | // MARK: Binding Variables
13 | /// State of button animation
14 | @Binding private var isAnimating: Bool
15 |
16 | // MARK: Public Variables
17 | /// Change the number of animating line
18 | public let count: UInt
19 |
20 | /// Change the width of animating line
21 | public let width: CGFloat
22 |
23 | // MARK: Init Method
24 | /// - Parameters:
25 | /// - isAnimating: Binding to determine if button is animating or not
26 | /// - count: Change the number of animating line
27 | /// - width: Change the width of animating line
28 | public init(isAnimating: Binding, count: UInt = 8, width: CGFloat = -1) {
29 | self._isAnimating = isAnimating
30 | self.count = count
31 | self.width = width
32 | }
33 |
34 | public var body: some View {
35 | GeometryReader { geometry in
36 | ForEach(0.. some View {
51 | let height: CGFloat = (geometrySize.height / 3.2).rounded()
52 | let width: CGFloat = (self.width <= 0 ? height/2 : self.width).rounded()
53 | let angle = 2 * CGFloat.pi / CGFloat(count) * CGFloat(index)
54 | let x = (geometrySize.width/2 - height/2) * cos(angle)
55 | let y = (geometrySize.height/2 - height/2) * sin(angle)
56 | return
57 | Capsule(style: .continuous)
58 | .frame(width: width, height: height)
59 | .rotationEffect(Angle(radians: Double(angle + CGFloat.pi/2)))
60 | .offset(x: x, y: y)
61 | }
62 | }
63 |
--------------------------------------------------------------------------------
/Sources/SSSwiftUISpinnerButton/SpinnerButtonAnimationView.swift:
--------------------------------------------------------------------------------
1 | //
2 | // SpinnerButtonAnimationView.swift
3 | // SSSwiftUISpinnerButton
4 | //
5 | // Created by Chaitali Lad on 28/06/21.
6 | //
7 |
8 | import SwiftUI
9 |
10 | /// Spinner Button Animation Style
11 | public enum SpinnerButtonAnimationStyle {
12 | case arcsRotateChase(count: UInt = 3, width: CGFloat = 2, spacing: CGFloat = 1)
13 | case ballSpinChase(count: UInt = 8, size: CGFloat = 16)
14 | case ballRotateFade(count: UInt = 6, size: CGFloat = 10, content: AnyView = AnyView(Circle()))
15 | case lineSpinFade(count: UInt = 8, width: CGFloat = 0)
16 | }
17 |
18 | /// Spinner Button Animation View
19 | public struct SpinnerButtonAnimationView: View {
20 |
21 | // MARK: State Variables
22 | /// State of button animation
23 | @State var isAnimating: Bool = false
24 |
25 | // MARK: Variables
26 | /// Spinner animation style: arcsRotateChase, ballSpinChase, ballRotateFade or lineSpinFade
27 | private let animationStyle: SpinnerButtonAnimationStyle
28 |
29 | public var body: some View {
30 | Group {
31 | switch animationStyle {
32 | case let .arcsRotateChase(count, width, spacing):
33 | ArcsRotateChaseAnimation(
34 | isAnimating: $isAnimating,
35 | count: count,
36 | width: width,
37 | spacing: spacing
38 | )
39 | case let .ballSpinChase(count, size):
40 | BallSpinChaseAnimation(
41 | isAnimating: $isAnimating,
42 | count: count,
43 | size: size
44 | )
45 | case let .ballRotateFade(count, size, content):
46 | BallRotateFadeAnimation(
47 | isAnimating: $isAnimating,
48 | count: count,
49 | size: size,
50 | content: { content.frame(width: size, height: size) }
51 | )
52 | case let .lineSpinFade(count, width):
53 | LineSpinFadeAnimation(isAnimating: $isAnimating,
54 | count: count,
55 | width: width)
56 | }
57 | }
58 | .onAppear { isAnimating = true }
59 | .onDisappear { isAnimating = false }
60 | .aspectRatio(contentMode: .fit)
61 | }
62 |
63 | // MARK: Init Method
64 | /// Add animation view in button based on selected animation style
65 | /// - Parameter animationStyle: Select button spinning animation style
66 | public init(animationStyle: SpinnerButtonAnimationStyle = .arcsRotateChase()) {
67 | self.animationStyle = animationStyle
68 | }
69 | }
70 |
--------------------------------------------------------------------------------
/Sources/SSSwiftUISpinnerButton/SpinnerButtonViewStyle.swift:
--------------------------------------------------------------------------------
1 | //
2 | // SpinnerButtonViewStyle.swift
3 | // SSSwiftUISpinnerButton
4 | //
5 | // Created by Chaitali Lad on 28/06/21.
6 | //
7 |
8 | import SwiftUI
9 |
10 | public struct SpinnerButtonViewStyle {
11 |
12 | // MARK: Variables
13 |
14 | /// Width of button - default width is set to 300
15 | public var width: CGFloat = 300
16 |
17 | /// height of button - default height is set to 50
18 | public var height: CGFloat = 50
19 |
20 | /// Corner radius of button - default cornerRadius is set to 0
21 | public var cornerRadius: CGFloat = 0
22 |
23 | /// Background color of button - default backgroundColor is set to primary
24 | public var backgroundColor: Color = .primary
25 |
26 | /// Background color of button when button is animating / spinning - default spinningButtonBackgroundColor is set to primary
27 | public var spinningButtonBackgroundColor: Color = .primary
28 |
29 | /// Spinning stroke color of button - default spinningStrokeColor is set to white
30 | public var spinningStrokeColor: Color = Color.white
31 |
32 | /// Border color of button - default borderColor is set to clear
33 | public var borderColor: Color = Color.clear
34 |
35 | /// Border width of button - default borderWidth is set to 0
36 | public var borderWidth: CGFloat = 0
37 |
38 | /// Gradient of button
39 | public var gradient: LinearGradient?
40 |
41 | /// Shadow color of button - default shadowColor is set to clear
42 | public var shadowColor: Color = Color.clear
43 |
44 | /// Shadow radius of button - default shadowRadius is set to 0
45 | public var shadowRadius: CGFloat = 0
46 |
47 | /// Shadow offset of button - default shadowOffset is set to zero
48 | public var shadowOffset: CGPoint = CGPoint.zero
49 |
50 | // MARK: Init Methods
51 | /// Initialise to design button view
52 | public init() {
53 |
54 | }
55 |
56 | // MARK: Init method to add basic customisation to button
57 | /// Initialise to add basic custom design to button view
58 | /// - Parameters:
59 | /// - width: Width of button
60 | /// - height: Height of button
61 | /// - cornerRadius: Corner radius of button
62 | /// - backgroundColor: Background color of button
63 | /// - spinningButtonBackgroundColor: Background color of button while button is animating / spinning
64 | /// - spinningStrokeColor: Spinning Stroke Color of button
65 | public init(width: CGFloat? = nil, height: CGFloat? = nil, cornerRadius: CGFloat? = nil, backgroundColor: Color? = nil, spinningButtonBackgroundColor: Color? = nil, spinningStrokeColor: Color? = nil) {
66 | self.width = width ?? 300
67 | self.height = height ?? 50
68 | self.cornerRadius = cornerRadius ?? 0
69 | self.backgroundColor = backgroundColor ?? Color.primary
70 | self.spinningButtonBackgroundColor = spinningButtonBackgroundColor ?? self.backgroundColor
71 | self.spinningStrokeColor = spinningStrokeColor ?? .white
72 | }
73 | }
74 |
--------------------------------------------------------------------------------
/Tests/LinuxMain.swift:
--------------------------------------------------------------------------------
1 | import XCTest
2 |
3 | import SSSwiftUISpinnerButtonTests
4 |
5 | var tests = [XCTestCaseEntry]()
6 | tests += SSSwiftUISpinnerButtonTests.allTests()
7 | XCTMain(tests)
8 |
--------------------------------------------------------------------------------
/Tests/SSSwiftUISpinnerButtonTests/SSSwiftUISpinnerButtonTests.swift:
--------------------------------------------------------------------------------
1 | import XCTest
2 | @testable import SSSwiftUISpinnerButton
3 |
4 | final class SSSwiftUISpinnerButtonTests: XCTestCase {
5 | func testExample() {
6 | // This is an example of a functional test case.
7 | // Use XCTAssert and related functions to verify your tests produce the correct
8 | // results.
9 | XCTAssertEqual(SSSwiftUISpinnerButton().text, "Hello, World!")
10 | }
11 |
12 | static var allTests = [
13 | ("testExample", testExample),
14 | ]
15 | }
16 |
--------------------------------------------------------------------------------
/Tests/SSSwiftUISpinnerButtonTests/XCTestManifests.swift:
--------------------------------------------------------------------------------
1 | import XCTest
2 |
3 | #if !canImport(ObjectiveC)
4 | public func allTests() -> [XCTestCaseEntry] {
5 | return [
6 | testCase(SSSwiftUISpinnerButtonTests.allTests),
7 | ]
8 | }
9 | #endif
10 |
--------------------------------------------------------------------------------
/simformBanner.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SimformSolutionsPvtLtd/SSSwiftUISpinnerButton/e2b8ccd95a1f638ec2ba36cbcead6ac57c6d6255/simformBanner.png
--------------------------------------------------------------------------------