├── .gitignore
├── .swift-version
├── .travis.yml
├── CHANGELOG.md
├── LICENSE
├── Package.swift
├── README.md
├── Sources
├── Info.plist
├── SwiftyTimer.h
└── SwiftyTimer.swift
├── SwiftyTimer.podspec
├── SwiftyTimer.xcodeproj
├── project.pbxproj
├── project.xcworkspace
│ ├── contents.xcworkspacedata
│ └── xcshareddata
│ │ └── IDEWorkspaceChecks.plist
└── xcshareddata
│ └── xcschemes
│ ├── SwiftyTimer OS X.xcscheme
│ ├── SwiftyTimer tvOS.xcscheme
│ ├── SwiftyTimer watchOS.xcscheme
│ └── SwiftyTimer.xcscheme
└── SwiftyTimerTests
├── SwiftyTimerTests.xcodeproj
├── project.pbxproj
├── project.xcworkspace
│ ├── contents.xcworkspacedata
│ └── xcshareddata
│ │ └── IDEWorkspaceChecks.plist
└── xcshareddata
│ └── xcschemes
│ └── SwiftyTimerTests.xcscheme
└── SwiftyTimerTests
├── Info.plist
└── main.swift
/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | *.swp
3 | *~.nib
4 |
5 | /build/
6 | .project
7 | *.mode1
8 | *.mode1v3
9 | *.mode2v3
10 | *.perspective
11 | *.perspectivev3
12 | *.pbxuser
13 | xcuserdata/
14 | *.xcuserstate
15 | *.xccheckout
16 | /Build/
17 | /DerivedData/
18 |
19 | /Pods/
20 |
21 | /www
22 |
23 | # Carthage
24 | Carthage/
25 |
--------------------------------------------------------------------------------
/.swift-version:
--------------------------------------------------------------------------------
1 | 4.2
2 |
--------------------------------------------------------------------------------
/.travis.yml:
--------------------------------------------------------------------------------
1 | language: objective-c
2 | rvm: 2.4.2
3 | osx_image: xcode10
4 |
5 | env:
6 | global:
7 | - LC_CTYPE=en_US.UTF-8
8 | - LANG=en_US.UTF-8
9 | - PROJECT=SwiftyTimer.xcodeproj
10 |
11 | before_install:
12 | - gem install cocoapods
13 | - gem install xcpretty
14 |
15 | script:
16 | - set -o pipefail
17 | - xcodebuild -version
18 | - xcodebuild -showsdks
19 |
20 | - xcodebuild -project "$PROJECT" -scheme 'SwiftyTimer' -destination 'name=iPhone 6,OS=10.0' ONLY_ACTIVE_ARCH=NO CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO build | xcpretty
21 | - xcodebuild -project "$PROJECT" -scheme 'SwiftyTimer tvOS' -sdk appletvsimulator12.0 -destination 'name=Apple TV' ONLY_ACTIVE_ARCH=NO CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO build | xcpretty
22 | - xcodebuild -project "$PROJECT" -scheme 'SwiftyTimer watchOS' -sdk iphonesimulator -destination 'name=Apple Watch - 42mm' ONLY_ACTIVE_ARCH=NO CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO build | xcpretty
23 | - xcodebuild -project "$PROJECT" -scheme 'SwiftyTimer OS X' ONLY_ACTIVE_ARCH=NO CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO build | xcpretty
24 |
25 | - xcodebuild -archivePath 'Tests' -project SwiftyTimerTests/SwiftyTimerTests.xcodeproj -scheme 'SwiftyTimerTests' archive && Tests.xcarchive/Products/Applications/SwiftyTimerTests.app/Contents/MacOS/SwiftyTimerTests
26 |
--------------------------------------------------------------------------------
/CHANGELOG.md:
--------------------------------------------------------------------------------
1 | ### 2.1.0 (2018-10-14)
2 |
3 | This version supports Swift 4.2 without introducing changes to the library workflow.
4 | Library source modifications include adopting new changes in the `RunLoopMode` enum introduced in Swift 4.2
5 | - Updated for Swift 4.2 and Xcode 10 #45 @asowers1
6 |
7 | ### 2.0.0 (2016-09-23)
8 |
9 | This is the Swift 3 update version.
10 |
11 | It contains no major changes in the library itself, however it does change some APIs because of Swift 3 requirements.
12 |
13 | - Updated for Swift 3 and Xcode 8 compatibility #28 @ldiqual
14 |
15 | ### 1.4.1 (2016-08-03)
16 |
17 | - Add support for Xcode 8 (Swift 2.3) for Carthage users
18 |
19 | ### 1.4.0 (2016-04-10)
20 |
21 | - Add a variant of `every` and `new(every:)` that takes a closure with `NSTimer` passed in
22 | - Fix Carthage support for Mac (set deployment target to 10.9)
23 |
24 | ### 1.3.1 (2016-03-02)
25 |
26 | - Added support for Swift Package Manager
27 | - Refactoring (Removed NSTimerActor. Used CFRunLoopTimerCreateWithHandler instead.) #22 @Austinate
28 | - Added Travis CI
29 |
30 | ### 1.3.0 (2016-02-29)
31 |
32 | - Add Carthage support
33 | - Add tvOS and watchOS support
34 |
35 | ### 1.2.0 (2015-09-18)
36 |
37 | - Update to Swift 2
38 | - Add millisecond helper (`100.ms`)
39 |
40 | ### 1.1.0 (2015-05-13)
41 |
42 | - Add `start(runLoop:, modes:)`
43 | - Refactoring
44 |
45 | ### 1.0.0 (2015-05-11)
46 |
47 | - Initial release
48 | - `NSTimer.after(...)` and `NSTimer.every(...)`
49 | - `NSTimer.new`
50 | - Ruby on Rails-inspired time helpers like (5.seconds or 1.minute)
51 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | The MIT License (MIT)
2 |
3 | Copyright (c) 2015-2016 Radosław Pietruszewski
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/Package.swift:
--------------------------------------------------------------------------------
1 | import PackageDescription
2 |
3 | let package = Package(
4 | name: "SwiftyTimer",
5 | dependencies: [],
6 | exclude: ["Sources/Info.plist", "Sources/SwiftyTimer.h", "SwiftyTimerTests"]
7 |
8 | )
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # SwiftyTimer
2 |
3 | 
4 | [](https://travis-ci.org/radex/SwiftyTimer)
5 | [](https://cocoapods.org/pods/SwiftyTimer)
6 | [](#carthage)
7 | 
8 |
9 | #### Modern Swifty API for `NSTimer`
10 | ###### SwiftyTimer allows you to instantly schedule delays and repeating timers using convenient closure syntax. It's time to get rid of Objective-C cruft.
11 |
12 | Read [Swifty APIs: NSTimer](http://radex.io/swift/nstimer/) for more information about this project.
13 |
14 | ## Usage
15 |
16 | You can easily schedule repeating and non-repeating timers (repeats and delays) using `Timer.every` and `Timer.after`:
17 |
18 | ```swift
19 | Timer.every(0.7.seconds) {
20 | statusItem.blink()
21 | }
22 |
23 | Timer.after(1.minute) {
24 | println("Are you still here?")
25 | }
26 | ```
27 |
28 | You can specify time intervals with these intuitive helpers:
29 |
30 | ```swift
31 | 100.ms
32 | 1.second
33 | 2.5.seconds
34 | 5.seconds
35 | 10.minutes
36 | 1.hour
37 | 2.days
38 | ```
39 |
40 | You can pass method references instead of closures:
41 |
42 | ```swift
43 | Timer.every(30.seconds, align)
44 | ```
45 |
46 | ### Manual scheduling
47 |
48 | If you want to make a timer object without scheduling, use `new(after:)` and `new(every:)`:
49 |
50 | ```swift
51 | let timer = Timer.new(every: 1.second) {
52 | println(self.status)
53 | }
54 | ```
55 |
56 | (This should be defined as an initializer, but [a bug in Foundation](http://www.openradar.me/18720947) prevents this)
57 |
58 | Call `start()` to schedule timers created using `new`. You can optionally pass the run loop and run loop modes:
59 |
60 | ```swift
61 | timer.start()
62 | timer.start(modes: .defaultRunLoopMode, .eventTrackingRunLoopMode)
63 | ```
64 |
65 | ### Invalidation
66 |
67 | If you want to invalidate a repeating timer on some condition, you can take a `Timer` argument in the closure you pass in:
68 |
69 | ```swift
70 | Timer.every(5.seconds) { (timer: Timer) in
71 | // do something
72 |
73 | if finished {
74 | timer.invalidate()
75 | }
76 | }
77 | ```
78 |
79 | ## Installation
80 |
81 | **Note:** If you're running Swift 2, use [SwiftyTimer v1.4.1](https://github.com/radex/SwiftyTimer/tree/1.4.1)
82 |
83 | #### CocoaPods
84 |
85 | If you're using CocoaPods, just add this line to your Podfile:
86 |
87 | ```ruby
88 | pod 'SwiftyTimer'
89 | ```
90 |
91 | Install by running this command in your terminal:
92 |
93 | ```sh
94 | pod install
95 | ```
96 |
97 | Then import the library in all files where you use it:
98 |
99 | ```swift
100 | import SwiftyTimer
101 | ```
102 |
103 | #### Carthage
104 |
105 | Just add to your Cartfile:
106 |
107 | ```ruby
108 | github "radex/SwiftyTimer"
109 | ```
110 |
111 | #### Manually
112 |
113 | Simply copy `Sources/SwiftyTimer.swift` to your Xcode project.
114 |
115 | ## More like this
116 |
117 | If you like SwiftyTimer, check out [SwiftyUserDefaults](https://github.com/radex/SwiftyUserDefaults), which applies the same swifty approach to `NSUserDefaults`.
118 |
119 | You might also be interested in my blog posts which explain the design process behind those libraries:
120 | - [Swifty APIs: NSTimer](http://radex.io/swift/nstimer/)
121 | - [Swifty APIs: NSUserDefaults](http://radex.io/swift/nsuserdefaults/)
122 | - [Statically-typed NSUserDefaults](http://radex.io/swift/nsuserdefaults/static)
123 | - [Swifty methods](http://radex.io/swift/methods/)
124 |
125 | ### Contributing
126 |
127 | If you have comments, complaints or ideas for improvements, feel free to open an issue or a pull request.
128 |
129 | ### Author and license
130 |
131 | Radek Pietruszewski
132 |
133 | * [github.com/radex](http://github.com/radex)
134 | * [twitter.com/radexp](http://twitter.com/radexp)
135 | * [radex.io](http://radex.io)
136 | * this.is@radex.io
137 |
138 | SwiftyTimer is available under the MIT license. See the LICENSE file for more info.
139 |
--------------------------------------------------------------------------------
/Sources/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | $(PRODUCT_BUNDLE_IDENTIFIER)
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | $(PRODUCT_NAME)
15 | CFBundlePackageType
16 | FMWK
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleSignature
20 | ????
21 | CFBundleVersion
22 | $(CURRENT_PROJECT_VERSION)
23 | NSPrincipalClass
24 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/Sources/SwiftyTimer.h:
--------------------------------------------------------------------------------
1 | #import
2 |
3 | FOUNDATION_EXPORT double SwiftyTimerVersionNumber;
4 | FOUNDATION_EXPORT const unsigned char SwiftyTimerVersionString[];
--------------------------------------------------------------------------------
/Sources/SwiftyTimer.swift:
--------------------------------------------------------------------------------
1 | //
2 | // SwiftyTimer
3 | //
4 | // Copyright (c) 2015-2016 Radosław Pietruszewski
5 | //
6 | // Permission is hereby granted, free of charge, to any person obtaining a copy
7 | // of this software and associated documentation files (the "Software"), to deal
8 | // in the Software without restriction, including without limitation the rights
9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10 | // copies of the Software, and to permit persons to whom the Software is
11 | // furnished to do so, subject to the following conditions:
12 | //
13 | // The above copyright notice and this permission notice shall be included in all
14 | // copies or substantial portions of the Software.
15 | //
16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22 | // SOFTWARE.
23 | //
24 |
25 | import Foundation
26 |
27 | extension Timer {
28 |
29 | // MARK: Schedule timers
30 |
31 | /// Create and schedule a timer that will call `block` once after the specified time.
32 |
33 | @discardableResult
34 | public class func after(_ interval: TimeInterval, _ block: @escaping () -> Void) -> Timer {
35 | let timer = Timer.new(after: interval, block)
36 | timer.start()
37 | return timer
38 | }
39 |
40 | /// Create and schedule a timer that will call `block` repeatedly in specified time intervals.
41 |
42 | @discardableResult
43 | public class func every(_ interval: TimeInterval, _ block: @escaping () -> Void) -> Timer {
44 | let timer = Timer.new(every: interval, block)
45 | timer.start()
46 | return timer
47 | }
48 |
49 | /// Create and schedule a timer that will call `block` repeatedly in specified time intervals.
50 | /// (This variant also passes the timer instance to the block)
51 |
52 | @nonobjc @discardableResult
53 | public class func every(_ interval: TimeInterval, _ block: @escaping (Timer) -> Void) -> Timer {
54 | let timer = Timer.new(every: interval, block)
55 | timer.start()
56 | return timer
57 | }
58 |
59 | // MARK: Create timers without scheduling
60 |
61 | /// Create a timer that will call `block` once after the specified time.
62 | ///
63 | /// - Note: The timer won't fire until it's scheduled on the run loop.
64 | /// Use `NSTimer.after` to create and schedule a timer in one step.
65 | /// - Note: The `new` class function is a workaround for a crashing bug when using convenience initializers (rdar://18720947)
66 |
67 | public class func new(after interval: TimeInterval, _ block: @escaping () -> Void) -> Timer {
68 | return CFRunLoopTimerCreateWithHandler(kCFAllocatorDefault, CFAbsoluteTimeGetCurrent() + interval, 0, 0, 0) { _ in
69 | block()
70 | }
71 | }
72 |
73 | /// Create a timer that will call `block` repeatedly in specified time intervals.
74 | ///
75 | /// - Note: The timer won't fire until it's scheduled on the run loop.
76 | /// Use `NSTimer.every` to create and schedule a timer in one step.
77 | /// - Note: The `new` class function is a workaround for a crashing bug when using convenience initializers (rdar://18720947)
78 |
79 | public class func new(every interval: TimeInterval, _ block: @escaping () -> Void) -> Timer {
80 | return CFRunLoopTimerCreateWithHandler(kCFAllocatorDefault, CFAbsoluteTimeGetCurrent() + interval, interval, 0, 0) { _ in
81 | block()
82 | }
83 | }
84 |
85 | /// Create a timer that will call `block` repeatedly in specified time intervals.
86 | /// (This variant also passes the timer instance to the block)
87 | ///
88 | /// - Note: The timer won't fire until it's scheduled on the run loop.
89 | /// Use `NSTimer.every` to create and schedule a timer in one step.
90 | /// - Note: The `new` class function is a workaround for a crashing bug when using convenience initializers (rdar://18720947)
91 |
92 | @nonobjc public class func new(every interval: TimeInterval, _ block: @escaping (Timer) -> Void) -> Timer {
93 | var timer: Timer!
94 | timer = CFRunLoopTimerCreateWithHandler(kCFAllocatorDefault, CFAbsoluteTimeGetCurrent() + interval, interval, 0, 0) { _ in
95 | block(timer)
96 | }
97 | return timer
98 | }
99 |
100 | // MARK: Manual scheduling
101 |
102 | /// Schedule this timer on the run loop
103 | ///
104 | /// By default, the timer is scheduled on the current run loop for the default mode.
105 | /// Specify `runLoop` or `modes` to override these defaults.
106 |
107 | public func start(runLoop: RunLoop = .current, modes: RunLoop.Mode...) {
108 | let modes = modes.isEmpty ? [.default] : modes
109 |
110 | for mode in modes {
111 | runLoop.add(self, forMode: mode)
112 | }
113 | }
114 | }
115 |
116 | // MARK: - Time extensions
117 |
118 | extension Double {
119 | public var millisecond: TimeInterval { return self / 1000 }
120 | public var milliseconds: TimeInterval { return self / 1000 }
121 | public var ms: TimeInterval { return self / 1000 }
122 |
123 | public var second: TimeInterval { return self }
124 | public var seconds: TimeInterval { return self }
125 |
126 | public var minute: TimeInterval { return self * 60 }
127 | public var minutes: TimeInterval { return self * 60 }
128 |
129 | public var hour: TimeInterval { return self * 3600 }
130 | public var hours: TimeInterval { return self * 3600 }
131 |
132 | public var day: TimeInterval { return self * 3600 * 24 }
133 | public var days: TimeInterval { return self * 3600 * 24 }
134 | }
135 |
--------------------------------------------------------------------------------
/SwiftyTimer.podspec:
--------------------------------------------------------------------------------
1 | Pod::Spec.new do |s|
2 | s.name = 'SwiftyTimer'
3 | s.version = '2.1.0'
4 | s.license = 'MIT'
5 | s.summary = 'Swifty API for NSTimer'
6 | s.homepage = 'https://github.com/radex/SwiftyTimer'
7 | s.authors = { 'Radek Pietruszewski' => 'this.is@radex.io' }
8 | s.source = { git: 'https://github.com/radex/SwiftyTimer.git', tag: s.version }
9 | s.swift_version = '4.2'
10 | s.requires_arc = true
11 | s.ios.deployment_target = '8.0'
12 | s.osx.deployment_target = '10.9'
13 | s.tvos.deployment_target = '9.0'
14 | s.watchos.deployment_target = '2.0'
15 |
16 | s.source_files = 'Sources/*.swift'
17 | end
18 |
--------------------------------------------------------------------------------
/SwiftyTimer.xcodeproj/project.pbxproj:
--------------------------------------------------------------------------------
1 | // !$*UTF8*$!
2 | {
3 | archiveVersion = 1;
4 | classes = {
5 | };
6 | objectVersion = 46;
7 | objects = {
8 |
9 | /* Begin PBXBuildFile section */
10 | 3E721AC71BF725A2008AF027 /* SwiftyTimer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3E721AC61BF725A2008AF027 /* SwiftyTimer.swift */; };
11 | 6E7E40931C84B2C60030CEBB /* SwiftyTimer.h in Headers */ = {isa = PBXBuildFile; fileRef = 6E7E40921C84B2970030CEBB /* SwiftyTimer.h */; settings = {ATTRIBUTES = (Public, ); }; };
12 | 6E7E40941C84B2C70030CEBB /* SwiftyTimer.h in Headers */ = {isa = PBXBuildFile; fileRef = 6E7E40921C84B2970030CEBB /* SwiftyTimer.h */; settings = {ATTRIBUTES = (Public, ); }; };
13 | 6E7E40A21C84B3F40030CEBB /* SwiftyTimer.h in Headers */ = {isa = PBXBuildFile; fileRef = 6E7E40921C84B2970030CEBB /* SwiftyTimer.h */; settings = {ATTRIBUTES = (Public, ); }; };
14 | 6E7E40B01C84B43A0030CEBB /* SwiftyTimer.h in Headers */ = {isa = PBXBuildFile; fileRef = 6E7E40921C84B2970030CEBB /* SwiftyTimer.h */; settings = {ATTRIBUTES = (Public, ); }; };
15 | 6E7E40B11C84B4B40030CEBB /* SwiftyTimer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3E721AC61BF725A2008AF027 /* SwiftyTimer.swift */; };
16 | 6E7E40B21C84B4B40030CEBB /* SwiftyTimer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3E721AC61BF725A2008AF027 /* SwiftyTimer.swift */; };
17 | 6E7E40B31C84B4B40030CEBB /* SwiftyTimer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3E721AC61BF725A2008AF027 /* SwiftyTimer.swift */; };
18 | /* End PBXBuildFile section */
19 |
20 | /* Begin PBXFileReference section */
21 | 3E721ABB1BF7255D008AF027 /* SwiftyTimer.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SwiftyTimer.framework; sourceTree = BUILT_PRODUCTS_DIR; };
22 | 3E721AC01BF7255D008AF027 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
23 | 3E721AC61BF725A2008AF027 /* SwiftyTimer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SwiftyTimer.swift; sourceTree = ""; };
24 | 6E7E408A1C84B1A20030CEBB /* SwiftyTimer.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SwiftyTimer.framework; sourceTree = BUILT_PRODUCTS_DIR; };
25 | 6E7E40921C84B2970030CEBB /* SwiftyTimer.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SwiftyTimer.h; sourceTree = ""; };
26 | 6E7E409A1C84B3790030CEBB /* SwiftyTimer.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SwiftyTimer.framework; sourceTree = BUILT_PRODUCTS_DIR; };
27 | 6E7E40A81C84B4240030CEBB /* SwiftyTimer.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SwiftyTimer.framework; sourceTree = BUILT_PRODUCTS_DIR; };
28 | /* End PBXFileReference section */
29 |
30 | /* Begin PBXFrameworksBuildPhase section */
31 | 3E721AB71BF7255D008AF027 /* Frameworks */ = {
32 | isa = PBXFrameworksBuildPhase;
33 | buildActionMask = 2147483647;
34 | files = (
35 | );
36 | runOnlyForDeploymentPostprocessing = 0;
37 | };
38 | 6E7E40861C84B1A20030CEBB /* Frameworks */ = {
39 | isa = PBXFrameworksBuildPhase;
40 | buildActionMask = 2147483647;
41 | files = (
42 | );
43 | runOnlyForDeploymentPostprocessing = 0;
44 | };
45 | 6E7E40961C84B3790030CEBB /* Frameworks */ = {
46 | isa = PBXFrameworksBuildPhase;
47 | buildActionMask = 2147483647;
48 | files = (
49 | );
50 | runOnlyForDeploymentPostprocessing = 0;
51 | };
52 | 6E7E40A41C84B4240030CEBB /* Frameworks */ = {
53 | isa = PBXFrameworksBuildPhase;
54 | buildActionMask = 2147483647;
55 | files = (
56 | );
57 | runOnlyForDeploymentPostprocessing = 0;
58 | };
59 | /* End PBXFrameworksBuildPhase section */
60 |
61 | /* Begin PBXGroup section */
62 | 3E721AB11BF7255C008AF027 = {
63 | isa = PBXGroup;
64 | children = (
65 | 3E721ABD1BF7255D008AF027 /* SwiftyTimer */,
66 | 3E721ABC1BF7255D008AF027 /* Products */,
67 | );
68 | sourceTree = "";
69 | };
70 | 3E721ABC1BF7255D008AF027 /* Products */ = {
71 | isa = PBXGroup;
72 | children = (
73 | 3E721ABB1BF7255D008AF027 /* SwiftyTimer.framework */,
74 | 6E7E408A1C84B1A20030CEBB /* SwiftyTimer.framework */,
75 | 6E7E409A1C84B3790030CEBB /* SwiftyTimer.framework */,
76 | 6E7E40A81C84B4240030CEBB /* SwiftyTimer.framework */,
77 | );
78 | name = Products;
79 | sourceTree = "";
80 | };
81 | 3E721ABD1BF7255D008AF027 /* SwiftyTimer */ = {
82 | isa = PBXGroup;
83 | children = (
84 | 3E721AC61BF725A2008AF027 /* SwiftyTimer.swift */,
85 | 3E721AC01BF7255D008AF027 /* Info.plist */,
86 | 6E7E40921C84B2970030CEBB /* SwiftyTimer.h */,
87 | );
88 | name = SwiftyTimer;
89 | path = Sources;
90 | sourceTree = "";
91 | };
92 | /* End PBXGroup section */
93 |
94 | /* Begin PBXHeadersBuildPhase section */
95 | 3E721AB81BF7255D008AF027 /* Headers */ = {
96 | isa = PBXHeadersBuildPhase;
97 | buildActionMask = 2147483647;
98 | files = (
99 | 6E7E40931C84B2C60030CEBB /* SwiftyTimer.h in Headers */,
100 | );
101 | runOnlyForDeploymentPostprocessing = 0;
102 | };
103 | 6E7E40871C84B1A20030CEBB /* Headers */ = {
104 | isa = PBXHeadersBuildPhase;
105 | buildActionMask = 2147483647;
106 | files = (
107 | 6E7E40941C84B2C70030CEBB /* SwiftyTimer.h in Headers */,
108 | );
109 | runOnlyForDeploymentPostprocessing = 0;
110 | };
111 | 6E7E40971C84B3790030CEBB /* Headers */ = {
112 | isa = PBXHeadersBuildPhase;
113 | buildActionMask = 2147483647;
114 | files = (
115 | 6E7E40A21C84B3F40030CEBB /* SwiftyTimer.h in Headers */,
116 | );
117 | runOnlyForDeploymentPostprocessing = 0;
118 | };
119 | 6E7E40A51C84B4240030CEBB /* Headers */ = {
120 | isa = PBXHeadersBuildPhase;
121 | buildActionMask = 2147483647;
122 | files = (
123 | 6E7E40B01C84B43A0030CEBB /* SwiftyTimer.h in Headers */,
124 | );
125 | runOnlyForDeploymentPostprocessing = 0;
126 | };
127 | /* End PBXHeadersBuildPhase section */
128 |
129 | /* Begin PBXNativeTarget section */
130 | 3E721ABA1BF7255D008AF027 /* SwiftyTimer */ = {
131 | isa = PBXNativeTarget;
132 | buildConfigurationList = 3E721AC31BF7255D008AF027 /* Build configuration list for PBXNativeTarget "SwiftyTimer" */;
133 | buildPhases = (
134 | 3E721AB61BF7255D008AF027 /* Sources */,
135 | 3E721AB71BF7255D008AF027 /* Frameworks */,
136 | 3E721AB81BF7255D008AF027 /* Headers */,
137 | 3E721AB91BF7255D008AF027 /* Resources */,
138 | );
139 | buildRules = (
140 | );
141 | dependencies = (
142 | );
143 | name = SwiftyTimer;
144 | productName = SwiftyTimer;
145 | productReference = 3E721ABB1BF7255D008AF027 /* SwiftyTimer.framework */;
146 | productType = "com.apple.product-type.framework";
147 | };
148 | 6E7E40891C84B1A20030CEBB /* SwiftyTimer OS X */ = {
149 | isa = PBXNativeTarget;
150 | buildConfigurationList = 6E7E408F1C84B1A20030CEBB /* Build configuration list for PBXNativeTarget "SwiftyTimer OS X" */;
151 | buildPhases = (
152 | 6E7E40851C84B1A20030CEBB /* Sources */,
153 | 6E7E40861C84B1A20030CEBB /* Frameworks */,
154 | 6E7E40871C84B1A20030CEBB /* Headers */,
155 | 6E7E40881C84B1A20030CEBB /* Resources */,
156 | );
157 | buildRules = (
158 | );
159 | dependencies = (
160 | );
161 | name = "SwiftyTimer OS X";
162 | productName = SwiftyTimerMac;
163 | productReference = 6E7E408A1C84B1A20030CEBB /* SwiftyTimer.framework */;
164 | productType = "com.apple.product-type.framework";
165 | };
166 | 6E7E40991C84B3790030CEBB /* SwiftyTimer tvOS */ = {
167 | isa = PBXNativeTarget;
168 | buildConfigurationList = 6E7E409F1C84B3790030CEBB /* Build configuration list for PBXNativeTarget "SwiftyTimer tvOS" */;
169 | buildPhases = (
170 | 6E7E40951C84B3790030CEBB /* Sources */,
171 | 6E7E40961C84B3790030CEBB /* Frameworks */,
172 | 6E7E40971C84B3790030CEBB /* Headers */,
173 | 6E7E40981C84B3790030CEBB /* Resources */,
174 | );
175 | buildRules = (
176 | );
177 | dependencies = (
178 | );
179 | name = "SwiftyTimer tvOS";
180 | productName = "SwiftyTimer tvOS";
181 | productReference = 6E7E409A1C84B3790030CEBB /* SwiftyTimer.framework */;
182 | productType = "com.apple.product-type.framework";
183 | };
184 | 6E7E40A71C84B4240030CEBB /* SwiftyTimer watchOS */ = {
185 | isa = PBXNativeTarget;
186 | buildConfigurationList = 6E7E40AD1C84B4240030CEBB /* Build configuration list for PBXNativeTarget "SwiftyTimer watchOS" */;
187 | buildPhases = (
188 | 6E7E40A31C84B4240030CEBB /* Sources */,
189 | 6E7E40A41C84B4240030CEBB /* Frameworks */,
190 | 6E7E40A51C84B4240030CEBB /* Headers */,
191 | 6E7E40A61C84B4240030CEBB /* Resources */,
192 | );
193 | buildRules = (
194 | );
195 | dependencies = (
196 | );
197 | name = "SwiftyTimer watchOS";
198 | productName = "SwiftyTimer watchOS";
199 | productReference = 6E7E40A81C84B4240030CEBB /* SwiftyTimer.framework */;
200 | productType = "com.apple.product-type.framework";
201 | };
202 | /* End PBXNativeTarget section */
203 |
204 | /* Begin PBXProject section */
205 | 3E721AB21BF7255C008AF027 /* Project object */ = {
206 | isa = PBXProject;
207 | attributes = {
208 | LastUpgradeCheck = 1000;
209 | ORGANIZATIONNAME = "Radosław Pietruszewski";
210 | TargetAttributes = {
211 | 3E721ABA1BF7255D008AF027 = {
212 | CreatedOnToolsVersion = 7.1;
213 | LastSwiftMigration = 0800;
214 | };
215 | 6E7E40891C84B1A20030CEBB = {
216 | CreatedOnToolsVersion = 7.2;
217 | };
218 | 6E7E40991C84B3790030CEBB = {
219 | CreatedOnToolsVersion = 7.2;
220 | };
221 | 6E7E40A71C84B4240030CEBB = {
222 | CreatedOnToolsVersion = 7.2;
223 | };
224 | };
225 | };
226 | buildConfigurationList = 3E721AB51BF7255C008AF027 /* Build configuration list for PBXProject "SwiftyTimer" */;
227 | compatibilityVersion = "Xcode 3.2";
228 | developmentRegion = English;
229 | hasScannedForEncodings = 0;
230 | knownRegions = (
231 | en,
232 | );
233 | mainGroup = 3E721AB11BF7255C008AF027;
234 | productRefGroup = 3E721ABC1BF7255D008AF027 /* Products */;
235 | projectDirPath = "";
236 | projectRoot = "";
237 | targets = (
238 | 3E721ABA1BF7255D008AF027 /* SwiftyTimer */,
239 | 6E7E40891C84B1A20030CEBB /* SwiftyTimer OS X */,
240 | 6E7E40991C84B3790030CEBB /* SwiftyTimer tvOS */,
241 | 6E7E40A71C84B4240030CEBB /* SwiftyTimer watchOS */,
242 | );
243 | };
244 | /* End PBXProject section */
245 |
246 | /* Begin PBXResourcesBuildPhase section */
247 | 3E721AB91BF7255D008AF027 /* Resources */ = {
248 | isa = PBXResourcesBuildPhase;
249 | buildActionMask = 2147483647;
250 | files = (
251 | );
252 | runOnlyForDeploymentPostprocessing = 0;
253 | };
254 | 6E7E40881C84B1A20030CEBB /* Resources */ = {
255 | isa = PBXResourcesBuildPhase;
256 | buildActionMask = 2147483647;
257 | files = (
258 | );
259 | runOnlyForDeploymentPostprocessing = 0;
260 | };
261 | 6E7E40981C84B3790030CEBB /* Resources */ = {
262 | isa = PBXResourcesBuildPhase;
263 | buildActionMask = 2147483647;
264 | files = (
265 | );
266 | runOnlyForDeploymentPostprocessing = 0;
267 | };
268 | 6E7E40A61C84B4240030CEBB /* Resources */ = {
269 | isa = PBXResourcesBuildPhase;
270 | buildActionMask = 2147483647;
271 | files = (
272 | );
273 | runOnlyForDeploymentPostprocessing = 0;
274 | };
275 | /* End PBXResourcesBuildPhase section */
276 |
277 | /* Begin PBXSourcesBuildPhase section */
278 | 3E721AB61BF7255D008AF027 /* Sources */ = {
279 | isa = PBXSourcesBuildPhase;
280 | buildActionMask = 2147483647;
281 | files = (
282 | 3E721AC71BF725A2008AF027 /* SwiftyTimer.swift in Sources */,
283 | );
284 | runOnlyForDeploymentPostprocessing = 0;
285 | };
286 | 6E7E40851C84B1A20030CEBB /* Sources */ = {
287 | isa = PBXSourcesBuildPhase;
288 | buildActionMask = 2147483647;
289 | files = (
290 | 6E7E40B11C84B4B40030CEBB /* SwiftyTimer.swift in Sources */,
291 | );
292 | runOnlyForDeploymentPostprocessing = 0;
293 | };
294 | 6E7E40951C84B3790030CEBB /* Sources */ = {
295 | isa = PBXSourcesBuildPhase;
296 | buildActionMask = 2147483647;
297 | files = (
298 | 6E7E40B21C84B4B40030CEBB /* SwiftyTimer.swift in Sources */,
299 | );
300 | runOnlyForDeploymentPostprocessing = 0;
301 | };
302 | 6E7E40A31C84B4240030CEBB /* Sources */ = {
303 | isa = PBXSourcesBuildPhase;
304 | buildActionMask = 2147483647;
305 | files = (
306 | 6E7E40B31C84B4B40030CEBB /* SwiftyTimer.swift in Sources */,
307 | );
308 | runOnlyForDeploymentPostprocessing = 0;
309 | };
310 | /* End PBXSourcesBuildPhase section */
311 |
312 | /* Begin XCBuildConfiguration section */
313 | 3E721AC11BF7255D008AF027 /* Debug */ = {
314 | isa = XCBuildConfiguration;
315 | buildSettings = {
316 | ALWAYS_SEARCH_USER_PATHS = NO;
317 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
318 | CLANG_CXX_LIBRARY = "libc++";
319 | CLANG_ENABLE_MODULES = YES;
320 | CLANG_ENABLE_OBJC_ARC = YES;
321 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
322 | CLANG_WARN_BOOL_CONVERSION = YES;
323 | CLANG_WARN_COMMA = YES;
324 | CLANG_WARN_CONSTANT_CONVERSION = YES;
325 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
326 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
327 | CLANG_WARN_EMPTY_BODY = YES;
328 | CLANG_WARN_ENUM_CONVERSION = YES;
329 | CLANG_WARN_INFINITE_RECURSION = YES;
330 | CLANG_WARN_INT_CONVERSION = YES;
331 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
332 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
333 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
334 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
335 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
336 | CLANG_WARN_STRICT_PROTOTYPES = YES;
337 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
338 | CLANG_WARN_UNREACHABLE_CODE = YES;
339 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
340 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
341 | COPY_PHASE_STRIP = NO;
342 | CURRENT_PROJECT_VERSION = 1;
343 | DEBUG_INFORMATION_FORMAT = dwarf;
344 | ENABLE_STRICT_OBJC_MSGSEND = YES;
345 | ENABLE_TESTABILITY = YES;
346 | GCC_C_LANGUAGE_STANDARD = gnu99;
347 | GCC_DYNAMIC_NO_PIC = NO;
348 | GCC_NO_COMMON_BLOCKS = YES;
349 | GCC_OPTIMIZATION_LEVEL = 0;
350 | GCC_PREPROCESSOR_DEFINITIONS = (
351 | "DEBUG=1",
352 | "$(inherited)",
353 | );
354 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
355 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
356 | GCC_WARN_UNDECLARED_SELECTOR = YES;
357 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
358 | GCC_WARN_UNUSED_FUNCTION = YES;
359 | GCC_WARN_UNUSED_VARIABLE = YES;
360 | IPHONEOS_DEPLOYMENT_TARGET = 8.0;
361 | MACOSX_DEPLOYMENT_TARGET = 10.9;
362 | MTL_ENABLE_DEBUG_INFO = YES;
363 | ONLY_ACTIVE_ARCH = YES;
364 | SDKROOT = iphoneos;
365 | SWIFT_OPTIMIZATION_LEVEL = "-Onone";
366 | SWIFT_VERSION = 4.2;
367 | TARGETED_DEVICE_FAMILY = "1,2";
368 | VERSIONING_SYSTEM = "apple-generic";
369 | VERSION_INFO_PREFIX = "";
370 | };
371 | name = Debug;
372 | };
373 | 3E721AC21BF7255D008AF027 /* Release */ = {
374 | isa = XCBuildConfiguration;
375 | buildSettings = {
376 | ALWAYS_SEARCH_USER_PATHS = NO;
377 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
378 | CLANG_CXX_LIBRARY = "libc++";
379 | CLANG_ENABLE_MODULES = YES;
380 | CLANG_ENABLE_OBJC_ARC = YES;
381 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
382 | CLANG_WARN_BOOL_CONVERSION = YES;
383 | CLANG_WARN_COMMA = YES;
384 | CLANG_WARN_CONSTANT_CONVERSION = YES;
385 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
386 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
387 | CLANG_WARN_EMPTY_BODY = YES;
388 | CLANG_WARN_ENUM_CONVERSION = YES;
389 | CLANG_WARN_INFINITE_RECURSION = YES;
390 | CLANG_WARN_INT_CONVERSION = YES;
391 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
392 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
393 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
394 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
395 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
396 | CLANG_WARN_STRICT_PROTOTYPES = YES;
397 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
398 | CLANG_WARN_UNREACHABLE_CODE = YES;
399 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
400 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
401 | COPY_PHASE_STRIP = NO;
402 | CURRENT_PROJECT_VERSION = 1;
403 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
404 | ENABLE_NS_ASSERTIONS = NO;
405 | ENABLE_STRICT_OBJC_MSGSEND = YES;
406 | GCC_C_LANGUAGE_STANDARD = gnu99;
407 | GCC_NO_COMMON_BLOCKS = YES;
408 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
409 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
410 | GCC_WARN_UNDECLARED_SELECTOR = YES;
411 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
412 | GCC_WARN_UNUSED_FUNCTION = YES;
413 | GCC_WARN_UNUSED_VARIABLE = YES;
414 | IPHONEOS_DEPLOYMENT_TARGET = 8.0;
415 | MACOSX_DEPLOYMENT_TARGET = 10.9;
416 | MTL_ENABLE_DEBUG_INFO = NO;
417 | SDKROOT = iphoneos;
418 | SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
419 | SWIFT_VERSION = 4.2;
420 | TARGETED_DEVICE_FAMILY = "1,2";
421 | VALIDATE_PRODUCT = YES;
422 | VERSIONING_SYSTEM = "apple-generic";
423 | VERSION_INFO_PREFIX = "";
424 | };
425 | name = Release;
426 | };
427 | 3E721AC41BF7255D008AF027 /* Debug */ = {
428 | isa = XCBuildConfiguration;
429 | buildSettings = {
430 | APPLICATION_EXTENSION_API_ONLY = YES;
431 | CLANG_ENABLE_MODULES = YES;
432 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
433 | DEFINES_MODULE = YES;
434 | DYLIB_COMPATIBILITY_VERSION = 1;
435 | DYLIB_CURRENT_VERSION = 1;
436 | DYLIB_INSTALL_NAME_BASE = "@rpath";
437 | INFOPLIST_FILE = Sources/Info.plist;
438 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
439 | IPHONEOS_DEPLOYMENT_TARGET = 8.0;
440 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
441 | PRODUCT_BUNDLE_IDENTIFIER = io.radex.SwiftyTimer;
442 | PRODUCT_NAME = "$(TARGET_NAME)";
443 | SKIP_INSTALL = YES;
444 | SWIFT_VERSION = 4.2;
445 | };
446 | name = Debug;
447 | };
448 | 3E721AC51BF7255D008AF027 /* Release */ = {
449 | isa = XCBuildConfiguration;
450 | buildSettings = {
451 | APPLICATION_EXTENSION_API_ONLY = YES;
452 | CLANG_ENABLE_MODULES = YES;
453 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
454 | DEFINES_MODULE = YES;
455 | DYLIB_COMPATIBILITY_VERSION = 1;
456 | DYLIB_CURRENT_VERSION = 1;
457 | DYLIB_INSTALL_NAME_BASE = "@rpath";
458 | INFOPLIST_FILE = Sources/Info.plist;
459 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
460 | IPHONEOS_DEPLOYMENT_TARGET = 8.0;
461 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
462 | PRODUCT_BUNDLE_IDENTIFIER = io.radex.SwiftyTimer;
463 | PRODUCT_NAME = "$(TARGET_NAME)";
464 | SKIP_INSTALL = YES;
465 | SWIFT_VERSION = 4.2;
466 | };
467 | name = Release;
468 | };
469 | 6E7E40901C84B1A20030CEBB /* Debug */ = {
470 | isa = XCBuildConfiguration;
471 | buildSettings = {
472 | APPLICATION_EXTENSION_API_ONLY = YES;
473 | CODE_SIGN_IDENTITY = "";
474 | COMBINE_HIDPI_IMAGES = YES;
475 | DEFINES_MODULE = YES;
476 | DYLIB_COMPATIBILITY_VERSION = 1;
477 | DYLIB_CURRENT_VERSION = 1;
478 | DYLIB_INSTALL_NAME_BASE = "@rpath";
479 | FRAMEWORK_VERSION = A;
480 | INFOPLIST_FILE = Sources/Info.plist;
481 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
482 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks";
483 | MACOSX_DEPLOYMENT_TARGET = 10.9;
484 | PRODUCT_BUNDLE_IDENTIFIER = io.radex.SwiftyTimer;
485 | PRODUCT_NAME = SwiftyTimer;
486 | SDKROOT = macosx;
487 | SKIP_INSTALL = YES;
488 | SWIFT_VERSION = 4.2;
489 | };
490 | name = Debug;
491 | };
492 | 6E7E40911C84B1A20030CEBB /* Release */ = {
493 | isa = XCBuildConfiguration;
494 | buildSettings = {
495 | APPLICATION_EXTENSION_API_ONLY = YES;
496 | CODE_SIGN_IDENTITY = "";
497 | COMBINE_HIDPI_IMAGES = YES;
498 | DEFINES_MODULE = YES;
499 | DYLIB_COMPATIBILITY_VERSION = 1;
500 | DYLIB_CURRENT_VERSION = 1;
501 | DYLIB_INSTALL_NAME_BASE = "@rpath";
502 | FRAMEWORK_VERSION = A;
503 | INFOPLIST_FILE = Sources/Info.plist;
504 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
505 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks";
506 | MACOSX_DEPLOYMENT_TARGET = 10.9;
507 | PRODUCT_BUNDLE_IDENTIFIER = io.radex.SwiftyTimer;
508 | PRODUCT_NAME = SwiftyTimer;
509 | SDKROOT = macosx;
510 | SKIP_INSTALL = YES;
511 | SWIFT_VERSION = 4.2;
512 | };
513 | name = Release;
514 | };
515 | 6E7E40A01C84B3790030CEBB /* Debug */ = {
516 | isa = XCBuildConfiguration;
517 | buildSettings = {
518 | APPLICATION_EXTENSION_API_ONLY = YES;
519 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = "";
520 | DEFINES_MODULE = YES;
521 | DYLIB_COMPATIBILITY_VERSION = 1;
522 | DYLIB_CURRENT_VERSION = 1;
523 | DYLIB_INSTALL_NAME_BASE = "@rpath";
524 | INFOPLIST_FILE = Sources/Info.plist;
525 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
526 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
527 | PRODUCT_BUNDLE_IDENTIFIER = io.radex.SwiftyTimer;
528 | PRODUCT_NAME = SwiftyTimer;
529 | SDKROOT = appletvos;
530 | SKIP_INSTALL = YES;
531 | SWIFT_VERSION = 4.2;
532 | TARGETED_DEVICE_FAMILY = 3;
533 | TVOS_DEPLOYMENT_TARGET = 9.0;
534 | };
535 | name = Debug;
536 | };
537 | 6E7E40A11C84B3790030CEBB /* Release */ = {
538 | isa = XCBuildConfiguration;
539 | buildSettings = {
540 | APPLICATION_EXTENSION_API_ONLY = YES;
541 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = "";
542 | DEFINES_MODULE = YES;
543 | DYLIB_COMPATIBILITY_VERSION = 1;
544 | DYLIB_CURRENT_VERSION = 1;
545 | DYLIB_INSTALL_NAME_BASE = "@rpath";
546 | INFOPLIST_FILE = Sources/Info.plist;
547 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
548 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
549 | PRODUCT_BUNDLE_IDENTIFIER = io.radex.SwiftyTimer;
550 | PRODUCT_NAME = SwiftyTimer;
551 | SDKROOT = appletvos;
552 | SKIP_INSTALL = YES;
553 | SWIFT_VERSION = 4.2;
554 | TARGETED_DEVICE_FAMILY = 3;
555 | TVOS_DEPLOYMENT_TARGET = 9.0;
556 | };
557 | name = Release;
558 | };
559 | 6E7E40AE1C84B4240030CEBB /* Debug */ = {
560 | isa = XCBuildConfiguration;
561 | buildSettings = {
562 | APPLICATION_EXTENSION_API_ONLY = YES;
563 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = "";
564 | DEFINES_MODULE = YES;
565 | DYLIB_COMPATIBILITY_VERSION = 1;
566 | DYLIB_CURRENT_VERSION = 1;
567 | DYLIB_INSTALL_NAME_BASE = "@rpath";
568 | INFOPLIST_FILE = Sources/Info.plist;
569 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
570 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
571 | PRODUCT_BUNDLE_IDENTIFIER = io.radex.SwiftyTimer;
572 | PRODUCT_NAME = SwiftyTimer;
573 | SDKROOT = watchos;
574 | SKIP_INSTALL = YES;
575 | SWIFT_VERSION = 4.2;
576 | TARGETED_DEVICE_FAMILY = 4;
577 | WATCHOS_DEPLOYMENT_TARGET = 2.0;
578 | };
579 | name = Debug;
580 | };
581 | 6E7E40AF1C84B4240030CEBB /* Release */ = {
582 | isa = XCBuildConfiguration;
583 | buildSettings = {
584 | APPLICATION_EXTENSION_API_ONLY = YES;
585 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = "";
586 | DEFINES_MODULE = YES;
587 | DYLIB_COMPATIBILITY_VERSION = 1;
588 | DYLIB_CURRENT_VERSION = 1;
589 | DYLIB_INSTALL_NAME_BASE = "@rpath";
590 | INFOPLIST_FILE = Sources/Info.plist;
591 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
592 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
593 | PRODUCT_BUNDLE_IDENTIFIER = io.radex.SwiftyTimer;
594 | PRODUCT_NAME = SwiftyTimer;
595 | SDKROOT = watchos;
596 | SKIP_INSTALL = YES;
597 | SWIFT_VERSION = 4.2;
598 | TARGETED_DEVICE_FAMILY = 4;
599 | WATCHOS_DEPLOYMENT_TARGET = 2.0;
600 | };
601 | name = Release;
602 | };
603 | /* End XCBuildConfiguration section */
604 |
605 | /* Begin XCConfigurationList section */
606 | 3E721AB51BF7255C008AF027 /* Build configuration list for PBXProject "SwiftyTimer" */ = {
607 | isa = XCConfigurationList;
608 | buildConfigurations = (
609 | 3E721AC11BF7255D008AF027 /* Debug */,
610 | 3E721AC21BF7255D008AF027 /* Release */,
611 | );
612 | defaultConfigurationIsVisible = 0;
613 | defaultConfigurationName = Release;
614 | };
615 | 3E721AC31BF7255D008AF027 /* Build configuration list for PBXNativeTarget "SwiftyTimer" */ = {
616 | isa = XCConfigurationList;
617 | buildConfigurations = (
618 | 3E721AC41BF7255D008AF027 /* Debug */,
619 | 3E721AC51BF7255D008AF027 /* Release */,
620 | );
621 | defaultConfigurationIsVisible = 0;
622 | defaultConfigurationName = Release;
623 | };
624 | 6E7E408F1C84B1A20030CEBB /* Build configuration list for PBXNativeTarget "SwiftyTimer OS X" */ = {
625 | isa = XCConfigurationList;
626 | buildConfigurations = (
627 | 6E7E40901C84B1A20030CEBB /* Debug */,
628 | 6E7E40911C84B1A20030CEBB /* Release */,
629 | );
630 | defaultConfigurationIsVisible = 0;
631 | defaultConfigurationName = Release;
632 | };
633 | 6E7E409F1C84B3790030CEBB /* Build configuration list for PBXNativeTarget "SwiftyTimer tvOS" */ = {
634 | isa = XCConfigurationList;
635 | buildConfigurations = (
636 | 6E7E40A01C84B3790030CEBB /* Debug */,
637 | 6E7E40A11C84B3790030CEBB /* Release */,
638 | );
639 | defaultConfigurationIsVisible = 0;
640 | defaultConfigurationName = Release;
641 | };
642 | 6E7E40AD1C84B4240030CEBB /* Build configuration list for PBXNativeTarget "SwiftyTimer watchOS" */ = {
643 | isa = XCConfigurationList;
644 | buildConfigurations = (
645 | 6E7E40AE1C84B4240030CEBB /* Debug */,
646 | 6E7E40AF1C84B4240030CEBB /* Release */,
647 | );
648 | defaultConfigurationIsVisible = 0;
649 | defaultConfigurationName = Release;
650 | };
651 | /* End XCConfigurationList section */
652 | };
653 | rootObject = 3E721AB21BF7255C008AF027 /* Project object */;
654 | }
655 |
--------------------------------------------------------------------------------
/SwiftyTimer.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/SwiftyTimer.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/SwiftyTimer.xcodeproj/xcshareddata/xcschemes/SwiftyTimer OS X.xcscheme:
--------------------------------------------------------------------------------
1 |
2 |
5 |
8 |
9 |
15 |
21 |
22 |
23 |
24 |
25 |
30 |
31 |
32 |
33 |
34 |
35 |
45 |
46 |
52 |
53 |
54 |
55 |
56 |
57 |
63 |
64 |
70 |
71 |
72 |
73 |
75 |
76 |
79 |
80 |
81 |
--------------------------------------------------------------------------------
/SwiftyTimer.xcodeproj/xcshareddata/xcschemes/SwiftyTimer tvOS.xcscheme:
--------------------------------------------------------------------------------
1 |
2 |
5 |
8 |
9 |
15 |
21 |
22 |
23 |
24 |
25 |
30 |
31 |
32 |
33 |
34 |
35 |
45 |
46 |
52 |
53 |
54 |
55 |
56 |
57 |
63 |
64 |
70 |
71 |
72 |
73 |
75 |
76 |
79 |
80 |
81 |
--------------------------------------------------------------------------------
/SwiftyTimer.xcodeproj/xcshareddata/xcschemes/SwiftyTimer watchOS.xcscheme:
--------------------------------------------------------------------------------
1 |
2 |
5 |
8 |
9 |
15 |
21 |
22 |
23 |
24 |
25 |
30 |
31 |
32 |
33 |
34 |
35 |
45 |
46 |
52 |
53 |
54 |
55 |
56 |
57 |
63 |
64 |
70 |
71 |
72 |
73 |
75 |
76 |
79 |
80 |
81 |
--------------------------------------------------------------------------------
/SwiftyTimer.xcodeproj/xcshareddata/xcschemes/SwiftyTimer.xcscheme:
--------------------------------------------------------------------------------
1 |
2 |
5 |
8 |
9 |
15 |
21 |
22 |
23 |
24 |
25 |
30 |
31 |
32 |
33 |
34 |
35 |
45 |
46 |
52 |
53 |
54 |
55 |
56 |
57 |
63 |
64 |
70 |
71 |
72 |
73 |
75 |
76 |
79 |
80 |
81 |
--------------------------------------------------------------------------------
/SwiftyTimerTests/SwiftyTimerTests.xcodeproj/project.pbxproj:
--------------------------------------------------------------------------------
1 | // !$*UTF8*$!
2 | {
3 | archiveVersion = 1;
4 | classes = {
5 | };
6 | objectVersion = 46;
7 | objects = {
8 |
9 | /* Begin PBXBuildFile section */
10 | 6EE9C1591B00BB5B00D6B91C /* main.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6EE9C1581B00BB5B00D6B91C /* main.swift */; };
11 | 6EE9C1741B00BBB700D6B91C /* SwiftyTimer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6EE9C1731B00BBB700D6B91C /* SwiftyTimer.swift */; };
12 | /* End PBXBuildFile section */
13 |
14 | /* Begin PBXFileReference section */
15 | 6EE9C1531B00BB5B00D6B91C /* SwiftyTimerTests.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = SwiftyTimerTests.app; sourceTree = BUILT_PRODUCTS_DIR; };
16 | 6EE9C1571B00BB5B00D6B91C /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
17 | 6EE9C1581B00BB5B00D6B91C /* main.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = main.swift; sourceTree = ""; };
18 | 6EE9C1731B00BBB700D6B91C /* SwiftyTimer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = SwiftyTimer.swift; path = ../../Sources/SwiftyTimer.swift; sourceTree = ""; };
19 | /* End PBXFileReference section */
20 |
21 | /* Begin PBXFrameworksBuildPhase section */
22 | 6EE9C1501B00BB5B00D6B91C /* Frameworks */ = {
23 | isa = PBXFrameworksBuildPhase;
24 | buildActionMask = 2147483647;
25 | files = (
26 | );
27 | runOnlyForDeploymentPostprocessing = 0;
28 | };
29 | /* End PBXFrameworksBuildPhase section */
30 |
31 | /* Begin PBXGroup section */
32 | 6EE9C14A1B00BB5B00D6B91C = {
33 | isa = PBXGroup;
34 | children = (
35 | 6EE9C1551B00BB5B00D6B91C /* SwiftyTimerTests */,
36 | 6EE9C1541B00BB5B00D6B91C /* Products */,
37 | );
38 | sourceTree = "";
39 | };
40 | 6EE9C1541B00BB5B00D6B91C /* Products */ = {
41 | isa = PBXGroup;
42 | children = (
43 | 6EE9C1531B00BB5B00D6B91C /* SwiftyTimerTests.app */,
44 | );
45 | name = Products;
46 | sourceTree = "";
47 | };
48 | 6EE9C1551B00BB5B00D6B91C /* SwiftyTimerTests */ = {
49 | isa = PBXGroup;
50 | children = (
51 | 6EE9C1731B00BBB700D6B91C /* SwiftyTimer.swift */,
52 | 6EE9C1581B00BB5B00D6B91C /* main.swift */,
53 | 6EE9C1561B00BB5B00D6B91C /* Supporting Files */,
54 | );
55 | path = SwiftyTimerTests;
56 | sourceTree = "";
57 | };
58 | 6EE9C1561B00BB5B00D6B91C /* Supporting Files */ = {
59 | isa = PBXGroup;
60 | children = (
61 | 6EE9C1571B00BB5B00D6B91C /* Info.plist */,
62 | );
63 | name = "Supporting Files";
64 | sourceTree = "";
65 | };
66 | /* End PBXGroup section */
67 |
68 | /* Begin PBXNativeTarget section */
69 | 6EE9C1521B00BB5B00D6B91C /* SwiftyTimerTests */ = {
70 | isa = PBXNativeTarget;
71 | buildConfigurationList = 6EE9C16D1B00BB5B00D6B91C /* Build configuration list for PBXNativeTarget "SwiftyTimerTests" */;
72 | buildPhases = (
73 | 6EE9C14F1B00BB5B00D6B91C /* Sources */,
74 | 6EE9C1501B00BB5B00D6B91C /* Frameworks */,
75 | 6EE9C1511B00BB5B00D6B91C /* Resources */,
76 | );
77 | buildRules = (
78 | );
79 | dependencies = (
80 | );
81 | name = SwiftyTimerTests;
82 | productName = SwiftyTimerTests;
83 | productReference = 6EE9C1531B00BB5B00D6B91C /* SwiftyTimerTests.app */;
84 | productType = "com.apple.product-type.application";
85 | };
86 | /* End PBXNativeTarget section */
87 |
88 | /* Begin PBXProject section */
89 | 6EE9C14B1B00BB5B00D6B91C /* Project object */ = {
90 | isa = PBXProject;
91 | attributes = {
92 | LastSwiftUpdateCheck = 0700;
93 | LastUpgradeCheck = 1000;
94 | TargetAttributes = {
95 | 6EE9C1521B00BB5B00D6B91C = {
96 | CreatedOnToolsVersion = 6.4;
97 | LastSwiftMigration = 0800;
98 | };
99 | };
100 | };
101 | buildConfigurationList = 6EE9C14E1B00BB5B00D6B91C /* Build configuration list for PBXProject "SwiftyTimerTests" */;
102 | compatibilityVersion = "Xcode 3.2";
103 | developmentRegion = English;
104 | hasScannedForEncodings = 0;
105 | knownRegions = (
106 | en,
107 | Base,
108 | );
109 | mainGroup = 6EE9C14A1B00BB5B00D6B91C;
110 | productRefGroup = 6EE9C1541B00BB5B00D6B91C /* Products */;
111 | projectDirPath = "";
112 | projectRoot = "";
113 | targets = (
114 | 6EE9C1521B00BB5B00D6B91C /* SwiftyTimerTests */,
115 | );
116 | };
117 | /* End PBXProject section */
118 |
119 | /* Begin PBXResourcesBuildPhase section */
120 | 6EE9C1511B00BB5B00D6B91C /* Resources */ = {
121 | isa = PBXResourcesBuildPhase;
122 | buildActionMask = 2147483647;
123 | files = (
124 | );
125 | runOnlyForDeploymentPostprocessing = 0;
126 | };
127 | /* End PBXResourcesBuildPhase section */
128 |
129 | /* Begin PBXSourcesBuildPhase section */
130 | 6EE9C14F1B00BB5B00D6B91C /* Sources */ = {
131 | isa = PBXSourcesBuildPhase;
132 | buildActionMask = 2147483647;
133 | files = (
134 | 6EE9C1591B00BB5B00D6B91C /* main.swift in Sources */,
135 | 6EE9C1741B00BBB700D6B91C /* SwiftyTimer.swift in Sources */,
136 | );
137 | runOnlyForDeploymentPostprocessing = 0;
138 | };
139 | /* End PBXSourcesBuildPhase section */
140 |
141 | /* Begin XCBuildConfiguration section */
142 | 6EE9C16B1B00BB5B00D6B91C /* Debug */ = {
143 | isa = XCBuildConfiguration;
144 | buildSettings = {
145 | ALWAYS_SEARCH_USER_PATHS = NO;
146 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
147 | CLANG_CXX_LIBRARY = "libc++";
148 | CLANG_ENABLE_MODULES = YES;
149 | CLANG_ENABLE_OBJC_ARC = YES;
150 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
151 | CLANG_WARN_BOOL_CONVERSION = YES;
152 | CLANG_WARN_COMMA = YES;
153 | CLANG_WARN_CONSTANT_CONVERSION = YES;
154 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
155 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
156 | CLANG_WARN_EMPTY_BODY = YES;
157 | CLANG_WARN_ENUM_CONVERSION = YES;
158 | CLANG_WARN_INFINITE_RECURSION = YES;
159 | CLANG_WARN_INT_CONVERSION = YES;
160 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
161 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
162 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
163 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
164 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
165 | CLANG_WARN_STRICT_PROTOTYPES = YES;
166 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
167 | CLANG_WARN_UNREACHABLE_CODE = YES;
168 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
169 | CODE_SIGN_IDENTITY = "-";
170 | COPY_PHASE_STRIP = NO;
171 | DEBUG_INFORMATION_FORMAT = dwarf;
172 | ENABLE_STRICT_OBJC_MSGSEND = YES;
173 | ENABLE_TESTABILITY = YES;
174 | GCC_C_LANGUAGE_STANDARD = gnu99;
175 | GCC_DYNAMIC_NO_PIC = NO;
176 | GCC_NO_COMMON_BLOCKS = YES;
177 | GCC_OPTIMIZATION_LEVEL = 0;
178 | GCC_PREPROCESSOR_DEFINITIONS = (
179 | "DEBUG=1",
180 | "$(inherited)",
181 | );
182 | GCC_SYMBOLS_PRIVATE_EXTERN = NO;
183 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
184 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
185 | GCC_WARN_UNDECLARED_SELECTOR = YES;
186 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
187 | GCC_WARN_UNUSED_FUNCTION = YES;
188 | GCC_WARN_UNUSED_VARIABLE = YES;
189 | MACOSX_DEPLOYMENT_TARGET = 10.10;
190 | MTL_ENABLE_DEBUG_INFO = YES;
191 | ONLY_ACTIVE_ARCH = YES;
192 | SDKROOT = macosx;
193 | SWIFT_OPTIMIZATION_LEVEL = "-Onone";
194 | SWIFT_VERSION = 4.2;
195 | };
196 | name = Debug;
197 | };
198 | 6EE9C16C1B00BB5B00D6B91C /* Release */ = {
199 | isa = XCBuildConfiguration;
200 | buildSettings = {
201 | ALWAYS_SEARCH_USER_PATHS = NO;
202 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
203 | CLANG_CXX_LIBRARY = "libc++";
204 | CLANG_ENABLE_MODULES = YES;
205 | CLANG_ENABLE_OBJC_ARC = YES;
206 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
207 | CLANG_WARN_BOOL_CONVERSION = YES;
208 | CLANG_WARN_COMMA = YES;
209 | CLANG_WARN_CONSTANT_CONVERSION = YES;
210 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
211 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
212 | CLANG_WARN_EMPTY_BODY = YES;
213 | CLANG_WARN_ENUM_CONVERSION = YES;
214 | CLANG_WARN_INFINITE_RECURSION = YES;
215 | CLANG_WARN_INT_CONVERSION = YES;
216 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
217 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
218 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
219 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
220 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
221 | CLANG_WARN_STRICT_PROTOTYPES = YES;
222 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
223 | CLANG_WARN_UNREACHABLE_CODE = YES;
224 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
225 | CODE_SIGN_IDENTITY = "-";
226 | COPY_PHASE_STRIP = NO;
227 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
228 | ENABLE_NS_ASSERTIONS = NO;
229 | ENABLE_STRICT_OBJC_MSGSEND = YES;
230 | GCC_C_LANGUAGE_STANDARD = gnu99;
231 | GCC_NO_COMMON_BLOCKS = YES;
232 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
233 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
234 | GCC_WARN_UNDECLARED_SELECTOR = YES;
235 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
236 | GCC_WARN_UNUSED_FUNCTION = YES;
237 | GCC_WARN_UNUSED_VARIABLE = YES;
238 | MACOSX_DEPLOYMENT_TARGET = 10.10;
239 | MTL_ENABLE_DEBUG_INFO = NO;
240 | SDKROOT = macosx;
241 | SWIFT_VERSION = 4.2;
242 | };
243 | name = Release;
244 | };
245 | 6EE9C16E1B00BB5B00D6B91C /* Debug */ = {
246 | isa = XCBuildConfiguration;
247 | buildSettings = {
248 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
249 | COMBINE_HIDPI_IMAGES = YES;
250 | INFOPLIST_FILE = SwiftyTimerTests/Info.plist;
251 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks";
252 | PRODUCT_BUNDLE_IDENTIFIER = "radex.$(PRODUCT_NAME:rfc1034identifier)";
253 | PRODUCT_NAME = "$(TARGET_NAME)";
254 | SWIFT_VERSION = 4.2;
255 | };
256 | name = Debug;
257 | };
258 | 6EE9C16F1B00BB5B00D6B91C /* Release */ = {
259 | isa = XCBuildConfiguration;
260 | buildSettings = {
261 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
262 | COMBINE_HIDPI_IMAGES = YES;
263 | INFOPLIST_FILE = SwiftyTimerTests/Info.plist;
264 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks";
265 | PRODUCT_BUNDLE_IDENTIFIER = "radex.$(PRODUCT_NAME:rfc1034identifier)";
266 | PRODUCT_NAME = "$(TARGET_NAME)";
267 | SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
268 | SWIFT_VERSION = 4.2;
269 | };
270 | name = Release;
271 | };
272 | /* End XCBuildConfiguration section */
273 |
274 | /* Begin XCConfigurationList section */
275 | 6EE9C14E1B00BB5B00D6B91C /* Build configuration list for PBXProject "SwiftyTimerTests" */ = {
276 | isa = XCConfigurationList;
277 | buildConfigurations = (
278 | 6EE9C16B1B00BB5B00D6B91C /* Debug */,
279 | 6EE9C16C1B00BB5B00D6B91C /* Release */,
280 | );
281 | defaultConfigurationIsVisible = 0;
282 | defaultConfigurationName = Release;
283 | };
284 | 6EE9C16D1B00BB5B00D6B91C /* Build configuration list for PBXNativeTarget "SwiftyTimerTests" */ = {
285 | isa = XCConfigurationList;
286 | buildConfigurations = (
287 | 6EE9C16E1B00BB5B00D6B91C /* Debug */,
288 | 6EE9C16F1B00BB5B00D6B91C /* Release */,
289 | );
290 | defaultConfigurationIsVisible = 0;
291 | defaultConfigurationName = Release;
292 | };
293 | /* End XCConfigurationList section */
294 | };
295 | rootObject = 6EE9C14B1B00BB5B00D6B91C /* Project object */;
296 | }
297 |
--------------------------------------------------------------------------------
/SwiftyTimerTests/SwiftyTimerTests.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/SwiftyTimerTests/SwiftyTimerTests.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/SwiftyTimerTests/SwiftyTimerTests.xcodeproj/xcshareddata/xcschemes/SwiftyTimerTests.xcscheme:
--------------------------------------------------------------------------------
1 |
2 |
5 |
8 |
9 |
15 |
21 |
22 |
23 |
29 |
35 |
36 |
37 |
38 |
39 |
44 |
45 |
47 |
53 |
54 |
55 |
56 |
57 |
63 |
64 |
65 |
66 |
67 |
68 |
78 |
80 |
86 |
87 |
88 |
89 |
90 |
91 |
97 |
99 |
105 |
106 |
107 |
108 |
110 |
111 |
114 |
115 |
116 |
--------------------------------------------------------------------------------
/SwiftyTimerTests/SwiftyTimerTests/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIconFile
10 |
11 | CFBundleIdentifier
12 | $(PRODUCT_BUNDLE_IDENTIFIER)
13 | CFBundleInfoDictionaryVersion
14 | 6.0
15 | CFBundleName
16 | $(PRODUCT_NAME)
17 | CFBundlePackageType
18 | APPL
19 | CFBundleShortVersionString
20 | 1.0
21 | CFBundleSignature
22 | ????
23 | CFBundleVersion
24 | 1
25 | LSMinimumSystemVersion
26 | $(MACOSX_DEPLOYMENT_TARGET)
27 | NSPrincipalClass
28 | NSApplication
29 |
30 |
31 |
--------------------------------------------------------------------------------
/SwiftyTimerTests/SwiftyTimerTests/main.swift:
--------------------------------------------------------------------------------
1 | import Cocoa
2 |
3 | let app = NSApplication.shared
4 |
5 | class AppDelegate: NSObject, NSApplicationDelegate {
6 | func applicationDidFinishLaunching(_ aNotification: Notification) {
7 | test()
8 | }
9 |
10 | func test() {
11 | assert(1.second == 1.0)
12 | assert(1.minute == 60.0)
13 | assert(1.hour == 1.minute * 60)
14 | assert(1.2.seconds == 1.2)
15 | assert(1.5.minutes == 90.0)
16 | assert(1.5.hours == 5400.0)
17 | assert(1.3.milliseconds == 0.0013)
18 | assert(0.5.day == 43_200 )
19 | assert(1.day == 86_400 )
20 | assert(2.days == 172_800)
21 | test2()
22 | }
23 |
24 | func test2() {
25 | var fired = false
26 | Timer.after(0.1.seconds) {
27 | assert(!fired)
28 | fired = true
29 | self.test3()
30 | }
31 | }
32 |
33 | var timer1: Timer!
34 |
35 | func test3() {
36 | var fired = false
37 | timer1 = Timer.every(0.1.seconds) {
38 | if fired {
39 | self.test4()
40 | self.timer1.invalidate()
41 | } else {
42 | fired = true
43 | }
44 | }
45 | }
46 |
47 | let timer2 = Timer.new(after: 0.1.seconds) { fatalError() }
48 | let timer3 = Timer.new(every: 0.1.seconds) { fatalError() }
49 |
50 | func test4() {
51 | let timer = Timer.new(after: 0.1.seconds) {
52 | self.test5()
53 | }
54 | RunLoop.current.add(timer, forMode: .default)
55 | }
56 |
57 | var timer4: Timer!
58 |
59 | func test5() {
60 | var fired = false
61 | timer4 = Timer.new(every: 0.1.seconds) {
62 | if fired {
63 | self.timer4.invalidate()
64 | self.test6()
65 | } else {
66 | fired = true
67 | }
68 | }
69 | timer4.start()
70 | }
71 |
72 | func test6() {
73 | let timer = Timer.new(after: 0.1.seconds) {
74 | self.test7()
75 | }
76 |
77 | timer.start(runLoop: .current, modes: .default, .eventTracking)
78 | }
79 |
80 | func test7() {
81 | Timer.after(0.1.seconds, test8)
82 | }
83 |
84 | func test8() {
85 | var fires = 0
86 | let timer = Timer.new(every: 0.1.seconds) { (timer: Timer) in
87 | guard fires <= 1 else { fatalError("should be invalidated") }
88 | defer { fires += 1 }
89 |
90 | if fires == 1 {
91 | timer.invalidate()
92 | self.test9()
93 | }
94 | }
95 | timer.start()
96 | }
97 |
98 | func test9() {
99 | var fires = 0
100 | Timer.every(0.1.seconds) { (timer: Timer) in
101 | guard fires <= 1 else { fatalError("should be invalidated") }
102 | defer { fires += 1 }
103 |
104 | if fires == 1 {
105 | timer.invalidate()
106 | self.done()
107 | }
108 | }
109 | }
110 |
111 | func done() {
112 | print("All tests passed")
113 | app.terminate(self)
114 | }
115 | }
116 |
117 | let delegate = AppDelegate()
118 | app.delegate = delegate
119 | app.run()
120 |
--------------------------------------------------------------------------------