├── .gitignore
├── .swift-version
├── .travis.yml
├── AsyncTimer.podspec
├── AsyncTimer.xcodeproj
├── project.pbxproj
├── project.xcworkspace
│ ├── contents.xcworkspacedata
│ └── xcshareddata
│ │ └── AsyncTimer.xcscmblueprint
└── xcshareddata
│ └── xcschemes
│ ├── AsyncTimer iOS.xcscheme
│ ├── AsyncTimer macOS.xcscheme
│ ├── AsyncTimer tvOS.xcscheme
│ └── AsyncTimer watchOS.xcscheme
├── CHANGELOG.md
├── Example
├── Example iOS
│ ├── AppDelegate.swift
│ ├── Assets.xcassets
│ │ └── AppIcon.appiconset
│ │ │ └── Contents.json
│ ├── Controllers
│ │ ├── CountdownTimerViewController.swift
│ │ ├── PeriodicTimerViewController.swift
│ │ └── ScheduledTimerViewController.swift
│ ├── Info.plist
│ └── Storyboards
│ │ ├── LaunchScreen.storyboard
│ │ └── Main.storyboard
└── Example.xcodeproj
│ ├── project.pbxproj
│ ├── project.xcworkspace
│ ├── contents.xcworkspacedata
│ └── xcshareddata
│ │ └── Example.xcscmblueprint
│ └── xcshareddata
│ └── xcschemes
│ └── Example iOS.xcscheme
├── Images
├── Periodic480.gif
├── Periodic480.mov
├── Periodic720.gif
├── Periodic720.mov
├── countdown480.gif
├── countdown480.mov
├── countdown720.gif
├── countdown720.mov
├── scheduled480.gif
├── scheduled480.mov
├── scheduled720.gif
└── scheduled720.mov
├── LICENSE
├── Package.swift
├── README.md
└── Source
├── AsyncTimer.h
├── AsyncTimer.swift
├── Counter.swift
├── Info.plist
└── Task.swift
/.gitignore:
--------------------------------------------------------------------------------
1 | # OS X
2 | .DS_Store
3 |
4 | # Xcode
5 | #
6 | # gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore
7 |
8 | ## Build generated
9 | build/
10 | DerivedData/
11 |
12 | ## Various settings
13 | *.pbxuser
14 | !default.pbxuser
15 | *.mode1v3
16 | !default.mode1v3
17 | *.mode2v3
18 | !default.mode2v3
19 | *.perspectivev3
20 | !default.perspectivev3
21 | xcuserdata/
22 |
23 | ## Other
24 | *.moved-aside
25 | *.xcuserstate
26 |
27 | ## Obj-C/Swift specific
28 | *.hmap
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 | .build/
42 |
43 | # CocoaPods
44 | #
45 | # We recommend against adding the Pods directory to your .gitignore. However
46 | # you should judge for yourself, the pros and cons are mentioned at:
47 | # https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control
48 | #
49 | # Pods/
50 |
51 | # Carthage
52 | #
53 | # Add this line if you want to avoid checking in source code from Carthage dependencies.
54 | # Carthage/Checkouts
55 |
56 | Carthage/Build
57 |
58 | # fastlane
59 | #
60 | # It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the
61 | # screenshots whenever they are needed.
62 | # For more information about the recommended setup visit:
63 | # https://github.com/fastlane/fastlane/blob/master/fastlane/docs/Gitignore.md
64 |
65 | fastlane/report.xml
66 | fastlane/Preview.html
67 | fastlane/screenshots
68 | fastlane/test_output
69 |
--------------------------------------------------------------------------------
/.swift-version:
--------------------------------------------------------------------------------
1 | 4.0
2 |
--------------------------------------------------------------------------------
/.travis.yml:
--------------------------------------------------------------------------------
1 | # references:
2 | # * http://www.objc.io/issue-6/travis-ci.html
3 | # * https://github.com/supermarin/xcpretty#usage
4 |
5 | osx_image: xcode7.3
6 | language: objective-c
7 | # cache: cocoapods
8 | # podfile: Example/Podfile
9 | # before_install:
10 | # - gem install cocoapods # Since Travis is not always on latest version
11 | # - pod install --project-directory=Example
12 | script:
13 | - set -o pipefail && xcodebuild test -workspace Example/AsyncTimer.xcworkspace -scheme AsyncTimer-Example -sdk iphonesimulator9.3 ONLY_ACTIVE_ARCH=NO | xcpretty
14 | - pod lib lint
15 |
16 | # references:
17 | # * http://www.objc.io/issue-6/travis-ci.html
18 | # * https://github.com/supermarin/xcpretty#usage
19 |
20 | osx_image: xcode8.3
21 | language: objective-c
22 |
23 | env:
24 | global:
25 | - LC_CTYPE=en_US.UTF-8
26 | - WORKSPACE=AsyncTimer.xcworkspace
27 | - IOS="iOS"
28 | - MACOS="macOS"
29 | - TVOS="tvOS"
30 | - WATCHOS="watchOS"
31 |
32 | matrix:
33 |
34 | matrix:
35 | - DESTINATION="OS=9.1,name=iPad Air" PLATFORM="$IOS" RUN_TESTS="YES" BUILD_FRAMEWORK="YES" BUILD_EXAMPLE="YES"
36 | - DESTINATION="OS=9.2,name=iPad Air 2" PLATFORM="$IOS" RUN_TESTS="YES" BUILD_FRAMEWORK="YES" BUILD_EXAMPLE="YES"
37 | - DESTINATION="OS=10.1,name=iPad Pro (12.9-inch)" PLATFORM="$IOS" RUN_TESTS="YES" BUILD_FRAMEWORK="YES" BUILD_EXAMPLE="YES"
38 |
39 | - DESTINATION="OS=9.0,name=iPhone 4s" PLATFORM="$IOS" RUN_TESTS="YES" BUILD_FRAMEWORK="YES" BUILD_EXAMPLE="YES"
40 | - DESTINATION="OS=9.1,name=iPhone 5" PLATFORM="$IOS" RUN_TESTS="YES" BUILD_FRAMEWORK="YES" BUILD_EXAMPLE="YES"
41 | - DESTINATION="OS=10.2,name=iPhone 7" PLATFORM="$IOS" RUN_TESTS="YES" BUILD_FRAMEWORK="YES" BUILD_EXAMPLE="YES"
42 | - DESTINATION="OS=10.0,name=iPhone 7 Plus" PLATFORM="$IOS" RUN_TESTS="YES" BUILD_FRAMEWORK="YES" BUILD_EXAMPLE="YES"
43 |
44 | - DESTINATION="OS=2.0,name=Apple Watch - 38mm" PLATFORM="$WATCHOS" RUN_TESTS="NO" BUILD_FRAMEWORK="YES" BUILD_EXAMPLE="NO"
45 | - DESTINATION="OS=3.2,name=Apple Watch Series 2 - 42mm" PLATFORM="$WATCHOS" RUN_TESTS="NO" BUILD_FRAMEWORK="YES" BUILD_EXAMPLE="NO"
46 |
47 | - DESTINATION="OS=10.3.1,name=iPhone 6s Plus" PLATFORM="$WATCHOS" RUN_TESTS="NO" BUILD_FRAMEWORK="NO" BUILD_EXAMPLE="NO"
48 | - DESTINATION="OS=10.3.1,name=iPhone 7 Plus" PLATFORM="$WATCHOS" RUN_TESTS="NO" BUILD_FRAMEWORK="NO" BUILD_EXAMPLE="NO"
49 |
50 | - DESTINATION="OS=9.0,name=Apple TV 1080p" PLATFORM="$TVOS" RUN_TESTS="YES" BUILD_FRAMEWORK="YES" BUILD_EXAMPLE="NO"
51 | - DESTINATION="OS=10.2,name=Apple TV 1080p" PLATFORM="$TVOS" RUN_TESTS="YES" BUILD_FRAMEWORK="YES" BUILD_EXAMPLE="NO"
52 |
53 | - DESTINATION="arch=x86_64" PLATFORM="$MACOS" RUN_TESTS="YES" BUILD_FRAMEWORK="YES" BUILD_EXAMPLE="NO"
54 |
55 | script:
56 | - set -o pipefail
57 | - xcodebuild -version
58 | - xcodebuild -showsdks
59 |
60 | - FRAMEWORK_SCHEME="AsyncTimer $PLATFORM";
61 |
62 | # Build Framework
63 | # - if [ $BUILD_FRAMEWORK == "YES" ]; then
64 | # xcodebuild -workspace "$WORKSPACE" -scheme "$FRAMEWORK_SCHEME" -destination "$DESTINATION" -configuration Debug ONLY_ACTIVE_ARCH=NO build | xcpretty;
65 | # xcodebuild -workspace "$WORKSPACE" -scheme "$FRAMEWORK_SCHEME" -destination "$DESTINATION" -configuration Release ONLY_ACTIVE_ARCH=NO build| xcpretty;
66 | # fi
67 |
68 | # # Build Example
69 | # - if [ $BUILD_EXAMPLE == "YES" ]; then
70 | # xcodebuild -workspace "$WORKSPACE" -scheme "$EXAMPLE_SCHEME" -destination "$DESTINATION" -configuration Debug ONLY_ACTIVE_ARCH=NO build | xcpretty;
71 | # xcodebuild -workspace "$WORKSPACE" -scheme "$EXAMPLE_SCHEME" -destination "$DESTINATION" -configuration Release ONLY_ACTIVE_ARCH=NO build| xcpretty;
72 | # fi
73 |
74 | # # Run Tests
75 | # - if [ $RUN_TESTS == "YES" ]; then
76 | # xcodebuild -workspace "$WORKSPACE" -scheme "$EXAMPLE_SCHEME" -destination "$DESTINATION" -configuration Debug ONLY_ACTIVE_ARCH=NO ENABLE_TESTABILITY=YES test | xcpretty;
77 | # xcodebuild -workspace "$WORKSPACE" -scheme "$EXAMPLE_SCHEME" -destination "$DESTINATION" -configuration Release ONLY_ACTIVE_ARCH=NO ENABLE_TESTABILITY=YES test | xcpretty;
78 | # fi
79 |
80 | after_script:
81 | - pod try AsyncTimer;
82 |
--------------------------------------------------------------------------------
/AsyncTimer.podspec:
--------------------------------------------------------------------------------
1 |
2 | Pod::Spec.new do |spec|
3 | spec.name = 'AsyncTimer'
4 | spec.version = '2.2.0'
5 | spec.summary = 'AsyncTimer is a precision asynchronous timer. You can also use it as a countdown timer'
6 |
7 | spec.description = <<-DESC
8 | AsyncTimer is a pod that adds precision asynchronous timer to your app
9 | * Working with user events (like: scrolling, tapping, ...).
10 | * Functionality (start, pause, resume, stop, restart)
11 | * Support for clousure (never more selectors)
12 | * Can work as a countdown timer
13 | * Can work in background.
14 | DESC
15 |
16 | spec.homepage = 'https://github.com/Decybel07/AsyncTimer'
17 | spec.license = { :type => 'MIT', :file => 'LICENSE' }
18 | spec.author = { 'Adrian Bobrowski' => 'adrian071993@gmail.com' }
19 | spec.source = { :git => "https://github.com/Decybel07/AsyncTimer.git", :tag => spec.version }
20 |
21 | spec.pod_target_xcconfig = { 'SWIFT_VERSION' => '4.0' }
22 |
23 | spec.ios.deployment_target = '9.0'
24 | spec.osx.deployment_target = '10.10'
25 | spec.tvos.deployment_target = '9.0'
26 | spec.watchos.deployment_target = '2.0'
27 |
28 | spec.source_files = 'Source/**/*.swift'
29 | spec.frameworks = 'Foundation'
30 | end
31 |
--------------------------------------------------------------------------------
/AsyncTimer.xcodeproj/project.pbxproj:
--------------------------------------------------------------------------------
1 | // !$*UTF8*$!
2 | {
3 | archiveVersion = 1;
4 | classes = {
5 | };
6 | objectVersion = 46;
7 | objects = {
8 |
9 | /* Begin PBXBuildFile section */
10 | 2D9454B91F092D390091BD6B /* Task.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D9454B81F092D390091BD6B /* Task.swift */; };
11 | 2D9454BA1F092D390091BD6B /* Task.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D9454B81F092D390091BD6B /* Task.swift */; };
12 | 2D9454BB1F092D390091BD6B /* Task.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D9454B81F092D390091BD6B /* Task.swift */; };
13 | 2D9454BC1F092D390091BD6B /* Task.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D9454B81F092D390091BD6B /* Task.swift */; };
14 | 2D94555F1F1B408D0091BD6B /* Counter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D94555E1F1B408D0091BD6B /* Counter.swift */; };
15 | 2D9455601F1B408D0091BD6B /* Counter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D94555E1F1B408D0091BD6B /* Counter.swift */; };
16 | 2D9455611F1B408D0091BD6B /* Counter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D94555E1F1B408D0091BD6B /* Counter.swift */; };
17 | 2D9455621F1B408D0091BD6B /* Counter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D94555E1F1B408D0091BD6B /* Counter.swift */; };
18 | 2DD9D5971EFAEBDB005BFB68 /* AsyncTimer.h in Headers */ = {isa = PBXBuildFile; fileRef = 2DD9D5951EFAEBDB005BFB68 /* AsyncTimer.h */; settings = {ATTRIBUTES = (Public, ); }; };
19 | 2DD9D5981EFAEBDB005BFB68 /* AsyncTimer.h in Headers */ = {isa = PBXBuildFile; fileRef = 2DD9D5951EFAEBDB005BFB68 /* AsyncTimer.h */; settings = {ATTRIBUTES = (Public, ); }; };
20 | 2DD9D5991EFAEBDB005BFB68 /* AsyncTimer.h in Headers */ = {isa = PBXBuildFile; fileRef = 2DD9D5951EFAEBDB005BFB68 /* AsyncTimer.h */; settings = {ATTRIBUTES = (Public, ); }; };
21 | 2DD9D59A1EFAEBDB005BFB68 /* AsyncTimer.h in Headers */ = {isa = PBXBuildFile; fileRef = 2DD9D5951EFAEBDB005BFB68 /* AsyncTimer.h */; settings = {ATTRIBUTES = (Public, ); }; };
22 | 2DD9D5A01EFAED77005BFB68 /* AsyncTimer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2DD9D59F1EFAED77005BFB68 /* AsyncTimer.swift */; };
23 | 2DD9D5A11EFAED77005BFB68 /* AsyncTimer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2DD9D59F1EFAED77005BFB68 /* AsyncTimer.swift */; };
24 | 2DD9D5A21EFAED77005BFB68 /* AsyncTimer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2DD9D59F1EFAED77005BFB68 /* AsyncTimer.swift */; };
25 | 2DD9D5A31EFAED77005BFB68 /* AsyncTimer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2DD9D59F1EFAED77005BFB68 /* AsyncTimer.swift */; };
26 | /* End PBXBuildFile section */
27 |
28 | /* Begin PBXFileReference section */
29 | 2D9454B81F092D390091BD6B /* Task.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Task.swift; sourceTree = ""; };
30 | 2D9454C81F097A580091BD6B /* LICENSE */ = {isa = PBXFileReference; lastKnownFileType = text; path = LICENSE; sourceTree = ""; };
31 | 2D9454C91F097A580091BD6B /* Package.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Package.swift; sourceTree = ""; };
32 | 2D9454CA1F097A580091BD6B /* README.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = ""; };
33 | 2D9454CB1F097A8C0091BD6B /* AsyncTimer.podspec */ = {isa = PBXFileReference; lastKnownFileType = text; path = AsyncTimer.podspec; sourceTree = ""; };
34 | 2D9454CC1F097AB70091BD6B /* CHANGELOG.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = CHANGELOG.md; sourceTree = ""; };
35 | 2D94555E1F1B408D0091BD6B /* Counter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Counter.swift; sourceTree = ""; };
36 | 2DD9D5571EFAEABA005BFB68 /* AsyncTimer.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = AsyncTimer.framework; sourceTree = BUILT_PRODUCTS_DIR; };
37 | 2DD9D5721EFAEB40005BFB68 /* AsyncTimer.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = AsyncTimer.framework; sourceTree = BUILT_PRODUCTS_DIR; };
38 | 2DD9D57F1EFAEB59005BFB68 /* AsyncTimer.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = AsyncTimer.framework; sourceTree = BUILT_PRODUCTS_DIR; };
39 | 2DD9D58C1EFAEB6A005BFB68 /* AsyncTimer.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = AsyncTimer.framework; sourceTree = BUILT_PRODUCTS_DIR; };
40 | 2DD9D5951EFAEBDB005BFB68 /* AsyncTimer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AsyncTimer.h; sourceTree = ""; };
41 | 2DD9D5961EFAEBDB005BFB68 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
42 | 2DD9D59F1EFAED77005BFB68 /* AsyncTimer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AsyncTimer.swift; sourceTree = ""; };
43 | 2DF6CF0F1F8150E1000D8680 /* .travis.yml */ = {isa = PBXFileReference; lastKnownFileType = text; path = .travis.yml; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.sh; };
44 | /* End PBXFileReference section */
45 |
46 | /* Begin PBXFrameworksBuildPhase section */
47 | 2DD9D5531EFAEABA005BFB68 /* Frameworks */ = {
48 | isa = PBXFrameworksBuildPhase;
49 | buildActionMask = 2147483647;
50 | files = (
51 | );
52 | runOnlyForDeploymentPostprocessing = 0;
53 | };
54 | 2DD9D56E1EFAEB40005BFB68 /* Frameworks */ = {
55 | isa = PBXFrameworksBuildPhase;
56 | buildActionMask = 2147483647;
57 | files = (
58 | );
59 | runOnlyForDeploymentPostprocessing = 0;
60 | };
61 | 2DD9D57B1EFAEB59005BFB68 /* Frameworks */ = {
62 | isa = PBXFrameworksBuildPhase;
63 | buildActionMask = 2147483647;
64 | files = (
65 | );
66 | runOnlyForDeploymentPostprocessing = 0;
67 | };
68 | 2DD9D5881EFAEB6A005BFB68 /* Frameworks */ = {
69 | isa = PBXFrameworksBuildPhase;
70 | buildActionMask = 2147483647;
71 | files = (
72 | );
73 | runOnlyForDeploymentPostprocessing = 0;
74 | };
75 | /* End PBXFrameworksBuildPhase section */
76 |
77 | /* Begin PBXGroup section */
78 | 2DD9D54A1EFAEA5A005BFB68 = {
79 | isa = PBXGroup;
80 | children = (
81 | 2DD9D5941EFAEBDB005BFB68 /* Source */,
82 | 2DD9D5581EFAEABA005BFB68 /* Products */,
83 | 2D9454CB1F097A8C0091BD6B /* AsyncTimer.podspec */,
84 | 2D9454C91F097A580091BD6B /* Package.swift */,
85 | 2DF6CF0F1F8150E1000D8680 /* .travis.yml */,
86 | 2D9454CA1F097A580091BD6B /* README.md */,
87 | 2D9454CC1F097AB70091BD6B /* CHANGELOG.md */,
88 | 2D9454C81F097A580091BD6B /* LICENSE */,
89 | );
90 | sourceTree = "";
91 | };
92 | 2DD9D5581EFAEABA005BFB68 /* Products */ = {
93 | isa = PBXGroup;
94 | children = (
95 | 2DD9D5571EFAEABA005BFB68 /* AsyncTimer.framework */,
96 | 2DD9D5721EFAEB40005BFB68 /* AsyncTimer.framework */,
97 | 2DD9D57F1EFAEB59005BFB68 /* AsyncTimer.framework */,
98 | 2DD9D58C1EFAEB6A005BFB68 /* AsyncTimer.framework */,
99 | );
100 | name = Products;
101 | sourceTree = "";
102 | };
103 | 2DD9D5941EFAEBDB005BFB68 /* Source */ = {
104 | isa = PBXGroup;
105 | children = (
106 | 2DD9D5951EFAEBDB005BFB68 /* AsyncTimer.h */,
107 | 2DD9D5961EFAEBDB005BFB68 /* Info.plist */,
108 | 2DD9D59F1EFAED77005BFB68 /* AsyncTimer.swift */,
109 | 2D9454B81F092D390091BD6B /* Task.swift */,
110 | 2D94555E1F1B408D0091BD6B /* Counter.swift */,
111 | );
112 | path = Source;
113 | sourceTree = "";
114 | };
115 | /* End PBXGroup section */
116 |
117 | /* Begin PBXHeadersBuildPhase section */
118 | 2DD9D5541EFAEABA005BFB68 /* Headers */ = {
119 | isa = PBXHeadersBuildPhase;
120 | buildActionMask = 2147483647;
121 | files = (
122 | 2DD9D5971EFAEBDB005BFB68 /* AsyncTimer.h in Headers */,
123 | );
124 | runOnlyForDeploymentPostprocessing = 0;
125 | };
126 | 2DD9D56F1EFAEB40005BFB68 /* Headers */ = {
127 | isa = PBXHeadersBuildPhase;
128 | buildActionMask = 2147483647;
129 | files = (
130 | 2DD9D5981EFAEBDB005BFB68 /* AsyncTimer.h in Headers */,
131 | );
132 | runOnlyForDeploymentPostprocessing = 0;
133 | };
134 | 2DD9D57C1EFAEB59005BFB68 /* Headers */ = {
135 | isa = PBXHeadersBuildPhase;
136 | buildActionMask = 2147483647;
137 | files = (
138 | 2DD9D5991EFAEBDB005BFB68 /* AsyncTimer.h in Headers */,
139 | );
140 | runOnlyForDeploymentPostprocessing = 0;
141 | };
142 | 2DD9D5891EFAEB6A005BFB68 /* Headers */ = {
143 | isa = PBXHeadersBuildPhase;
144 | buildActionMask = 2147483647;
145 | files = (
146 | 2DD9D59A1EFAEBDB005BFB68 /* AsyncTimer.h in Headers */,
147 | );
148 | runOnlyForDeploymentPostprocessing = 0;
149 | };
150 | /* End PBXHeadersBuildPhase section */
151 |
152 | /* Begin PBXNativeTarget section */
153 | 2DD9D5561EFAEABA005BFB68 /* AsyncTimer iOS */ = {
154 | isa = PBXNativeTarget;
155 | buildConfigurationList = 2DD9D55D1EFAEABA005BFB68 /* Build configuration list for PBXNativeTarget "AsyncTimer iOS" */;
156 | buildPhases = (
157 | 2DD9D5521EFAEABA005BFB68 /* Sources */,
158 | 2DD9D5531EFAEABA005BFB68 /* Frameworks */,
159 | 2DD9D5541EFAEABA005BFB68 /* Headers */,
160 | 2DD9D5551EFAEABA005BFB68 /* Resources */,
161 | );
162 | buildRules = (
163 | );
164 | dependencies = (
165 | );
166 | name = "AsyncTimer iOS";
167 | productName = "AsyncTimer iOS";
168 | productReference = 2DD9D5571EFAEABA005BFB68 /* AsyncTimer.framework */;
169 | productType = "com.apple.product-type.framework";
170 | };
171 | 2DD9D5711EFAEB40005BFB68 /* AsyncTimer watchOS */ = {
172 | isa = PBXNativeTarget;
173 | buildConfigurationList = 2DD9D5771EFAEB40005BFB68 /* Build configuration list for PBXNativeTarget "AsyncTimer watchOS" */;
174 | buildPhases = (
175 | 2DD9D56D1EFAEB40005BFB68 /* Sources */,
176 | 2DD9D56E1EFAEB40005BFB68 /* Frameworks */,
177 | 2DD9D56F1EFAEB40005BFB68 /* Headers */,
178 | 2DD9D5701EFAEB40005BFB68 /* Resources */,
179 | );
180 | buildRules = (
181 | );
182 | dependencies = (
183 | );
184 | name = "AsyncTimer watchOS";
185 | productName = "AsyncTimer watchOS";
186 | productReference = 2DD9D5721EFAEB40005BFB68 /* AsyncTimer.framework */;
187 | productType = "com.apple.product-type.framework";
188 | };
189 | 2DD9D57E1EFAEB59005BFB68 /* AsyncTimer tvOS */ = {
190 | isa = PBXNativeTarget;
191 | buildConfigurationList = 2DD9D5841EFAEB59005BFB68 /* Build configuration list for PBXNativeTarget "AsyncTimer tvOS" */;
192 | buildPhases = (
193 | 2DD9D57A1EFAEB59005BFB68 /* Sources */,
194 | 2DD9D57B1EFAEB59005BFB68 /* Frameworks */,
195 | 2DD9D57C1EFAEB59005BFB68 /* Headers */,
196 | 2DD9D57D1EFAEB59005BFB68 /* Resources */,
197 | );
198 | buildRules = (
199 | );
200 | dependencies = (
201 | );
202 | name = "AsyncTimer tvOS";
203 | productName = "AsyncTimer tvOS";
204 | productReference = 2DD9D57F1EFAEB59005BFB68 /* AsyncTimer.framework */;
205 | productType = "com.apple.product-type.framework";
206 | };
207 | 2DD9D58B1EFAEB6A005BFB68 /* AsyncTimer macOS */ = {
208 | isa = PBXNativeTarget;
209 | buildConfigurationList = 2DD9D5911EFAEB6A005BFB68 /* Build configuration list for PBXNativeTarget "AsyncTimer macOS" */;
210 | buildPhases = (
211 | 2DD9D5871EFAEB6A005BFB68 /* Sources */,
212 | 2DD9D5881EFAEB6A005BFB68 /* Frameworks */,
213 | 2DD9D5891EFAEB6A005BFB68 /* Headers */,
214 | 2DD9D58A1EFAEB6A005BFB68 /* Resources */,
215 | );
216 | buildRules = (
217 | );
218 | dependencies = (
219 | );
220 | name = "AsyncTimer macOS";
221 | productName = "AsyncTimer macOS";
222 | productReference = 2DD9D58C1EFAEB6A005BFB68 /* AsyncTimer.framework */;
223 | productType = "com.apple.product-type.framework";
224 | };
225 | /* End PBXNativeTarget section */
226 |
227 | /* Begin PBXProject section */
228 | 2DD9D54B1EFAEA5A005BFB68 /* Project object */ = {
229 | isa = PBXProject;
230 | attributes = {
231 | LastUpgradeCheck = 1130;
232 | ORGANIZATIONNAME = "Adrian Bobrowski (Decybel07), adrian071993@gmail.com";
233 | TargetAttributes = {
234 | 2DD9D5561EFAEABA005BFB68 = {
235 | CreatedOnToolsVersion = 8.3.3;
236 | LastSwiftMigration = 1130;
237 | ProvisioningStyle = Manual;
238 | };
239 | 2DD9D5711EFAEB40005BFB68 = {
240 | CreatedOnToolsVersion = 8.3.3;
241 | LastSwiftMigration = 0830;
242 | ProvisioningStyle = Manual;
243 | };
244 | 2DD9D57E1EFAEB59005BFB68 = {
245 | CreatedOnToolsVersion = 8.3.3;
246 | LastSwiftMigration = 0830;
247 | ProvisioningStyle = Manual;
248 | };
249 | 2DD9D58B1EFAEB6A005BFB68 = {
250 | CreatedOnToolsVersion = 8.3.3;
251 | LastSwiftMigration = 0830;
252 | ProvisioningStyle = Manual;
253 | };
254 | };
255 | };
256 | buildConfigurationList = 2DD9D54E1EFAEA5A005BFB68 /* Build configuration list for PBXProject "AsyncTimer" */;
257 | compatibilityVersion = "Xcode 3.2";
258 | developmentRegion = en;
259 | hasScannedForEncodings = 0;
260 | knownRegions = (
261 | en,
262 | Base,
263 | );
264 | mainGroup = 2DD9D54A1EFAEA5A005BFB68;
265 | productRefGroup = 2DD9D5581EFAEABA005BFB68 /* Products */;
266 | projectDirPath = "";
267 | projectRoot = "";
268 | targets = (
269 | 2DD9D5561EFAEABA005BFB68 /* AsyncTimer iOS */,
270 | 2DD9D5711EFAEB40005BFB68 /* AsyncTimer watchOS */,
271 | 2DD9D57E1EFAEB59005BFB68 /* AsyncTimer tvOS */,
272 | 2DD9D58B1EFAEB6A005BFB68 /* AsyncTimer macOS */,
273 | );
274 | };
275 | /* End PBXProject section */
276 |
277 | /* Begin PBXResourcesBuildPhase section */
278 | 2DD9D5551EFAEABA005BFB68 /* Resources */ = {
279 | isa = PBXResourcesBuildPhase;
280 | buildActionMask = 2147483647;
281 | files = (
282 | );
283 | runOnlyForDeploymentPostprocessing = 0;
284 | };
285 | 2DD9D5701EFAEB40005BFB68 /* Resources */ = {
286 | isa = PBXResourcesBuildPhase;
287 | buildActionMask = 2147483647;
288 | files = (
289 | );
290 | runOnlyForDeploymentPostprocessing = 0;
291 | };
292 | 2DD9D57D1EFAEB59005BFB68 /* Resources */ = {
293 | isa = PBXResourcesBuildPhase;
294 | buildActionMask = 2147483647;
295 | files = (
296 | );
297 | runOnlyForDeploymentPostprocessing = 0;
298 | };
299 | 2DD9D58A1EFAEB6A005BFB68 /* Resources */ = {
300 | isa = PBXResourcesBuildPhase;
301 | buildActionMask = 2147483647;
302 | files = (
303 | );
304 | runOnlyForDeploymentPostprocessing = 0;
305 | };
306 | /* End PBXResourcesBuildPhase section */
307 |
308 | /* Begin PBXSourcesBuildPhase section */
309 | 2DD9D5521EFAEABA005BFB68 /* Sources */ = {
310 | isa = PBXSourcesBuildPhase;
311 | buildActionMask = 2147483647;
312 | files = (
313 | 2D94555F1F1B408D0091BD6B /* Counter.swift in Sources */,
314 | 2D9454B91F092D390091BD6B /* Task.swift in Sources */,
315 | 2DD9D5A01EFAED77005BFB68 /* AsyncTimer.swift in Sources */,
316 | );
317 | runOnlyForDeploymentPostprocessing = 0;
318 | };
319 | 2DD9D56D1EFAEB40005BFB68 /* Sources */ = {
320 | isa = PBXSourcesBuildPhase;
321 | buildActionMask = 2147483647;
322 | files = (
323 | 2D9455601F1B408D0091BD6B /* Counter.swift in Sources */,
324 | 2D9454BA1F092D390091BD6B /* Task.swift in Sources */,
325 | 2DD9D5A11EFAED77005BFB68 /* AsyncTimer.swift in Sources */,
326 | );
327 | runOnlyForDeploymentPostprocessing = 0;
328 | };
329 | 2DD9D57A1EFAEB59005BFB68 /* Sources */ = {
330 | isa = PBXSourcesBuildPhase;
331 | buildActionMask = 2147483647;
332 | files = (
333 | 2D9455611F1B408D0091BD6B /* Counter.swift in Sources */,
334 | 2D9454BB1F092D390091BD6B /* Task.swift in Sources */,
335 | 2DD9D5A21EFAED77005BFB68 /* AsyncTimer.swift in Sources */,
336 | );
337 | runOnlyForDeploymentPostprocessing = 0;
338 | };
339 | 2DD9D5871EFAEB6A005BFB68 /* Sources */ = {
340 | isa = PBXSourcesBuildPhase;
341 | buildActionMask = 2147483647;
342 | files = (
343 | 2D9455621F1B408D0091BD6B /* Counter.swift in Sources */,
344 | 2D9454BC1F092D390091BD6B /* Task.swift in Sources */,
345 | 2DD9D5A31EFAED77005BFB68 /* AsyncTimer.swift in Sources */,
346 | );
347 | runOnlyForDeploymentPostprocessing = 0;
348 | };
349 | /* End PBXSourcesBuildPhase section */
350 |
351 | /* Begin XCBuildConfiguration section */
352 | 2DD9D54F1EFAEA5A005BFB68 /* Debug */ = {
353 | isa = XCBuildConfiguration;
354 | buildSettings = {
355 | CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
356 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
357 | CLANG_WARN_BOOL_CONVERSION = YES;
358 | CLANG_WARN_COMMA = YES;
359 | CLANG_WARN_CONSTANT_CONVERSION = YES;
360 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
361 | CLANG_WARN_EMPTY_BODY = YES;
362 | CLANG_WARN_ENUM_CONVERSION = YES;
363 | CLANG_WARN_INFINITE_RECURSION = YES;
364 | CLANG_WARN_INT_CONVERSION = YES;
365 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
366 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
367 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
368 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
369 | CLANG_WARN_STRICT_PROTOTYPES = YES;
370 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
371 | CLANG_WARN_UNREACHABLE_CODE = YES;
372 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
373 | ENABLE_STRICT_OBJC_MSGSEND = YES;
374 | ENABLE_TESTABILITY = YES;
375 | GCC_NO_COMMON_BLOCKS = YES;
376 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
377 | GCC_WARN_ABOUT_RETURN_TYPE = YES;
378 | GCC_WARN_UNDECLARED_SELECTOR = YES;
379 | GCC_WARN_UNINITIALIZED_AUTOS = YES;
380 | GCC_WARN_UNUSED_FUNCTION = YES;
381 | GCC_WARN_UNUSED_VARIABLE = YES;
382 | ONLY_ACTIVE_ARCH = YES;
383 | };
384 | name = Debug;
385 | };
386 | 2DD9D5501EFAEA5A005BFB68 /* Release */ = {
387 | isa = XCBuildConfiguration;
388 | buildSettings = {
389 | CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
390 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
391 | CLANG_WARN_BOOL_CONVERSION = YES;
392 | CLANG_WARN_COMMA = YES;
393 | CLANG_WARN_CONSTANT_CONVERSION = YES;
394 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
395 | CLANG_WARN_EMPTY_BODY = YES;
396 | CLANG_WARN_ENUM_CONVERSION = YES;
397 | CLANG_WARN_INFINITE_RECURSION = YES;
398 | CLANG_WARN_INT_CONVERSION = YES;
399 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
400 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
401 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
402 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
403 | CLANG_WARN_STRICT_PROTOTYPES = YES;
404 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
405 | CLANG_WARN_UNREACHABLE_CODE = YES;
406 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
407 | ENABLE_STRICT_OBJC_MSGSEND = YES;
408 | GCC_NO_COMMON_BLOCKS = YES;
409 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
410 | GCC_WARN_ABOUT_RETURN_TYPE = YES;
411 | GCC_WARN_UNDECLARED_SELECTOR = YES;
412 | GCC_WARN_UNINITIALIZED_AUTOS = YES;
413 | GCC_WARN_UNUSED_FUNCTION = YES;
414 | GCC_WARN_UNUSED_VARIABLE = YES;
415 | };
416 | name = Release;
417 | };
418 | 2DD9D55E1EFAEABA005BFB68 /* Debug */ = {
419 | isa = XCBuildConfiguration;
420 | buildSettings = {
421 | ALWAYS_SEARCH_USER_PATHS = NO;
422 | CLANG_ANALYZER_NONNULL = YES;
423 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
424 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
425 | CLANG_CXX_LIBRARY = "libc++";
426 | CLANG_ENABLE_MODULES = YES;
427 | CLANG_ENABLE_OBJC_ARC = YES;
428 | CLANG_WARN_BOOL_CONVERSION = YES;
429 | CLANG_WARN_CONSTANT_CONVERSION = YES;
430 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
431 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
432 | CLANG_WARN_EMPTY_BODY = YES;
433 | CLANG_WARN_ENUM_CONVERSION = YES;
434 | CLANG_WARN_INFINITE_RECURSION = YES;
435 | CLANG_WARN_INT_CONVERSION = YES;
436 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
437 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
438 | CLANG_WARN_UNREACHABLE_CODE = YES;
439 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
440 | CODE_SIGN_IDENTITY = "";
441 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
442 | COPY_PHASE_STRIP = NO;
443 | CURRENT_PROJECT_VERSION = 1;
444 | DEBUG_INFORMATION_FORMAT = dwarf;
445 | DEFINES_MODULE = YES;
446 | DEVELOPMENT_TEAM = "";
447 | DYLIB_COMPATIBILITY_VERSION = 1;
448 | DYLIB_CURRENT_VERSION = 1;
449 | DYLIB_INSTALL_NAME_BASE = "@rpath";
450 | ENABLE_STRICT_OBJC_MSGSEND = YES;
451 | ENABLE_TESTABILITY = YES;
452 | GCC_C_LANGUAGE_STANDARD = gnu99;
453 | GCC_DYNAMIC_NO_PIC = NO;
454 | GCC_NO_COMMON_BLOCKS = YES;
455 | GCC_OPTIMIZATION_LEVEL = 0;
456 | GCC_PREPROCESSOR_DEFINITIONS = (
457 | "DEBUG=1",
458 | "$(inherited)",
459 | );
460 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
461 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
462 | GCC_WARN_UNDECLARED_SELECTOR = YES;
463 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
464 | GCC_WARN_UNUSED_FUNCTION = YES;
465 | GCC_WARN_UNUSED_VARIABLE = YES;
466 | INFOPLIST_FILE = "$(SRCROOT)/Source/Info.plist";
467 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
468 | IPHONEOS_DEPLOYMENT_TARGET = 8.0;
469 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
470 | MTL_ENABLE_DEBUG_INFO = YES;
471 | ONLY_ACTIVE_ARCH = YES;
472 | PRODUCT_BUNDLE_IDENTIFIER = "CodingLifestyle.AsyncTimer-iOS";
473 | PRODUCT_NAME = "$(PROJECT_NAME)";
474 | PROVISIONING_PROFILE_SPECIFIER = "";
475 | SDKROOT = iphoneos;
476 | SKIP_INSTALL = YES;
477 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
478 | SWIFT_OPTIMIZATION_LEVEL = "-Onone";
479 | SWIFT_SWIFT3_OBJC_INFERENCE = Default;
480 | SWIFT_VERSION = 5.0;
481 | TARGETED_DEVICE_FAMILY = "1,2";
482 | VERSIONING_SYSTEM = "apple-generic";
483 | VERSION_INFO_PREFIX = "";
484 | };
485 | name = Debug;
486 | };
487 | 2DD9D55F1EFAEABA005BFB68 /* Release */ = {
488 | isa = XCBuildConfiguration;
489 | buildSettings = {
490 | ALWAYS_SEARCH_USER_PATHS = NO;
491 | CLANG_ANALYZER_NONNULL = YES;
492 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
493 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
494 | CLANG_CXX_LIBRARY = "libc++";
495 | CLANG_ENABLE_MODULES = YES;
496 | CLANG_ENABLE_OBJC_ARC = YES;
497 | CLANG_WARN_BOOL_CONVERSION = YES;
498 | CLANG_WARN_CONSTANT_CONVERSION = YES;
499 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
500 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
501 | CLANG_WARN_EMPTY_BODY = YES;
502 | CLANG_WARN_ENUM_CONVERSION = YES;
503 | CLANG_WARN_INFINITE_RECURSION = YES;
504 | CLANG_WARN_INT_CONVERSION = YES;
505 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
506 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
507 | CLANG_WARN_UNREACHABLE_CODE = YES;
508 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
509 | CODE_SIGN_IDENTITY = "";
510 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
511 | COPY_PHASE_STRIP = NO;
512 | CURRENT_PROJECT_VERSION = 1;
513 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
514 | DEFINES_MODULE = YES;
515 | DEVELOPMENT_TEAM = "";
516 | DYLIB_COMPATIBILITY_VERSION = 1;
517 | DYLIB_CURRENT_VERSION = 1;
518 | DYLIB_INSTALL_NAME_BASE = "@rpath";
519 | ENABLE_NS_ASSERTIONS = NO;
520 | ENABLE_STRICT_OBJC_MSGSEND = YES;
521 | GCC_C_LANGUAGE_STANDARD = gnu99;
522 | GCC_NO_COMMON_BLOCKS = YES;
523 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
524 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
525 | GCC_WARN_UNDECLARED_SELECTOR = YES;
526 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
527 | GCC_WARN_UNUSED_FUNCTION = YES;
528 | GCC_WARN_UNUSED_VARIABLE = YES;
529 | INFOPLIST_FILE = "$(SRCROOT)/Source/Info.plist";
530 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
531 | IPHONEOS_DEPLOYMENT_TARGET = 8.0;
532 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
533 | MTL_ENABLE_DEBUG_INFO = NO;
534 | PRODUCT_BUNDLE_IDENTIFIER = "CodingLifestyle.AsyncTimer-iOS";
535 | PRODUCT_NAME = "$(PROJECT_NAME)";
536 | PROVISIONING_PROFILE_SPECIFIER = "";
537 | SDKROOT = iphoneos;
538 | SKIP_INSTALL = YES;
539 | SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
540 | SWIFT_SWIFT3_OBJC_INFERENCE = Default;
541 | SWIFT_VERSION = 5.0;
542 | TARGETED_DEVICE_FAMILY = "1,2";
543 | VALIDATE_PRODUCT = YES;
544 | VERSIONING_SYSTEM = "apple-generic";
545 | VERSION_INFO_PREFIX = "";
546 | };
547 | name = Release;
548 | };
549 | 2DD9D5781EFAEB40005BFB68 /* Debug */ = {
550 | isa = XCBuildConfiguration;
551 | buildSettings = {
552 | ALWAYS_SEARCH_USER_PATHS = NO;
553 | APPLICATION_EXTENSION_API_ONLY = YES;
554 | CLANG_ANALYZER_NONNULL = YES;
555 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
556 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
557 | CLANG_CXX_LIBRARY = "libc++";
558 | CLANG_ENABLE_MODULES = YES;
559 | CLANG_ENABLE_OBJC_ARC = YES;
560 | CLANG_WARN_BOOL_CONVERSION = YES;
561 | CLANG_WARN_CONSTANT_CONVERSION = YES;
562 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
563 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
564 | CLANG_WARN_EMPTY_BODY = YES;
565 | CLANG_WARN_ENUM_CONVERSION = YES;
566 | CLANG_WARN_INFINITE_RECURSION = YES;
567 | CLANG_WARN_INT_CONVERSION = YES;
568 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
569 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
570 | CLANG_WARN_UNREACHABLE_CODE = YES;
571 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
572 | CODE_SIGN_IDENTITY = "";
573 | COPY_PHASE_STRIP = NO;
574 | CURRENT_PROJECT_VERSION = 1;
575 | DEBUG_INFORMATION_FORMAT = dwarf;
576 | DEFINES_MODULE = YES;
577 | DEVELOPMENT_TEAM = "";
578 | DYLIB_COMPATIBILITY_VERSION = 1;
579 | DYLIB_CURRENT_VERSION = 1;
580 | DYLIB_INSTALL_NAME_BASE = "@rpath";
581 | ENABLE_STRICT_OBJC_MSGSEND = YES;
582 | ENABLE_TESTABILITY = YES;
583 | GCC_C_LANGUAGE_STANDARD = gnu99;
584 | GCC_DYNAMIC_NO_PIC = NO;
585 | GCC_NO_COMMON_BLOCKS = YES;
586 | GCC_OPTIMIZATION_LEVEL = 0;
587 | GCC_PREPROCESSOR_DEFINITIONS = (
588 | "DEBUG=1",
589 | "$(inherited)",
590 | );
591 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
592 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
593 | GCC_WARN_UNDECLARED_SELECTOR = YES;
594 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
595 | GCC_WARN_UNUSED_FUNCTION = YES;
596 | GCC_WARN_UNUSED_VARIABLE = YES;
597 | INFOPLIST_FILE = "$(SRCROOT)/Source/Info.plist";
598 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
599 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
600 | MTL_ENABLE_DEBUG_INFO = YES;
601 | ONLY_ACTIVE_ARCH = YES;
602 | PRODUCT_BUNDLE_IDENTIFIER = "CodingLifestyle.AsyncTimer-watchOS";
603 | PRODUCT_NAME = "$(PROJECT_NAME)";
604 | PROVISIONING_PROFILE_SPECIFIER = "";
605 | SDKROOT = watchos;
606 | SKIP_INSTALL = YES;
607 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
608 | SWIFT_OPTIMIZATION_LEVEL = "-Onone";
609 | SWIFT_VERSION = 4.0;
610 | TARGETED_DEVICE_FAMILY = 4;
611 | VERSIONING_SYSTEM = "apple-generic";
612 | VERSION_INFO_PREFIX = "";
613 | WATCHOS_DEPLOYMENT_TARGET = 2.0;
614 | };
615 | name = Debug;
616 | };
617 | 2DD9D5791EFAEB40005BFB68 /* Release */ = {
618 | isa = XCBuildConfiguration;
619 | buildSettings = {
620 | ALWAYS_SEARCH_USER_PATHS = NO;
621 | APPLICATION_EXTENSION_API_ONLY = YES;
622 | CLANG_ANALYZER_NONNULL = YES;
623 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
624 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
625 | CLANG_CXX_LIBRARY = "libc++";
626 | CLANG_ENABLE_MODULES = YES;
627 | CLANG_ENABLE_OBJC_ARC = YES;
628 | CLANG_WARN_BOOL_CONVERSION = YES;
629 | CLANG_WARN_CONSTANT_CONVERSION = YES;
630 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
631 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
632 | CLANG_WARN_EMPTY_BODY = YES;
633 | CLANG_WARN_ENUM_CONVERSION = YES;
634 | CLANG_WARN_INFINITE_RECURSION = YES;
635 | CLANG_WARN_INT_CONVERSION = YES;
636 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
637 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
638 | CLANG_WARN_UNREACHABLE_CODE = YES;
639 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
640 | CODE_SIGN_IDENTITY = "";
641 | COPY_PHASE_STRIP = NO;
642 | CURRENT_PROJECT_VERSION = 1;
643 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
644 | DEFINES_MODULE = YES;
645 | DEVELOPMENT_TEAM = "";
646 | DYLIB_COMPATIBILITY_VERSION = 1;
647 | DYLIB_CURRENT_VERSION = 1;
648 | DYLIB_INSTALL_NAME_BASE = "@rpath";
649 | ENABLE_NS_ASSERTIONS = NO;
650 | ENABLE_STRICT_OBJC_MSGSEND = YES;
651 | GCC_C_LANGUAGE_STANDARD = gnu99;
652 | GCC_NO_COMMON_BLOCKS = YES;
653 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
654 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
655 | GCC_WARN_UNDECLARED_SELECTOR = YES;
656 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
657 | GCC_WARN_UNUSED_FUNCTION = YES;
658 | GCC_WARN_UNUSED_VARIABLE = YES;
659 | INFOPLIST_FILE = "$(SRCROOT)/Source/Info.plist";
660 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
661 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
662 | MTL_ENABLE_DEBUG_INFO = NO;
663 | PRODUCT_BUNDLE_IDENTIFIER = "CodingLifestyle.AsyncTimer-watchOS";
664 | PRODUCT_NAME = "$(PROJECT_NAME)";
665 | PROVISIONING_PROFILE_SPECIFIER = "";
666 | SDKROOT = watchos;
667 | SKIP_INSTALL = YES;
668 | SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
669 | SWIFT_VERSION = 4.0;
670 | TARGETED_DEVICE_FAMILY = 4;
671 | VALIDATE_PRODUCT = YES;
672 | VERSIONING_SYSTEM = "apple-generic";
673 | VERSION_INFO_PREFIX = "";
674 | WATCHOS_DEPLOYMENT_TARGET = 2.0;
675 | };
676 | name = Release;
677 | };
678 | 2DD9D5851EFAEB59005BFB68 /* Debug */ = {
679 | isa = XCBuildConfiguration;
680 | buildSettings = {
681 | ALWAYS_SEARCH_USER_PATHS = NO;
682 | CLANG_ANALYZER_NONNULL = YES;
683 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
684 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
685 | CLANG_CXX_LIBRARY = "libc++";
686 | CLANG_ENABLE_MODULES = YES;
687 | CLANG_ENABLE_OBJC_ARC = YES;
688 | CLANG_WARN_BOOL_CONVERSION = YES;
689 | CLANG_WARN_CONSTANT_CONVERSION = YES;
690 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
691 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
692 | CLANG_WARN_EMPTY_BODY = YES;
693 | CLANG_WARN_ENUM_CONVERSION = YES;
694 | CLANG_WARN_INFINITE_RECURSION = YES;
695 | CLANG_WARN_INT_CONVERSION = YES;
696 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
697 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
698 | CLANG_WARN_UNREACHABLE_CODE = YES;
699 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
700 | CODE_SIGN_IDENTITY = "";
701 | COPY_PHASE_STRIP = NO;
702 | CURRENT_PROJECT_VERSION = 1;
703 | DEBUG_INFORMATION_FORMAT = dwarf;
704 | DEFINES_MODULE = YES;
705 | DEVELOPMENT_TEAM = "";
706 | DYLIB_COMPATIBILITY_VERSION = 1;
707 | DYLIB_CURRENT_VERSION = 1;
708 | DYLIB_INSTALL_NAME_BASE = "@rpath";
709 | ENABLE_STRICT_OBJC_MSGSEND = YES;
710 | ENABLE_TESTABILITY = YES;
711 | GCC_C_LANGUAGE_STANDARD = gnu99;
712 | GCC_DYNAMIC_NO_PIC = NO;
713 | GCC_NO_COMMON_BLOCKS = YES;
714 | GCC_OPTIMIZATION_LEVEL = 0;
715 | GCC_PREPROCESSOR_DEFINITIONS = (
716 | "DEBUG=1",
717 | "$(inherited)",
718 | );
719 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
720 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
721 | GCC_WARN_UNDECLARED_SELECTOR = YES;
722 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
723 | GCC_WARN_UNUSED_FUNCTION = YES;
724 | GCC_WARN_UNUSED_VARIABLE = YES;
725 | INFOPLIST_FILE = "$(SRCROOT)/Source/Info.plist";
726 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
727 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
728 | MTL_ENABLE_DEBUG_INFO = YES;
729 | ONLY_ACTIVE_ARCH = YES;
730 | PRODUCT_BUNDLE_IDENTIFIER = "CodingLifestyle.AsyncTimer-tvOS";
731 | PRODUCT_NAME = "$(PROJECT_NAME)";
732 | PROVISIONING_PROFILE_SPECIFIER = "";
733 | SDKROOT = appletvos;
734 | SKIP_INSTALL = YES;
735 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
736 | SWIFT_OPTIMIZATION_LEVEL = "-Onone";
737 | SWIFT_VERSION = 4.0;
738 | TARGETED_DEVICE_FAMILY = 3;
739 | TVOS_DEPLOYMENT_TARGET = 9.0;
740 | VERSIONING_SYSTEM = "apple-generic";
741 | VERSION_INFO_PREFIX = "";
742 | };
743 | name = Debug;
744 | };
745 | 2DD9D5861EFAEB59005BFB68 /* Release */ = {
746 | isa = XCBuildConfiguration;
747 | buildSettings = {
748 | ALWAYS_SEARCH_USER_PATHS = NO;
749 | CLANG_ANALYZER_NONNULL = YES;
750 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
751 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
752 | CLANG_CXX_LIBRARY = "libc++";
753 | CLANG_ENABLE_MODULES = YES;
754 | CLANG_ENABLE_OBJC_ARC = YES;
755 | CLANG_WARN_BOOL_CONVERSION = YES;
756 | CLANG_WARN_CONSTANT_CONVERSION = YES;
757 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
758 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
759 | CLANG_WARN_EMPTY_BODY = YES;
760 | CLANG_WARN_ENUM_CONVERSION = YES;
761 | CLANG_WARN_INFINITE_RECURSION = YES;
762 | CLANG_WARN_INT_CONVERSION = YES;
763 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
764 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
765 | CLANG_WARN_UNREACHABLE_CODE = YES;
766 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
767 | CODE_SIGN_IDENTITY = "";
768 | COPY_PHASE_STRIP = NO;
769 | CURRENT_PROJECT_VERSION = 1;
770 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
771 | DEFINES_MODULE = YES;
772 | DEVELOPMENT_TEAM = "";
773 | DYLIB_COMPATIBILITY_VERSION = 1;
774 | DYLIB_CURRENT_VERSION = 1;
775 | DYLIB_INSTALL_NAME_BASE = "@rpath";
776 | ENABLE_NS_ASSERTIONS = NO;
777 | ENABLE_STRICT_OBJC_MSGSEND = YES;
778 | GCC_C_LANGUAGE_STANDARD = gnu99;
779 | GCC_NO_COMMON_BLOCKS = YES;
780 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
781 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
782 | GCC_WARN_UNDECLARED_SELECTOR = YES;
783 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
784 | GCC_WARN_UNUSED_FUNCTION = YES;
785 | GCC_WARN_UNUSED_VARIABLE = YES;
786 | INFOPLIST_FILE = "$(SRCROOT)/Source/Info.plist";
787 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
788 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
789 | MTL_ENABLE_DEBUG_INFO = NO;
790 | PRODUCT_BUNDLE_IDENTIFIER = "CodingLifestyle.AsyncTimer-tvOS";
791 | PRODUCT_NAME = "$(PROJECT_NAME)";
792 | PROVISIONING_PROFILE_SPECIFIER = "";
793 | SDKROOT = appletvos;
794 | SKIP_INSTALL = YES;
795 | SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
796 | SWIFT_VERSION = 4.0;
797 | TARGETED_DEVICE_FAMILY = 3;
798 | TVOS_DEPLOYMENT_TARGET = 9.0;
799 | VALIDATE_PRODUCT = YES;
800 | VERSIONING_SYSTEM = "apple-generic";
801 | VERSION_INFO_PREFIX = "";
802 | };
803 | name = Release;
804 | };
805 | 2DD9D5921EFAEB6A005BFB68 /* Debug */ = {
806 | isa = XCBuildConfiguration;
807 | buildSettings = {
808 | ALWAYS_SEARCH_USER_PATHS = NO;
809 | CLANG_ANALYZER_NONNULL = YES;
810 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
811 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
812 | CLANG_CXX_LIBRARY = "libc++";
813 | CLANG_ENABLE_MODULES = YES;
814 | CLANG_ENABLE_OBJC_ARC = YES;
815 | CLANG_WARN_BOOL_CONVERSION = YES;
816 | CLANG_WARN_CONSTANT_CONVERSION = YES;
817 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
818 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
819 | CLANG_WARN_EMPTY_BODY = YES;
820 | CLANG_WARN_ENUM_CONVERSION = YES;
821 | CLANG_WARN_INFINITE_RECURSION = YES;
822 | CLANG_WARN_INT_CONVERSION = YES;
823 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
824 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
825 | CLANG_WARN_UNREACHABLE_CODE = YES;
826 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
827 | CODE_SIGN_IDENTITY = "-";
828 | COMBINE_HIDPI_IMAGES = YES;
829 | COPY_PHASE_STRIP = NO;
830 | CURRENT_PROJECT_VERSION = 1;
831 | DEBUG_INFORMATION_FORMAT = dwarf;
832 | DEFINES_MODULE = YES;
833 | DEVELOPMENT_TEAM = "";
834 | DYLIB_COMPATIBILITY_VERSION = 1;
835 | DYLIB_CURRENT_VERSION = 1;
836 | DYLIB_INSTALL_NAME_BASE = "@rpath";
837 | ENABLE_STRICT_OBJC_MSGSEND = YES;
838 | ENABLE_TESTABILITY = YES;
839 | FRAMEWORK_VERSION = A;
840 | GCC_C_LANGUAGE_STANDARD = gnu99;
841 | GCC_DYNAMIC_NO_PIC = NO;
842 | GCC_NO_COMMON_BLOCKS = YES;
843 | GCC_OPTIMIZATION_LEVEL = 0;
844 | GCC_PREPROCESSOR_DEFINITIONS = (
845 | "DEBUG=1",
846 | "$(inherited)",
847 | );
848 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
849 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
850 | GCC_WARN_UNDECLARED_SELECTOR = YES;
851 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
852 | GCC_WARN_UNUSED_FUNCTION = YES;
853 | GCC_WARN_UNUSED_VARIABLE = YES;
854 | INFOPLIST_FILE = "$(SRCROOT)/Source/Info.plist";
855 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
856 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks";
857 | MACOSX_DEPLOYMENT_TARGET = 10.10;
858 | MTL_ENABLE_DEBUG_INFO = YES;
859 | ONLY_ACTIVE_ARCH = YES;
860 | PRODUCT_BUNDLE_IDENTIFIER = "CodingLifestyle.AsyncTimer-macOS";
861 | PRODUCT_NAME = "$(PROJECT_NAME)";
862 | PROVISIONING_PROFILE_SPECIFIER = "";
863 | SDKROOT = macosx;
864 | SKIP_INSTALL = YES;
865 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
866 | SWIFT_OPTIMIZATION_LEVEL = "-Onone";
867 | SWIFT_VERSION = 4.0;
868 | VERSIONING_SYSTEM = "apple-generic";
869 | VERSION_INFO_PREFIX = "";
870 | };
871 | name = Debug;
872 | };
873 | 2DD9D5931EFAEB6A005BFB68 /* Release */ = {
874 | isa = XCBuildConfiguration;
875 | buildSettings = {
876 | ALWAYS_SEARCH_USER_PATHS = NO;
877 | CLANG_ANALYZER_NONNULL = YES;
878 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
879 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
880 | CLANG_CXX_LIBRARY = "libc++";
881 | CLANG_ENABLE_MODULES = YES;
882 | CLANG_ENABLE_OBJC_ARC = YES;
883 | CLANG_WARN_BOOL_CONVERSION = YES;
884 | CLANG_WARN_CONSTANT_CONVERSION = YES;
885 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
886 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
887 | CLANG_WARN_EMPTY_BODY = YES;
888 | CLANG_WARN_ENUM_CONVERSION = YES;
889 | CLANG_WARN_INFINITE_RECURSION = YES;
890 | CLANG_WARN_INT_CONVERSION = YES;
891 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
892 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
893 | CLANG_WARN_UNREACHABLE_CODE = YES;
894 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
895 | CODE_SIGN_IDENTITY = "-";
896 | COMBINE_HIDPI_IMAGES = YES;
897 | COPY_PHASE_STRIP = NO;
898 | CURRENT_PROJECT_VERSION = 1;
899 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
900 | DEFINES_MODULE = YES;
901 | DEVELOPMENT_TEAM = "";
902 | DYLIB_COMPATIBILITY_VERSION = 1;
903 | DYLIB_CURRENT_VERSION = 1;
904 | DYLIB_INSTALL_NAME_BASE = "@rpath";
905 | ENABLE_NS_ASSERTIONS = NO;
906 | ENABLE_STRICT_OBJC_MSGSEND = YES;
907 | FRAMEWORK_VERSION = A;
908 | GCC_C_LANGUAGE_STANDARD = gnu99;
909 | GCC_NO_COMMON_BLOCKS = YES;
910 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
911 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
912 | GCC_WARN_UNDECLARED_SELECTOR = YES;
913 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
914 | GCC_WARN_UNUSED_FUNCTION = YES;
915 | GCC_WARN_UNUSED_VARIABLE = YES;
916 | INFOPLIST_FILE = "$(SRCROOT)/Source/Info.plist";
917 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
918 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks";
919 | MACOSX_DEPLOYMENT_TARGET = 10.10;
920 | MTL_ENABLE_DEBUG_INFO = NO;
921 | PRODUCT_BUNDLE_IDENTIFIER = "CodingLifestyle.AsyncTimer-macOS";
922 | PRODUCT_NAME = "$(PROJECT_NAME)";
923 | PROVISIONING_PROFILE_SPECIFIER = "";
924 | SDKROOT = macosx;
925 | SKIP_INSTALL = YES;
926 | SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
927 | SWIFT_VERSION = 4.0;
928 | VERSIONING_SYSTEM = "apple-generic";
929 | VERSION_INFO_PREFIX = "";
930 | };
931 | name = Release;
932 | };
933 | /* End XCBuildConfiguration section */
934 |
935 | /* Begin XCConfigurationList section */
936 | 2DD9D54E1EFAEA5A005BFB68 /* Build configuration list for PBXProject "AsyncTimer" */ = {
937 | isa = XCConfigurationList;
938 | buildConfigurations = (
939 | 2DD9D54F1EFAEA5A005BFB68 /* Debug */,
940 | 2DD9D5501EFAEA5A005BFB68 /* Release */,
941 | );
942 | defaultConfigurationIsVisible = 0;
943 | defaultConfigurationName = Release;
944 | };
945 | 2DD9D55D1EFAEABA005BFB68 /* Build configuration list for PBXNativeTarget "AsyncTimer iOS" */ = {
946 | isa = XCConfigurationList;
947 | buildConfigurations = (
948 | 2DD9D55E1EFAEABA005BFB68 /* Debug */,
949 | 2DD9D55F1EFAEABA005BFB68 /* Release */,
950 | );
951 | defaultConfigurationIsVisible = 0;
952 | defaultConfigurationName = Release;
953 | };
954 | 2DD9D5771EFAEB40005BFB68 /* Build configuration list for PBXNativeTarget "AsyncTimer watchOS" */ = {
955 | isa = XCConfigurationList;
956 | buildConfigurations = (
957 | 2DD9D5781EFAEB40005BFB68 /* Debug */,
958 | 2DD9D5791EFAEB40005BFB68 /* Release */,
959 | );
960 | defaultConfigurationIsVisible = 0;
961 | defaultConfigurationName = Release;
962 | };
963 | 2DD9D5841EFAEB59005BFB68 /* Build configuration list for PBXNativeTarget "AsyncTimer tvOS" */ = {
964 | isa = XCConfigurationList;
965 | buildConfigurations = (
966 | 2DD9D5851EFAEB59005BFB68 /* Debug */,
967 | 2DD9D5861EFAEB59005BFB68 /* Release */,
968 | );
969 | defaultConfigurationIsVisible = 0;
970 | defaultConfigurationName = Release;
971 | };
972 | 2DD9D5911EFAEB6A005BFB68 /* Build configuration list for PBXNativeTarget "AsyncTimer macOS" */ = {
973 | isa = XCConfigurationList;
974 | buildConfigurations = (
975 | 2DD9D5921EFAEB6A005BFB68 /* Debug */,
976 | 2DD9D5931EFAEB6A005BFB68 /* Release */,
977 | );
978 | defaultConfigurationIsVisible = 0;
979 | defaultConfigurationName = Release;
980 | };
981 | /* End XCConfigurationList section */
982 | };
983 | rootObject = 2DD9D54B1EFAEA5A005BFB68 /* Project object */;
984 | }
985 |
--------------------------------------------------------------------------------
/AsyncTimer.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
--------------------------------------------------------------------------------
/AsyncTimer.xcodeproj/project.xcworkspace/xcshareddata/AsyncTimer.xcscmblueprint:
--------------------------------------------------------------------------------
1 | {
2 | "DVTSourceControlWorkspaceBlueprintPrimaryRemoteRepositoryKey" : "7C3FADF65D64AC6848737CADCBF3F1D493851DCC",
3 | "DVTSourceControlWorkspaceBlueprintWorkingCopyRepositoryLocationsKey" : {
4 |
5 | },
6 | "DVTSourceControlWorkspaceBlueprintWorkingCopyStatesKey" : {
7 | "5210F21B8E5E4ED0844D470D7561650484D4BD70" : 9223372036854775807,
8 | "7C3FADF65D64AC6848737CADCBF3F1D493851DCC" : 9223372036854775807
9 | },
10 | "DVTSourceControlWorkspaceBlueprintIdentifierKey" : "85962973-E289-4896-9924-06E24D987D2C",
11 | "DVTSourceControlWorkspaceBlueprintWorkingCopyPathsKey" : {
12 | "5210F21B8E5E4ED0844D470D7561650484D4BD70" : "",
13 | "7C3FADF65D64AC6848737CADCBF3F1D493851DCC" : "AsyncTimer\/"
14 | },
15 | "DVTSourceControlWorkspaceBlueprintNameKey" : "AsyncTimer",
16 | "DVTSourceControlWorkspaceBlueprintVersion" : 204,
17 | "DVTSourceControlWorkspaceBlueprintRelativePathToProjectKey" : "AsyncTimer.xcodeproj",
18 | "DVTSourceControlWorkspaceBlueprintRemoteRepositoriesKey" : [
19 | {
20 | "DVTSourceControlWorkspaceBlueprintRemoteRepositoryURLKey" : "github.com:CodingLifestyleProjects\/Sudoku.git",
21 | "DVTSourceControlWorkspaceBlueprintRemoteRepositorySystemKey" : "com.apple.dt.Xcode.sourcecontrol.Git",
22 | "DVTSourceControlWorkspaceBlueprintRemoteRepositoryIdentifierKey" : "5210F21B8E5E4ED0844D470D7561650484D4BD70"
23 | },
24 | {
25 | "DVTSourceControlWorkspaceBlueprintRemoteRepositoryURLKey" : "https:\/\/github.com\/Decybel07\/AsyncTimer.git",
26 | "DVTSourceControlWorkspaceBlueprintRemoteRepositorySystemKey" : "com.apple.dt.Xcode.sourcecontrol.Git",
27 | "DVTSourceControlWorkspaceBlueprintRemoteRepositoryIdentifierKey" : "7C3FADF65D64AC6848737CADCBF3F1D493851DCC"
28 | }
29 | ]
30 | }
--------------------------------------------------------------------------------
/AsyncTimer.xcodeproj/xcshareddata/xcschemes/AsyncTimer iOS.xcscheme:
--------------------------------------------------------------------------------
1 |
2 |
5 |
8 |
9 |
15 |
21 |
22 |
23 |
24 |
25 |
30 |
31 |
32 |
33 |
43 |
44 |
50 |
51 |
52 |
53 |
59 |
60 |
66 |
67 |
68 |
69 |
71 |
72 |
75 |
76 |
77 |
--------------------------------------------------------------------------------
/AsyncTimer.xcodeproj/xcshareddata/xcschemes/AsyncTimer macOS.xcscheme:
--------------------------------------------------------------------------------
1 |
2 |
5 |
8 |
9 |
15 |
21 |
22 |
23 |
24 |
25 |
30 |
31 |
32 |
33 |
43 |
44 |
50 |
51 |
52 |
53 |
59 |
60 |
66 |
67 |
68 |
69 |
71 |
72 |
75 |
76 |
77 |
--------------------------------------------------------------------------------
/AsyncTimer.xcodeproj/xcshareddata/xcschemes/AsyncTimer tvOS.xcscheme:
--------------------------------------------------------------------------------
1 |
2 |
5 |
8 |
9 |
15 |
21 |
22 |
23 |
24 |
25 |
30 |
31 |
32 |
33 |
43 |
44 |
50 |
51 |
52 |
53 |
59 |
60 |
66 |
67 |
68 |
69 |
71 |
72 |
75 |
76 |
77 |
--------------------------------------------------------------------------------
/AsyncTimer.xcodeproj/xcshareddata/xcschemes/AsyncTimer watchOS.xcscheme:
--------------------------------------------------------------------------------
1 |
2 |
5 |
8 |
9 |
15 |
21 |
22 |
23 |
24 |
25 |
30 |
31 |
32 |
33 |
43 |
44 |
50 |
51 |
52 |
53 |
59 |
60 |
66 |
67 |
68 |
69 |
71 |
72 |
75 |
76 |
77 |
--------------------------------------------------------------------------------
/CHANGELOG.md:
--------------------------------------------------------------------------------
1 |
2 | # Change Log
3 |
4 | ---
5 |
6 | # Swift 4.0
7 |
8 | ## [2.2.0](https://github.com/Decybel07/L10n-swift/tree/2.1.1) (2017-10-01)
9 | * Migrate to Swift 4.0
10 |
11 | # Swift 4.0
12 |
13 | ---
14 |
15 | # Swift 3.2
16 |
17 | ## [2.1.1](https://github.com/Decybel07/L10n-swift/tree/2.1.1) (2017-08-19)
18 | * Added gifs to README
19 |
20 | ## [2.1.0](https://github.com/Decybel07/L10n-swift/tree/2.1.0) (2017-08-14)
21 | * Implement pause and resume functionalities
22 |
23 | ## [2.0.1](https://github.com/Decybel07/L10n-swift/tree/2.0.1) (2017-08-12)
24 | * Create example project
25 | * Add `Usage` section to `README`
26 | * bugfix with `ScheduledTimer`
27 |
28 | ## [2.0.0](https://github.com/Decybel07/L10n-swift/tree/2.0.0) (2017-07-17)
29 | * Create init for infinity timer
30 | * Documentation.
31 |
32 | ## [1.0.0](https://github.com/Decybel07/L10n-swift/tree/1.0.0) (2017-07-08)
33 | * Create an asynchronous timer that can work in the background.
34 |
--------------------------------------------------------------------------------
/Example/Example iOS/AppDelegate.swift:
--------------------------------------------------------------------------------
1 | //
2 | // AppDelegate.swift
3 | // Example iOS
4 | //
5 | // Created by Adrian Bobrowski on 02.07.2017.
6 | //
7 | //
8 |
9 | import UIKit
10 |
11 | @UIApplicationMain
12 | class AppDelegate: UIResponder, UIApplicationDelegate {
13 |
14 | var window: UIWindow?
15 |
16 | func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
17 | return true
18 | }
19 |
20 | }
21 |
--------------------------------------------------------------------------------
/Example/Example iOS/Assets.xcassets/AppIcon.appiconset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "iphone",
5 | "size" : "29x29",
6 | "scale" : "2x"
7 | },
8 | {
9 | "idiom" : "iphone",
10 | "size" : "29x29",
11 | "scale" : "3x"
12 | },
13 | {
14 | "idiom" : "iphone",
15 | "size" : "40x40",
16 | "scale" : "2x"
17 | },
18 | {
19 | "idiom" : "iphone",
20 | "size" : "40x40",
21 | "scale" : "3x"
22 | },
23 | {
24 | "idiom" : "iphone",
25 | "size" : "60x60",
26 | "scale" : "2x"
27 | },
28 | {
29 | "idiom" : "iphone",
30 | "size" : "60x60",
31 | "scale" : "3x"
32 | },
33 | {
34 | "idiom" : "ipad",
35 | "size" : "29x29",
36 | "scale" : "1x"
37 | },
38 | {
39 | "idiom" : "ipad",
40 | "size" : "29x29",
41 | "scale" : "2x"
42 | },
43 | {
44 | "idiom" : "ipad",
45 | "size" : "40x40",
46 | "scale" : "1x"
47 | },
48 | {
49 | "idiom" : "ipad",
50 | "size" : "40x40",
51 | "scale" : "2x"
52 | },
53 | {
54 | "idiom" : "ipad",
55 | "size" : "76x76",
56 | "scale" : "1x"
57 | },
58 | {
59 | "idiom" : "ipad",
60 | "size" : "76x76",
61 | "scale" : "2x"
62 | }
63 | ],
64 | "info" : {
65 | "version" : 1,
66 | "author" : "xcode"
67 | }
68 | }
--------------------------------------------------------------------------------
/Example/Example iOS/Controllers/CountdownTimerViewController.swift:
--------------------------------------------------------------------------------
1 | //
2 | // CountdownTimerViewController.swift
3 | // Example
4 | //
5 | // Created by Adrian Bobrowski on 12.08.2017.
6 | //
7 | //
8 |
9 | import UIKit
10 | import AsyncTimer
11 |
12 | final class CountdownTimerViewController: UIViewController {
13 |
14 | @IBOutlet private weak var statusLabel: UILabel!
15 | @IBOutlet private weak var valueLabel: UILabel!
16 |
17 | private lazy var timer: AsyncTimer = {
18 | return AsyncTimer(
19 | interval: .milliseconds(100),
20 | times: 25,
21 | block: { [weak self] value in
22 | self?.valueLabel.text = value.description
23 | }, completion: { [weak self] in
24 | self?.statusLabel.text = "finished"
25 | }
26 | )
27 | }()
28 |
29 | @IBAction private func onStart() {
30 | self.statusLabel.text = "started"
31 | self.timer.start()
32 | }
33 |
34 | @IBAction private func onPause() {
35 | self.statusLabel.text = "paused"
36 | self.timer.pause()
37 | }
38 |
39 | @IBAction private func onResume() {
40 | self.statusLabel.text = "resumed"
41 | self.timer.resume()
42 | }
43 |
44 | @IBAction private func onStop() {
45 | self.statusLabel.text = "stopped"
46 | self.timer.stop()
47 | }
48 |
49 | @IBAction private func onRestart() {
50 | self.statusLabel.text = "restarted"
51 | self.timer.restart()
52 | }
53 |
54 | }
55 |
--------------------------------------------------------------------------------
/Example/Example iOS/Controllers/PeriodicTimerViewController.swift:
--------------------------------------------------------------------------------
1 | //
2 | // PeriodicTimerViewController.swift
3 | // Example
4 | //
5 | // Created by Adrian Bobrowski on 12.08.2017.
6 | //
7 | //
8 |
9 | import UIKit
10 | import AsyncTimer
11 |
12 | final class PeriodicTimerViewController: UIViewController {
13 |
14 | @IBOutlet private weak var statusLabel: UILabel!
15 | @IBOutlet private weak var timeLabel: UILabel!
16 |
17 | private lazy var timer: AsyncTimer = {
18 | return AsyncTimer(interval: .milliseconds(100), repeats: true) { [weak self] in
19 | self?.updateCurrentTime()
20 | }
21 | }()
22 |
23 | private let dateFormatter: DateFormatter = {
24 | let formatter = DateFormatter()
25 | formatter.dateFormat = "HH:mm:ss.SSS"
26 | return formatter
27 | }()
28 |
29 | @IBAction private func onStart() {
30 | self.statusLabel.text = "started"
31 | self.timer.start()
32 | }
33 |
34 | @IBAction private func onPause() {
35 | self.statusLabel.text = "paused"
36 | self.timer.pause()
37 | }
38 |
39 | @IBAction private func onResume() {
40 | self.statusLabel.text = "resumed"
41 | self.timer.resume()
42 | }
43 |
44 | @IBAction private func onStop() {
45 | self.statusLabel.text = "stopped"
46 | self.timer.stop()
47 | }
48 |
49 | @IBAction private func onRestart() {
50 | self.statusLabel.text = "restarted"
51 | self.timer.restart()
52 | }
53 |
54 | private func updateCurrentTime() {
55 | self.timeLabel.text = self.dateFormatter.string(from: Date())
56 | }
57 |
58 | }
59 |
--------------------------------------------------------------------------------
/Example/Example iOS/Controllers/ScheduledTimerViewController.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ScheduledTimerViewController.swift
3 | // Example
4 | //
5 | // Created by Adrian Bobrowski on 12.08.2017.
6 | //
7 | //
8 |
9 | import UIKit
10 | import AsyncTimer
11 |
12 | final class ScheduledTimerViewController: UIViewController {
13 |
14 | @IBOutlet private weak var statusLabel: UILabel!
15 |
16 | private lazy var timer: AsyncTimer = {
17 | return AsyncTimer(interval: .seconds(2)) { [weak self] in
18 | self?.navigationController?.popViewController(animated: true)
19 | }
20 | }()
21 |
22 | @IBAction private func onStart() {
23 | self.statusLabel.text = "started"
24 | self.timer.start()
25 | }
26 |
27 | @IBAction private func onPause() {
28 | self.statusLabel.text = "paused"
29 | self.timer.pause()
30 | }
31 |
32 | @IBAction private func onResume() {
33 | self.statusLabel.text = "resumed"
34 | self.timer.resume()
35 | }
36 |
37 | @IBAction private func onStop() {
38 | self.statusLabel.text = "stopped"
39 | self.timer.stop()
40 | }
41 |
42 | @IBAction private func onRestart() {
43 | self.statusLabel.text = "restarted"
44 | self.timer.restart()
45 | }
46 |
47 | }
48 |
--------------------------------------------------------------------------------
/Example/Example iOS/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 | APPL
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleVersion
20 | 1
21 | LSRequiresIPhoneOS
22 |
23 | UILaunchStoryboardName
24 | LaunchScreen
25 | UIMainStoryboardFile
26 | Main
27 | UIRequiredDeviceCapabilities
28 |
29 | armv7
30 |
31 | UISupportedInterfaceOrientations
32 |
33 | UIInterfaceOrientationPortrait
34 | UIInterfaceOrientationLandscapeLeft
35 | UIInterfaceOrientationLandscapeRight
36 |
37 | UISupportedInterfaceOrientations~ipad
38 |
39 | UIInterfaceOrientationPortrait
40 | UIInterfaceOrientationPortraitUpsideDown
41 | UIInterfaceOrientationLandscapeLeft
42 | UIInterfaceOrientationLandscapeRight
43 |
44 |
45 |
46 |
--------------------------------------------------------------------------------
/Example/Example iOS/Storyboards/LaunchScreen.storyboard:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
--------------------------------------------------------------------------------
/Example/Example iOS/Storyboards/Main.storyboard:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 |
116 |
117 |
118 |
119 |
120 |
121 |
122 |
123 |
124 |
125 |
126 |
127 |
128 |
129 |
130 |
131 |
132 |
133 |
134 |
135 |
136 |
137 |
138 |
139 |
140 |
141 |
142 |
143 |
144 |
145 |
146 |
147 |
148 |
149 |
150 |
156 |
162 |
168 |
174 |
180 |
181 |
182 |
183 |
184 |
185 |
186 |
197 |
205 |
213 |
214 |
215 |
216 |
217 |
218 |
219 |
220 |
221 |
229 |
237 |
238 |
239 |
240 |
241 |
242 |
243 |
244 |
245 |
246 |
247 |
248 |
249 |
250 |
251 |
252 |
253 |
254 |
255 |
256 |
257 |
258 |
259 |
260 |
261 |
262 |
263 |
264 |
265 |
266 |
267 |
268 |
269 |
270 |
271 |
272 |
273 |
274 |
275 |
276 |
277 |
278 |
279 |
280 |
281 |
282 |
283 |
284 |
285 |
286 |
287 |
288 |
289 |
290 |
291 |
292 |
298 |
304 |
310 |
316 |
322 |
323 |
324 |
325 |
326 |
327 |
328 |
339 |
347 |
355 |
356 |
357 |
358 |
359 |
360 |
361 |
362 |
363 |
371 |
379 |
380 |
381 |
382 |
383 |
384 |
385 |
386 |
387 |
388 |
389 |
390 |
391 |
392 |
393 |
394 |
395 |
396 |
397 |
398 |
399 |
400 |
401 |
402 |
403 |
404 |
405 |
406 |
407 |
408 |
409 |
410 |
411 |
412 |
413 |
414 |
415 |
416 |
417 |
418 |
419 |
420 |
421 |
422 |
423 |
424 |
425 |
426 |
427 |
428 |
429 |
430 |
431 |
432 |
433 |
434 |
440 |
446 |
452 |
453 |
454 |
455 |
456 |
457 |
458 |
469 |
477 |
485 |
486 |
487 |
488 |
489 |
490 |
491 |
492 |
493 |
501 |
509 |
510 |
511 |
512 |
513 |
514 |
515 |
516 |
517 |
518 |
519 |
520 |
521 |
522 |
523 |
524 |
525 |
526 |
527 |
528 |
529 |
530 |
531 |
532 |
533 |
534 |
535 |
536 |
537 |
538 |
539 |
540 |
541 |
542 |
543 |
544 |
545 |
546 |
547 |
548 |
--------------------------------------------------------------------------------
/Example/Example.xcodeproj/project.pbxproj:
--------------------------------------------------------------------------------
1 | // !$*UTF8*$!
2 | {
3 | archiveVersion = 1;
4 | classes = {
5 | };
6 | objectVersion = 46;
7 | objects = {
8 |
9 | /* Begin PBXBuildFile section */
10 | 2D6728A81F3F27B0000B2BEE /* CountdownTimerViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D6728A31F3F27B0000B2BEE /* CountdownTimerViewController.swift */; };
11 | 2D6728AA1F3F27B0000B2BEE /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 2D6728A61F3F27B0000B2BEE /* LaunchScreen.storyboard */; };
12 | 2D6728AB1F3F27B0000B2BEE /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 2D6728A71F3F27B0000B2BEE /* Main.storyboard */; };
13 | 2D6728AD1F3F3753000B2BEE /* ScheduledTimerViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D6728AC1F3F3753000B2BEE /* ScheduledTimerViewController.swift */; };
14 | 2D6728C81F3F40FC000B2BEE /* PeriodicTimerViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D6728C71F3F40FC000B2BEE /* PeriodicTimerViewController.swift */; };
15 | 2D9454A71F0918890091BD6B /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D9454A61F0918890091BD6B /* AppDelegate.swift */; };
16 | 2D9454AE1F0918890091BD6B /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 2D9454AD1F0918890091BD6B /* Assets.xcassets */; };
17 | /* End PBXBuildFile section */
18 |
19 | /* Begin PBXContainerItemProxy section */
20 | 2D9454971F09186B0091BD6B /* PBXContainerItemProxy */ = {
21 | isa = PBXContainerItemProxy;
22 | containerPortal = 2D9454901F09186B0091BD6B /* AsyncTimer.xcodeproj */;
23 | proxyType = 2;
24 | remoteGlobalIDString = 2DD9D5571EFAEABA005BFB68;
25 | remoteInfo = "AsyncTimer iOS";
26 | };
27 | 2D9454991F09186B0091BD6B /* PBXContainerItemProxy */ = {
28 | isa = PBXContainerItemProxy;
29 | containerPortal = 2D9454901F09186B0091BD6B /* AsyncTimer.xcodeproj */;
30 | proxyType = 2;
31 | remoteGlobalIDString = 2DD9D5721EFAEB40005BFB68;
32 | remoteInfo = "AsyncTimer watchOS";
33 | };
34 | 2D94549B1F09186B0091BD6B /* PBXContainerItemProxy */ = {
35 | isa = PBXContainerItemProxy;
36 | containerPortal = 2D9454901F09186B0091BD6B /* AsyncTimer.xcodeproj */;
37 | proxyType = 2;
38 | remoteGlobalIDString = 2DD9D57F1EFAEB59005BFB68;
39 | remoteInfo = "AsyncTimer tvOS";
40 | };
41 | 2D94549D1F09186B0091BD6B /* PBXContainerItemProxy */ = {
42 | isa = PBXContainerItemProxy;
43 | containerPortal = 2D9454901F09186B0091BD6B /* AsyncTimer.xcodeproj */;
44 | proxyType = 2;
45 | remoteGlobalIDString = 2DD9D58C1EFAEB6A005BFB68;
46 | remoteInfo = "AsyncTimer macOS";
47 | };
48 | 2D9454B61F091D4C0091BD6B /* PBXContainerItemProxy */ = {
49 | isa = PBXContainerItemProxy;
50 | containerPortal = 2D9454901F09186B0091BD6B /* AsyncTimer.xcodeproj */;
51 | proxyType = 1;
52 | remoteGlobalIDString = 2DD9D5561EFAEABA005BFB68;
53 | remoteInfo = "AsyncTimer iOS";
54 | };
55 | /* End PBXContainerItemProxy section */
56 |
57 | /* Begin PBXFileReference section */
58 | 2D6728A31F3F27B0000B2BEE /* CountdownTimerViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CountdownTimerViewController.swift; sourceTree = ""; };
59 | 2D6728A61F3F27B0000B2BEE /* LaunchScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = LaunchScreen.storyboard; sourceTree = ""; };
60 | 2D6728A71F3F27B0000B2BEE /* Main.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = Main.storyboard; sourceTree = ""; };
61 | 2D6728AC1F3F3753000B2BEE /* ScheduledTimerViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ScheduledTimerViewController.swift; sourceTree = ""; };
62 | 2D6728C71F3F40FC000B2BEE /* PeriodicTimerViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PeriodicTimerViewController.swift; sourceTree = ""; };
63 | 2D9454901F09186B0091BD6B /* AsyncTimer.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = AsyncTimer.xcodeproj; path = ../AsyncTimer.xcodeproj; sourceTree = ""; };
64 | 2D9454A31F0918890091BD6B /* Example iOS.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "Example iOS.app"; sourceTree = BUILT_PRODUCTS_DIR; };
65 | 2D9454A61F0918890091BD6B /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; };
66 | 2D9454AD1F0918890091BD6B /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; };
67 | 2D9454B21F0918890091BD6B /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
68 | /* End PBXFileReference section */
69 |
70 | /* Begin PBXFrameworksBuildPhase section */
71 | 2D9454A01F0918890091BD6B /* Frameworks */ = {
72 | isa = PBXFrameworksBuildPhase;
73 | buildActionMask = 2147483647;
74 | files = (
75 | );
76 | runOnlyForDeploymentPostprocessing = 0;
77 | };
78 | /* End PBXFrameworksBuildPhase section */
79 |
80 | /* Begin PBXGroup section */
81 | 2D6728A21F3F27B0000B2BEE /* Controllers */ = {
82 | isa = PBXGroup;
83 | children = (
84 | 2D6728A31F3F27B0000B2BEE /* CountdownTimerViewController.swift */,
85 | 2D6728AC1F3F3753000B2BEE /* ScheduledTimerViewController.swift */,
86 | 2D6728C71F3F40FC000B2BEE /* PeriodicTimerViewController.swift */,
87 | );
88 | path = Controllers;
89 | sourceTree = "";
90 | };
91 | 2D6728A51F3F27B0000B2BEE /* Storyboards */ = {
92 | isa = PBXGroup;
93 | children = (
94 | 2D6728A61F3F27B0000B2BEE /* LaunchScreen.storyboard */,
95 | 2D6728A71F3F27B0000B2BEE /* Main.storyboard */,
96 | );
97 | path = Storyboards;
98 | sourceTree = "";
99 | };
100 | 2D9454891F09185D0091BD6B = {
101 | isa = PBXGroup;
102 | children = (
103 | 2D9454901F09186B0091BD6B /* AsyncTimer.xcodeproj */,
104 | 2D9454A51F0918890091BD6B /* Example iOS */,
105 | 2D9454A41F0918890091BD6B /* Products */,
106 | );
107 | sourceTree = "";
108 | };
109 | 2D9454911F09186B0091BD6B /* Products */ = {
110 | isa = PBXGroup;
111 | children = (
112 | 2D9454981F09186B0091BD6B /* AsyncTimer.framework */,
113 | 2D94549A1F09186B0091BD6B /* AsyncTimer.framework */,
114 | 2D94549C1F09186B0091BD6B /* AsyncTimer.framework */,
115 | 2D94549E1F09186B0091BD6B /* AsyncTimer.framework */,
116 | );
117 | name = Products;
118 | sourceTree = "";
119 | };
120 | 2D9454A41F0918890091BD6B /* Products */ = {
121 | isa = PBXGroup;
122 | children = (
123 | 2D9454A31F0918890091BD6B /* Example iOS.app */,
124 | );
125 | name = Products;
126 | sourceTree = "";
127 | };
128 | 2D9454A51F0918890091BD6B /* Example iOS */ = {
129 | isa = PBXGroup;
130 | children = (
131 | 2D6728A21F3F27B0000B2BEE /* Controllers */,
132 | 2D6728A51F3F27B0000B2BEE /* Storyboards */,
133 | 2D9454A61F0918890091BD6B /* AppDelegate.swift */,
134 | 2D9454AD1F0918890091BD6B /* Assets.xcassets */,
135 | 2D9454B21F0918890091BD6B /* Info.plist */,
136 | );
137 | path = "Example iOS";
138 | sourceTree = "";
139 | };
140 | /* End PBXGroup section */
141 |
142 | /* Begin PBXNativeTarget section */
143 | 2D9454A21F0918890091BD6B /* Example iOS */ = {
144 | isa = PBXNativeTarget;
145 | buildConfigurationList = 2D9454B31F0918890091BD6B /* Build configuration list for PBXNativeTarget "Example iOS" */;
146 | buildPhases = (
147 | 2D94549F1F0918890091BD6B /* Sources */,
148 | 2D9454A01F0918890091BD6B /* Frameworks */,
149 | 2D9454A11F0918890091BD6B /* Resources */,
150 | );
151 | buildRules = (
152 | );
153 | dependencies = (
154 | 2D9454B71F091D4C0091BD6B /* PBXTargetDependency */,
155 | );
156 | name = "Example iOS";
157 | productName = "Example iOS";
158 | productReference = 2D9454A31F0918890091BD6B /* Example iOS.app */;
159 | productType = "com.apple.product-type.application";
160 | };
161 | /* End PBXNativeTarget section */
162 |
163 | /* Begin PBXProject section */
164 | 2D94548A1F09185D0091BD6B /* Project object */ = {
165 | isa = PBXProject;
166 | attributes = {
167 | LastSwiftUpdateCheck = 0830;
168 | LastUpgradeCheck = 0900;
169 | TargetAttributes = {
170 | 2D9454A21F0918890091BD6B = {
171 | CreatedOnToolsVersion = 8.3.3;
172 | LastSwiftMigration = 0900;
173 | ProvisioningStyle = Automatic;
174 | };
175 | };
176 | };
177 | buildConfigurationList = 2D94548D1F09185D0091BD6B /* Build configuration list for PBXProject "Example" */;
178 | compatibilityVersion = "Xcode 3.2";
179 | developmentRegion = English;
180 | hasScannedForEncodings = 0;
181 | knownRegions = (
182 | en,
183 | Base,
184 | );
185 | mainGroup = 2D9454891F09185D0091BD6B;
186 | productRefGroup = 2D9454A41F0918890091BD6B /* Products */;
187 | projectDirPath = "";
188 | projectReferences = (
189 | {
190 | ProductGroup = 2D9454911F09186B0091BD6B /* Products */;
191 | ProjectRef = 2D9454901F09186B0091BD6B /* AsyncTimer.xcodeproj */;
192 | },
193 | );
194 | projectRoot = "";
195 | targets = (
196 | 2D9454A21F0918890091BD6B /* Example iOS */,
197 | );
198 | };
199 | /* End PBXProject section */
200 |
201 | /* Begin PBXReferenceProxy section */
202 | 2D9454981F09186B0091BD6B /* AsyncTimer.framework */ = {
203 | isa = PBXReferenceProxy;
204 | fileType = wrapper.framework;
205 | path = AsyncTimer.framework;
206 | remoteRef = 2D9454971F09186B0091BD6B /* PBXContainerItemProxy */;
207 | sourceTree = BUILT_PRODUCTS_DIR;
208 | };
209 | 2D94549A1F09186B0091BD6B /* AsyncTimer.framework */ = {
210 | isa = PBXReferenceProxy;
211 | fileType = wrapper.framework;
212 | path = AsyncTimer.framework;
213 | remoteRef = 2D9454991F09186B0091BD6B /* PBXContainerItemProxy */;
214 | sourceTree = BUILT_PRODUCTS_DIR;
215 | };
216 | 2D94549C1F09186B0091BD6B /* AsyncTimer.framework */ = {
217 | isa = PBXReferenceProxy;
218 | fileType = wrapper.framework;
219 | path = AsyncTimer.framework;
220 | remoteRef = 2D94549B1F09186B0091BD6B /* PBXContainerItemProxy */;
221 | sourceTree = BUILT_PRODUCTS_DIR;
222 | };
223 | 2D94549E1F09186B0091BD6B /* AsyncTimer.framework */ = {
224 | isa = PBXReferenceProxy;
225 | fileType = wrapper.framework;
226 | path = AsyncTimer.framework;
227 | remoteRef = 2D94549D1F09186B0091BD6B /* PBXContainerItemProxy */;
228 | sourceTree = BUILT_PRODUCTS_DIR;
229 | };
230 | /* End PBXReferenceProxy section */
231 |
232 | /* Begin PBXResourcesBuildPhase section */
233 | 2D9454A11F0918890091BD6B /* Resources */ = {
234 | isa = PBXResourcesBuildPhase;
235 | buildActionMask = 2147483647;
236 | files = (
237 | 2D6728AB1F3F27B0000B2BEE /* Main.storyboard in Resources */,
238 | 2D9454AE1F0918890091BD6B /* Assets.xcassets in Resources */,
239 | 2D6728AA1F3F27B0000B2BEE /* LaunchScreen.storyboard in Resources */,
240 | );
241 | runOnlyForDeploymentPostprocessing = 0;
242 | };
243 | /* End PBXResourcesBuildPhase section */
244 |
245 | /* Begin PBXSourcesBuildPhase section */
246 | 2D94549F1F0918890091BD6B /* Sources */ = {
247 | isa = PBXSourcesBuildPhase;
248 | buildActionMask = 2147483647;
249 | files = (
250 | 2D6728A81F3F27B0000B2BEE /* CountdownTimerViewController.swift in Sources */,
251 | 2D6728C81F3F40FC000B2BEE /* PeriodicTimerViewController.swift in Sources */,
252 | 2D9454A71F0918890091BD6B /* AppDelegate.swift in Sources */,
253 | 2D6728AD1F3F3753000B2BEE /* ScheduledTimerViewController.swift in Sources */,
254 | );
255 | runOnlyForDeploymentPostprocessing = 0;
256 | };
257 | /* End PBXSourcesBuildPhase section */
258 |
259 | /* Begin PBXTargetDependency section */
260 | 2D9454B71F091D4C0091BD6B /* PBXTargetDependency */ = {
261 | isa = PBXTargetDependency;
262 | name = "AsyncTimer iOS";
263 | targetProxy = 2D9454B61F091D4C0091BD6B /* PBXContainerItemProxy */;
264 | };
265 | /* End PBXTargetDependency section */
266 |
267 | /* Begin XCBuildConfiguration section */
268 | 2D94548E1F09185D0091BD6B /* Debug */ = {
269 | isa = XCBuildConfiguration;
270 | buildSettings = {
271 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
272 | CLANG_WARN_BOOL_CONVERSION = YES;
273 | CLANG_WARN_COMMA = YES;
274 | CLANG_WARN_CONSTANT_CONVERSION = YES;
275 | CLANG_WARN_EMPTY_BODY = YES;
276 | CLANG_WARN_ENUM_CONVERSION = YES;
277 | CLANG_WARN_INFINITE_RECURSION = YES;
278 | CLANG_WARN_INT_CONVERSION = YES;
279 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
280 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
281 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
282 | CLANG_WARN_STRICT_PROTOTYPES = YES;
283 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
284 | CLANG_WARN_UNREACHABLE_CODE = YES;
285 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
286 | ENABLE_STRICT_OBJC_MSGSEND = YES;
287 | ENABLE_TESTABILITY = YES;
288 | GCC_NO_COMMON_BLOCKS = YES;
289 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
290 | GCC_WARN_ABOUT_RETURN_TYPE = YES;
291 | GCC_WARN_UNDECLARED_SELECTOR = YES;
292 | GCC_WARN_UNINITIALIZED_AUTOS = YES;
293 | GCC_WARN_UNUSED_FUNCTION = YES;
294 | GCC_WARN_UNUSED_VARIABLE = YES;
295 | ONLY_ACTIVE_ARCH = YES;
296 | };
297 | name = Debug;
298 | };
299 | 2D94548F1F09185D0091BD6B /* Release */ = {
300 | isa = XCBuildConfiguration;
301 | buildSettings = {
302 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
303 | CLANG_WARN_BOOL_CONVERSION = YES;
304 | CLANG_WARN_COMMA = YES;
305 | CLANG_WARN_CONSTANT_CONVERSION = YES;
306 | CLANG_WARN_EMPTY_BODY = YES;
307 | CLANG_WARN_ENUM_CONVERSION = YES;
308 | CLANG_WARN_INFINITE_RECURSION = YES;
309 | CLANG_WARN_INT_CONVERSION = YES;
310 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
311 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
312 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
313 | CLANG_WARN_STRICT_PROTOTYPES = YES;
314 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
315 | CLANG_WARN_UNREACHABLE_CODE = YES;
316 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
317 | ENABLE_STRICT_OBJC_MSGSEND = YES;
318 | GCC_NO_COMMON_BLOCKS = YES;
319 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
320 | GCC_WARN_ABOUT_RETURN_TYPE = YES;
321 | GCC_WARN_UNDECLARED_SELECTOR = YES;
322 | GCC_WARN_UNINITIALIZED_AUTOS = YES;
323 | GCC_WARN_UNUSED_FUNCTION = YES;
324 | GCC_WARN_UNUSED_VARIABLE = YES;
325 | };
326 | name = Release;
327 | };
328 | 2D9454B41F0918890091BD6B /* Debug */ = {
329 | isa = XCBuildConfiguration;
330 | buildSettings = {
331 | ALWAYS_SEARCH_USER_PATHS = NO;
332 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
333 | CLANG_ANALYZER_NONNULL = YES;
334 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
335 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
336 | CLANG_CXX_LIBRARY = "libc++";
337 | CLANG_ENABLE_MODULES = YES;
338 | CLANG_ENABLE_OBJC_ARC = YES;
339 | CLANG_WARN_BOOL_CONVERSION = YES;
340 | CLANG_WARN_CONSTANT_CONVERSION = YES;
341 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
342 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
343 | CLANG_WARN_EMPTY_BODY = YES;
344 | CLANG_WARN_ENUM_CONVERSION = YES;
345 | CLANG_WARN_INFINITE_RECURSION = YES;
346 | CLANG_WARN_INT_CONVERSION = YES;
347 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
348 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
349 | CLANG_WARN_UNREACHABLE_CODE = YES;
350 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
351 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
352 | COPY_PHASE_STRIP = NO;
353 | DEBUG_INFORMATION_FORMAT = dwarf;
354 | ENABLE_STRICT_OBJC_MSGSEND = YES;
355 | ENABLE_TESTABILITY = YES;
356 | GCC_C_LANGUAGE_STANDARD = gnu99;
357 | GCC_DYNAMIC_NO_PIC = NO;
358 | GCC_NO_COMMON_BLOCKS = YES;
359 | GCC_OPTIMIZATION_LEVEL = 0;
360 | GCC_PREPROCESSOR_DEFINITIONS = (
361 | "DEBUG=1",
362 | "$(inherited)",
363 | );
364 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
365 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
366 | GCC_WARN_UNDECLARED_SELECTOR = YES;
367 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
368 | GCC_WARN_UNUSED_FUNCTION = YES;
369 | GCC_WARN_UNUSED_VARIABLE = YES;
370 | INFOPLIST_FILE = "Example iOS/Info.plist";
371 | IPHONEOS_DEPLOYMENT_TARGET = 10.3;
372 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
373 | MTL_ENABLE_DEBUG_INFO = YES;
374 | ONLY_ACTIVE_ARCH = YES;
375 | PRODUCT_BUNDLE_IDENTIFIER = "CodingLifestyle.Example-iOS";
376 | PRODUCT_NAME = "$(TARGET_NAME)";
377 | SDKROOT = iphoneos;
378 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
379 | SWIFT_OPTIMIZATION_LEVEL = "-Onone";
380 | SWIFT_SWIFT3_OBJC_INFERENCE = Default;
381 | SWIFT_VERSION = 4.0;
382 | TARGETED_DEVICE_FAMILY = "1,2";
383 | };
384 | name = Debug;
385 | };
386 | 2D9454B51F0918890091BD6B /* Release */ = {
387 | isa = XCBuildConfiguration;
388 | buildSettings = {
389 | ALWAYS_SEARCH_USER_PATHS = NO;
390 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
391 | CLANG_ANALYZER_NONNULL = YES;
392 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
393 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
394 | CLANG_CXX_LIBRARY = "libc++";
395 | CLANG_ENABLE_MODULES = YES;
396 | CLANG_ENABLE_OBJC_ARC = YES;
397 | CLANG_WARN_BOOL_CONVERSION = YES;
398 | CLANG_WARN_CONSTANT_CONVERSION = YES;
399 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
400 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
401 | CLANG_WARN_EMPTY_BODY = YES;
402 | CLANG_WARN_ENUM_CONVERSION = YES;
403 | CLANG_WARN_INFINITE_RECURSION = YES;
404 | CLANG_WARN_INT_CONVERSION = YES;
405 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
406 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
407 | CLANG_WARN_UNREACHABLE_CODE = YES;
408 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
409 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
410 | COPY_PHASE_STRIP = NO;
411 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
412 | ENABLE_NS_ASSERTIONS = NO;
413 | ENABLE_STRICT_OBJC_MSGSEND = YES;
414 | GCC_C_LANGUAGE_STANDARD = gnu99;
415 | GCC_NO_COMMON_BLOCKS = YES;
416 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
417 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
418 | GCC_WARN_UNDECLARED_SELECTOR = YES;
419 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
420 | GCC_WARN_UNUSED_FUNCTION = YES;
421 | GCC_WARN_UNUSED_VARIABLE = YES;
422 | INFOPLIST_FILE = "Example iOS/Info.plist";
423 | IPHONEOS_DEPLOYMENT_TARGET = 10.3;
424 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
425 | MTL_ENABLE_DEBUG_INFO = NO;
426 | PRODUCT_BUNDLE_IDENTIFIER = "CodingLifestyle.Example-iOS";
427 | PRODUCT_NAME = "$(TARGET_NAME)";
428 | SDKROOT = iphoneos;
429 | SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
430 | SWIFT_SWIFT3_OBJC_INFERENCE = Default;
431 | SWIFT_VERSION = 4.0;
432 | TARGETED_DEVICE_FAMILY = "1,2";
433 | VALIDATE_PRODUCT = YES;
434 | };
435 | name = Release;
436 | };
437 | /* End XCBuildConfiguration section */
438 |
439 | /* Begin XCConfigurationList section */
440 | 2D94548D1F09185D0091BD6B /* Build configuration list for PBXProject "Example" */ = {
441 | isa = XCConfigurationList;
442 | buildConfigurations = (
443 | 2D94548E1F09185D0091BD6B /* Debug */,
444 | 2D94548F1F09185D0091BD6B /* Release */,
445 | );
446 | defaultConfigurationIsVisible = 0;
447 | defaultConfigurationName = Release;
448 | };
449 | 2D9454B31F0918890091BD6B /* Build configuration list for PBXNativeTarget "Example iOS" */ = {
450 | isa = XCConfigurationList;
451 | buildConfigurations = (
452 | 2D9454B41F0918890091BD6B /* Debug */,
453 | 2D9454B51F0918890091BD6B /* Release */,
454 | );
455 | defaultConfigurationIsVisible = 0;
456 | defaultConfigurationName = Release;
457 | };
458 | /* End XCConfigurationList section */
459 | };
460 | rootObject = 2D94548A1F09185D0091BD6B /* Project object */;
461 | }
462 |
--------------------------------------------------------------------------------
/Example/Example.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/Example/Example.xcodeproj/project.xcworkspace/xcshareddata/Example.xcscmblueprint:
--------------------------------------------------------------------------------
1 | {
2 | "DVTSourceControlWorkspaceBlueprintPrimaryRemoteRepositoryKey" : "7C3FADF65D64AC6848737CADCBF3F1D493851DCC",
3 | "DVTSourceControlWorkspaceBlueprintWorkingCopyRepositoryLocationsKey" : {
4 |
5 | },
6 | "DVTSourceControlWorkspaceBlueprintWorkingCopyStatesKey" : {
7 | "5210F21B8E5E4ED0844D470D7561650484D4BD70" : 9223372036854775807,
8 | "7C3FADF65D64AC6848737CADCBF3F1D493851DCC" : 9223372036854775807
9 | },
10 | "DVTSourceControlWorkspaceBlueprintIdentifierKey" : "F789F086-E4B0-452C-B5E8-33BBAC072B88",
11 | "DVTSourceControlWorkspaceBlueprintWorkingCopyPathsKey" : {
12 | "5210F21B8E5E4ED0844D470D7561650484D4BD70" : "",
13 | "7C3FADF65D64AC6848737CADCBF3F1D493851DCC" : "AsyncTimer\/"
14 | },
15 | "DVTSourceControlWorkspaceBlueprintNameKey" : "Example",
16 | "DVTSourceControlWorkspaceBlueprintVersion" : 204,
17 | "DVTSourceControlWorkspaceBlueprintRelativePathToProjectKey" : "Example\/Example.xcodeproj",
18 | "DVTSourceControlWorkspaceBlueprintRemoteRepositoriesKey" : [
19 | {
20 | "DVTSourceControlWorkspaceBlueprintRemoteRepositoryURLKey" : "github.com:CodingLifestyleProjects\/Sudoku.git",
21 | "DVTSourceControlWorkspaceBlueprintRemoteRepositorySystemKey" : "com.apple.dt.Xcode.sourcecontrol.Git",
22 | "DVTSourceControlWorkspaceBlueprintRemoteRepositoryIdentifierKey" : "5210F21B8E5E4ED0844D470D7561650484D4BD70"
23 | },
24 | {
25 | "DVTSourceControlWorkspaceBlueprintRemoteRepositoryURLKey" : "https:\/\/github.com\/Decybel07\/AsyncTimer.git",
26 | "DVTSourceControlWorkspaceBlueprintRemoteRepositorySystemKey" : "com.apple.dt.Xcode.sourcecontrol.Git",
27 | "DVTSourceControlWorkspaceBlueprintRemoteRepositoryIdentifierKey" : "7C3FADF65D64AC6848737CADCBF3F1D493851DCC"
28 | }
29 | ]
30 | }
--------------------------------------------------------------------------------
/Example/Example.xcodeproj/xcshareddata/xcschemes/Example iOS.xcscheme:
--------------------------------------------------------------------------------
1 |
2 |
5 |
8 |
9 |
15 |
21 |
22 |
23 |
24 |
25 |
31 |
32 |
33 |
34 |
40 |
41 |
42 |
43 |
44 |
45 |
56 |
58 |
64 |
65 |
66 |
67 |
68 |
69 |
75 |
77 |
83 |
84 |
85 |
86 |
88 |
89 |
92 |
93 |
94 |
--------------------------------------------------------------------------------
/Images/Periodic480.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Decybel07/AsyncTimer/05e2403e76b34dcad94bc9b153a9f1649bde10fd/Images/Periodic480.gif
--------------------------------------------------------------------------------
/Images/Periodic480.mov:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Decybel07/AsyncTimer/05e2403e76b34dcad94bc9b153a9f1649bde10fd/Images/Periodic480.mov
--------------------------------------------------------------------------------
/Images/Periodic720.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Decybel07/AsyncTimer/05e2403e76b34dcad94bc9b153a9f1649bde10fd/Images/Periodic720.gif
--------------------------------------------------------------------------------
/Images/Periodic720.mov:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Decybel07/AsyncTimer/05e2403e76b34dcad94bc9b153a9f1649bde10fd/Images/Periodic720.mov
--------------------------------------------------------------------------------
/Images/countdown480.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Decybel07/AsyncTimer/05e2403e76b34dcad94bc9b153a9f1649bde10fd/Images/countdown480.gif
--------------------------------------------------------------------------------
/Images/countdown480.mov:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Decybel07/AsyncTimer/05e2403e76b34dcad94bc9b153a9f1649bde10fd/Images/countdown480.mov
--------------------------------------------------------------------------------
/Images/countdown720.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Decybel07/AsyncTimer/05e2403e76b34dcad94bc9b153a9f1649bde10fd/Images/countdown720.gif
--------------------------------------------------------------------------------
/Images/countdown720.mov:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Decybel07/AsyncTimer/05e2403e76b34dcad94bc9b153a9f1649bde10fd/Images/countdown720.mov
--------------------------------------------------------------------------------
/Images/scheduled480.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Decybel07/AsyncTimer/05e2403e76b34dcad94bc9b153a9f1649bde10fd/Images/scheduled480.gif
--------------------------------------------------------------------------------
/Images/scheduled480.mov:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Decybel07/AsyncTimer/05e2403e76b34dcad94bc9b153a9f1649bde10fd/Images/scheduled480.mov
--------------------------------------------------------------------------------
/Images/scheduled720.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Decybel07/AsyncTimer/05e2403e76b34dcad94bc9b153a9f1649bde10fd/Images/scheduled720.gif
--------------------------------------------------------------------------------
/Images/scheduled720.mov:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Decybel07/AsyncTimer/05e2403e76b34dcad94bc9b153a9f1649bde10fd/Images/scheduled720.mov
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2017 Adrian Bobrowski (Decybel07), adrian071993@gmail.com
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in
13 | all copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21 | THE SOFTWARE.
22 |
--------------------------------------------------------------------------------
/Package.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Package.swift
3 | //
4 | // Created by Adrian Bobrowski on 21.06.2017.
5 | // Copyright © 2017 Adrian Bobrowski (Decybel07), adrian071993@gmail.com. All rights reserved.
6 | //
7 |
8 | import PackageDescription
9 |
10 | let package = Package(
11 | name: "AsyncTimer",
12 | dependencies: [],
13 | exclude: ["Example"]
14 | )
15 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # AsyncTimer
2 |
3 | [](https://travis-ci.org/Decybel07/AsyncTimer)
4 | [](http://cocoapods.org/pods/AsyncTimer)
5 | [](https://developer.apple.com/swift/)
6 | [](http://cocoapods.org/pods/AsyncTimer)
7 | [](https://github.com/Decybel07/AsyncTimer/blob/master/LICENSE)
8 | [](http://cocoadocs.org/docsets/AsyncTimer/)
9 | [](#-installation)
10 | [](https://codebeat.co/projects/github-com-decybel07-asynctimer-master)
11 | [](https://www.codacy.com/app/Decybel07/AsyncTimer/dashboard)
12 |
13 | ## 🌟 Features
14 |
15 | - [x] Can work as a countdown timer
16 | - [x] Can work as a periodic Timer
17 | - [x] Can work as a scheduled timer
18 | - [x] Working with user events (like: scrolling, tapping, ...)
19 | - [x] Functionality (start, pause, resume, stop, restart)
20 | - [x] Support for clousure (never more selectors)
21 |
22 | ## Overview
23 |
24 |
25 |
30 |
31 |
32 | ## 💻 Demo
33 |
34 | ```ruby
35 | pod try AsyncTimer
36 | ```
37 |
38 | ## ⚠️ Requirements
39 |
40 | - iOS 9.0+ | macOS 10.10+ | tvOS 9.0+ | watchOS 2.0+
41 | - Swift 3.0+
42 |
43 | ## 👥 Communication
44 |
45 | - If you **found a bug**, open an issue.
46 | - If you **have a feature request**, open an issue.
47 | - If you **want to contribute**, submit a pull request.
48 |
49 | ## 📗 Installation
50 |
51 | ### [CocoaPods](http://cocoapods.org)
52 |
53 | ```ruby
54 | pod 'AsyncTimer', '~> 2.2'
55 | ```
56 |
57 | ### [Carthage](https://github.com/Carthage/Carthage)
58 |
59 | ```ogdl
60 | github "Decybel07/AsyncTimer", ~> 2.2
61 | ```
62 |
63 | ### [Swift Package Manager](https://swift.org/package-manager/)
64 |
65 | ```swift
66 | .Package(url: "https://github.com/Decybel07/AsyncTimer.git", majorVersion: 2)
67 | ```
68 |
69 | ## 📘 [Usage](http://cocoadocs.org/docsets/AsyncTimer/)
70 |
71 | Import AsyncTimer at the top of each Swift file that will use framework.
72 | ```swift
73 | import AsyncTimer
74 | ```
75 |
76 | ### Countdown Timer
77 |
78 | Counts down from 25 to 0 every 100 ms
79 |
80 | ```swift
81 | AsyncTimer(
82 | interval: .milliseconds(100),
83 | times: 25,
84 | block: { value in
85 | print(value)
86 | },
87 | completion: { value in
88 | print("finished")
89 | }
90 | )
91 | ```
92 |
93 | ### Periodic Timer
94 |
95 | Update every 100 ms
96 |
97 | ```swift
98 | AsyncTimer(interval: .milliseconds(100), repeats: true) {
99 | print("updated")
100 | }
101 | ```
102 |
103 | ### Scheduled Timer
104 |
105 | Do something after 2 seconds
106 |
107 | ```swift
108 | AsyncTimer(interval: .seconds(2)) {
109 | print("something to do")
110 | }
111 | `````
112 |
113 | ## 🤓 Author
114 |
115 | Adrian Bobrowski ([Decybel07](https://github.com/Decybel07)), adrian071993@gmail.com
116 |
117 | ## 🔑 License
118 |
119 | AsyncTimer is available under the MIT license. See the [LICENSE](https://github.com/Decybel07/AsyncTimer/blob/master/LICENSE) file for more info.
120 |
--------------------------------------------------------------------------------
/Source/AsyncTimer.h:
--------------------------------------------------------------------------------
1 | //
2 | // AsyncTimer.h
3 | //
4 | // Created by Adrian Bobrowski on 21.06.2017.
5 | // Copyright (c) 2017 Adrian Bobrowski (Decybel07), adrian071993@gmail.com. All rights reserved.
6 | //
7 | // Permission is hereby granted, free of charge, to any person obtaining a copy
8 | // of this software and associated documentation files (the "Software"), to deal
9 | // in the Software without restriction, including without limitation the rights
10 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
11 | // copies of the Software, and to permit persons to whom the Software is
12 | // furnished to do so, subject to the following conditions:
13 | //
14 | // The above copyright notice and this permission notice shall be included in all
15 | // copies or substantial portions of the Software.
16 | //
17 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
23 | // SOFTWARE.
24 |
25 | @import Foundation;
26 |
27 | FOUNDATION_EXPORT double AsyncTimerVersionNumber;
28 | FOUNDATION_EXPORT const unsigned char AsyncTimerVersionString[];
29 |
--------------------------------------------------------------------------------
/Source/AsyncTimer.swift:
--------------------------------------------------------------------------------
1 | //
2 | // AsyncTimer.swift
3 | // AsyncTimer
4 | //
5 | // Created by Adrian Bobrowski on 21.06.2017.
6 | // Copyright © 2017 Adrian Bobrowski (Decybel07), adrian071993@gmail.com. All rights reserved.
7 | //
8 |
9 | import Foundation
10 |
11 | /// Class AsyncTimer.
12 | open class AsyncTimer {
13 |
14 | private let queue: DispatchQueue
15 | private let interval: DispatchTimeInterval
16 | private let counter: Counter
17 |
18 | private let block: (Int) -> Void
19 | private let completion: () -> Void
20 | private var task: Task?
21 |
22 | /// A Boolean value that determines whether the timer is paused.
23 | public var isPaused: Bool {
24 | return self.task?.isSuspended ?? false
25 | }
26 |
27 | /// A Boolean value that determines whether the timer is stopped.
28 | public var isStopped: Bool {
29 | return self.task == nil
30 | }
31 |
32 | /// A Boolean value that determines whether the timer is running.
33 | public var isRunning: Bool {
34 | return !(self.isStopped || self.isPaused)
35 | }
36 |
37 | /// An Integer value that determines the number of remaining iterations.
38 | /// If the timer is infinity or stopped then return nil
39 | public var value: Int? {
40 | if let counter = self.task?.counter, case let .down(value) = counter {
41 | return value
42 | }
43 | return nil
44 | }
45 |
46 | /**
47 | Initialize a new AsyncTimer. A timer waits until a certain time **interval** has elapsed and then call the **block** clause.
48 |
49 | - parameter queue: The queue on which the timer will start.
50 | - parameter interval: The time interval between calls to the **block** clause.
51 | - parameter repeats: If true, the timer will infinity work until stop method called. If false, the timer will be stop after first iteration.
52 | - parameter block: A closure to be executed when the time **interval** expires. This block has no return value and has no take any argument.
53 |
54 | - returns: A AsyncTimer object.
55 | */
56 | public convenience init(
57 | queue: DispatchQueue = .main,
58 | interval: DispatchTimeInterval,
59 | repeats: Bool = false,
60 | block: @escaping () -> Void = {}
61 | ) {
62 | if repeats {
63 | self.init(queue: queue, interval: interval, counter: .infinity, block: { _ in block() })
64 | } else {
65 | self.init(queue: queue, interval: interval, counter: .down(1), completion: block)
66 | }
67 | }
68 |
69 | /**
70 | Initialize a new AsyncTimer. A timer waits until a certain time **interval** has elapsed and then call the **block** clause.
71 |
72 | - parameter queue: The queue on which the timer will start.
73 | - parameter interval: The time interval between calls to the **block** clause.
74 | - parameter times: The number of iterations.
75 | - parameter block: A closure to be executed after changing the number of remaining iterations. This block has no return value and takes single Int argument that indicates number of remaining iterations.
76 | - parameter completion: A closure to be executed when the timer finishes work. This block has no return value and has no take any argument.
77 |
78 | - returns: A AsyncTimer object.
79 | */
80 | public convenience init(
81 | queue: DispatchQueue = .main,
82 | interval: DispatchTimeInterval,
83 | times: Int,
84 | block: @escaping (Int) -> Void = { _ in },
85 | completion: @escaping () -> Void = {}
86 | ) {
87 | self.init(queue: queue, interval: interval, counter: .down(times), block: block, completion: completion)
88 | }
89 |
90 | private init(
91 | queue: DispatchQueue,
92 | interval: DispatchTimeInterval,
93 | counter: Counter,
94 | block: @escaping (Int) -> Void = { _ in },
95 | completion: @escaping () -> Void = {}
96 | ) {
97 | self.queue = queue
98 | self.counter = counter
99 | self.interval = interval
100 | self.block = block
101 | self.completion = completion
102 | }
103 |
104 | /// Destroy the timer
105 | deinit {
106 | self.stop()
107 | }
108 |
109 | /// Start the timer
110 | open func start() {
111 | guard self.task == nil else {
112 | return
113 | }
114 | self.startTask(Task(self.counter))
115 | }
116 |
117 | /// Pause the timer
118 | open func pause() {
119 | self.task?.isSuspended = true
120 | }
121 |
122 | /// Resume the timer
123 | open func resume() {
124 | guard let task = self.task, task.isSuspended else {
125 | return
126 | }
127 | self.startTask(Task(task))
128 | }
129 |
130 | /// Stop the timer
131 | open func stop() {
132 | self.pause()
133 | self.task = nil
134 | }
135 |
136 | /// Restart the timer
137 | open func restart() {
138 | self.stop()
139 | self.start()
140 | }
141 |
142 | private func startTask(_ task: Task) {
143 | self.task = task
144 | self.update(task.getStartTime(), with: task)
145 | }
146 |
147 | private func update(_ time: DispatchTime, with task: Task) {
148 | if task.isSuspended {
149 | return
150 | }
151 | if task.isCompleted {
152 | self.stop()
153 | self.block(0)
154 | self.completion()
155 | return
156 | }
157 |
158 | task.startedTime = time
159 | let nextTime = time + self.interval
160 | self.queue.asyncAfter(deadline: nextTime) { [weak self] in
161 | self?.update(nextTime, with: task.next)
162 | }
163 | self.block(task.counter.value)
164 | }
165 | }
166 |
--------------------------------------------------------------------------------
/Source/Counter.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Counter.swift
3 | // AsyncTimer
4 | //
5 | // Created by Adrian Bobrowski on 16.07.2017.
6 | // Copyright © 2017 Adrian Bobrowski (Decybel07), adrian071993@gmail.com. All rights reserved.
7 | //
8 |
9 | internal enum Counter {
10 | case infinity
11 | case down(Int)
12 | }
13 |
14 | internal extension Counter {
15 |
16 | var value: Int {
17 | if case let .down(value) = self {
18 | return value
19 | }
20 | return Int.max
21 | }
22 |
23 | var next: Counter {
24 | return self.offset(by: 1)
25 | }
26 |
27 | var previous: Counter {
28 | return self.offset(by: -1)
29 | }
30 |
31 | private func offset(by offset: Int) -> Counter {
32 | if case let .down(value) = self {
33 | return .down(value - offset)
34 | }
35 | return self
36 | }
37 | }
38 |
--------------------------------------------------------------------------------
/Source/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 | 2.2.0
19 | CFBundleVersion
20 | $(CURRENT_PROJECT_VERSION)
21 | NSPrincipalClass
22 |
23 |
24 |
25 |
--------------------------------------------------------------------------------
/Source/Task.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Task.swift
3 | // AsyncTimer
4 | //
5 | // Created by Adrian Bobrowski on 02.07.2017.
6 | // Copyright © 2017 Adrian Bobrowski (Decybel07), adrian071993@gmail.com. All rights reserved.
7 | //
8 |
9 | internal class Task {
10 |
11 | var counter: Counter
12 |
13 | var suspendTime: DispatchTime?
14 | var startedTime: DispatchTime?
15 | let getStartTime: () -> DispatchTime
16 |
17 | var isSuspended: Bool {
18 | get {
19 | return self.suspendTime != nil
20 | }
21 | set {
22 | if self.suspendTime == nil {
23 | self.suspendTime = .now()
24 | }
25 | }
26 | }
27 |
28 | var isCompleted: Bool {
29 | if case let .down(value) = self.counter {
30 | return value <= 0
31 | }
32 | return false
33 | }
34 |
35 | var next: Task {
36 | self.counter = self.counter.next
37 | return self
38 | }
39 |
40 | init(_ counter: Counter) {
41 | self.counter = counter
42 | self.getStartTime = { .now() }
43 | }
44 |
45 | init(_ task: Task) {
46 | let elapsedTime = task.suspendTime!.uptimeNanoseconds - task.startedTime!.uptimeNanoseconds
47 | self.counter = task.counter.previous
48 | self.getStartTime = {
49 | DispatchTime(uptimeNanoseconds: DispatchTime.now().uptimeNanoseconds - elapsedTime)
50 | }
51 | }
52 | }
53 |
--------------------------------------------------------------------------------