diff --git a/Podfile b/Podfile new file mode 100644 index 0000000..c2a5691 --- /dev/null +++ b/Podfile @@ -0,0 +1,12 @@ +# Uncomment the next line to define a global platform for your project +# platform :ios, '9.0' + +target 'whack_that_jellyfish' do + # Comment the next line if you're not using Swift and don't want to use dynamic frameworks + use_frameworks! + + # Pods for whack_that_jellyfish + +pod 'Each', '~> 1.2' + +end diff --git a/Podfile.lock b/Podfile.lock new file mode 100644 index 0000000..06e79de --- /dev/null +++ b/Podfile.lock @@ -0,0 +1,12 @@ +PODS: + - Each (1.2.0) + +DEPENDENCIES: + - Each (~> 1.2) + +SPEC CHECKSUMS: + Each: 53d089bc231f4a7221ed201bf23ac343c5c4d560 + +PODFILE CHECKSUM: fa304952385be08517d5e580692849296714a628 + +COCOAPODS: 1.3.1 diff --git a/Pods/Each/LICENSE b/Pods/Each/LICENSE new file mode 100644 index 0000000..8ec0215 --- /dev/null +++ b/Pods/Each/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2016 Luca D'Alberti + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/Pods/Each/README.md b/Pods/Each/README.md new file mode 100644 index 0000000..0d103cb --- /dev/null +++ b/Pods/Each/README.md @@ -0,0 +1,160 @@ +# Each +Elegant ⏱ interface for Swift apps + +[![BuddyBuild](https://dashboard.buddybuild.com/api/statusImage?appID=5805caae4b74d00100717ec7&branch=master&build=latest)](https://dashboard.buddybuild.com/apps/5805caae4b74d00100717ec7/build/latest) + +Each is a NSTimer bridge library written in Swift. + +- [Features](#features) +- [Requirements](#requirements) +- [Installation](#installation) +- [Usage](#usage) +- [Leaks](#leaks) +- [License](#license) + +## Features + +- [x] Completely configurable timers +- [x] Support for time intervals in ms, seconds, minutes and hours +- [x] Fully extendable +- [x] More readable and simple to use in comparison with NSTimer object + +## Requirements + +- iOS 8.0+ / macOS 10.10+ / tvOS 9.0+ / watchOS 2.0+ +- Xcode 8.0+ +- Swift 3.0+ + +## Installation + +### CocoaPods + +[CocoaPods](http://cocoapods.org) is a dependency manager for Cocoa projects. You can install it with the following command: + +```bash +$ gem install cocoapods +``` + +> CocoaPods 1.1.0+ is required to build Each. + +To integrate Each into your Xcode project using CocoaPods, specify it in your `Podfile`: + +```ruby +source 'https://github.com/CocoaPods/Specs.git' +platform :ios, '10.0' +use_frameworks! + +target '' do +pod 'Each', '~> 1.2' +end +``` + +Then, run the following command: + +```bash +$ pod install +``` + +### Carthage + +You can use [Carthage](https://github.com/Carthage/Carthage) to install `Each` by adding it to your `Cartfile`: + +``` +github "dalu93/Each" +``` + +## Usage + +### Creating a new timer instance + +```swift +let timer = Each(1).seconds // Can be .milliseconds, .seconds, .minute, .hours +``` + +### Performing operations + +```swift +timer.perform { + // Do your operations + // This closure has to return a NextStep value + // Return .continue if you want to leave the timer active, otherwise + // return .stop to invalidate it +} +``` + +If you want to leave the memory management decision to the `Each` class, you can simply use the `perform(on: _)` method. +It requires that the parameter is an `AnyObject` instance. + +```swift +timer.perform(on: self) { + // Do your operations + // This closure has to return a NextStep value + // Return .continue if you want to leave the timer active, otherwise + // return .stop to invalidate it +} +``` + +### Stopping the timer manually + +```swift +timer.stop() // This stops immediately the timer +``` + +### Restarting the timer + +You can restart the timer only after you stopped it. This method restarts the timer with the same +perform closure. + +```swift +timer.restart() +``` + +## Leaks +Unfortunately the interface doesn't help you with handling the memory leaks the timer +could create. In case of them, two workarounds are provided + +### Workaround 1 + +Use the `perform(on: _)` method as explained in the [usage](#usage) section. +Please note that using this method, the `timer` isn't immediately deallocated when the `owner` is deallocated. +It will be deallocated when the `timer` triggers the next time and it will check whether the `owner` instance is still valid or not. + +### Workaround 2 + +In case you don't want to declare a property that holds the `Each` reference, create a normal `Each` timer in your method scope and return `.stop/true` whenever the `owner` instance is `nil` + +```swift +Each(1).seconds.perform { [weak self] in + guard let _ = self else { return .stop } + + print("timer called") + return .continue +} +``` + +90% of closures will call `self` somehow, so this isn't so bad + +### Workaround 3 + +In case the first workaround wasn't enough, you can declare a property that holds the `Each` reference and call the `stop()` function whenever the `owner` is deallocated + +```swift +final class ViewController: UIViewController { + private let _timer = Each(1).seconds + + deinit { + _timer.stop() + } + + override func viewDidLoad() { + super.viewDidLoad() + _timer.perform { + // do something and return. you can check here if the `self` instance is nil as for workaround #1 + } + } +} +``` + +## License + +Each is released under the MIT license. See LICENSE for details. diff --git a/Pods/Each/Sources/Each.swift b/Pods/Each/Sources/Each.swift new file mode 100644 index 0000000..8521b02 --- /dev/null +++ b/Pods/Each/Sources/Each.swift @@ -0,0 +1,207 @@ +// +// Each.swift +// Each +// +// Created by Luca D'Alberti on 9/5/16. +// Copyright © 2016 dalu93. All rights reserved. +// + +import Foundation + +/// The perform closure. It has to return a `NextStep` type to let `Each` know +/// what's the next operation to do. +/// +/// Return .continue to keep the timer alive, otherwise .stop to invalidate it. +public typealias PerformClosure = () -> NextStep + +// MARK: - NextStep declaration +/// The enumeration describes the next step `Each` has to do whenever the timer +/// is triggered. +/// +/// - stop: Stops the timer. +/// - `continue`: Keeps the timer alive. +public enum NextStep { + + case stop, `continue` +} + +// MARK: - NextStep boolean value implementation +fileprivate extension NextStep { + + /// Stops the timer or not + var shouldStop: Bool { + switch self { + case .continue: return false + case .stop: return true + } + } +} + +// MARK: - Each declaratiom +/// The `Each` class allows the user to easily create a scheduled action +open class Each { + + enum SecondsMultiplierType { + case toMilliseconds + case toSeconds + case toMinutes + case toHours + + var value: Double { + switch self { + case .toMilliseconds: return 1/1000 + case .toSeconds: return 1 + case .toMinutes: return 60 + case .toHours: return 3600 + } + } + } + + // MARK: - Private properties + /// The timer interval in seconds + private let _value: TimeInterval + + /// The multiplier. If nil when using it, the configuration didn't go well, + /// the app will crash + fileprivate var _multiplier: Double? = nil + + /// The action to perform when the timer is triggered + fileprivate var _performClosure: PerformClosure? + + /// The timer instance + private weak var _timer: Timer? + + /// Weak reference to the owner. Useful to check whether to stop or not the timer + /// when the owner is deallocated + fileprivate weak var _owner: AnyObject? { + didSet { + _checkOwner = _owner != nil + } + } + + /// It contains a boolean property that tells how to handle the tier trigger, checking or not for the + /// owner instance. + /// - Note: Do not change this value. The `_owner.didSet` will handle it + fileprivate var _checkOwner = false + + // MARK: - Public properties + /// Instance that runs the specific interval in milliseconds + public lazy var milliseconds: Each = self._makeEachWith(value: self._value, multiplierType: .toMilliseconds) + + /// Instance that runs the specific interval in seconds + public lazy var seconds: Each = self._makeEachWith(value: self._value, multiplierType: .toSeconds) + + /// /// Instance that runs the specific interval in minutes + public lazy var minutes: Each = self._makeEachWith(value: self._value, multiplierType: .toMinutes) + + /// Instance that runs the specific interval in hours + public lazy var hours: Each = self._makeEachWith(value: self._value, multiplierType: .toHours) + + /// Timer is stopped or not + public private(set) var isStopped = true + + /// The definitive time interval to use for the timer. If nil, the app will crash + public var timeInterval: TimeInterval? { + guard let _multiplier = _multiplier else { return nil } + return _multiplier * _value + } + + // MARK: - Lifecycle + /** + Initialize a new `Each` object with an abstract value. + Remember to use the variables `milliseconds`, `seconds`, `minutes` and + `hours` to get the exact configuration + + - parameter value: The abstract value that describes the interval together + with the time unit + + - returns: A new `Each` uncompleted instance + */ + public init(_ value: TimeInterval) { + self._value = value + } + + deinit { + _timer?.invalidate() + } + + // MARK: - Public methods + /** + Starts the timer and performs the action whenever the timer is triggered + The closure should return a boolean that indicates to stop or not the timer after + the trigger. Return `false` to continue, return `true` to stop it + + - parameter closure: The closure to execute whenever the timer is triggered. + The closure should return a boolean that indicates to stop or not the timer after + the trigger. Return `false` to continue, return `true` to stop it + */ + public func perform(closure: @escaping PerformClosure) { + guard _timer == nil else { return } + guard let interval = timeInterval else { fatalError("Please, speficy the time unit by using `milliseconds`, `seconds`, `minutes` abd `hours` properties.") } + + isStopped = false + _performClosure = closure + _timer = Timer.scheduledTimer( + timeInterval: interval, + target: self, + selector: .Triggered, + userInfo: nil, + repeats: true + ) + } + + public func perform(on owner: AnyObject, closure: @escaping PerformClosure) { + _owner = owner + perform(closure: closure) + } + + + /** + Stops the timer + */ + public func stop() { + _timer?.invalidate() + _timer = nil + + isStopped = true + } + + /** + Restarts the timer + */ + public func restart() { + guard let _performClosure = _performClosure else { fatalError("Don't call the method `start()` without stopping it before.") } + + _ = perform(closure: _performClosure) + } +} + +// MARK: - Actions +fileprivate extension Each { + @objc func _trigger(timer: Timer) { + if _checkOwner && _owner == nil { + stop() + return + } + + let stopTimer = _performClosure?().shouldStop ?? false + + guard stopTimer else { return } + stop() + } +} + +// MARK: - Builders +fileprivate extension Each { + func _makeEachWith(value: TimeInterval, multiplierType: SecondsMultiplierType) -> Each { + let each = Each(value) + each._multiplier = multiplierType.value + + return each + } +} + +// MARK: - Selectors +fileprivate extension Selector { + static let Triggered = #selector(Each._trigger(timer:)) +} diff --git a/Pods/Manifest.lock b/Pods/Manifest.lock new file mode 100644 index 0000000..06e79de --- /dev/null +++ b/Pods/Manifest.lock @@ -0,0 +1,12 @@ +PODS: + - Each (1.2.0) + +DEPENDENCIES: + - Each (~> 1.2) + +SPEC CHECKSUMS: + Each: 53d089bc231f4a7221ed201bf23ac343c5c4d560 + +PODFILE CHECKSUM: fa304952385be08517d5e580692849296714a628 + +COCOAPODS: 1.3.1 diff --git a/Pods/Pods.xcodeproj/project.pbxproj b/Pods/Pods.xcodeproj/project.pbxproj new file mode 100644 index 0000000..c762f9b --- /dev/null +++ b/Pods/Pods.xcodeproj/project.pbxproj @@ -0,0 +1,560 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 48; + objects = { + +/* Begin PBXBuildFile section */ + 474346F8329D8FA896840475B97F9D38 /* Each-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 847A08964ED59B0C1455C915F287A077 /* Each-dummy.m */; }; + 4F73DBCCA1AB7ADAE15583C568B06CC8 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6604A7D69453B4569E4E4827FB9155A9 /* Foundation.framework */; }; + 9AA72B5D3ABE134B587E47F81946A443 /* Each-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = AC32EBD6C11382D691B5CB2A269F5EF7 /* Each-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A59123F7E20F6F7C6311F7B2336F8414 /* Each.swift in Sources */ = {isa = PBXBuildFile; fileRef = EBF99B90B4BBBDAC7744431A842BA82E /* Each.swift */; }; + AC982BFA12AE6DD922839EEC80FD7EF9 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6604A7D69453B4569E4E4827FB9155A9 /* Foundation.framework */; }; + DB86A9699A74C3A0F52A2C3CD29C80A0 /* Pods-whack_that_jellyfish-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 151D878B3DFF1894046E985AF0C6D3C7 /* Pods-whack_that_jellyfish-dummy.m */; }; + E46FDAE6F5FAB684947EFEF595BB48B5 /* Pods-whack_that_jellyfish-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 5CD72727D6000F6DA46C2407D1427D77 /* Pods-whack_that_jellyfish-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 66425A54E29CB2B29A581591F1082B68 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + proxyType = 1; + remoteGlobalIDString = FCCFB470D9636263A3ABB2C69E628585; + remoteInfo = Each; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXFileReference section */ + 10894E091F03E575901893F58535996A /* Each.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Each.framework; path = Each.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 151D878B3DFF1894046E985AF0C6D3C7 /* Pods-whack_that_jellyfish-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-whack_that_jellyfish-dummy.m"; sourceTree = ""; }; + 1A4F5DC6FAAAC1C84CA0D71DB891F935 /* Each.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; path = Each.modulemap; sourceTree = ""; }; + 5CD72727D6000F6DA46C2407D1427D77 /* Pods-whack_that_jellyfish-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-whack_that_jellyfish-umbrella.h"; sourceTree = ""; }; + 6604A7D69453B4569E4E4827FB9155A9 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS10.3.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; + 74F01D4C94CC0471CD81DB60BCE2F760 /* Pods-whack_that_jellyfish-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-whack_that_jellyfish-frameworks.sh"; sourceTree = ""; }; + 787FA85B7204D1FA1D74E2A4C57555E7 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 847A08964ED59B0C1455C915F287A077 /* Each-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Each-dummy.m"; sourceTree = ""; }; + 93020FF54F0FE2DC228500669C99F455 /* Pods-whack_that_jellyfish-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-whack_that_jellyfish-resources.sh"; sourceTree = ""; }; + 93A4A3777CF96A4AAC1D13BA6DCCEA73 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; lastKnownFileType = text; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; + 96FEA18A9FC7B3ECD3518D3877B544A7 /* Pods-whack_that_jellyfish-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-whack_that_jellyfish-acknowledgements.markdown"; sourceTree = ""; }; + 9EB4FCB260CB5F6EBC13BD3EC924C43E /* Each-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Each-prefix.pch"; sourceTree = ""; }; + AC32EBD6C11382D691B5CB2A269F5EF7 /* Each-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Each-umbrella.h"; sourceTree = ""; }; + BB9274EA2D16EAF31E18BFC78A01E7FA /* Pods-whack_that_jellyfish-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-whack_that_jellyfish-acknowledgements.plist"; sourceTree = ""; }; + BDC70563BB6EF521C927DBBAEF9278A4 /* Each.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Each.xcconfig; sourceTree = ""; }; + CFF6D01A6C6CD8471DE2D824EEA3E68D /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + D891B27FB6D356F00C526CF18BE51819 /* Pods_whack_that_jellyfish.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Pods_whack_that_jellyfish.framework; path = "Pods-whack_that_jellyfish.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; + DC65B3CCAE7A9AC6E5796B774629BE60 /* Pods-whack_that_jellyfish.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-whack_that_jellyfish.debug.xcconfig"; sourceTree = ""; }; + DD7DA3A73AD3FB94637A9F3C34DF7ECD /* Pods-whack_that_jellyfish.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; path = "Pods-whack_that_jellyfish.modulemap"; sourceTree = ""; }; + E20245E10A8785C376CE75619897BD41 /* Pods-whack_that_jellyfish.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-whack_that_jellyfish.release.xcconfig"; sourceTree = ""; }; + EBF99B90B4BBBDAC7744431A842BA82E /* Each.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Each.swift; path = Sources/Each.swift; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 6778E30B71D3EB7B93AB90834E0C5E37 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + AC982BFA12AE6DD922839EEC80FD7EF9 /* Foundation.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 79DFE8C6825B6339A47616200DBAF35E /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 4F73DBCCA1AB7ADAE15583C568B06CC8 /* Foundation.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 18905AEFF6FF8DBC723B751F10FD3FDB /* Products */ = { + isa = PBXGroup; + children = ( + 10894E091F03E575901893F58535996A /* Each.framework */, + D891B27FB6D356F00C526CF18BE51819 /* Pods_whack_that_jellyfish.framework */, + ); + name = Products; + sourceTree = ""; + }; + 7DB346D0F39D3F0E887471402A8071AB = { + isa = PBXGroup; + children = ( + 93A4A3777CF96A4AAC1D13BA6DCCEA73 /* Podfile */, + BC3CA7F9E30CC8F7E2DD044DD34432FC /* Frameworks */, + A18461AD0A9E4F5AEF0827053AF8EE28 /* Pods */, + 18905AEFF6FF8DBC723B751F10FD3FDB /* Products */, + 81D0A2EE65D83EB493664039157E71D0 /* Targets Support Files */, + ); + sourceTree = ""; + }; + 81D0A2EE65D83EB493664039157E71D0 /* Targets Support Files */ = { + isa = PBXGroup; + children = ( + DCF6ABC389DB63E8D8E8AA24D53C7DC9 /* Pods-whack_that_jellyfish */, + ); + name = "Targets Support Files"; + sourceTree = ""; + }; + 9DD223C812552B985AC777604F887312 /* Each */ = { + isa = PBXGroup; + children = ( + EBF99B90B4BBBDAC7744431A842BA82E /* Each.swift */, + BC5D05C6B84FB8566E73717178A6B0C4 /* Support Files */, + ); + name = Each; + path = Each; + sourceTree = ""; + }; + A18461AD0A9E4F5AEF0827053AF8EE28 /* Pods */ = { + isa = PBXGroup; + children = ( + 9DD223C812552B985AC777604F887312 /* Each */, + ); + name = Pods; + sourceTree = ""; + }; + BC3CA7F9E30CC8F7E2DD044DD34432FC /* Frameworks */ = { + isa = PBXGroup; + children = ( + D35AF013A5F0BAD4F32504907A52519E /* iOS */, + ); + name = Frameworks; + sourceTree = ""; + }; + BC5D05C6B84FB8566E73717178A6B0C4 /* Support Files */ = { + isa = PBXGroup; + children = ( + 1A4F5DC6FAAAC1C84CA0D71DB891F935 /* Each.modulemap */, + BDC70563BB6EF521C927DBBAEF9278A4 /* Each.xcconfig */, + 847A08964ED59B0C1455C915F287A077 /* Each-dummy.m */, + 9EB4FCB260CB5F6EBC13BD3EC924C43E /* Each-prefix.pch */, + AC32EBD6C11382D691B5CB2A269F5EF7 /* Each-umbrella.h */, + 787FA85B7204D1FA1D74E2A4C57555E7 /* Info.plist */, + ); + name = "Support Files"; + path = "../Target Support Files/Each"; + sourceTree = ""; + }; + D35AF013A5F0BAD4F32504907A52519E /* iOS */ = { + isa = PBXGroup; + children = ( + 6604A7D69453B4569E4E4827FB9155A9 /* Foundation.framework */, + ); + name = iOS; + sourceTree = ""; + }; + DCF6ABC389DB63E8D8E8AA24D53C7DC9 /* Pods-whack_that_jellyfish */ = { + isa = PBXGroup; + children = ( + CFF6D01A6C6CD8471DE2D824EEA3E68D /* Info.plist */, + DD7DA3A73AD3FB94637A9F3C34DF7ECD /* Pods-whack_that_jellyfish.modulemap */, + 96FEA18A9FC7B3ECD3518D3877B544A7 /* Pods-whack_that_jellyfish-acknowledgements.markdown */, + BB9274EA2D16EAF31E18BFC78A01E7FA /* Pods-whack_that_jellyfish-acknowledgements.plist */, + 151D878B3DFF1894046E985AF0C6D3C7 /* Pods-whack_that_jellyfish-dummy.m */, + 74F01D4C94CC0471CD81DB60BCE2F760 /* Pods-whack_that_jellyfish-frameworks.sh */, + 93020FF54F0FE2DC228500669C99F455 /* Pods-whack_that_jellyfish-resources.sh */, + 5CD72727D6000F6DA46C2407D1427D77 /* Pods-whack_that_jellyfish-umbrella.h */, + DC65B3CCAE7A9AC6E5796B774629BE60 /* Pods-whack_that_jellyfish.debug.xcconfig */, + E20245E10A8785C376CE75619897BD41 /* Pods-whack_that_jellyfish.release.xcconfig */, + ); + name = "Pods-whack_that_jellyfish"; + path = "Target Support Files/Pods-whack_that_jellyfish"; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXHeadersBuildPhase section */ + 4458925976DFF1C7206C7F45B81DFCB0 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + E46FDAE6F5FAB684947EFEF595BB48B5 /* Pods-whack_that_jellyfish-umbrella.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + F2E998592A36735A0B9E037D4B6351B2 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 9AA72B5D3ABE134B587E47F81946A443 /* Each-umbrella.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXHeadersBuildPhase section */ + +/* Begin PBXNativeTarget section */ + 43412172A2ED784DEDA4D70C9DAB15B6 /* Pods-whack_that_jellyfish */ = { + isa = PBXNativeTarget; + buildConfigurationList = EF8F821403B4B5639710CC5295845FA0 /* Build configuration list for PBXNativeTarget "Pods-whack_that_jellyfish" */; + buildPhases = ( + 42A66D882D64983D1C1C486369B8A7B3 /* Sources */, + 6778E30B71D3EB7B93AB90834E0C5E37 /* Frameworks */, + 4458925976DFF1C7206C7F45B81DFCB0 /* Headers */, + ); + buildRules = ( + ); + dependencies = ( + 9E58215665A144B7659B45E7A7C29384 /* PBXTargetDependency */, + ); + name = "Pods-whack_that_jellyfish"; + productName = "Pods-whack_that_jellyfish"; + productReference = D891B27FB6D356F00C526CF18BE51819 /* Pods_whack_that_jellyfish.framework */; + productType = "com.apple.product-type.framework"; + }; + FCCFB470D9636263A3ABB2C69E628585 /* Each */ = { + isa = PBXNativeTarget; + buildConfigurationList = AC5841543C39D8CB0D97356B4B419403 /* Build configuration list for PBXNativeTarget "Each" */; + buildPhases = ( + B51A2F8A38E123D549ABC7C3A1FA8562 /* Sources */, + 79DFE8C6825B6339A47616200DBAF35E /* Frameworks */, + F2E998592A36735A0B9E037D4B6351B2 /* Headers */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = Each; + productName = Each; + productReference = 10894E091F03E575901893F58535996A /* Each.framework */; + productType = "com.apple.product-type.framework"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + D41D8CD98F00B204E9800998ECF8427E /* Project object */ = { + isa = PBXProject; + attributes = { + LastSwiftUpdateCheck = 0830; + LastUpgradeCheck = 0700; + }; + buildConfigurationList = 2D8E8EC45A3A1A1D94AE762CB5028504 /* Build configuration list for PBXProject "Pods" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 0; + knownRegions = ( + en, + ); + mainGroup = 7DB346D0F39D3F0E887471402A8071AB; + productRefGroup = 18905AEFF6FF8DBC723B751F10FD3FDB /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + FCCFB470D9636263A3ABB2C69E628585 /* Each */, + 43412172A2ED784DEDA4D70C9DAB15B6 /* Pods-whack_that_jellyfish */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXSourcesBuildPhase section */ + 42A66D882D64983D1C1C486369B8A7B3 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + DB86A9699A74C3A0F52A2C3CD29C80A0 /* Pods-whack_that_jellyfish-dummy.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + B51A2F8A38E123D549ABC7C3A1FA8562 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 474346F8329D8FA896840475B97F9D38 /* Each-dummy.m in Sources */, + A59123F7E20F6F7C6311F7B2336F8414 /* Each.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 9E58215665A144B7659B45E7A7C29384 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = Each; + target = FCCFB470D9636263A3ABB2C69E628585 /* Each */; + targetProxy = 66425A54E29CB2B29A581591F1082B68 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin XCBuildConfiguration section */ + 1D23278938ADF334174C5BF2A4B6B1B8 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGNING_REQUIRED = NO; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_PREPROCESSOR_DEFINITIONS = ( + "POD_CONFIGURATION_RELEASE=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 11.1; + MTL_ENABLE_DEBUG_INFO = NO; + PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE_SPECIFIER = NO_SIGNING/; + STRIP_INSTALLED_PRODUCT = NO; + SYMROOT = "${SRCROOT}/../build"; + }; + name = Release; + }; + 6D8B0029E7C1ED4490698E48576F3323 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = E20245E10A8785C376CE75619897BD41 /* Pods-whack_that_jellyfish.release.xcconfig */; + buildSettings = { + CODE_SIGN_IDENTITY = ""; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + INFOPLIST_FILE = "Target Support Files/Pods-whack_that_jellyfish/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 11.1; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-whack_that_jellyfish/Pods-whack_that_jellyfish.modulemap"; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = Pods_whack_that_jellyfish; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; + 995C3A53DEAA96B47E756185345E180D /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGNING_REQUIRED = NO; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "POD_CONFIGURATION_DEBUG=1", + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 11.1; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE_SPECIFIER = NO_SIGNING/; + STRIP_INSTALLED_PRODUCT = NO; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SYMROOT = "${SRCROOT}/../build"; + }; + name = Debug; + }; + C9B4E467794584182001220B72656C38 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = DC65B3CCAE7A9AC6E5796B774629BE60 /* Pods-whack_that_jellyfish.debug.xcconfig */; + buildSettings = { + CODE_SIGN_IDENTITY = ""; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + INFOPLIST_FILE = "Target Support Files/Pods-whack_that_jellyfish/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 11.1; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-whack_that_jellyfish/Pods-whack_that_jellyfish.modulemap"; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = Pods_whack_that_jellyfish; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + D9E7962DC904E2E26A6CCC472A899A50 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = BDC70563BB6EF521C927DBBAEF9278A4 /* Each.xcconfig */; + buildSettings = { + CODE_SIGN_IDENTITY = ""; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + GCC_PREFIX_HEADER = "Target Support Files/Each/Each-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/Each/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = "Target Support Files/Each/Each.modulemap"; + PRODUCT_NAME = Each; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; + DEF597B4EFF91048B3AE64CA9642E173 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = BDC70563BB6EF521C927DBBAEF9278A4 /* Each.xcconfig */; + buildSettings = { + CODE_SIGN_IDENTITY = ""; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + GCC_PREFIX_HEADER = "Target Support Files/Each/Each-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/Each/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = "Target Support Files/Each/Each.modulemap"; + PRODUCT_NAME = Each; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 2D8E8EC45A3A1A1D94AE762CB5028504 /* Build configuration list for PBXProject "Pods" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 995C3A53DEAA96B47E756185345E180D /* Debug */, + 1D23278938ADF334174C5BF2A4B6B1B8 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + AC5841543C39D8CB0D97356B4B419403 /* Build configuration list for PBXNativeTarget "Each" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + DEF597B4EFF91048B3AE64CA9642E173 /* Debug */, + D9E7962DC904E2E26A6CCC472A899A50 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + EF8F821403B4B5639710CC5295845FA0 /* Build configuration list for PBXNativeTarget "Pods-whack_that_jellyfish" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + C9B4E467794584182001220B72656C38 /* Debug */, + 6D8B0029E7C1ED4490698E48576F3323 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = D41D8CD98F00B204E9800998ECF8427E /* Project object */; +} diff --git a/Pods/Pods.xcodeproj/xcuserdata/joe.xcuserdatad/xcschemes/Each.xcscheme b/Pods/Pods.xcodeproj/xcuserdata/joe.xcuserdatad/xcschemes/Each.xcscheme new file mode 100644 index 0000000..c1f21df --- /dev/null +++ b/Pods/Pods.xcodeproj/xcuserdata/joe.xcuserdatad/xcschemes/Each.xcscheme @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Pods/Pods.xcodeproj/xcuserdata/joe.xcuserdatad/xcschemes/Pods-whack_that_jellyfish.xcscheme b/Pods/Pods.xcodeproj/xcuserdata/joe.xcuserdatad/xcschemes/Pods-whack_that_jellyfish.xcscheme new file mode 100644 index 0000000..2030866 --- /dev/null +++ b/Pods/Pods.xcodeproj/xcuserdata/joe.xcuserdatad/xcschemes/Pods-whack_that_jellyfish.xcscheme @@ -0,0 +1,73 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Pods/Pods.xcodeproj/xcuserdata/joe.xcuserdatad/xcschemes/xcschememanagement.plist b/Pods/Pods.xcodeproj/xcuserdata/joe.xcuserdatad/xcschemes/xcschememanagement.plist new file mode 100644 index 0000000..37395a1 --- /dev/null +++ b/Pods/Pods.xcodeproj/xcuserdata/joe.xcuserdatad/xcschemes/xcschememanagement.plist @@ -0,0 +1,25 @@ + + + + + SchemeUserState + + Each.xcscheme + + isShown + + orderHint + 0 + + Pods-whack_that_jellyfish.xcscheme + + isShown + + orderHint + 1 + + + SuppressBuildableAutocreation + + + diff --git a/Pods/Target Support Files/Each/Each-dummy.m b/Pods/Target Support Files/Each/Each-dummy.m new file mode 100644 index 0000000..ff03f7c --- /dev/null +++ b/Pods/Target Support Files/Each/Each-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_Each : NSObject +@end +@implementation PodsDummy_Each +@end diff --git a/Pods/Target Support Files/Each/Each-prefix.pch b/Pods/Target Support Files/Each/Each-prefix.pch new file mode 100644 index 0000000..beb2a24 --- /dev/null +++ b/Pods/Target Support Files/Each/Each-prefix.pch @@ -0,0 +1,12 @@ +#ifdef __OBJC__ +#import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif + diff --git a/Pods/Target Support Files/Each/Each-umbrella.h b/Pods/Target Support Files/Each/Each-umbrella.h new file mode 100644 index 0000000..fbcffc6 --- /dev/null +++ b/Pods/Target Support Files/Each/Each-umbrella.h @@ -0,0 +1,16 @@ +#ifdef __OBJC__ +#import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif + + +FOUNDATION_EXPORT double EachVersionNumber; +FOUNDATION_EXPORT const unsigned char EachVersionString[]; + diff --git a/Pods/Target Support Files/Each/Each.modulemap b/Pods/Target Support Files/Each/Each.modulemap new file mode 100644 index 0000000..bfedb5c --- /dev/null +++ b/Pods/Target Support Files/Each/Each.modulemap @@ -0,0 +1,6 @@ +framework module Each { + umbrella header "Each-umbrella.h" + + export * + module * { export * } +} diff --git a/Pods/Target Support Files/Each/Each.xcconfig b/Pods/Target Support Files/Each/Each.xcconfig new file mode 100644 index 0000000..871c521 --- /dev/null +++ b/Pods/Target Support Files/Each/Each.xcconfig @@ -0,0 +1,10 @@ +CONFIGURATION_BUILD_DIR = $PODS_CONFIGURATION_BUILD_DIR/Each +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Public" +OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" +PODS_BUILD_DIR = $BUILD_DIR +PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT} +PODS_TARGET_SRCROOT = ${PODS_ROOT}/Each +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES diff --git a/Pods/Target Support Files/Each/Info.plist b/Pods/Target Support Files/Each/Info.plist new file mode 100644 index 0000000..2a9158a --- /dev/null +++ b/Pods/Target Support Files/Each/Info.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIdentifier + ${PRODUCT_BUNDLE_IDENTIFIER} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.2.0 + CFBundleSignature + ???? + CFBundleVersion + ${CURRENT_PROJECT_VERSION} + NSPrincipalClass + + + diff --git a/Pods/Target Support Files/Pods-whack_that_jellyfish/Info.plist b/Pods/Target Support Files/Pods-whack_that_jellyfish/Info.plist new file mode 100644 index 0000000..2243fe6 --- /dev/null +++ b/Pods/Target Support Files/Pods-whack_that_jellyfish/Info.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIdentifier + ${PRODUCT_BUNDLE_IDENTIFIER} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.0.0 + CFBundleSignature + ???? + CFBundleVersion + ${CURRENT_PROJECT_VERSION} + NSPrincipalClass + + + diff --git a/Pods/Target Support Files/Pods-whack_that_jellyfish/Pods-whack_that_jellyfish-acknowledgements.markdown b/Pods/Target Support Files/Pods-whack_that_jellyfish/Pods-whack_that_jellyfish-acknowledgements.markdown new file mode 100644 index 0000000..ce1646c --- /dev/null +++ b/Pods/Target Support Files/Pods-whack_that_jellyfish/Pods-whack_that_jellyfish-acknowledgements.markdown @@ -0,0 +1,28 @@ +# Acknowledgements +This application makes use of the following third party libraries: + +## Each + +MIT License + +Copyright (c) 2016 Luca D'Alberti + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +Generated by CocoaPods - https://cocoapods.org diff --git a/Pods/Target Support Files/Pods-whack_that_jellyfish/Pods-whack_that_jellyfish-acknowledgements.plist b/Pods/Target Support Files/Pods-whack_that_jellyfish/Pods-whack_that_jellyfish-acknowledgements.plist new file mode 100644 index 0000000..5697b69 --- /dev/null +++ b/Pods/Target Support Files/Pods-whack_that_jellyfish/Pods-whack_that_jellyfish-acknowledgements.plist @@ -0,0 +1,60 @@ + + + + + PreferenceSpecifiers + + + FooterText + This application makes use of the following third party libraries: + Title + Acknowledgements + Type + PSGroupSpecifier + + + FooterText + MIT License + +Copyright (c) 2016 Luca D'Alberti + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + License + MIT + Title + Each + Type + PSGroupSpecifier + + + FooterText + Generated by CocoaPods - https://cocoapods.org + Title + + Type + PSGroupSpecifier + + + StringsTable + Acknowledgements + Title + Acknowledgements + + diff --git a/Pods/Target Support Files/Pods-whack_that_jellyfish/Pods-whack_that_jellyfish-dummy.m b/Pods/Target Support Files/Pods-whack_that_jellyfish/Pods-whack_that_jellyfish-dummy.m new file mode 100644 index 0000000..66a6bd9 --- /dev/null +++ b/Pods/Target Support Files/Pods-whack_that_jellyfish/Pods-whack_that_jellyfish-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_Pods_whack_that_jellyfish : NSObject +@end +@implementation PodsDummy_Pods_whack_that_jellyfish +@end diff --git a/Pods/Target Support Files/Pods-whack_that_jellyfish/Pods-whack_that_jellyfish-frameworks.sh b/Pods/Target Support Files/Pods-whack_that_jellyfish/Pods-whack_that_jellyfish-frameworks.sh new file mode 100755 index 0000000..1c24027 --- /dev/null +++ b/Pods/Target Support Files/Pods-whack_that_jellyfish/Pods-whack_that_jellyfish-frameworks.sh @@ -0,0 +1,112 @@ +#!/bin/sh +set -e + +echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" +mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + +SWIFT_STDLIB_PATH="${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" + +# This protects against multiple targets copying the same framework dependency at the same time. The solution +# was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html +RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????") + +install_framework() +{ + if [ -r "${BUILT_PRODUCTS_DIR}/$1" ]; then + local source="${BUILT_PRODUCTS_DIR}/$1" + elif [ -r "${BUILT_PRODUCTS_DIR}/$(basename "$1")" ]; then + local source="${BUILT_PRODUCTS_DIR}/$(basename "$1")" + elif [ -r "$1" ]; then + local source="$1" + fi + + local destination="${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + + if [ -L "${source}" ]; then + echo "Symlinked..." + source="$(readlink "${source}")" + fi + + # Use filter instead of exclude so missing patterns don't throw errors. + echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${destination}\"" + rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${destination}" + + local basename + basename="$(basename -s .framework "$1")" + binary="${destination}/${basename}.framework/${basename}" + if ! [ -r "$binary" ]; then + binary="${destination}/${basename}" + fi + + # Strip invalid architectures so "fat" simulator / device frameworks work on device + if [[ "$(file "$binary")" == *"dynamically linked shared library"* ]]; then + strip_invalid_archs "$binary" + fi + + # Resign the code if required by the build settings to avoid unstable apps + code_sign_if_enabled "${destination}/$(basename "$1")" + + # Embed linked Swift runtime libraries. No longer necessary as of Xcode 7. + if [ "${XCODE_VERSION_MAJOR}" -lt 7 ]; then + local swift_runtime_libs + swift_runtime_libs=$(xcrun otool -LX "$binary" | grep --color=never @rpath/libswift | sed -E s/@rpath\\/\(.+dylib\).*/\\1/g | uniq -u && exit ${PIPESTATUS[0]}) + for lib in $swift_runtime_libs; do + echo "rsync -auv \"${SWIFT_STDLIB_PATH}/${lib}\" \"${destination}\"" + rsync -auv "${SWIFT_STDLIB_PATH}/${lib}" "${destination}" + code_sign_if_enabled "${destination}/${lib}" + done + fi +} + +# Copies the dSYM of a vendored framework +install_dsym() { + local source="$1" + if [ -r "$source" ]; then + echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${DWARF_DSYM_FOLDER_PATH}\"" + rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${DWARF_DSYM_FOLDER_PATH}" + fi +} + +# Signs a framework with the provided identity +code_sign_if_enabled() { + if [ -n "${EXPANDED_CODE_SIGN_IDENTITY}" -a "${CODE_SIGNING_REQUIRED}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then + # Use the current code_sign_identitiy + echo "Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}" + local code_sign_cmd="/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS} --preserve-metadata=identifier,entitlements '$1'" + + if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then + code_sign_cmd="$code_sign_cmd &" + fi + echo "$code_sign_cmd" + eval "$code_sign_cmd" + fi +} + +# Strip invalid architectures +strip_invalid_archs() { + binary="$1" + # Get architectures for current file + archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | rev)" + stripped="" + for arch in $archs; do + if ! [[ "${ARCHS}" == *"$arch"* ]]; then + # Strip non-valid architectures in-place + lipo -remove "$arch" -output "$binary" "$binary" || exit 1 + stripped="$stripped $arch" + fi + done + if [[ "$stripped" ]]; then + echo "Stripped $binary of architectures:$stripped" + fi +} + + +if [[ "$CONFIGURATION" == "Debug" ]]; then + install_framework "${BUILT_PRODUCTS_DIR}/Each/Each.framework" +fi +if [[ "$CONFIGURATION" == "Release" ]]; then + install_framework "${BUILT_PRODUCTS_DIR}/Each/Each.framework" +fi +if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then + wait +fi diff --git a/Pods/Target Support Files/Pods-whack_that_jellyfish/Pods-whack_that_jellyfish-resources.sh b/Pods/Target Support Files/Pods-whack_that_jellyfish/Pods-whack_that_jellyfish-resources.sh new file mode 100755 index 0000000..a7df440 --- /dev/null +++ b/Pods/Target Support Files/Pods-whack_that_jellyfish/Pods-whack_that_jellyfish-resources.sh @@ -0,0 +1,106 @@ +#!/bin/sh +set -e + +mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" + +RESOURCES_TO_COPY=${PODS_ROOT}/resources-to-copy-${TARGETNAME}.txt +> "$RESOURCES_TO_COPY" + +XCASSET_FILES=() + +# This protects against multiple targets copying the same framework dependency at the same time. The solution +# was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html +RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????") + +case "${TARGETED_DEVICE_FAMILY}" in + 1,2) + TARGET_DEVICE_ARGS="--target-device ipad --target-device iphone" + ;; + 1) + TARGET_DEVICE_ARGS="--target-device iphone" + ;; + 2) + TARGET_DEVICE_ARGS="--target-device ipad" + ;; + 3) + TARGET_DEVICE_ARGS="--target-device tv" + ;; + 4) + TARGET_DEVICE_ARGS="--target-device watch" + ;; + *) + TARGET_DEVICE_ARGS="--target-device mac" + ;; +esac + +install_resource() +{ + if [[ "$1" = /* ]] ; then + RESOURCE_PATH="$1" + else + RESOURCE_PATH="${PODS_ROOT}/$1" + fi + if [[ ! -e "$RESOURCE_PATH" ]] ; then + cat << EOM +error: Resource "$RESOURCE_PATH" not found. Run 'pod install' to update the copy resources script. +EOM + exit 1 + fi + case $RESOURCE_PATH in + *.storyboard) + echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" || true + ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS} + ;; + *.xib) + echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" || true + ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS} + ;; + *.framework) + echo "mkdir -p ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" || true + mkdir -p "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" $RESOURCE_PATH ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" || true + rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + ;; + *.xcdatamodel) + echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH"`.mom\"" || true + xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodel`.mom" + ;; + *.xcdatamodeld) + echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd\"" || true + xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd" + ;; + *.xcmappingmodel) + echo "xcrun mapc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm\"" || true + xcrun mapc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm" + ;; + *.xcassets) + ABSOLUTE_XCASSET_FILE="$RESOURCE_PATH" + XCASSET_FILES+=("$ABSOLUTE_XCASSET_FILE") + ;; + *) + echo "$RESOURCE_PATH" || true + echo "$RESOURCE_PATH" >> "$RESOURCES_TO_COPY" + ;; + esac +} + +mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" +rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" +if [[ "${ACTION}" == "install" ]] && [[ "${SKIP_INSTALL}" == "NO" ]]; then + mkdir -p "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" + rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" +fi +rm -f "$RESOURCES_TO_COPY" + +if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ -n "$XCASSET_FILES" ] +then + # Find all other xcassets (this unfortunately includes those of path pods and other targets). + OTHER_XCASSETS=$(find "$PWD" -iname "*.xcassets" -type d) + while read line; do + if [[ $line != "${PODS_ROOT}*" ]]; then + XCASSET_FILES+=("$line") + fi + done <<<"$OTHER_XCASSETS" + + printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" +fi diff --git a/Pods/Target Support Files/Pods-whack_that_jellyfish/Pods-whack_that_jellyfish-umbrella.h b/Pods/Target Support Files/Pods-whack_that_jellyfish/Pods-whack_that_jellyfish-umbrella.h new file mode 100644 index 0000000..fe6173a --- /dev/null +++ b/Pods/Target Support Files/Pods-whack_that_jellyfish/Pods-whack_that_jellyfish-umbrella.h @@ -0,0 +1,16 @@ +#ifdef __OBJC__ +#import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif + + +FOUNDATION_EXPORT double Pods_whack_that_jellyfishVersionNumber; +FOUNDATION_EXPORT const unsigned char Pods_whack_that_jellyfishVersionString[]; + diff --git a/Pods/Target Support Files/Pods-whack_that_jellyfish/Pods-whack_that_jellyfish.debug.xcconfig b/Pods/Target Support Files/Pods-whack_that_jellyfish/Pods-whack_that_jellyfish.debug.xcconfig new file mode 100644 index 0000000..4deddd4 --- /dev/null +++ b/Pods/Target Support Files/Pods-whack_that_jellyfish/Pods-whack_that_jellyfish.debug.xcconfig @@ -0,0 +1,11 @@ +ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES +FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/Each" +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' +OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/Each/Each.framework/Headers" +OTHER_LDFLAGS = $(inherited) -framework "Each" +OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" +PODS_BUILD_DIR = $BUILD_DIR +PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_PODFILE_DIR_PATH = ${SRCROOT}/. +PODS_ROOT = ${SRCROOT}/Pods diff --git a/Pods/Target Support Files/Pods-whack_that_jellyfish/Pods-whack_that_jellyfish.modulemap b/Pods/Target Support Files/Pods-whack_that_jellyfish/Pods-whack_that_jellyfish.modulemap new file mode 100644 index 0000000..ee37d57 --- /dev/null +++ b/Pods/Target Support Files/Pods-whack_that_jellyfish/Pods-whack_that_jellyfish.modulemap @@ -0,0 +1,6 @@ +framework module Pods_whack_that_jellyfish { + umbrella header "Pods-whack_that_jellyfish-umbrella.h" + + export * + module * { export * } +} diff --git a/Pods/Target Support Files/Pods-whack_that_jellyfish/Pods-whack_that_jellyfish.release.xcconfig b/Pods/Target Support Files/Pods-whack_that_jellyfish/Pods-whack_that_jellyfish.release.xcconfig new file mode 100644 index 0000000..4deddd4 --- /dev/null +++ b/Pods/Target Support Files/Pods-whack_that_jellyfish/Pods-whack_that_jellyfish.release.xcconfig @@ -0,0 +1,11 @@ +ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES +FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/Each" +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' +OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/Each/Each.framework/Headers" +OTHER_LDFLAGS = $(inherited) -framework "Each" +OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" +PODS_BUILD_DIR = $BUILD_DIR +PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_PODFILE_DIR_PATH = ${SRCROOT}/. +PODS_ROOT = ${SRCROOT}/Pods diff --git a/whack_that_jellyfish.xcodeproj/project.pbxproj b/whack_that_jellyfish.xcodeproj/project.pbxproj index 0b15277..3b659ad 100644 --- a/whack_that_jellyfish.xcodeproj/project.pbxproj +++ b/whack_that_jellyfish.xcodeproj/project.pbxproj @@ -7,6 +7,7 @@ objects = { /* Begin PBXBuildFile section */ + 066E916C1B8AD8EACD648FDB /* Pods_whack_that_jellyfish.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5377BE03065F5F1768A529B4 /* Pods_whack_that_jellyfish.framework */; }; D857D7451FCA5FD600068432 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = D857D7441FCA5FD600068432 /* AppDelegate.swift */; }; D857D7471FCA5FD600068432 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D857D7461FCA5FD600068432 /* ViewController.swift */; }; D857D74A1FCA5FD600068432 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = D857D7481FCA5FD600068432 /* Main.storyboard */; }; @@ -17,6 +18,9 @@ /* End PBXBuildFile section */ /* Begin PBXFileReference section */ + 5377BE03065F5F1768A529B4 /* Pods_whack_that_jellyfish.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_whack_that_jellyfish.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 6FB0F2A8618C9013C56DCB8A /* Pods-whack_that_jellyfish.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-whack_that_jellyfish.debug.xcconfig"; path = "Pods/Target Support Files/Pods-whack_that_jellyfish/Pods-whack_that_jellyfish.debug.xcconfig"; sourceTree = ""; }; + CFC07D03989506CF65715435 /* Pods-whack_that_jellyfish.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-whack_that_jellyfish.release.xcconfig"; path = "Pods/Target Support Files/Pods-whack_that_jellyfish/Pods-whack_that_jellyfish.release.xcconfig"; sourceTree = ""; }; D857D7411FCA5FD600068432 /* whack_that_jellyfish.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = whack_that_jellyfish.app; sourceTree = BUILT_PRODUCTS_DIR; }; D857D7441FCA5FD600068432 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; D857D7461FCA5FD600068432 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; @@ -34,17 +38,37 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 066E916C1B8AD8EACD648FDB /* Pods_whack_that_jellyfish.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 3A4659124871B3154EFC3EB8 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 5377BE03065F5F1768A529B4 /* Pods_whack_that_jellyfish.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; + 9E94AB03F0BA8B09F43B5AFD /* Pods */ = { + isa = PBXGroup; + children = ( + 6FB0F2A8618C9013C56DCB8A /* Pods-whack_that_jellyfish.debug.xcconfig */, + CFC07D03989506CF65715435 /* Pods-whack_that_jellyfish.release.xcconfig */, + ); + name = Pods; + sourceTree = ""; + }; D857D7381FCA5FD600068432 = { isa = PBXGroup; children = ( D857D7431FCA5FD600068432 /* whack_that_jellyfish */, D857D7421FCA5FD600068432 /* Products */, + 9E94AB03F0BA8B09F43B5AFD /* Pods */, + 3A4659124871B3154EFC3EB8 /* Frameworks */, ); sourceTree = ""; }; @@ -79,9 +103,12 @@ isa = PBXNativeTarget; buildConfigurationList = D857D7531FCA5FD600068432 /* Build configuration list for PBXNativeTarget "whack_that_jellyfish" */; buildPhases = ( + 27D29541B8DE276921955A7A /* [CP] Check Pods Manifest.lock */, D857D73D1FCA5FD600068432 /* Sources */, D857D73E1FCA5FD600068432 /* Frameworks */, D857D73F1FCA5FD600068432 /* Resources */, + AFE4C3735B85AE076A3F6032 /* [CP] Embed Pods Frameworks */, + 3177A86E4B18864AB9321631 /* [CP] Copy Pods Resources */, ); buildRules = ( ); @@ -141,6 +168,60 @@ }; /* End PBXResourcesBuildPhase section */ +/* Begin PBXShellScriptBuildPhase section */ + 27D29541B8DE276921955A7A /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-whack_that_jellyfish-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; + 3177A86E4B18864AB9321631 /* [CP] Copy Pods Resources */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "[CP] Copy Pods Resources"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-whack_that_jellyfish/Pods-whack_that_jellyfish-resources.sh\"\n"; + showEnvVarsInLog = 0; + }; + AFE4C3735B85AE076A3F6032 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + "${SRCROOT}/Pods/Target Support Files/Pods-whack_that_jellyfish/Pods-whack_that_jellyfish-frameworks.sh", + "${BUILT_PRODUCTS_DIR}/Each/Each.framework", + ); + name = "[CP] Embed Pods Frameworks"; + outputPaths = ( + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Each.framework", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-whack_that_jellyfish/Pods-whack_that_jellyfish-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; +/* End PBXShellScriptBuildPhase section */ + /* Begin PBXSourcesBuildPhase section */ D857D73D1FCA5FD600068432 /* Sources */ = { isa = PBXSourcesBuildPhase; @@ -282,6 +363,7 @@ }; D857D7541FCA5FD600068432 /* Debug */ = { isa = XCBuildConfiguration; + baseConfigurationReference = 6FB0F2A8618C9013C56DCB8A /* Pods-whack_that_jellyfish.debug.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CODE_SIGN_STYLE = Automatic; @@ -297,6 +379,7 @@ }; D857D7551FCA5FD600068432 /* Release */ = { isa = XCBuildConfiguration; + baseConfigurationReference = CFC07D03989506CF65715435 /* Pods-whack_that_jellyfish.release.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CODE_SIGN_STYLE = Automatic; diff --git a/whack_that_jellyfish.xcodeproj/project.xcworkspace/xcuserdata/joe.xcuserdatad/UserInterfaceState.xcuserstate b/whack_that_jellyfish.xcodeproj/project.xcworkspace/xcuserdata/joe.xcuserdatad/UserInterfaceState.xcuserstate index 18ebfd3..0068443 100644 Binary files a/whack_that_jellyfish.xcodeproj/project.xcworkspace/xcuserdata/joe.xcuserdatad/UserInterfaceState.xcuserstate and b/whack_that_jellyfish.xcodeproj/project.xcworkspace/xcuserdata/joe.xcuserdatad/UserInterfaceState.xcuserstate differ diff --git a/whack_that_jellyfish.xcodeproj/xcuserdata/joe.xcuserdatad/xcschemes/xcschememanagement.plist b/whack_that_jellyfish.xcodeproj/xcuserdata/joe.xcuserdatad/xcschemes/xcschememanagement.plist index 1d185ba..3516824 100644 --- a/whack_that_jellyfish.xcodeproj/xcuserdata/joe.xcuserdatad/xcschemes/xcschememanagement.plist +++ b/whack_that_jellyfish.xcodeproj/xcuserdata/joe.xcuserdatad/xcschemes/xcschememanagement.plist @@ -7,7 +7,7 @@ whack_that_jellyfish.xcscheme orderHint - 0 + 2 diff --git a/whack_that_jellyfish.xcworkspace/contents.xcworkspacedata b/whack_that_jellyfish.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..f9ee6d3 --- /dev/null +++ b/whack_that_jellyfish.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,10 @@ + + + + + + + diff --git a/whack_that_jellyfish.xcworkspace/xcuserdata/joe.xcuserdatad/UserInterfaceState.xcuserstate b/whack_that_jellyfish.xcworkspace/xcuserdata/joe.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000..fd77421 Binary files /dev/null and b/whack_that_jellyfish.xcworkspace/xcuserdata/joe.xcuserdatad/UserInterfaceState.xcuserstate differ diff --git a/whack_that_jellyfish/Base.lproj/Main.storyboard b/whack_that_jellyfish/Base.lproj/Main.storyboard index 2a8ac81..d9e10f3 100644 --- a/whack_that_jellyfish/Base.lproj/Main.storyboard +++ b/whack_that_jellyfish/Base.lproj/Main.storyboard @@ -58,6 +58,7 @@ + diff --git a/whack_that_jellyfish/ViewController.swift b/whack_that_jellyfish/ViewController.swift index cb1ad67..02748cb 100644 --- a/whack_that_jellyfish/ViewController.swift +++ b/whack_that_jellyfish/ViewController.swift @@ -11,6 +11,7 @@ import ARKit class ViewController: UIViewController { + @IBOutlet weak var play: UIButton! @IBOutlet weak var SceneView: ARSCNView! let configuration = ARWorldTrackingConfiguration() @@ -33,15 +34,17 @@ class ViewController: UIViewController { @IBAction func play(_ sender: Any) { self.addNode() + self.play.isEnabled = false } @IBAction func reset(_ sender: Any) { + } func addNode() { let jellyFishScene = SCNScene(named: "art.scnassets/Jellyfish.dataset/Jellyfish.scn") let jellyFishNode = jellyFishScene?.rootNode.childNode(withName: "Jellyfish", recursively: false) - jellyFishNode?.position = SCNVector3(0,0,-1) + jellyFishNode?.position = SCNVector3(randomNumbers(firstNum: -1, secondNum: 1),randomNumbers(firstNum: -0.5, secondNum: 0.5),randomNumbers(firstNum: -1, secondNum: 1)) self.SceneView.scene.rootNode.addChildNode(jellyFishNode!) } @@ -54,16 +57,35 @@ class ViewController: UIViewController { } else { let results = hitTest.first! let node = results.node - self.animateNode(node: node) + if node.animationKeys.isEmpty { + self.animateNode(node: node) + node.removeFromParentNode() + } } } func animateNode(node: SCNNode) { let spin = CABasicAnimation(keyPath: "position") spin.fromValue = node.presentation.position - spin.toValue = SCNVector3(0,0,-2) + spin.toValue = SCNVector3(node.presentation.position.x - 0.2,node.presentation.position.y - 0.2, node.presentation.position.z - 0.2) + spin.duration = 0.08 + spin.autoreverses = true + spin.repeatCount = 5 node.addAnimation(spin, forKey: "position") } } +func randomNumbers(firstNum: CGFloat, secondNum: CGFloat) -> CGFloat { + return CGFloat(arc4random()) / CGFloat(UINT32_MAX) * abs(firstNum - secondNum) + min(firstNum, secondNum) +} + + + + + + + + + +