From 6a5da488316c94fcdd6a2408e5308e9984e985ec Mon Sep 17 00:00:00 2001 From: Joe Hill Date: Sun, 3 Dec 2017 11:39:51 -0500 Subject: [PATCH] Added new Cocoapod for timer installed and created new Xcode Workspace which is where I'll code from here on out --- Podfile | 12 + Podfile.lock | 12 + Pods/Each/LICENSE | 21 + Pods/Each/README.md | 160 +++++ Pods/Each/Sources/Each.swift | 207 +++++++ Pods/Manifest.lock | 12 + Pods/Pods.xcodeproj/project.pbxproj | 560 ++++++++++++++++++ .../joe.xcuserdatad/xcschemes/Each.xcscheme | 60 ++ .../Pods-whack_that_jellyfish.xcscheme | 73 +++ .../xcschemes/xcschememanagement.plist | 25 + Pods/Target Support Files/Each/Each-dummy.m | 5 + .../Target Support Files/Each/Each-prefix.pch | 12 + .../Target Support Files/Each/Each-umbrella.h | 16 + Pods/Target Support Files/Each/Each.modulemap | 6 + Pods/Target Support Files/Each/Each.xcconfig | 10 + Pods/Target Support Files/Each/Info.plist | 26 + .../Pods-whack_that_jellyfish/Info.plist | 26 + ...k_that_jellyfish-acknowledgements.markdown | 28 + ...hack_that_jellyfish-acknowledgements.plist | 60 ++ .../Pods-whack_that_jellyfish-dummy.m | 5 + .../Pods-whack_that_jellyfish-frameworks.sh | 112 ++++ .../Pods-whack_that_jellyfish-resources.sh | 106 ++++ .../Pods-whack_that_jellyfish-umbrella.h | 16 + .../Pods-whack_that_jellyfish.debug.xcconfig | 11 + .../Pods-whack_that_jellyfish.modulemap | 6 + ...Pods-whack_that_jellyfish.release.xcconfig | 11 + .../project.pbxproj | 83 +++ .../UserInterfaceState.xcuserstate | Bin 32210 -> 32845 bytes .../xcschemes/xcschememanagement.plist | 2 +- .../contents.xcworkspacedata | 10 + .../UserInterfaceState.xcuserstate | Bin 0 -> 16883 bytes .../Base.lproj/Main.storyboard | 1 + whack_that_jellyfish/ViewController.swift | 28 +- 33 files changed, 1718 insertions(+), 4 deletions(-) create mode 100644 Podfile create mode 100644 Podfile.lock create mode 100644 Pods/Each/LICENSE create mode 100644 Pods/Each/README.md create mode 100644 Pods/Each/Sources/Each.swift create mode 100644 Pods/Manifest.lock create mode 100644 Pods/Pods.xcodeproj/project.pbxproj create mode 100644 Pods/Pods.xcodeproj/xcuserdata/joe.xcuserdatad/xcschemes/Each.xcscheme create mode 100644 Pods/Pods.xcodeproj/xcuserdata/joe.xcuserdatad/xcschemes/Pods-whack_that_jellyfish.xcscheme create mode 100644 Pods/Pods.xcodeproj/xcuserdata/joe.xcuserdatad/xcschemes/xcschememanagement.plist create mode 100644 Pods/Target Support Files/Each/Each-dummy.m create mode 100644 Pods/Target Support Files/Each/Each-prefix.pch create mode 100644 Pods/Target Support Files/Each/Each-umbrella.h create mode 100644 Pods/Target Support Files/Each/Each.modulemap create mode 100644 Pods/Target Support Files/Each/Each.xcconfig create mode 100644 Pods/Target Support Files/Each/Info.plist create mode 100644 Pods/Target Support Files/Pods-whack_that_jellyfish/Info.plist create mode 100644 Pods/Target Support Files/Pods-whack_that_jellyfish/Pods-whack_that_jellyfish-acknowledgements.markdown create mode 100644 Pods/Target Support Files/Pods-whack_that_jellyfish/Pods-whack_that_jellyfish-acknowledgements.plist create mode 100644 Pods/Target Support Files/Pods-whack_that_jellyfish/Pods-whack_that_jellyfish-dummy.m create mode 100755 Pods/Target Support Files/Pods-whack_that_jellyfish/Pods-whack_that_jellyfish-frameworks.sh create mode 100755 Pods/Target Support Files/Pods-whack_that_jellyfish/Pods-whack_that_jellyfish-resources.sh create mode 100644 Pods/Target Support Files/Pods-whack_that_jellyfish/Pods-whack_that_jellyfish-umbrella.h create mode 100644 Pods/Target Support Files/Pods-whack_that_jellyfish/Pods-whack_that_jellyfish.debug.xcconfig create mode 100644 Pods/Target Support Files/Pods-whack_that_jellyfish/Pods-whack_that_jellyfish.modulemap create mode 100644 Pods/Target Support Files/Pods-whack_that_jellyfish/Pods-whack_that_jellyfish.release.xcconfig create mode 100644 whack_that_jellyfish.xcworkspace/contents.xcworkspacedata create mode 100644 whack_that_jellyfish.xcworkspace/xcuserdata/joe.xcuserdatad/UserInterfaceState.xcuserstate 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 18ebfd34c4f090175e8c0de9fe2a6f09c5a96af3..00684437918024c44b6ab8a9f3c13cea70a8c7e5 100644 GIT binary patch delta 15480 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 Pm4fl@1v;MTTk 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 OKO)lk+5OkF`TqcCY==|; 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 0000000000000000000000000000000000000000..fd77421d8bbc1dfa89cba18c6223b1c3a1405c58 GIT binary patch literal 16883 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 literal 0 HcmV?d00001 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) +} + + + + + + + + + +