From 2dacb63ecaeb5ee3d877f5fb92d6454d3f76ea79 Mon Sep 17 00:00:00 2001 From: Matt Griffin Date: Sat, 27 Jun 2015 17:41:38 -0400 Subject: [PATCH] Fully async using promises --- Podfile | 8 +- Podfile.lock | 9 + Pods/Headers/Private/PromiseKit/AnyPromise.h | 1 + .../Private/PromiseKit/NSError+Cancellation.h | 1 + Pods/Headers/Private/PromiseKit/PMKPromise.h | 1 + Pods/Headers/Private/PromiseKit/Promise.h | 1 + Pods/Headers/Private/PromiseKit/PromiseKit.h | 1 + Pods/Headers/Private/PromiseKit/Umbrella.h | 1 + Pods/Headers/Public/PromiseKit/AnyPromise.h | 1 + .../Public/PromiseKit/NSError+Cancellation.h | 1 + Pods/Headers/Public/PromiseKit/PMKPromise.h | 1 + Pods/Headers/Public/PromiseKit/Promise.h | 1 + Pods/Headers/Public/PromiseKit/PromiseKit.h | 1 + Pods/Headers/Public/PromiseKit/Umbrella.h | 1 + Pods/Local Podspecs/PromiseKit.podspec.json | 646 ++++++++ Pods/Manifest.lock | 9 + Pods/Pods.xcodeproj/project.pbxproj | 1405 +++++++++++------ Pods/PromiseKit/README.markdown | 91 ++ Pods/PromiseKit/Sources/AnyPromise+Private.h | 43 + Pods/PromiseKit/Sources/AnyPromise.h | 288 ++++ Pods/PromiseKit/Sources/AnyPromise.m | 164 ++ Pods/PromiseKit/Sources/AnyPromise.swift | 217 +++ Pods/PromiseKit/Sources/ErrorUnhandler.swift | 107 ++ .../PromiseKit/Sources/NSError+Cancellation.h | 16 + Pods/PromiseKit/Sources/NSJSONFromData.swift | 44 + .../Sources/NSMethodSignatureForBlock.m | 77 + Pods/PromiseKit/Sources/PMK.modulemap | 32 + .../PromiseKit/Sources/PMKCallVariadicBlock.m | 142 ++ Pods/PromiseKit/Sources/PMKPromise.h | 83 + Pods/PromiseKit/Sources/PMKPromise.m | 107 ++ .../Sources/Promise+Properties.swift | 60 + Pods/PromiseKit/Sources/Promise.h | 8 + Pods/PromiseKit/Sources/Promise.swift | 506 ++++++ Pods/PromiseKit/Sources/PromiseKit.h | 262 +++ Pods/PromiseKit/Sources/Sealant.swift | 86 + Pods/PromiseKit/Sources/State.swift | 155 ++ Pods/PromiseKit/Sources/Umbrella.h | 29 + Pods/PromiseKit/Sources/after.m | 13 + Pods/PromiseKit/Sources/after.swift | 23 + Pods/PromiseKit/Sources/dispatch_promise.m | 10 + .../PromiseKit/Sources/dispatch_promise.swift | 14 + Pods/PromiseKit/Sources/hang.m | 24 + Pods/PromiseKit/Sources/join.m | 40 + Pods/PromiseKit/Sources/race.swift | 8 + Pods/PromiseKit/Sources/when.m | 83 + Pods/PromiseKit/Sources/when.swift | 56 + .../Pods-Snell-PromiseKit/Info.plist | 26 + .../Pods-Snell-PromiseKit-Private.xcconfig | 12 + .../Pods-Snell-PromiseKit-dummy.m | 5 + .../Pods-Snell-PromiseKit-prefix.pch | 5 + .../Pods-Snell-PromiseKit.modulemap | 32 + .../Pods-Snell-PromiseKit.xcconfig | 2 + .../Pods-Snell/Info.plist | 26 + .../Pods-Snell-acknowledgements.markdown | 7 + .../Pods-Snell-acknowledgements.plist | 37 + .../Pods-Snell/Pods-Snell-dummy.m | 5 + .../Pods-Snell/Pods-Snell-environment.h | 14 + .../Pods-Snell/Pods-Snell-frameworks.sh | 52 + .../Pods-Snell/Pods-Snell-resources.sh | 93 ++ .../Pods-Snell/Pods-Snell-umbrella.h | 6 + .../Pods-Snell/Pods-Snell.debug.xcconfig | 10 + .../Pods-Snell/Pods-Snell.modulemap | 6 + .../Pods-Snell/Pods-Snell.release.xcconfig | 10 + .../Pods-SnellTests-Nimble-Private.xcconfig | 2 +- .../Pods-SnellTests-Quick-Private.xcconfig | 2 +- Snell.xcodeproj/project.pbxproj | 43 + .../Controllers/DemoController.swift | 33 +- Snell/DemoProject/DemoRouter.swift | 8 +- .../Adapters/GCDWebServerAdapter.swift | 26 +- Snell/SnellCore/Controller.swift | 7 +- Snell/SnellCore/Repository.swift | 26 + Snell/SnellCore/Response.swift | 4 + Snell/SnellCore/Router.swift | 40 +- Snell/SnellCore/Snell.swift | 4 +- 74 files changed, 4880 insertions(+), 540 deletions(-) create mode 120000 Pods/Headers/Private/PromiseKit/AnyPromise.h create mode 120000 Pods/Headers/Private/PromiseKit/NSError+Cancellation.h create mode 120000 Pods/Headers/Private/PromiseKit/PMKPromise.h create mode 120000 Pods/Headers/Private/PromiseKit/Promise.h create mode 120000 Pods/Headers/Private/PromiseKit/PromiseKit.h create mode 120000 Pods/Headers/Private/PromiseKit/Umbrella.h create mode 120000 Pods/Headers/Public/PromiseKit/AnyPromise.h create mode 120000 Pods/Headers/Public/PromiseKit/NSError+Cancellation.h create mode 120000 Pods/Headers/Public/PromiseKit/PMKPromise.h create mode 120000 Pods/Headers/Public/PromiseKit/Promise.h create mode 120000 Pods/Headers/Public/PromiseKit/PromiseKit.h create mode 120000 Pods/Headers/Public/PromiseKit/Umbrella.h create mode 100644 Pods/Local Podspecs/PromiseKit.podspec.json create mode 100644 Pods/PromiseKit/README.markdown create mode 100644 Pods/PromiseKit/Sources/AnyPromise+Private.h create mode 100644 Pods/PromiseKit/Sources/AnyPromise.h create mode 100644 Pods/PromiseKit/Sources/AnyPromise.m create mode 100644 Pods/PromiseKit/Sources/AnyPromise.swift create mode 100644 Pods/PromiseKit/Sources/ErrorUnhandler.swift create mode 100644 Pods/PromiseKit/Sources/NSError+Cancellation.h create mode 100644 Pods/PromiseKit/Sources/NSJSONFromData.swift create mode 100644 Pods/PromiseKit/Sources/NSMethodSignatureForBlock.m create mode 100644 Pods/PromiseKit/Sources/PMK.modulemap create mode 100644 Pods/PromiseKit/Sources/PMKCallVariadicBlock.m create mode 100644 Pods/PromiseKit/Sources/PMKPromise.h create mode 100644 Pods/PromiseKit/Sources/PMKPromise.m create mode 100644 Pods/PromiseKit/Sources/Promise+Properties.swift create mode 100644 Pods/PromiseKit/Sources/Promise.h create mode 100644 Pods/PromiseKit/Sources/Promise.swift create mode 100644 Pods/PromiseKit/Sources/PromiseKit.h create mode 100644 Pods/PromiseKit/Sources/Sealant.swift create mode 100644 Pods/PromiseKit/Sources/State.swift create mode 100644 Pods/PromiseKit/Sources/Umbrella.h create mode 100644 Pods/PromiseKit/Sources/after.m create mode 100644 Pods/PromiseKit/Sources/after.swift create mode 100644 Pods/PromiseKit/Sources/dispatch_promise.m create mode 100644 Pods/PromiseKit/Sources/dispatch_promise.swift create mode 100644 Pods/PromiseKit/Sources/hang.m create mode 100644 Pods/PromiseKit/Sources/join.m create mode 100644 Pods/PromiseKit/Sources/race.swift create mode 100644 Pods/PromiseKit/Sources/when.m create mode 100644 Pods/PromiseKit/Sources/when.swift create mode 100644 Pods/Target Support Files/Pods-Snell-PromiseKit/Info.plist create mode 100644 Pods/Target Support Files/Pods-Snell-PromiseKit/Pods-Snell-PromiseKit-Private.xcconfig create mode 100644 Pods/Target Support Files/Pods-Snell-PromiseKit/Pods-Snell-PromiseKit-dummy.m create mode 100644 Pods/Target Support Files/Pods-Snell-PromiseKit/Pods-Snell-PromiseKit-prefix.pch create mode 100644 Pods/Target Support Files/Pods-Snell-PromiseKit/Pods-Snell-PromiseKit.modulemap create mode 100644 Pods/Target Support Files/Pods-Snell-PromiseKit/Pods-Snell-PromiseKit.xcconfig create mode 100644 Pods/Target Support Files/Pods-Snell/Info.plist create mode 100644 Pods/Target Support Files/Pods-Snell/Pods-Snell-acknowledgements.markdown create mode 100644 Pods/Target Support Files/Pods-Snell/Pods-Snell-acknowledgements.plist create mode 100644 Pods/Target Support Files/Pods-Snell/Pods-Snell-dummy.m create mode 100644 Pods/Target Support Files/Pods-Snell/Pods-Snell-environment.h create mode 100755 Pods/Target Support Files/Pods-Snell/Pods-Snell-frameworks.sh create mode 100755 Pods/Target Support Files/Pods-Snell/Pods-Snell-resources.sh create mode 100644 Pods/Target Support Files/Pods-Snell/Pods-Snell-umbrella.h create mode 100644 Pods/Target Support Files/Pods-Snell/Pods-Snell.debug.xcconfig create mode 100644 Pods/Target Support Files/Pods-Snell/Pods-Snell.modulemap create mode 100644 Pods/Target Support Files/Pods-Snell/Pods-Snell.release.xcconfig create mode 100644 Snell/SnellCore/Repository.swift diff --git a/Podfile b/Podfile index ed3c32f..67ef004 100644 --- a/Podfile +++ b/Podfile @@ -2,7 +2,11 @@ platform :osx, '10.10' use_frameworks! +target 'Snell' do + pod 'PromiseKit/CorePromise', git: 'https://github.com/mxcl/PromiseKit', branch: 'swift-2.0' +end + target 'SnellTests' do - pod 'Quick', :git => 'https://github.com/Quick/Quick.git', :branch => 'swift-2.0' - pod 'Nimble', :git => 'https://github.com/Quick/Nimble.git', :branch => 'swift-2.0' + pod 'Quick', git: 'https://github.com/Quick/Quick.git', branch: 'swift-2.0' + pod 'Nimble', git: 'https://github.com/Quick/Nimble.git', branch: 'swift-2.0' end diff --git a/Podfile.lock b/Podfile.lock index 7d6607c..1c15904 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -1,15 +1,20 @@ PODS: - Nimble (2.0.0-rc.1) + - PromiseKit/CorePromise (2.0.3) - Quick (0.4.0) DEPENDENCIES: - Nimble (from `https://github.com/Quick/Nimble.git`, branch `swift-2.0`) + - PromiseKit/CorePromise (from `https://github.com/mxcl/PromiseKit`, branch `swift-2.0`) - Quick (from `https://github.com/Quick/Quick.git`, branch `swift-2.0`) EXTERNAL SOURCES: Nimble: :branch: swift-2.0 :git: https://github.com/Quick/Nimble.git + PromiseKit: + :branch: swift-2.0 + :git: https://github.com/mxcl/PromiseKit Quick: :branch: swift-2.0 :git: https://github.com/Quick/Quick.git @@ -18,12 +23,16 @@ CHECKOUT OPTIONS: Nimble: :commit: 463b70b9d4c0d4d9879fb35e24b2d2109b648eb8 :git: https://github.com/Quick/Nimble.git + PromiseKit: + :commit: bc3471f95dde68244f758487e3e4c1c7c1816c27 + :git: https://github.com/mxcl/PromiseKit Quick: :commit: 4609b61c8bd52ec7a4438888c7f6cb9b630537b4 :git: https://github.com/Quick/Quick.git SPEC CHECKSUMS: Nimble: 9572458605e65c9fc5a56754ab19a970f6ab5a88 + PromiseKit: 2f0b2d5bbf1277d72991ba899e194f69703c0fdc Quick: 5f29ead769ddfa8d3ff7a75dbcb98d838b52f53c COCOAPODS: 0.37.2 diff --git a/Pods/Headers/Private/PromiseKit/AnyPromise.h b/Pods/Headers/Private/PromiseKit/AnyPromise.h new file mode 120000 index 0000000..61ce91e --- /dev/null +++ b/Pods/Headers/Private/PromiseKit/AnyPromise.h @@ -0,0 +1 @@ +../../../PromiseKit/Sources/AnyPromise.h \ No newline at end of file diff --git a/Pods/Headers/Private/PromiseKit/NSError+Cancellation.h b/Pods/Headers/Private/PromiseKit/NSError+Cancellation.h new file mode 120000 index 0000000..7312b04 --- /dev/null +++ b/Pods/Headers/Private/PromiseKit/NSError+Cancellation.h @@ -0,0 +1 @@ +../../../PromiseKit/Sources/NSError+Cancellation.h \ No newline at end of file diff --git a/Pods/Headers/Private/PromiseKit/PMKPromise.h b/Pods/Headers/Private/PromiseKit/PMKPromise.h new file mode 120000 index 0000000..8dc7e84 --- /dev/null +++ b/Pods/Headers/Private/PromiseKit/PMKPromise.h @@ -0,0 +1 @@ +../../../PromiseKit/Sources/PMKPromise.h \ No newline at end of file diff --git a/Pods/Headers/Private/PromiseKit/Promise.h b/Pods/Headers/Private/PromiseKit/Promise.h new file mode 120000 index 0000000..952643d --- /dev/null +++ b/Pods/Headers/Private/PromiseKit/Promise.h @@ -0,0 +1 @@ +../../../PromiseKit/Sources/Promise.h \ No newline at end of file diff --git a/Pods/Headers/Private/PromiseKit/PromiseKit.h b/Pods/Headers/Private/PromiseKit/PromiseKit.h new file mode 120000 index 0000000..c941a07 --- /dev/null +++ b/Pods/Headers/Private/PromiseKit/PromiseKit.h @@ -0,0 +1 @@ +../../../PromiseKit/Sources/PromiseKit.h \ No newline at end of file diff --git a/Pods/Headers/Private/PromiseKit/Umbrella.h b/Pods/Headers/Private/PromiseKit/Umbrella.h new file mode 120000 index 0000000..ac97619 --- /dev/null +++ b/Pods/Headers/Private/PromiseKit/Umbrella.h @@ -0,0 +1 @@ +../../../PromiseKit/Sources/Umbrella.h \ No newline at end of file diff --git a/Pods/Headers/Public/PromiseKit/AnyPromise.h b/Pods/Headers/Public/PromiseKit/AnyPromise.h new file mode 120000 index 0000000..61ce91e --- /dev/null +++ b/Pods/Headers/Public/PromiseKit/AnyPromise.h @@ -0,0 +1 @@ +../../../PromiseKit/Sources/AnyPromise.h \ No newline at end of file diff --git a/Pods/Headers/Public/PromiseKit/NSError+Cancellation.h b/Pods/Headers/Public/PromiseKit/NSError+Cancellation.h new file mode 120000 index 0000000..7312b04 --- /dev/null +++ b/Pods/Headers/Public/PromiseKit/NSError+Cancellation.h @@ -0,0 +1 @@ +../../../PromiseKit/Sources/NSError+Cancellation.h \ No newline at end of file diff --git a/Pods/Headers/Public/PromiseKit/PMKPromise.h b/Pods/Headers/Public/PromiseKit/PMKPromise.h new file mode 120000 index 0000000..8dc7e84 --- /dev/null +++ b/Pods/Headers/Public/PromiseKit/PMKPromise.h @@ -0,0 +1 @@ +../../../PromiseKit/Sources/PMKPromise.h \ No newline at end of file diff --git a/Pods/Headers/Public/PromiseKit/Promise.h b/Pods/Headers/Public/PromiseKit/Promise.h new file mode 120000 index 0000000..952643d --- /dev/null +++ b/Pods/Headers/Public/PromiseKit/Promise.h @@ -0,0 +1 @@ +../../../PromiseKit/Sources/Promise.h \ No newline at end of file diff --git a/Pods/Headers/Public/PromiseKit/PromiseKit.h b/Pods/Headers/Public/PromiseKit/PromiseKit.h new file mode 120000 index 0000000..c941a07 --- /dev/null +++ b/Pods/Headers/Public/PromiseKit/PromiseKit.h @@ -0,0 +1 @@ +../../../PromiseKit/Sources/PromiseKit.h \ No newline at end of file diff --git a/Pods/Headers/Public/PromiseKit/Umbrella.h b/Pods/Headers/Public/PromiseKit/Umbrella.h new file mode 120000 index 0000000..ac97619 --- /dev/null +++ b/Pods/Headers/Public/PromiseKit/Umbrella.h @@ -0,0 +1 @@ +../../../PromiseKit/Sources/Umbrella.h \ No newline at end of file diff --git a/Pods/Local Podspecs/PromiseKit.podspec.json b/Pods/Local Podspecs/PromiseKit.podspec.json new file mode 100644 index 0000000..0c69705 --- /dev/null +++ b/Pods/Local Podspecs/PromiseKit.podspec.json @@ -0,0 +1,646 @@ +{ + "name": "PromiseKit", + "version": "2.0.3", + "source": { + "git": "https://github.com/mxcl/PromiseKit.git", + "tag": "2.0.3" + }, + "license": { + "type": "MIT", + "text": "@see README" + }, + "summary": "A delightful Promises implementation for iOS and OS X.", + "homepage": "http://promisekit.org", + "description": "UIActionSheet UIAlertView CLLocationManager MFMailComposeViewController ACAccountStore StoreKit SKRequest SKProductRequest blocks", + "social_media_url": "https://twitter.com/mxcl", + "authors": { + "Max Howell": "mxcl@me.com" + }, + "documentation_url": "http://promisekit.org/introduction/", + "default_subspecs": [ + "Foundation", + "UIKit", + "QuartzCore" + ], + "requires_arc": true, + "platforms": { + "ios": "8.0", + "osx": "10.9" + }, + "module_map": "Sources/PMK.modulemap", + "xcconfig": { + "SWIFT_INSTALL_OBJC_HEADER": "NO" + }, + "subspecs": [ + { + "name": "Accounts", + "source_files": "Categories/Accounts/*", + "dependencies": { + "PromiseKit/CorePromise": [ + + ] + }, + "frameworks": "Accounts" + }, + { + "name": "AddressBook", + "ios": { + "source_files": "Categories/AddressBook/*", + "frameworks": "AddressBook" + }, + "dependencies": { + "PromiseKit/CorePromise": [ + + ] + } + }, + { + "name": "AssetsLibrary", + "ios": { + "source_files": "Categories/AssetsLibrary/*", + "frameworks": "AssetsLibrary" + }, + "dependencies": { + "PromiseKit/UIKit": [ + + ] + } + }, + { + "name": "AVFoundation", + "ios": { + "source_files": "Categories/AVFoundation/*", + "frameworks": "AVFoundation" + }, + "dependencies": { + "PromiseKit/CorePromise": [ + + ] + } + }, + { + "name": "CloudKit", + "source_files": "Categories/CloudKit/*", + "dependencies": { + "PromiseKit/CorePromise": [ + + ] + }, + "frameworks": "CloudKit", + "platforms": { + "ios": "8.0", + "osx": "10.10" + } + }, + { + "name": "CorePromise", + "source_files": [ + "Sources/*.{swift}", + "Sources/{after,AnyPromise,dispatch_promise,hang,join,PMKPromise,when}.m", + "Sources/AnyPromise.h", + "Sources/NSError+Cancellation.h", + "Sources/PMKPromise.h", + "Sources/Promise.h", + "Sources/PromiseKit.h", + "Sources/Umbrella.h" + ], + "public_header_files": [ + "Sources/AnyPromise.h", + "Sources/NSError+Cancellation.h", + "Sources/PMKPromise.h", + "Sources/Promise.h", + "Sources/PromiseKit.h", + "Sources/Umbrella.h" + ], + "preserve_paths": [ + "Sources/AnyPromise+Private.h", + "Sources/PMKCallVariadicBlock.m", + "Sources/NSMethodSignatureForBlock.m" + ], + "frameworks": "Foundation" + }, + { + "name": "CoreLocation", + "source_files": "Categories/CoreLocation/*", + "dependencies": { + "PromiseKit/CorePromise": [ + + ] + }, + "frameworks": "CoreLocation" + }, + { + "name": "Foundation", + "ios": { + "source_files": [ + "Categories/Foundation/afterlife.swift", + "Categories/Foundation/NSFileManager+Promise.swift", + "Categories/Foundation/NSNotificationCenter+AnyPromise.h", + "Categories/Foundation/NSNotificationCenter+AnyPromise.m", + "Categories/Foundation/NSNotificationCenter+Promise.swift", + "Categories/Foundation/NSObject+Promise.swift", + "Categories/Foundation/NSURLConnection+AnyPromise.h", + "Categories/Foundation/NSURLConnection+AnyPromise.m", + "Categories/Foundation/NSURLConnection+Promise.swift" + ] + }, + "osx": { + "source_files": "Categories/Foundation/*" + }, + "dependencies": { + "PromiseKit/CorePromise": [ + + ], + "OMGHTTPURLRQ": [ + + ] + }, + "frameworks": "Foundation" + }, + { + "name": "MapKit", + "source_files": "Categories/MapKit/*", + "dependencies": { + "PromiseKit/CorePromise": [ + + ] + }, + "frameworks": "MapKit" + }, + { + "name": "MessageUI", + "ios": { + "source_files": "Categories/MessageUI/*", + "frameworks": "MessageUI" + }, + "dependencies": { + "PromiseKit/CorePromise": [ + + ] + } + }, + { + "name": "Photos", + "ios": { + "source_files": "Categories/Photos/*", + "frameworks": "Photos" + }, + "dependencies": { + "PromiseKit/CorePromise": [ + + ] + } + }, + { + "name": "QuartzCore", + "source_files": "Categories/QuartzCore/*", + "dependencies": { + "PromiseKit/CorePromise": [ + + ] + }, + "frameworks": "QuartzCore" + }, + { + "name": "Social", + "ios": { + "source_files": "Categories/Social/*" + }, + "osx": { + "source_files": [ + "Categories/Social/SLRequest+AnyPromise.h", + "Categories/Social/SLRequest+AnyPromise.m", + "Categories/Social/SLRequest+Promise.swift" + ] + }, + "dependencies": { + "PromiseKit/CorePromise": [ + + ] + }, + "frameworks": "Social" + }, + { + "name": "StoreKit", + "source_files": "Categories/StoreKit/*", + "dependencies": { + "PromiseKit/CorePromise": [ + + ] + }, + "frameworks": "StoreKit" + }, + { + "name": "SystemConfiguration", + "source_files": "Categories/SystemConfiguration/*", + "dependencies": { + "PromiseKit/CorePromise": [ + + ] + }, + "frameworks": "SystemConfiguration" + }, + { + "name": "UIKit", + "ios": { + "source_files": "Categories/UIKit/*", + "frameworks": "UIKit" + }, + "dependencies": { + "PromiseKit/CorePromise": [ + + ] + } + }, + { + "name": "base", + "dependencies": { + "PromiseKit/CorePromise": [ + + ] + } + }, + { + "name": "Promise", + "dependencies": { + "PromiseKit/CorePromise": [ + + ] + } + }, + { + "name": "Pause", + "dependencies": { + "PromiseKit/CorePromise": [ + + ] + } + }, + { + "name": "Until", + "dependencies": { + "PromiseKit/CorePromise": [ + + ] + } + }, + { + "name": "When", + "dependencies": { + "PromiseKit/CorePromise": [ + + ] + } + }, + { + "name": "Join", + "dependencies": { + "PromiseKit/CorePromise": [ + + ] + } + }, + { + "name": "Hang", + "dependencies": { + "PromiseKit/CorePromise": [ + + ] + } + }, + { + "name": "Zalgo", + "dependencies": { + "PromiseKit/CorePromise": [ + + ] + } + }, + { + "name": "all", + "dependencies": { + "PromiseKit/Accounts": [ + + ], + "PromiseKit/AVFoundation": [ + + ], + "PromiseKit/CloudKit": [ + + ], + "PromiseKit/CoreLocation": [ + + ], + "PromiseKit/Foundation": [ + + ], + "PromiseKit/MapKit": [ + + ], + "PromiseKit/Social": [ + + ], + "PromiseKit/StoreKit": [ + + ], + "PromiseKit/UIKit": [ + + ], + "PromiseKit/QuartzCore": [ + + ] + } + }, + { + "name": "ACAccountStore", + "dependencies": { + "PromiseKit/Accounts": [ + + ] + } + }, + { + "name": "AVAudioSession", + "dependencies": { + "PromiseKit/AVFoundation": [ + + ] + } + }, + { + "name": "CLGeocoder", + "dependencies": { + "PromiseKit/CoreLocation": [ + + ] + } + }, + { + "name": "CKContainer", + "dependencies": { + "PromiseKit/CloudKit": [ + + ] + } + }, + { + "name": "CKDatabase", + "dependencies": { + "PromiseKit/CloudKit": [ + + ] + } + }, + { + "name": "CLLocationManager", + "dependencies": { + "PromiseKit/CoreLocation": [ + + ] + } + }, + { + "name": "MKDirections", + "dependencies": { + "PromiseKit/MapKit": [ + + ] + } + }, + { + "name": "MKMapSnapshotter", + "dependencies": { + "PromiseKit/MapKit": [ + + ] + } + }, + { + "name": "NSFileManager", + "dependencies": { + "PromiseKit/Foundation": [ + + ] + } + }, + { + "name": "NSNotificationCenter", + "dependencies": { + "PromiseKit/Foundation": [ + + ] + } + }, + { + "name": "NSTask", + "dependencies": { + "PromiseKit/Foundation": [ + + ] + } + }, + { + "name": "NSURLConnection", + "dependencies": { + "PromiseKit/Foundation": [ + + ] + } + }, + { + "name": "SKRequest", + "dependencies": { + "PromiseKit/StoreKit": [ + + ] + } + }, + { + "name": "SKProductsRequest", + "dependencies": { + "PromiseKit/StoreKit": [ + + ] + } + }, + { + "name": "SLRequest", + "dependencies": { + "PromiseKit/Social": [ + + ] + } + }, + { + "name": "UIActionSheet", + "dependencies": { + "PromiseKit/UIKit": [ + + ] + } + }, + { + "name": "UIAlertView", + "dependencies": { + "PromiseKit/UIKit": [ + + ] + } + }, + { + "name": "UIView", + "dependencies": { + "PromiseKit/UIKit": [ + + ] + } + }, + { + "name": "UIViewController", + "dependencies": { + "PromiseKit/UIKit": [ + + ] + } + }, + { + "name": "CALayer", + "dependencies": { + "PromiseKit/QuartzCore": [ + + ] + } + }, + { + "name": "Swift", + "default_subspecs": [ + "Foundation", + "UIKit" + ], + "subspecs": [ + { + "name": "Promise", + "dependencies": { + "PromiseKit/CorePromise": [ + + ] + } + }, + { + "name": "NSJSONFromData", + "dependencies": { + "PromiseKit/CorePromise": [ + + ] + } + }, + { + "name": "CloudKit", + "dependencies": { + "PromiseKit/CloudKit": [ + + ] + } + }, + { + "name": "UIKit", + "dependencies": { + "PromiseKit/UIKit": [ + + ] + } + }, + { + "name": "CoreLocation", + "dependencies": { + "PromiseKit/CoreLocation": [ + + ] + } + }, + { + "name": "MapKit", + "dependencies": { + "PromiseKit/MapKit": [ + + ] + } + }, + { + "name": "Social", + "dependencies": { + "PromiseKit/Social": [ + + ] + } + }, + { + "name": "StoreKit", + "dependencies": { + "PromiseKit/StoreKit": [ + + ] + } + }, + { + "name": "Foundation", + "dependencies": { + "PromiseKit/Foundation": [ + + ] + } + }, + { + "name": "NSNotificationCenter", + "dependencies": { + "PromiseKit/NSNotificationCenter": [ + + ] + } + }, + { + "name": "Accounts", + "dependencies": { + "PromiseKit/Accounts": [ + + ] + } + }, + { + "name": "AVFoundation", + "dependencies": { + "PromiseKit/AVFoundation": [ + + ] + } + }, + { + "name": "all", + "dependencies": { + "PromiseKit/Swift/CloudKit": [ + + ], + "PromiseKit/Swift/CoreLocation": [ + + ], + "PromiseKit/Swift/Foundation": [ + + ], + "PromiseKit/Swift/MapKit": [ + + ], + "PromiseKit/Swift/Social": [ + + ], + "PromiseKit/Swift/StoreKit": [ + + ], + "PromiseKit/Swift/UIKit": [ + + ] + } + } + ] + } + ] +} diff --git a/Pods/Manifest.lock b/Pods/Manifest.lock index 7d6607c..1c15904 100644 --- a/Pods/Manifest.lock +++ b/Pods/Manifest.lock @@ -1,15 +1,20 @@ PODS: - Nimble (2.0.0-rc.1) + - PromiseKit/CorePromise (2.0.3) - Quick (0.4.0) DEPENDENCIES: - Nimble (from `https://github.com/Quick/Nimble.git`, branch `swift-2.0`) + - PromiseKit/CorePromise (from `https://github.com/mxcl/PromiseKit`, branch `swift-2.0`) - Quick (from `https://github.com/Quick/Quick.git`, branch `swift-2.0`) EXTERNAL SOURCES: Nimble: :branch: swift-2.0 :git: https://github.com/Quick/Nimble.git + PromiseKit: + :branch: swift-2.0 + :git: https://github.com/mxcl/PromiseKit Quick: :branch: swift-2.0 :git: https://github.com/Quick/Quick.git @@ -18,12 +23,16 @@ CHECKOUT OPTIONS: Nimble: :commit: 463b70b9d4c0d4d9879fb35e24b2d2109b648eb8 :git: https://github.com/Quick/Nimble.git + PromiseKit: + :commit: bc3471f95dde68244f758487e3e4c1c7c1816c27 + :git: https://github.com/mxcl/PromiseKit Quick: :commit: 4609b61c8bd52ec7a4438888c7f6cb9b630537b4 :git: https://github.com/Quick/Quick.git SPEC CHECKSUMS: Nimble: 9572458605e65c9fc5a56754ab19a970f6ab5a88 + PromiseKit: 2f0b2d5bbf1277d72991ba899e194f69703c0fdc Quick: 5f29ead769ddfa8d3ff7a75dbcb98d838b52f53c COCOAPODS: 0.37.2 diff --git a/Pods/Pods.xcodeproj/project.pbxproj b/Pods/Pods.xcodeproj/project.pbxproj index a2c30f8..8f113dd 100644 --- a/Pods/Pods.xcodeproj/project.pbxproj +++ b/Pods/Pods.xcodeproj/project.pbxproj @@ -7,495 +7,710 @@ objects = { /* Begin PBXBuildFile section */ - 0032C2340FF89048367D957E /* Pods-SnellTests-Quick-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 6C68A059FBF3A725F873DAB6 /* Pods-SnellTests-Quick-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 01D2C6CBC6F56AFFCE4AE960 /* QCKDSL.h in Headers */ = {isa = PBXBuildFile; fileRef = 5BD02BBE10E8EB9F58ACF003 /* QCKDSL.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 039D4978F78B9733DB9BB983 /* XCTest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CD39A4858FD00A71EBC5A0B5 /* XCTest.framework */; }; - 043F894252DDB6C142B70332 /* Filter.swift in Sources */ = {isa = PBXBuildFile; fileRef = C51528AD567F9DFD98E7347C /* Filter.swift */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 0BE663B0CC7AD4513D4256D0 /* DSL.m in Sources */ = {isa = PBXBuildFile; fileRef = 2275E8DB55D5027CF1B4393F /* DSL.m */; }; - 0C45A40633DC021EDDA787BF /* QuickSpec.h in Headers */ = {isa = PBXBuildFile; fileRef = 1D9B393B62A74582363BB104 /* QuickSpec.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 0E4151991E2758BB34F9F3B4 /* MatcherProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = D72384CD3C4FE659B6C43043 /* MatcherProtocols.swift */; }; - 1194F249D5AEAF0FB1184260 /* BeCloseTo.swift in Sources */ = {isa = PBXBuildFile; fileRef = C78D5B4362BC033EADB91C16 /* BeCloseTo.swift */; }; - 1301556B1D47614D23CB85E1 /* MatcherFunc.swift in Sources */ = {isa = PBXBuildFile; fileRef = 776939B1355FC6ABC3064E6B /* MatcherFunc.swift */; }; - 165703213B2C93C4A0E41047 /* World.h in Headers */ = {isa = PBXBuildFile; fileRef = BED7F7FA8BB81E4A2365A5FC /* World.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 20ED1F81F3E610105E9EA83B /* Expression.swift in Sources */ = {isa = PBXBuildFile; fileRef = 53798F77EA5A929F238544EC /* Expression.swift */; }; - 286AA6B4E92FF2587FE0B769 /* World+DSL.h in Headers */ = {isa = PBXBuildFile; fileRef = 8F19387CDADBB46D59464AED /* World+DSL.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 2AC9A128D61CE606575846BF /* QuickConfiguration.h in Headers */ = {isa = PBXBuildFile; fileRef = 01DDAAD1AF3895A8708CD88D /* QuickConfiguration.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2EAD062D67287C58984BFBD8 /* ExampleGroup.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4857E42D67A8F81BAB39EBD9 /* ExampleGroup.swift */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 362C5BAB82B830243B2F1A02 /* Callsite.swift in Sources */ = {isa = PBXBuildFile; fileRef = FC863588356251AD6F13ACD0 /* Callsite.swift */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 367CEEDA11C0C4E4CA0DDC3A /* ExampleHooks.swift in Sources */ = {isa = PBXBuildFile; fileRef = B886094B7E1C2ED22FCC3B35 /* ExampleHooks.swift */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 36D15A60B8A5E62529102429 /* BeEmpty.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7EE5BE99AF3D70A2F99647CD /* BeEmpty.swift */; }; - 36D8D7FD8953B57BCB96DDB5 /* NSString+QCKSelectorName.m in Sources */ = {isa = PBXBuildFile; fileRef = 20DF1A9B55BA3FE88B289454 /* NSString+QCKSelectorName.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 388AB80C74B5AFD30F7C5368 /* Pods-SnellTests-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 1E3D5CD2B6AAFAB691840D71 /* Pods-SnellTests-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3C63BFED57B3711787C9AD33 /* Pods-SnellTests-Quick-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 4117D72FE354B2848CE80372 /* Pods-SnellTests-Quick-dummy.m */; }; - 3E66834035DD13EA098FB012 /* QuickConfiguration.m in Sources */ = {isa = PBXBuildFile; fileRef = 435416684067EDD5C0E3160A /* QuickConfiguration.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 43E5A11AE675610D66C843B7 /* AssertionRecorder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08FBDDA344172E8024964BA9 /* AssertionRecorder.swift */; }; - 4558D84285A8C2128CE18268 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DA3EBE6297F09C7B8FC1A158 /* Cocoa.framework */; }; - 49689281C4546350B53D97A1 /* Quick.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BA8DC802B3120641A2F75F8 /* Quick.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 49B314E1C2F64429D85E0AF5 /* Closures.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06E3315232BEDF5F99EE94D9 /* Closures.swift */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 4C06F02A404A3F6F41E883E0 /* BeLessThanOrEqual.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33636D9077E90BC5E30D5FC0 /* BeLessThanOrEqual.swift */; }; - 4C515DB1597A7604B08F1E4B /* BeLogical.swift in Sources */ = {isa = PBXBuildFile; fileRef = D00C3EA1E5073B065B5A1DB8 /* BeLogical.swift */; }; - 4CE58175C35077ACAFE1F292 /* EndWith.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8275F0B0B8EDD501879BBAC3 /* EndWith.swift */; }; - 4E6C6A498805161D94B77ACF /* Poll.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD185BAB0D1A85128CD187FD /* Poll.swift */; }; - 50E51D6764A6F6B05B1525A9 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DA3EBE6297F09C7B8FC1A158 /* Cocoa.framework */; }; - 521DCC88BAF93916010CE731 /* Equal.swift in Sources */ = {isa = PBXBuildFile; fileRef = F6D0BD06B3C0D85CEE460C32 /* Equal.swift */; }; - 549AC13F9D4A2DBAD9853063 /* BeAnInstanceOf.swift in Sources */ = {isa = PBXBuildFile; fileRef = FEB27B0FA5443210A17676D7 /* BeAnInstanceOf.swift */; }; - 55A9B578F36CDB5C13911431 /* AsyncMatcherWrapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = E5782C3E3FE4BABBDAD309A7 /* AsyncMatcherWrapper.swift */; }; - 5A23F7624CEC750379795A08 /* RaisesException.swift in Sources */ = {isa = PBXBuildFile; fileRef = E5A1C36746B685F9791DF3C7 /* RaisesException.swift */; }; - 5E157F18EB4041A931775C55 /* Contain.swift in Sources */ = {isa = PBXBuildFile; fileRef = D15ABFB37088B28667827DAA /* Contain.swift */; }; - 637583220EA3540356890715 /* AssertionDispatcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2A07861B18353C578FE1ABED /* AssertionDispatcher.swift */; }; - 68371E1A38831E279EC76C59 /* SuiteHooks.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7457FEC3597A242256A19BC /* SuiteHooks.swift */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 6CED8E13E01A162B57A316E4 /* NMBExceptionCapture.h in Headers */ = {isa = PBXBuildFile; fileRef = A65A70218A84D990ED6B1D57 /* NMBExceptionCapture.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 786EA02A0A1E040EAACA81CD /* Nimble.h in Headers */ = {isa = PBXBuildFile; fileRef = 2A6311FE6827744A2BC3B4DA /* Nimble.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7E2F68958977E02FBC78EB78 /* World.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3A7338EBEF9B99DA81BB611A /* World.swift */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 7FB634EF9A0BE1016FF0446E /* Expectation.swift in Sources */ = {isa = PBXBuildFile; fileRef = F81E639AEAD5A3D81F0D701F /* Expectation.swift */; }; - 7FB9E26E000D9A0950A5A2CE /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DA3EBE6297F09C7B8FC1A158 /* Cocoa.framework */; }; - 86415EC0CBCEF7408F0A7753 /* BeGreaterThanOrEqualTo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 98B59717E9A3BE34CDAD3F24 /* BeGreaterThanOrEqualTo.swift */; }; - 86637DA0AD428E1DC7BDBE8E /* NimbleXCTestHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = B2C0733BD0C05FB58837B5E9 /* NimbleXCTestHandler.swift */; }; - 8CC9C6DA27DB63EA0D0C9D1E /* NSString+QCKSelectorName.h in Headers */ = {isa = PBXBuildFile; fileRef = 7F1496B16BC0988D32C01EBC /* NSString+QCKSelectorName.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 9192DECA89B92BA716317B55 /* ExampleMetadata.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3E39E9744F53FD91D85F40FE /* ExampleMetadata.swift */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 9599686C85B5ABC53C6AAB0C /* QCKDSL.m in Sources */ = {isa = PBXBuildFile; fileRef = 24FBD834B81060EB52FA4B28 /* QCKDSL.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 98B538E05DA50DE7B510066A /* World+DSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = 02C4073E02F2C389A18DF935 /* World+DSL.swift */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - A2F5AB81FD3A9E3F132AEA64 /* Example.swift in Sources */ = {isa = PBXBuildFile; fileRef = 24C30534A80786614180D7DC /* Example.swift */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - A6BB3F307C07D217E214EEF2 /* Functional.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9581DD2DBE1FF4810D23110C /* Functional.swift */; }; - A6EB058B095B775182FE6890 /* BeIdenticalTo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 93E31563F2A0922CC126C226 /* BeIdenticalTo.swift */; }; - AB27897936208F112C344C30 /* DSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74303C12A8D0CBBEBAA637AA /* DSL.swift */; }; - ACD6EDE06A22F5AE8C60430E /* AdapterProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = D02642201B338AA9CB8E96E0 /* AdapterProtocols.swift */; }; - ACEEB4734F2F0112B520CA53 /* Pods-SnellTests-Nimble-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 0B52DC078ECFCF4AA2B52D3F /* Pods-SnellTests-Nimble-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - AE89B152806B83F93611400D /* XCTest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CD39A4858FD00A71EBC5A0B5 /* XCTest.framework */; }; - AEDF7A40B9D8F277454BB815 /* BeNil.swift in Sources */ = {isa = PBXBuildFile; fileRef = 22B3A9F2DAEB0D9E5CE3EA9D /* BeNil.swift */; }; - AFC49BC747EA30FA5C252BDC /* Pods-SnellTests-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = CB53798746F6F13FC77630F6 /* Pods-SnellTests-dummy.m */; }; - B064B379040DF3AC2F70A48A /* Pods-SnellTests-Nimble-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 9195E0C98F5B77D95EAB32B6 /* Pods-SnellTests-Nimble-dummy.m */; }; - B19525215DA6B5EC8F0A0A5C /* DSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = F0C1D8852F6E9FA4F0728470 /* DSL.swift */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - B344C15983C378C92D45BABB /* DSL+Wait.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8D51E6EAED6B1B4DAE631A4B /* DSL+Wait.swift */; }; - BA790392FED5B280CC09A40A /* DSL.h in Headers */ = {isa = PBXBuildFile; fileRef = 67D5DE6D59BF51152BCC4B1C /* DSL.h */; settings = {ATTRIBUTES = (Public, ); }; }; - BD8A3398F991755940E5C9A6 /* NMBExceptionCapture.m in Sources */ = {isa = PBXBuildFile; fileRef = E1FD70EB98AD192885F88A0C /* NMBExceptionCapture.m */; }; - BE6D8AD466B8D75571AB92F6 /* AllPass.swift in Sources */ = {isa = PBXBuildFile; fileRef = 646E5189B0D3F9865A3BD6F0 /* AllPass.swift */; }; - D02090EBC4F667C37950806B /* BeAKindOf.swift in Sources */ = {isa = PBXBuildFile; fileRef = B00562C42EDF35BADD51313B /* BeAKindOf.swift */; }; - D5F0CD4E6826C54E8913E0B4 /* FailureMessage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9494CFCCF2C2575F326891D2 /* FailureMessage.swift */; }; - D828296AA94D608CB4DC4F5B /* QuickSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = E1601CADB84931F1448CD566 /* QuickSpec.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - E3281F49BC8C6040FB9F09F4 /* Match.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9D03226DD759020CC116CBE6 /* Match.swift */; }; - E57D68636C9CF39A4DD0ECF8 /* BeginWith.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7832B1CB59E2A7F00AC9F702 /* BeginWith.swift */; }; - EC2C238E94731F5CA063B728 /* Stringers.swift in Sources */ = {isa = PBXBuildFile; fileRef = B3C1082AD9EAF9742FF4A3D8 /* Stringers.swift */; }; - EE32DA51C814979D4A530066 /* BeGreaterThan.swift in Sources */ = {isa = PBXBuildFile; fileRef = ED37ADC141677FE3E00DEB2B /* BeGreaterThan.swift */; }; - EEAC872E584E7AF92E5A9E11 /* BeLessThan.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3EB868CB88297AFE94F65A07 /* BeLessThan.swift */; }; - EEE54492DEC439DC6D1842EC /* SourceLocation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52E92A5BB46C2C4581249E53 /* SourceLocation.swift */; }; - F320C96FA59A6BD1F6D4523B /* ObjCMatcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = B0E37AACD6BB268BEF2A4434 /* ObjCMatcher.swift */; }; - F69F5C605953AD045F0DBA19 /* Configuration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2A4BF0D9A8EDC771361A3417 /* Configuration.swift */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - FE613FB1609707E2B055F913 /* ObjCExpectation.swift in Sources */ = {isa = PBXBuildFile; fileRef = A4F4E4520F56D4239B89CD29 /* ObjCExpectation.swift */; }; + 024BCBF51073C432707B0A93 /* Filter.swift in Sources */ = {isa = PBXBuildFile; fileRef = E73F98E9EA826A25AC994009 /* Filter.swift */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 0946FAB3FC56BB577E3943FF /* NMBExceptionCapture.h in Headers */ = {isa = PBXBuildFile; fileRef = 96D8E988309C567BCE688A3E /* NMBExceptionCapture.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 0C8A0F12E36014D20C91F743 /* DSL+Wait.swift in Sources */ = {isa = PBXBuildFile; fileRef = 25CCC410D843747CC1D8F816 /* DSL+Wait.swift */; }; + 0D417FB77421A35F781D683B /* World.h in Headers */ = {isa = PBXBuildFile; fileRef = F617A9455A6AAA185E75C042 /* World.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 0E03F2308A2C8D927512B97C /* after.m in Sources */ = {isa = PBXBuildFile; fileRef = 9851DC8005001BE62B297D54 /* after.m */; }; + 0EED1464F39D2BD7435FBBC1 /* Closures.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4387E4D30C59D4E508D6BE4B /* Closures.swift */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 0FBD0B4C4FE2FE69C70532EF /* race.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE7AE95CA58F9F39C873BA77 /* race.swift */; }; + 1C68B8E56AF4C276B86DC8AA /* QuickSpec.h in Headers */ = {isa = PBXBuildFile; fileRef = 1E8FBC56AEF243BC5861973A /* QuickSpec.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1C984B16F136691CB6BA5087 /* RaisesException.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6DE04303208D61A7697157A /* RaisesException.swift */; }; + 202A9B5F84E1B9CB2136AC55 /* dispatch_promise.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A6FDD230758FCDD298DD5C6 /* dispatch_promise.swift */; }; + 20CE3142D8971BC5FFD1A6DE /* Promise+Properties.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9CEE458406DB67F283E13C12 /* Promise+Properties.swift */; }; + 221C241142821CE7A40D37EC /* BeLessThanOrEqual.swift in Sources */ = {isa = PBXBuildFile; fileRef = D587C7813038D43A68FD7A76 /* BeLessThanOrEqual.swift */; }; + 221D62700F0DC72622AE10FD /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E45620AF2388B929CC99A347 /* Foundation.framework */; }; + 22891A86924AE5C70BEA6808 /* Pods-Snell-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 3DF9EF82D09561E32AE6555E /* Pods-Snell-dummy.m */; }; + 22C6083048621F9D18050989 /* Callsite.swift in Sources */ = {isa = PBXBuildFile; fileRef = 957B981BBF839BDA8079F540 /* Callsite.swift */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 26D02F0F16202C4C56C3115F /* ExampleGroup.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0B42C218E9CB21C4AA33F2EE /* ExampleGroup.swift */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 297CC514A9D3AC0341A08DF7 /* when.m in Sources */ = {isa = PBXBuildFile; fileRef = 878995233B0D060AB35404CE /* when.m */; }; + 30031AF0B8740BF43302019A /* Stringers.swift in Sources */ = {isa = PBXBuildFile; fileRef = BE08B87E1D7006405B8EBB38 /* Stringers.swift */; }; + 30E48DC87E537891EC0DBE2D /* BeLogical.swift in Sources */ = {isa = PBXBuildFile; fileRef = 04C48F1899F978DAB9D21385 /* BeLogical.swift */; }; + 31516B03049F3B1E0A559DC2 /* DSL.m in Sources */ = {isa = PBXBuildFile; fileRef = 093657A6B3C7F639092E4AE1 /* DSL.m */; }; + 32737E6F29EE08C8D2320A8B /* NimbleXCTestHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 81D8FE9BC81DCA00A30A99ED /* NimbleXCTestHandler.swift */; }; + 354ACFDFAFA5CE2A33DA58A6 /* AdapterProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 71F358E9AFD1EEE285F6C9A5 /* AdapterProtocols.swift */; }; + 369D6AF6DDE59A1915867F6A /* Equal.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A2D7DC041F9811FAA805145 /* Equal.swift */; }; + 3C6E2D6A45718574E659ACA4 /* Pods-SnellTests-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 73A4BBF05300513F5A492D7B /* Pods-SnellTests-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3CCAA22E4DECF588605B2DE9 /* Pods-SnellTests-Quick-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = B6F3911748E9B8FA9270C7C4 /* Pods-SnellTests-Quick-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3D4AD2CF760D84B4C962C07B /* DSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5A14E05E0D0A806370F5DF78 /* DSL.swift */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 3DFD33D41BE7AB417198DFD6 /* after.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1C0F9BCE1AA2512139F2FEDE /* after.swift */; }; + 4AC98F17D6EC13EF6C37D087 /* Poll.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEB5BB9AAB5D28B57EB094C7 /* Poll.swift */; }; + 4C0C53EB6B96E596FBFDD2D8 /* AssertionDispatcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3EC70ECFCB9B125448034E39 /* AssertionDispatcher.swift */; }; + 4E4884EEEA705E0597EF3892 /* QuickConfiguration.m in Sources */ = {isa = PBXBuildFile; fileRef = CED34D21E78409C3116E2978 /* QuickConfiguration.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 54E8CAF4761BA886703F831F /* NMBExceptionCapture.m in Sources */ = {isa = PBXBuildFile; fileRef = E9369B1200ED15121B2D757B /* NMBExceptionCapture.m */; }; + 57A58A0B2370563B69D94251 /* Pods-SnellTests-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 7C97368CBEB181BA676EA853 /* Pods-SnellTests-dummy.m */; }; + 584C99E1992A19E33598E1EA /* ObjCMatcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = AFA26E0F0E5CFEFA4C67AFD0 /* ObjCMatcher.swift */; }; + 59847A94514CA526C29DCEFF /* Nimble.h in Headers */ = {isa = PBXBuildFile; fileRef = 83383187CF081C71C5A0652E /* Nimble.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 59858BF9589BC03C70AF0204 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6EC49B636A99C393DAB08B51 /* Cocoa.framework */; }; + 5A20FA1BFF62B72009E9D1AE /* Expectation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 637DD72CFC06EA292D376FC6 /* Expectation.swift */; }; + 5DBF952A4BF697F0CF3599E1 /* hang.m in Sources */ = {isa = PBXBuildFile; fileRef = BB3B823FC6A4A2A00462142F /* hang.m */; }; + 5F73A75B5D4525625DECD6D3 /* Quick.h in Headers */ = {isa = PBXBuildFile; fileRef = 506EA75D231AF7B33CB73E3A /* Quick.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5F77E9FF0BC0FB355A9B281B /* Contain.swift in Sources */ = {isa = PBXBuildFile; fileRef = 93578295159BA9AF2C6365F0 /* Contain.swift */; }; + 613976EF9B21526263EC7A4D /* Sealant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 085EF6E325E7390D929EFE98 /* Sealant.swift */; }; + 6161371347587353347EF64A /* BeLessThan.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C92D38A63ACB805F19B1FA3 /* BeLessThan.swift */; }; + 627E7FDE2C0ED1191E4A3E2A /* QuickSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 51271F5BEEA4D51648945440 /* QuickSpec.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 629A872BE93AEEB9D48C0450 /* DSL.h in Headers */ = {isa = PBXBuildFile; fileRef = BAE7FF9277DDFDB35C4248B8 /* DSL.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 646AE6A5684A0531746ABE00 /* SuiteHooks.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC4C145CE4A0A3001FD38E7F /* SuiteHooks.swift */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 64E7C2BC0215C154F33D0F31 /* BeNil.swift in Sources */ = {isa = PBXBuildFile; fileRef = E0A750A44229CA2DE571FCC4 /* BeNil.swift */; }; + 6549E535B9A72329D842CED6 /* Example.swift in Sources */ = {isa = PBXBuildFile; fileRef = D55063533A2F9EFDA6A15875 /* Example.swift */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 678B936041077B3D9C3BB8D0 /* MatcherFunc.swift in Sources */ = {isa = PBXBuildFile; fileRef = E5713B6C10ED6E6FD9BE87AC /* MatcherFunc.swift */; }; + 6B9DADA3A3462131E2C67700 /* AsyncMatcherWrapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = CF7A0B915DBF0A9C523386E1 /* AsyncMatcherWrapper.swift */; }; + 6EC5365A8EFEC60B16B6F4CE /* Match.swift in Sources */ = {isa = PBXBuildFile; fileRef = B3D072C2AEF15805EC5222D8 /* Match.swift */; }; + 6F41A74578D9A36D79A11DF0 /* World+DSL.h in Headers */ = {isa = PBXBuildFile; fileRef = 60CB31B54B4B11333D97FD2D /* World+DSL.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 72A97FF36E9D77D768D7C495 /* ErrorUnhandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC98E615C19E5B392CF9A015 /* ErrorUnhandler.swift */; }; + 75358CE67D85039B5CC7F797 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6EC49B636A99C393DAB08B51 /* Cocoa.framework */; }; + 75F673F9C8E559B58850716A /* AnyPromise.h in Headers */ = {isa = PBXBuildFile; fileRef = D23678F73E3C24FC6964EBC0 /* AnyPromise.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 7A9F1872B31F4FBA8BDEBCA4 /* QuickConfiguration.h in Headers */ = {isa = PBXBuildFile; fileRef = DDC943452C4EA3B30C4635CD /* QuickConfiguration.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 7F01CF3B16066282266BFC80 /* dispatch_promise.m in Sources */ = {isa = PBXBuildFile; fileRef = 5DC50AF239D0F3769DFA32C6 /* dispatch_promise.m */; }; + 817FDEE000E1C480E804777A /* FailureMessage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74E1D67CA694112587A9A32A /* FailureMessage.swift */; }; + 83160B7EA4859DAB90E4B89D /* Pods-SnellTests-Nimble-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 39FD381DEE611EF17AE5E773 /* Pods-SnellTests-Nimble-dummy.m */; }; + 8F7BBAE4526F6A050494F70B /* ExampleMetadata.swift in Sources */ = {isa = PBXBuildFile; fileRef = A7BDACD3031E56F2F54553F7 /* ExampleMetadata.swift */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 902E4D0C6DB7D76CDC0420F8 /* Configuration.swift in Sources */ = {isa = PBXBuildFile; fileRef = EF570CC6E80AD006C740C394 /* Configuration.swift */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 93C993603BE5262030FE4406 /* PMKPromise.m in Sources */ = {isa = PBXBuildFile; fileRef = 6109D5AB40A2B1FEBFD15523 /* PMKPromise.m */; }; + 93FE8A0D341E2BDCB7AD26D3 /* Promise.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE5EDC7DF7A636EA021B879B /* Promise.swift */; }; + 96DF523E62CB4FDFCC7D9A4F /* Promise.h in Headers */ = {isa = PBXBuildFile; fileRef = B703887E4C289309F5B8E76C /* Promise.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9F190752B39EE77D01D5798D /* Pods-Snell-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = B121380AB4320F4EE32C84DE /* Pods-Snell-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9F961415E4ACF905FEA3C079 /* EndWith.swift in Sources */ = {isa = PBXBuildFile; fileRef = D34E0AEF981201B7F3A5BF8D /* EndWith.swift */; }; + A09F993958C24D903B73951F /* Pods-SnellTests-Nimble-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 6A93FFA287F849395E145EE0 /* Pods-SnellTests-Nimble-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A1ECE69BD0C2B3B44A298EC0 /* World+DSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3AC2A7833B10F271DFC964EF /* World+DSL.swift */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + A20B4446928F6FFE38413D2D /* AnyPromise.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1467C7AD45DA35878D65E297 /* AnyPromise.swift */; }; + A59FC49AD082D9B442BC41FE /* BeAKindOf.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43C43FEC0611E0895FEAA6FC /* BeAKindOf.swift */; }; + A63476A9A924A932F2508193 /* ObjCExpectation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3DFD6B2CEDCDC8126ADB2968 /* ObjCExpectation.swift */; }; + AF65C01142DEF7A8FEB7F1E5 /* PromiseKit.h in Headers */ = {isa = PBXBuildFile; fileRef = ACEB45CCBD14BC0C2F9B63CA /* PromiseKit.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B32055335CF13EE32E8FDD3C /* MatcherProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 798DAC5BE759EBDED09ECD7E /* MatcherProtocols.swift */; }; + B472F4C712E83EBA3AD7FC88 /* World.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2DDA940D9B90011D015A9FEC /* World.swift */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + B5FFA9C014C07B7F8FF7B156 /* Pods-Snell-PromiseKit-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 55A496CE60FBDCA7A3922B03 /* Pods-Snell-PromiseKit-dummy.m */; }; + BB5367E88FD7F1B1367DF615 /* QCKDSL.h in Headers */ = {isa = PBXBuildFile; fileRef = BB22CCBAA9B5426D6C054942 /* QCKDSL.h */; settings = {ATTRIBUTES = (Public, ); }; }; + BBA5EFA23C941C5324F3391B /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6EC49B636A99C393DAB08B51 /* Cocoa.framework */; }; + BBE1E64CCA36EE571338D055 /* DSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = 940DE1AED577D1813CA36D47 /* DSL.swift */; }; + BEE378BF156FD4EBFC07E7F9 /* NSString+QCKSelectorName.h in Headers */ = {isa = PBXBuildFile; fileRef = 56DC1B1A955F0862A8D74F62 /* NSString+QCKSelectorName.h */; settings = {ATTRIBUTES = (Project, ); }; }; + BFAD9CF3891DE76933C1E6B8 /* BeginWith.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB07A729D46C49947B37FB9D /* BeginWith.swift */; }; + C2B3E8EA2FB5FFBC4AA4DE58 /* QCKDSL.m in Sources */ = {isa = PBXBuildFile; fileRef = D2F6FB75D9AC564F6536AD54 /* QCKDSL.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + C4C0FA34E7888B718F14C981 /* Umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 7FD51E01710E4709ECD74934 /* Umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C8B5A6A7533B7149CF7B04C6 /* BeIdenticalTo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3C6DB796FCEEB6FCB6AEF3C6 /* BeIdenticalTo.swift */; }; + CD973D9718F90138F0494EA2 /* BeEmpty.swift in Sources */ = {isa = PBXBuildFile; fileRef = 227418AC5433AA1529DCC481 /* BeEmpty.swift */; }; + CE56C7878090606547D34664 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6EC49B636A99C393DAB08B51 /* Cocoa.framework */; }; + D3F0FFC9E86DC34021057D6D /* BeGreaterThan.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8AD34FB113A3C81323905EDB /* BeGreaterThan.swift */; }; + D7F127DB82603809A909857B /* join.m in Sources */ = {isa = PBXBuildFile; fileRef = BD1F5F584789511886DB4ED9 /* join.m */; }; + D9CEAD774B0C91D14B1D1EAF /* PMKPromise.h in Headers */ = {isa = PBXBuildFile; fileRef = 665572FF72F87FB10E69A0A2 /* PMKPromise.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DB6F6E276EFA5F164F75FC3E /* Expression.swift in Sources */ = {isa = PBXBuildFile; fileRef = 49911E00046F78FC594F820D /* Expression.swift */; }; + DCD4FAC03DBC03902272BAC9 /* ExampleHooks.swift in Sources */ = {isa = PBXBuildFile; fileRef = A527EB94536161E8BC20CD08 /* ExampleHooks.swift */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + DD971377B0C98EDA78D822C1 /* AllPass.swift in Sources */ = {isa = PBXBuildFile; fileRef = 58A25D7E46307E3F591C0CE3 /* AllPass.swift */; }; + DDBAA0E6F9C517AFF2CB48AE /* XCTest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E01F3F4E1AD9A96830E2416D /* XCTest.framework */; }; + DDEE6A2F7DB3ECD1AEC27909 /* NSError+Cancellation.h in Headers */ = {isa = PBXBuildFile; fileRef = CBC5A3F4B6925F3CEA626527 /* NSError+Cancellation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DF9B6747CC8473064E64423F /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6EC49B636A99C393DAB08B51 /* Cocoa.framework */; }; + DFFBC482BBE5CA8778430D1C /* BeGreaterThanOrEqualTo.swift in Sources */ = {isa = PBXBuildFile; fileRef = FD12C9ACDB4BA03B32AF9529 /* BeGreaterThanOrEqualTo.swift */; }; + E3235803CF563C41B47ED6E6 /* AnyPromise.m in Sources */ = {isa = PBXBuildFile; fileRef = CE0B1863AFF6831B4F4548E8 /* AnyPromise.m */; }; + E347238BD6E585E8408107EB /* NSJSONFromData.swift in Sources */ = {isa = PBXBuildFile; fileRef = F071A43F551726E7DEDCC49C /* NSJSONFromData.swift */; }; + E64211D82BC54DEDEA7887B5 /* XCTest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E01F3F4E1AD9A96830E2416D /* XCTest.framework */; }; + E9840E7FB547C64983C21A94 /* SourceLocation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3AC37A115649C56333DB4F4B /* SourceLocation.swift */; }; + EAC18D06945C9CE55E6C6357 /* Pods-SnellTests-Quick-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 767EDD15EBCDA39A46E40FD8 /* Pods-SnellTests-Quick-dummy.m */; }; + EBD953439F0A174BEC7CB15E /* AssertionRecorder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 750D6C910AC75768578686C3 /* AssertionRecorder.swift */; }; + EDC19D3984E0CCDC8B20CC64 /* NSString+QCKSelectorName.m in Sources */ = {isa = PBXBuildFile; fileRef = 1CA4986575BD09938A8D5047 /* NSString+QCKSelectorName.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + F00DD34880987ECD2630AB49 /* BeAnInstanceOf.swift in Sources */ = {isa = PBXBuildFile; fileRef = 602B7BA74282782B99D85F2D /* BeAnInstanceOf.swift */; }; + F503935080E1563FE33D8D18 /* BeCloseTo.swift in Sources */ = {isa = PBXBuildFile; fileRef = AFBBDBA30B0FBD47E7243389 /* BeCloseTo.swift */; }; + FAA5E852F5C69D6BF7FB2038 /* Functional.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76BACE8EEB7D245DFE90BD0C /* Functional.swift */; }; + FD0C8FF619F2A83761515A9B /* State.swift in Sources */ = {isa = PBXBuildFile; fileRef = 69BFA79846EDB5438D8EE480 /* State.swift */; }; + FF99585B8E4EE16593FF3726 /* when.swift in Sources */ = {isa = PBXBuildFile; fileRef = 481B55FF0C086B18988E126A /* when.swift */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ - 7E6B6CCDCC31316E35E7EBE7 /* PBXContainerItemProxy */ = { + 325E9ED8B9DD3D1A14C13828 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = BB6B62EB42BF0221651312A7 /* Project object */; + containerPortal = E4A0026F6535B4F9A11B3DDC /* Project object */; proxyType = 1; - remoteGlobalIDString = 3F2BA4DBD2A9A0652AFA60AF; - remoteInfo = "Pods-SnellTests-Nimble"; + remoteGlobalIDString = 4DC413C0C6EC17AD52E69F4D; + remoteInfo = "Pods-Snell-PromiseKit"; }; - A4658E9104824F5A52A2F187 /* PBXContainerItemProxy */ = { + 96B4F217F85E075188E536F9 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = BB6B62EB42BF0221651312A7 /* Project object */; + containerPortal = E4A0026F6535B4F9A11B3DDC /* Project object */; proxyType = 1; - remoteGlobalIDString = 7F91E0E9472A597D7FC7D467; + remoteGlobalIDString = C65B43630F2159E021C4144F; remoteInfo = "Pods-SnellTests-Quick"; }; + B5DCFC0C71A7F9EC726794A1 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = E4A0026F6535B4F9A11B3DDC /* Project object */; + proxyType = 1; + remoteGlobalIDString = EEABC373A5D18395B27399E3; + remoteInfo = "Pods-SnellTests-Nimble"; + }; /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ - 01DDAAD1AF3895A8708CD88D /* QuickConfiguration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = QuickConfiguration.h; path = Quick/Configuration/QuickConfiguration.h; sourceTree = ""; }; - 02C4073E02F2C389A18DF935 /* World+DSL.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "World+DSL.swift"; path = "Quick/DSL/World+DSL.swift"; sourceTree = ""; }; - 04E3EC281DAC775EB1600D30 /* Podfile */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; - 05D68CBC4C67D2B8F1A035EC /* Pods-SnellTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-SnellTests.release.xcconfig"; sourceTree = ""; }; - 06E3315232BEDF5F99EE94D9 /* Closures.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Closures.swift; path = Quick/Hooks/Closures.swift; sourceTree = ""; }; - 08FBDDA344172E8024964BA9 /* AssertionRecorder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AssertionRecorder.swift; path = Nimble/Adapters/AssertionRecorder.swift; sourceTree = ""; }; - 0B52DC078ECFCF4AA2B52D3F /* Pods-SnellTests-Nimble-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-SnellTests-Nimble-umbrella.h"; sourceTree = ""; }; - 1B3207C66892FC1977AB7E62 /* Pods-SnellTests-Nimble.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = "Pods-SnellTests-Nimble.modulemap"; sourceTree = ""; }; - 1D9B393B62A74582363BB104 /* QuickSpec.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = QuickSpec.h; path = Quick/QuickSpec.h; sourceTree = ""; }; - 1E3D5CD2B6AAFAB691840D71 /* Pods-SnellTests-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-SnellTests-umbrella.h"; sourceTree = ""; }; - 20DF1A9B55BA3FE88B289454 /* NSString+QCKSelectorName.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSString+QCKSelectorName.m"; path = "Quick/NSString+QCKSelectorName.m"; sourceTree = ""; }; - 2275E8DB55D5027CF1B4393F /* DSL.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DSL.m; path = Nimble/objc/DSL.m; sourceTree = ""; }; - 22B3A9F2DAEB0D9E5CE3EA9D /* BeNil.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BeNil.swift; path = Nimble/Matchers/BeNil.swift; sourceTree = ""; }; - 24C30534A80786614180D7DC /* Example.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Example.swift; path = Quick/Example.swift; sourceTree = ""; }; - 24FBD834B81060EB52FA4B28 /* QCKDSL.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = QCKDSL.m; path = Quick/DSL/QCKDSL.m; sourceTree = ""; }; - 2A07861B18353C578FE1ABED /* AssertionDispatcher.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AssertionDispatcher.swift; path = Nimble/Adapters/AssertionDispatcher.swift; sourceTree = ""; }; - 2A4BF0D9A8EDC771361A3417 /* Configuration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Configuration.swift; path = Quick/Configuration/Configuration.swift; sourceTree = ""; }; - 2A6311FE6827744A2BC3B4DA /* Nimble.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Nimble.h; path = Nimble/Nimble.h; sourceTree = ""; }; - 2B64D7027437F77180E5ECB2 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 2C002330459B04235303A1CD /* Pods-SnellTests-Nimble-Private.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-SnellTests-Nimble-Private.xcconfig"; sourceTree = ""; }; - 33636D9077E90BC5E30D5FC0 /* BeLessThanOrEqual.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BeLessThanOrEqual.swift; path = Nimble/Matchers/BeLessThanOrEqual.swift; sourceTree = ""; }; - 3A617435F7ED7D0F62C487C1 /* Pods-SnellTests-Quick-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-SnellTests-Quick-prefix.pch"; sourceTree = ""; }; - 3A7338EBEF9B99DA81BB611A /* World.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = World.swift; path = Quick/World.swift; sourceTree = ""; }; - 3E39E9744F53FD91D85F40FE /* ExampleMetadata.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ExampleMetadata.swift; path = Quick/ExampleMetadata.swift; sourceTree = ""; }; - 3EB868CB88297AFE94F65A07 /* BeLessThan.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BeLessThan.swift; path = Nimble/Matchers/BeLessThan.swift; sourceTree = ""; }; - 3EC0B3C2EFA806E6CF7E18A2 /* Quick.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Quick.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 4117D72FE354B2848CE80372 /* Pods-SnellTests-Quick-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-SnellTests-Quick-dummy.m"; sourceTree = ""; }; - 41FECF8E99126F5E0A7D7238 /* Pods-SnellTests-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-SnellTests-frameworks.sh"; sourceTree = ""; }; - 435416684067EDD5C0E3160A /* QuickConfiguration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = QuickConfiguration.m; path = Quick/Configuration/QuickConfiguration.m; sourceTree = ""; }; - 4857E42D67A8F81BAB39EBD9 /* ExampleGroup.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ExampleGroup.swift; path = Quick/ExampleGroup.swift; sourceTree = ""; }; - 501F241050A2C144A605A2D3 /* Pods-SnellTests-Nimble-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-SnellTests-Nimble-prefix.pch"; sourceTree = ""; }; - 52E92A5BB46C2C4581249E53 /* SourceLocation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SourceLocation.swift; path = Nimble/Utils/SourceLocation.swift; sourceTree = ""; }; - 53798F77EA5A929F238544EC /* Expression.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Expression.swift; path = Nimble/Expression.swift; sourceTree = ""; }; - 5BD02BBE10E8EB9F58ACF003 /* QCKDSL.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = QCKDSL.h; path = Quick/DSL/QCKDSL.h; sourceTree = ""; }; - 646E5189B0D3F9865A3BD6F0 /* AllPass.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AllPass.swift; path = Nimble/Matchers/AllPass.swift; sourceTree = ""; }; - 67D5DE6D59BF51152BCC4B1C /* DSL.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DSL.h; path = Nimble/objc/DSL.h; sourceTree = ""; }; - 6C68A059FBF3A725F873DAB6 /* Pods-SnellTests-Quick-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-SnellTests-Quick-umbrella.h"; sourceTree = ""; }; - 74303C12A8D0CBBEBAA637AA /* DSL.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DSL.swift; path = Nimble/DSL.swift; sourceTree = ""; }; - 776939B1355FC6ABC3064E6B /* MatcherFunc.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MatcherFunc.swift; path = Nimble/Wrappers/MatcherFunc.swift; sourceTree = ""; }; - 77EBF1FBE5EB3EE020C4993C /* Pods-SnellTests-Quick.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-SnellTests-Quick.xcconfig"; sourceTree = ""; }; - 7832B1CB59E2A7F00AC9F702 /* BeginWith.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BeginWith.swift; path = Nimble/Matchers/BeginWith.swift; sourceTree = ""; }; - 7EE5BE99AF3D70A2F99647CD /* BeEmpty.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BeEmpty.swift; path = Nimble/Matchers/BeEmpty.swift; sourceTree = ""; }; - 7F1496B16BC0988D32C01EBC /* NSString+QCKSelectorName.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSString+QCKSelectorName.h"; path = "Quick/NSString+QCKSelectorName.h"; sourceTree = ""; }; - 8275F0B0B8EDD501879BBAC3 /* EndWith.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = EndWith.swift; path = Nimble/Matchers/EndWith.swift; sourceTree = ""; }; - 880C301ECF3786157636F707 /* Pods-SnellTests-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-SnellTests-acknowledgements.plist"; sourceTree = ""; }; - 88D2971AE72BB6FBDF73FE65 /* Pods-SnellTests-environment.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-SnellTests-environment.h"; sourceTree = ""; }; - 8BA8DC802B3120641A2F75F8 /* Quick.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Quick.h; path = Quick/Quick.h; sourceTree = ""; }; - 8D51E6EAED6B1B4DAE631A4B /* DSL+Wait.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "DSL+Wait.swift"; path = "Nimble/DSL+Wait.swift"; sourceTree = ""; }; - 8F19387CDADBB46D59464AED /* World+DSL.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "World+DSL.h"; path = "Quick/DSL/World+DSL.h"; sourceTree = ""; }; - 8F98195EB07774BA1A075CE0 /* Nimble.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Nimble.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 9195E0C98F5B77D95EAB32B6 /* Pods-SnellTests-Nimble-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-SnellTests-Nimble-dummy.m"; sourceTree = ""; }; - 93E31563F2A0922CC126C226 /* BeIdenticalTo.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BeIdenticalTo.swift; path = Nimble/Matchers/BeIdenticalTo.swift; sourceTree = ""; }; - 9494CFCCF2C2575F326891D2 /* FailureMessage.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FailureMessage.swift; path = Nimble/FailureMessage.swift; sourceTree = ""; }; - 9581DD2DBE1FF4810D23110C /* Functional.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Functional.swift; path = Nimble/Utils/Functional.swift; sourceTree = ""; }; - 98B59717E9A3BE34CDAD3F24 /* BeGreaterThanOrEqualTo.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BeGreaterThanOrEqualTo.swift; path = Nimble/Matchers/BeGreaterThanOrEqualTo.swift; sourceTree = ""; }; - 9CD9FEBECE8C5D5F2AD2163A /* Pods-SnellTests-Nimble.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-SnellTests-Nimble.xcconfig"; sourceTree = ""; }; - 9D03226DD759020CC116CBE6 /* Match.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Match.swift; path = Nimble/Matchers/Match.swift; sourceTree = ""; }; - A4F4E4520F56D4239B89CD29 /* ObjCExpectation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ObjCExpectation.swift; path = Nimble/ObjCExpectation.swift; sourceTree = ""; }; - A65A70218A84D990ED6B1D57 /* NMBExceptionCapture.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = NMBExceptionCapture.h; path = Nimble/objc/NMBExceptionCapture.h; sourceTree = ""; }; - AEF6CACE0BEDF2DAEFCAE94F /* Pods-SnellTests-Quick.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = "Pods-SnellTests-Quick.modulemap"; sourceTree = ""; }; - B00562C42EDF35BADD51313B /* BeAKindOf.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BeAKindOf.swift; path = Nimble/Matchers/BeAKindOf.swift; sourceTree = ""; }; - B0E37AACD6BB268BEF2A4434 /* ObjCMatcher.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ObjCMatcher.swift; path = Nimble/Wrappers/ObjCMatcher.swift; sourceTree = ""; }; - B2C0733BD0C05FB58837B5E9 /* NimbleXCTestHandler.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NimbleXCTestHandler.swift; path = Nimble/Adapters/NimbleXCTestHandler.swift; sourceTree = ""; }; - B3C1082AD9EAF9742FF4A3D8 /* Stringers.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Stringers.swift; path = Nimble/Utils/Stringers.swift; sourceTree = ""; }; - B886094B7E1C2ED22FCC3B35 /* ExampleHooks.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ExampleHooks.swift; path = Quick/Hooks/ExampleHooks.swift; sourceTree = ""; }; - BED7F7FA8BB81E4A2365A5FC /* World.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = World.h; path = Quick/World.h; sourceTree = ""; }; - BF23A56166AAA64162ED3B53 /* Pods_SnellTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_SnellTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - C51528AD567F9DFD98E7347C /* Filter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Filter.swift; path = Quick/Filter.swift; sourceTree = ""; }; - C78D5B4362BC033EADB91C16 /* BeCloseTo.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BeCloseTo.swift; path = Nimble/Matchers/BeCloseTo.swift; sourceTree = ""; }; - C919A749BD8BEEDFA89EF2A8 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - C9DA8FC28C76B9736BBA6B15 /* Pods-SnellTests-Quick-Private.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-SnellTests-Quick-Private.xcconfig"; sourceTree = ""; }; - CA827E3341CF3439F654D6A7 /* Pods-SnellTests-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-SnellTests-acknowledgements.markdown"; sourceTree = ""; }; - CB53798746F6F13FC77630F6 /* Pods-SnellTests-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-SnellTests-dummy.m"; sourceTree = ""; }; - CD185BAB0D1A85128CD187FD /* Poll.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Poll.swift; path = Nimble/Utils/Poll.swift; sourceTree = ""; }; - CD39A4858FD00A71EBC5A0B5 /* XCTest.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = XCTest.framework; path = Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/System/Library/Frameworks/XCTest.framework; sourceTree = DEVELOPER_DIR; }; - D00C3EA1E5073B065B5A1DB8 /* BeLogical.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BeLogical.swift; path = Nimble/Matchers/BeLogical.swift; sourceTree = ""; }; - D02642201B338AA9CB8E96E0 /* AdapterProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AdapterProtocols.swift; path = Nimble/Adapters/AdapterProtocols.swift; sourceTree = ""; }; - D15ABFB37088B28667827DAA /* Contain.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Contain.swift; path = Nimble/Matchers/Contain.swift; sourceTree = ""; }; - D72384CD3C4FE659B6C43043 /* MatcherProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MatcherProtocols.swift; path = Nimble/Matchers/MatcherProtocols.swift; sourceTree = ""; }; - D7457FEC3597A242256A19BC /* SuiteHooks.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SuiteHooks.swift; path = Quick/Hooks/SuiteHooks.swift; sourceTree = ""; }; - DA3EBE6297F09C7B8FC1A158 /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/System/Library/Frameworks/Cocoa.framework; sourceTree = DEVELOPER_DIR; }; - E1601CADB84931F1448CD566 /* QuickSpec.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = QuickSpec.m; path = Quick/QuickSpec.m; sourceTree = ""; }; - E1FD70EB98AD192885F88A0C /* NMBExceptionCapture.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = NMBExceptionCapture.m; path = Nimble/objc/NMBExceptionCapture.m; sourceTree = ""; }; - E26639FB75B5E1BDFABF0839 /* Pods-SnellTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-SnellTests.debug.xcconfig"; sourceTree = ""; }; - E5782C3E3FE4BABBDAD309A7 /* AsyncMatcherWrapper.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AsyncMatcherWrapper.swift; path = Nimble/Wrappers/AsyncMatcherWrapper.swift; sourceTree = ""; }; - E5A1C36746B685F9791DF3C7 /* RaisesException.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RaisesException.swift; path = Nimble/Matchers/RaisesException.swift; sourceTree = ""; }; - E9D85EB1DE83EFC574856A8E /* Pods-SnellTests-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-SnellTests-resources.sh"; sourceTree = ""; }; - ED37ADC141677FE3E00DEB2B /* BeGreaterThan.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BeGreaterThan.swift; path = Nimble/Matchers/BeGreaterThan.swift; sourceTree = ""; }; - ED66C34A8657973399A56C9C /* Pods-SnellTests.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = "Pods-SnellTests.modulemap"; sourceTree = ""; }; - F0C1D8852F6E9FA4F0728470 /* DSL.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DSL.swift; path = Quick/DSL/DSL.swift; sourceTree = ""; }; - F6D0BD06B3C0D85CEE460C32 /* Equal.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Equal.swift; path = Nimble/Matchers/Equal.swift; sourceTree = ""; }; - F81E639AEAD5A3D81F0D701F /* Expectation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Expectation.swift; path = Nimble/Expectation.swift; sourceTree = ""; }; - FC863588356251AD6F13ACD0 /* Callsite.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Callsite.swift; path = Quick/Callsite.swift; sourceTree = ""; }; - FD38141BBB3EEF1FD7AE3B42 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - FEB27B0FA5443210A17676D7 /* BeAnInstanceOf.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BeAnInstanceOf.swift; path = Nimble/Matchers/BeAnInstanceOf.swift; sourceTree = ""; }; + 01E85A8FB49BCE9718266DAD /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 04C48F1899F978DAB9D21385 /* BeLogical.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BeLogical.swift; path = Nimble/Matchers/BeLogical.swift; sourceTree = ""; }; + 085EF6E325E7390D929EFE98 /* Sealant.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Sealant.swift; path = Sources/Sealant.swift; sourceTree = ""; }; + 093657A6B3C7F639092E4AE1 /* DSL.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DSL.m; path = Nimble/objc/DSL.m; sourceTree = ""; }; + 0B42C218E9CB21C4AA33F2EE /* ExampleGroup.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ExampleGroup.swift; path = Quick/ExampleGroup.swift; sourceTree = ""; }; + 1169DD39A8D309265C48B42D /* Pods-Snell.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = "Pods-Snell.modulemap"; sourceTree = ""; }; + 12B2260C3D8711B2B33CF3FE /* Pods-SnellTests-Quick-Private.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-SnellTests-Quick-Private.xcconfig"; sourceTree = ""; }; + 134B0BB27CFF463EFFA10C60 /* Pods-Snell-PromiseKit-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-Snell-PromiseKit-prefix.pch"; sourceTree = ""; }; + 13D552CBC82B3EE236F89FDE /* Pods-SnellTests-Nimble-Private.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-SnellTests-Nimble-Private.xcconfig"; sourceTree = ""; }; + 1467C7AD45DA35878D65E297 /* AnyPromise.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AnyPromise.swift; path = Sources/AnyPromise.swift; sourceTree = ""; }; + 14CF97BA43E61EAD0CFB19CF /* Pods-Snell-environment.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-Snell-environment.h"; sourceTree = ""; }; + 1C0F9BCE1AA2512139F2FEDE /* after.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = after.swift; path = Sources/after.swift; sourceTree = ""; }; + 1CA4986575BD09938A8D5047 /* NSString+QCKSelectorName.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSString+QCKSelectorName.m"; path = "Quick/NSString+QCKSelectorName.m"; sourceTree = ""; }; + 1E8FBC56AEF243BC5861973A /* QuickSpec.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = QuickSpec.h; path = Quick/QuickSpec.h; sourceTree = ""; }; + 227418AC5433AA1529DCC481 /* BeEmpty.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BeEmpty.swift; path = Nimble/Matchers/BeEmpty.swift; sourceTree = ""; }; + 25CCC410D843747CC1D8F816 /* DSL+Wait.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "DSL+Wait.swift"; path = "Nimble/DSL+Wait.swift"; sourceTree = ""; }; + 263A890110D45E87D6DCC5E2 /* Pods-SnellTests-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-SnellTests-resources.sh"; sourceTree = ""; }; + 299A8F2ADB9C534FB91B6B22 /* Pods-SnellTests-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-SnellTests-acknowledgements.markdown"; sourceTree = ""; }; + 2B1C2547FF590BEFF285684D /* Pods_Snell.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Snell.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 2DDA940D9B90011D015A9FEC /* World.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = World.swift; path = Quick/World.swift; sourceTree = ""; }; + 323A5B25779B4051C3ADC1F2 /* Pods-Snell-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-Snell-resources.sh"; sourceTree = ""; }; + 39FD381DEE611EF17AE5E773 /* Pods-SnellTests-Nimble-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-SnellTests-Nimble-dummy.m"; sourceTree = ""; }; + 3AC2A7833B10F271DFC964EF /* World+DSL.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "World+DSL.swift"; path = "Quick/DSL/World+DSL.swift"; sourceTree = ""; }; + 3AC37A115649C56333DB4F4B /* SourceLocation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SourceLocation.swift; path = Nimble/Utils/SourceLocation.swift; sourceTree = ""; }; + 3BD02D8B92D3C46F839FB9E7 /* Pods-Snell-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-Snell-acknowledgements.markdown"; sourceTree = ""; }; + 3BDC718CFCD83E76A4C34175 /* Podfile */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; + 3C6DB796FCEEB6FCB6AEF3C6 /* BeIdenticalTo.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BeIdenticalTo.swift; path = Nimble/Matchers/BeIdenticalTo.swift; sourceTree = ""; }; + 3D692ADCFEFEF1F3C21CFC8A /* Pods-Snell-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-Snell-acknowledgements.plist"; sourceTree = ""; }; + 3DF9EF82D09561E32AE6555E /* Pods-Snell-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-Snell-dummy.m"; sourceTree = ""; }; + 3DFD6B2CEDCDC8126ADB2968 /* ObjCExpectation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ObjCExpectation.swift; path = Nimble/ObjCExpectation.swift; sourceTree = ""; }; + 3EC70ECFCB9B125448034E39 /* AssertionDispatcher.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AssertionDispatcher.swift; path = Nimble/Adapters/AssertionDispatcher.swift; sourceTree = ""; }; + 3FFE6C2717EA75DD45FC05F7 /* Pods-SnellTests-Quick.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = "Pods-SnellTests-Quick.modulemap"; sourceTree = ""; }; + 424E8A8850DF5CA9969EE873 /* Pods-Snell-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-Snell-frameworks.sh"; sourceTree = ""; }; + 4387E4D30C59D4E508D6BE4B /* Closures.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Closures.swift; path = Quick/Hooks/Closures.swift; sourceTree = ""; }; + 43C43FEC0611E0895FEAA6FC /* BeAKindOf.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BeAKindOf.swift; path = Nimble/Matchers/BeAKindOf.swift; sourceTree = ""; }; + 481B55FF0C086B18988E126A /* when.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = when.swift; path = Sources/when.swift; sourceTree = ""; }; + 49911E00046F78FC594F820D /* Expression.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Expression.swift; path = Nimble/Expression.swift; sourceTree = ""; }; + 4C92D38A63ACB805F19B1FA3 /* BeLessThan.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BeLessThan.swift; path = Nimble/Matchers/BeLessThan.swift; sourceTree = ""; }; + 4C98C9E2448066AA653C30A4 /* Pods-Snell-PromiseKit.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = "Pods-Snell-PromiseKit.modulemap"; sourceTree = ""; }; + 506EA75D231AF7B33CB73E3A /* Quick.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Quick.h; path = Quick/Quick.h; sourceTree = ""; }; + 51271F5BEEA4D51648945440 /* QuickSpec.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = QuickSpec.m; path = Quick/QuickSpec.m; sourceTree = ""; }; + 55A496CE60FBDCA7A3922B03 /* Pods-Snell-PromiseKit-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-Snell-PromiseKit-dummy.m"; sourceTree = ""; }; + 56DC1B1A955F0862A8D74F62 /* NSString+QCKSelectorName.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSString+QCKSelectorName.h"; path = "Quick/NSString+QCKSelectorName.h"; sourceTree = ""; }; + 58A25D7E46307E3F591C0CE3 /* AllPass.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AllPass.swift; path = Nimble/Matchers/AllPass.swift; sourceTree = ""; }; + 5A14E05E0D0A806370F5DF78 /* DSL.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DSL.swift; path = Quick/DSL/DSL.swift; sourceTree = ""; }; + 5DC50AF239D0F3769DFA32C6 /* dispatch_promise.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = dispatch_promise.m; path = Sources/dispatch_promise.m; sourceTree = ""; }; + 5FB4B1AAB11F4F303BD75FB7 /* Quick.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Quick.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 602B7BA74282782B99D85F2D /* BeAnInstanceOf.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BeAnInstanceOf.swift; path = Nimble/Matchers/BeAnInstanceOf.swift; sourceTree = ""; }; + 60CB31B54B4B11333D97FD2D /* World+DSL.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "World+DSL.h"; path = "Quick/DSL/World+DSL.h"; sourceTree = ""; }; + 6109D5AB40A2B1FEBFD15523 /* PMKPromise.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PMKPromise.m; path = Sources/PMKPromise.m; sourceTree = ""; }; + 6370A9D71E3F43895A0EE4F6 /* Pods-SnellTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-SnellTests.release.xcconfig"; sourceTree = ""; }; + 637DD72CFC06EA292D376FC6 /* Expectation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Expectation.swift; path = Nimble/Expectation.swift; sourceTree = ""; }; + 665572FF72F87FB10E69A0A2 /* PMKPromise.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PMKPromise.h; path = Sources/PMKPromise.h; sourceTree = ""; }; + 697F1B2420EEF3D6F2DB6C19 /* Pods-SnellTests-environment.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-SnellTests-environment.h"; sourceTree = ""; }; + 69BFA79846EDB5438D8EE480 /* State.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = State.swift; path = Sources/State.swift; sourceTree = ""; }; + 69E3A141AF4F759260330BF6 /* PromiseKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = PromiseKit.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 6A93FFA287F849395E145EE0 /* Pods-SnellTests-Nimble-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-SnellTests-Nimble-umbrella.h"; sourceTree = ""; }; + 6E0B8993D6A176BEE3037469 /* Pods-Snell.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Snell.debug.xcconfig"; sourceTree = ""; }; + 6EC49B636A99C393DAB08B51 /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/System/Library/Frameworks/Cocoa.framework; sourceTree = DEVELOPER_DIR; }; + 71F358E9AFD1EEE285F6C9A5 /* AdapterProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AdapterProtocols.swift; path = Nimble/Adapters/AdapterProtocols.swift; sourceTree = ""; }; + 73A4BBF05300513F5A492D7B /* Pods-SnellTests-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-SnellTests-umbrella.h"; sourceTree = ""; }; + 746B7424261B12CA948E81F4 /* Pods-SnellTests-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-SnellTests-acknowledgements.plist"; sourceTree = ""; }; + 74C384B3FD9EA18DFE0E4ED0 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 74CE36BCF4B29490E369E278 /* Pods-SnellTests-Nimble.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-SnellTests-Nimble.xcconfig"; sourceTree = ""; }; + 74E1D67CA694112587A9A32A /* FailureMessage.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FailureMessage.swift; path = Nimble/FailureMessage.swift; sourceTree = ""; }; + 750D6C910AC75768578686C3 /* AssertionRecorder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AssertionRecorder.swift; path = Nimble/Adapters/AssertionRecorder.swift; sourceTree = ""; }; + 767EDD15EBCDA39A46E40FD8 /* Pods-SnellTests-Quick-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-SnellTests-Quick-dummy.m"; sourceTree = ""; }; + 76BACE8EEB7D245DFE90BD0C /* Functional.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Functional.swift; path = Nimble/Utils/Functional.swift; sourceTree = ""; }; + 77268DBDD58BB92C4566D30D /* Pods-SnellTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-SnellTests.debug.xcconfig"; sourceTree = ""; }; + 798DAC5BE759EBDED09ECD7E /* MatcherProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MatcherProtocols.swift; path = Nimble/Matchers/MatcherProtocols.swift; sourceTree = ""; }; + 7A2D7DC041F9811FAA805145 /* Equal.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Equal.swift; path = Nimble/Matchers/Equal.swift; sourceTree = ""; }; + 7A6FDD230758FCDD298DD5C6 /* dispatch_promise.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = dispatch_promise.swift; path = Sources/dispatch_promise.swift; sourceTree = ""; }; + 7C97368CBEB181BA676EA853 /* Pods-SnellTests-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-SnellTests-dummy.m"; sourceTree = ""; }; + 7FD51E01710E4709ECD74934 /* Umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Umbrella.h; path = Sources/Umbrella.h; sourceTree = ""; }; + 81D8FE9BC81DCA00A30A99ED /* NimbleXCTestHandler.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NimbleXCTestHandler.swift; path = Nimble/Adapters/NimbleXCTestHandler.swift; sourceTree = ""; }; + 83383187CF081C71C5A0652E /* Nimble.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Nimble.h; path = Nimble/Nimble.h; sourceTree = ""; }; + 878995233B0D060AB35404CE /* when.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = when.m; path = Sources/when.m; sourceTree = ""; }; + 8AD34FB113A3C81323905EDB /* BeGreaterThan.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BeGreaterThan.swift; path = Nimble/Matchers/BeGreaterThan.swift; sourceTree = ""; }; + 93578295159BA9AF2C6365F0 /* Contain.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Contain.swift; path = Nimble/Matchers/Contain.swift; sourceTree = ""; }; + 940DE1AED577D1813CA36D47 /* DSL.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DSL.swift; path = Nimble/DSL.swift; sourceTree = ""; }; + 957B981BBF839BDA8079F540 /* Callsite.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Callsite.swift; path = Quick/Callsite.swift; sourceTree = ""; }; + 96D8E988309C567BCE688A3E /* NMBExceptionCapture.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = NMBExceptionCapture.h; path = Nimble/objc/NMBExceptionCapture.h; sourceTree = ""; }; + 9851DC8005001BE62B297D54 /* after.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = after.m; path = Sources/after.m; sourceTree = ""; }; + 99A19537E701DBB5403436A2 /* Pods-SnellTests-Quick.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-SnellTests-Quick.xcconfig"; sourceTree = ""; }; + 9AB2EBEA5747E6317DF15A1D /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 9B55A918B5AFFC7FD8E0BCA3 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 9CEE458406DB67F283E13C12 /* Promise+Properties.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Promise+Properties.swift"; path = "Sources/Promise+Properties.swift"; sourceTree = ""; }; + 9D0B139BA359485F9BAB8A61 /* Pods-Snell.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Snell.release.xcconfig"; sourceTree = ""; }; + A1330106097AE293A46FBAB1 /* Pods-SnellTests-Quick-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-SnellTests-Quick-prefix.pch"; sourceTree = ""; }; + A527EB94536161E8BC20CD08 /* ExampleHooks.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ExampleHooks.swift; path = Quick/Hooks/ExampleHooks.swift; sourceTree = ""; }; + A7BDACD3031E56F2F54553F7 /* ExampleMetadata.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ExampleMetadata.swift; path = Quick/ExampleMetadata.swift; sourceTree = ""; }; + ACEB45CCBD14BC0C2F9B63CA /* PromiseKit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PromiseKit.h; path = Sources/PromiseKit.h; sourceTree = ""; }; + AE5EDC7DF7A636EA021B879B /* Promise.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Promise.swift; path = Sources/Promise.swift; sourceTree = ""; }; + AE7AE95CA58F9F39C873BA77 /* race.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = race.swift; path = Sources/race.swift; sourceTree = ""; }; + AFA26E0F0E5CFEFA4C67AFD0 /* ObjCMatcher.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ObjCMatcher.swift; path = Nimble/Wrappers/ObjCMatcher.swift; sourceTree = ""; }; + AFBBDBA30B0FBD47E7243389 /* BeCloseTo.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BeCloseTo.swift; path = Nimble/Matchers/BeCloseTo.swift; sourceTree = ""; }; + B121380AB4320F4EE32C84DE /* Pods-Snell-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-Snell-umbrella.h"; sourceTree = ""; }; + B3D072C2AEF15805EC5222D8 /* Match.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Match.swift; path = Nimble/Matchers/Match.swift; sourceTree = ""; }; + B6F3911748E9B8FA9270C7C4 /* Pods-SnellTests-Quick-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-SnellTests-Quick-umbrella.h"; sourceTree = ""; }; + B703887E4C289309F5B8E76C /* Promise.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Promise.h; path = Sources/Promise.h; sourceTree = ""; }; + BACE3E5A3D1033799C8BB482 /* Pods-SnellTests-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-SnellTests-frameworks.sh"; sourceTree = ""; }; + BAE7FF9277DDFDB35C4248B8 /* DSL.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DSL.h; path = Nimble/objc/DSL.h; sourceTree = ""; }; + BB22CCBAA9B5426D6C054942 /* QCKDSL.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = QCKDSL.h; path = Quick/DSL/QCKDSL.h; sourceTree = ""; }; + BB3B823FC6A4A2A00462142F /* hang.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = hang.m; path = Sources/hang.m; sourceTree = ""; }; + BD1F5F584789511886DB4ED9 /* join.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = join.m; path = Sources/join.m; sourceTree = ""; }; + BE08B87E1D7006405B8EBB38 /* Stringers.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Stringers.swift; path = Nimble/Utils/Stringers.swift; sourceTree = ""; }; + C0A6B2AF98D9C579058E1A1D /* Pods_SnellTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_SnellTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + C63FB72585E77646CA142C09 /* Pods-SnellTests.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = "Pods-SnellTests.modulemap"; sourceTree = ""; }; + C6DE04303208D61A7697157A /* RaisesException.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RaisesException.swift; path = Nimble/Matchers/RaisesException.swift; sourceTree = ""; }; + C93A3107F55E6438D44384C4 /* Nimble.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Nimble.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + CBC5A3F4B6925F3CEA626527 /* NSError+Cancellation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSError+Cancellation.h"; path = "Sources/NSError+Cancellation.h"; sourceTree = ""; }; + CE0B1863AFF6831B4F4548E8 /* AnyPromise.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AnyPromise.m; path = Sources/AnyPromise.m; sourceTree = ""; }; + CEB5BB9AAB5D28B57EB094C7 /* Poll.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Poll.swift; path = Nimble/Utils/Poll.swift; sourceTree = ""; }; + CED34D21E78409C3116E2978 /* QuickConfiguration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = QuickConfiguration.m; path = Quick/Configuration/QuickConfiguration.m; sourceTree = ""; }; + CF7A0B915DBF0A9C523386E1 /* AsyncMatcherWrapper.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AsyncMatcherWrapper.swift; path = Nimble/Wrappers/AsyncMatcherWrapper.swift; sourceTree = ""; }; + D23678F73E3C24FC6964EBC0 /* AnyPromise.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AnyPromise.h; path = Sources/AnyPromise.h; sourceTree = ""; }; + D2F6FB75D9AC564F6536AD54 /* QCKDSL.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = QCKDSL.m; path = Quick/DSL/QCKDSL.m; sourceTree = ""; }; + D34E0AEF981201B7F3A5BF8D /* EndWith.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = EndWith.swift; path = Nimble/Matchers/EndWith.swift; sourceTree = ""; }; + D55063533A2F9EFDA6A15875 /* Example.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Example.swift; path = Quick/Example.swift; sourceTree = ""; }; + D587C7813038D43A68FD7A76 /* BeLessThanOrEqual.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BeLessThanOrEqual.swift; path = Nimble/Matchers/BeLessThanOrEqual.swift; sourceTree = ""; }; + DB07A729D46C49947B37FB9D /* BeginWith.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BeginWith.swift; path = Nimble/Matchers/BeginWith.swift; sourceTree = ""; }; + DCEF0698046CBCAC27E058AE /* Pods-Snell-PromiseKit.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Snell-PromiseKit.xcconfig"; sourceTree = ""; }; + DDC943452C4EA3B30C4635CD /* QuickConfiguration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = QuickConfiguration.h; path = Quick/Configuration/QuickConfiguration.h; sourceTree = ""; }; + E01F3F4E1AD9A96830E2416D /* XCTest.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = XCTest.framework; path = Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/System/Library/Frameworks/XCTest.framework; sourceTree = DEVELOPER_DIR; }; + E0A750A44229CA2DE571FCC4 /* BeNil.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BeNil.swift; path = Nimble/Matchers/BeNil.swift; sourceTree = ""; }; + E2272D3B9A50CEFB86D5AF54 /* Pods-SnellTests-Nimble.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = "Pods-SnellTests-Nimble.modulemap"; sourceTree = ""; }; + E45620AF2388B929CC99A347 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; + E5713B6C10ED6E6FD9BE87AC /* MatcherFunc.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MatcherFunc.swift; path = Nimble/Wrappers/MatcherFunc.swift; sourceTree = ""; }; + E73F98E9EA826A25AC994009 /* Filter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Filter.swift; path = Quick/Filter.swift; sourceTree = ""; }; + E9369B1200ED15121B2D757B /* NMBExceptionCapture.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = NMBExceptionCapture.m; path = Nimble/objc/NMBExceptionCapture.m; sourceTree = ""; }; + EC4C145CE4A0A3001FD38E7F /* SuiteHooks.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SuiteHooks.swift; path = Quick/Hooks/SuiteHooks.swift; sourceTree = ""; }; + EC98E615C19E5B392CF9A015 /* ErrorUnhandler.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ErrorUnhandler.swift; path = Sources/ErrorUnhandler.swift; sourceTree = ""; }; + EF570CC6E80AD006C740C394 /* Configuration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Configuration.swift; path = Quick/Configuration/Configuration.swift; sourceTree = ""; }; + F071A43F551726E7DEDCC49C /* NSJSONFromData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NSJSONFromData.swift; path = Sources/NSJSONFromData.swift; sourceTree = ""; }; + F208A254B888830E3BEBA36C /* Pods-Snell-PromiseKit-Private.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Snell-PromiseKit-Private.xcconfig"; sourceTree = ""; }; + F617A9455A6AAA185E75C042 /* World.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = World.h; path = Quick/World.h; sourceTree = ""; }; + F85B6D2564191F2C59FA17F0 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + FAD47EC36EE8506543FA28C8 /* Pods-SnellTests-Nimble-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-SnellTests-Nimble-prefix.pch"; sourceTree = ""; }; + FD12C9ACDB4BA03B32AF9529 /* BeGreaterThanOrEqualTo.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BeGreaterThanOrEqualTo.swift; path = Nimble/Matchers/BeGreaterThanOrEqualTo.swift; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 4DC0426B8E6C508B4EEFF7D7 /* Frameworks */ = { + 527902F2E1D6C5C87614AEA0 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 75358CE67D85039B5CC7F797 /* Cocoa.framework in Frameworks */, + E64211D82BC54DEDEA7887B5 /* XCTest.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 9911711D46E0DA50CD186533 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 59858BF9589BC03C70AF0204 /* Cocoa.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 9D90E7E6C721239F244EC5AB /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 7FB9E26E000D9A0950A5A2CE /* Cocoa.framework in Frameworks */, - 039D4978F78B9733DB9BB983 /* XCTest.framework in Frameworks */, + CE56C7878090606547D34664 /* Cocoa.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 937B92CB00EC1B93DEB49428 /* Frameworks */ = { + AB5ADFAE9650AB0ECA0ED6F1 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 50E51D6764A6F6B05B1525A9 /* Cocoa.framework in Frameworks */, - AE89B152806B83F93611400D /* XCTest.framework in Frameworks */, + DF9B6747CC8473064E64423F /* Cocoa.framework in Frameworks */, + DDBAA0E6F9C517AFF2CB48AE /* XCTest.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - E6CE42092FF76C9233C779B3 /* Frameworks */ = { + ECCD4626E6F6211C36CFE4DB /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 4558D84285A8C2128CE18268 /* Cocoa.framework in Frameworks */, + BBA5EFA23C941C5324F3391B /* Cocoa.framework in Frameworks */, + 221D62700F0DC72622AE10FD /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 2DD779999A48C4EBA7D35537 /* Support Files */ = { + 0A77E86C33E548530004E4BD /* Pods-SnellTests */ = { isa = PBXGroup; children = ( - C919A749BD8BEEDFA89EF2A8 /* Info.plist */, - AEF6CACE0BEDF2DAEFCAE94F /* Pods-SnellTests-Quick.modulemap */, - 77EBF1FBE5EB3EE020C4993C /* Pods-SnellTests-Quick.xcconfig */, - C9DA8FC28C76B9736BBA6B15 /* Pods-SnellTests-Quick-Private.xcconfig */, - 4117D72FE354B2848CE80372 /* Pods-SnellTests-Quick-dummy.m */, - 3A617435F7ED7D0F62C487C1 /* Pods-SnellTests-Quick-prefix.pch */, - 6C68A059FBF3A725F873DAB6 /* Pods-SnellTests-Quick-umbrella.h */, + 9AB2EBEA5747E6317DF15A1D /* Info.plist */, + C63FB72585E77646CA142C09 /* Pods-SnellTests.modulemap */, + 299A8F2ADB9C534FB91B6B22 /* Pods-SnellTests-acknowledgements.markdown */, + 746B7424261B12CA948E81F4 /* Pods-SnellTests-acknowledgements.plist */, + 7C97368CBEB181BA676EA853 /* Pods-SnellTests-dummy.m */, + 697F1B2420EEF3D6F2DB6C19 /* Pods-SnellTests-environment.h */, + BACE3E5A3D1033799C8BB482 /* Pods-SnellTests-frameworks.sh */, + 263A890110D45E87D6DCC5E2 /* Pods-SnellTests-resources.sh */, + 73A4BBF05300513F5A492D7B /* Pods-SnellTests-umbrella.h */, + 77268DBDD58BB92C4566D30D /* Pods-SnellTests.debug.xcconfig */, + 6370A9D71E3F43895A0EE4F6 /* Pods-SnellTests.release.xcconfig */, ); - name = "Support Files"; - path = "../Target Support Files/Pods-SnellTests-Quick"; + name = "Pods-SnellTests"; + path = "Target Support Files/Pods-SnellTests"; sourceTree = ""; }; - 34F44B5D478FBC87F7115AC1 /* OS X */ = { + 2F6E735C539C7AF741BC7717 /* Pods-Snell */ = { isa = PBXGroup; children = ( - DA3EBE6297F09C7B8FC1A158 /* Cocoa.framework */, - CD39A4858FD00A71EBC5A0B5 /* XCTest.framework */, + F85B6D2564191F2C59FA17F0 /* Info.plist */, + 1169DD39A8D309265C48B42D /* Pods-Snell.modulemap */, + 3BD02D8B92D3C46F839FB9E7 /* Pods-Snell-acknowledgements.markdown */, + 3D692ADCFEFEF1F3C21CFC8A /* Pods-Snell-acknowledgements.plist */, + 3DF9EF82D09561E32AE6555E /* Pods-Snell-dummy.m */, + 14CF97BA43E61EAD0CFB19CF /* Pods-Snell-environment.h */, + 424E8A8850DF5CA9969EE873 /* Pods-Snell-frameworks.sh */, + 323A5B25779B4051C3ADC1F2 /* Pods-Snell-resources.sh */, + B121380AB4320F4EE32C84DE /* Pods-Snell-umbrella.h */, + 6E0B8993D6A176BEE3037469 /* Pods-Snell.debug.xcconfig */, + 9D0B139BA359485F9BAB8A61 /* Pods-Snell.release.xcconfig */, ); - name = "OS X"; + name = "Pods-Snell"; + path = "Target Support Files/Pods-Snell"; sourceTree = ""; }; - 38A99B88BAC17289B62C092B /* Nimble */ = { + 4DC8E1D3ADC4A6222047DF6D /* Products */ = { isa = PBXGroup; children = ( - D02642201B338AA9CB8E96E0 /* AdapterProtocols.swift */, - 646E5189B0D3F9865A3BD6F0 /* AllPass.swift */, - 2A07861B18353C578FE1ABED /* AssertionDispatcher.swift */, - 08FBDDA344172E8024964BA9 /* AssertionRecorder.swift */, - E5782C3E3FE4BABBDAD309A7 /* AsyncMatcherWrapper.swift */, - B00562C42EDF35BADD51313B /* BeAKindOf.swift */, - FEB27B0FA5443210A17676D7 /* BeAnInstanceOf.swift */, - C78D5B4362BC033EADB91C16 /* BeCloseTo.swift */, - 7EE5BE99AF3D70A2F99647CD /* BeEmpty.swift */, - ED37ADC141677FE3E00DEB2B /* BeGreaterThan.swift */, - 98B59717E9A3BE34CDAD3F24 /* BeGreaterThanOrEqualTo.swift */, - 93E31563F2A0922CC126C226 /* BeIdenticalTo.swift */, - 3EB868CB88297AFE94F65A07 /* BeLessThan.swift */, - 33636D9077E90BC5E30D5FC0 /* BeLessThanOrEqual.swift */, - D00C3EA1E5073B065B5A1DB8 /* BeLogical.swift */, - 22B3A9F2DAEB0D9E5CE3EA9D /* BeNil.swift */, - 7832B1CB59E2A7F00AC9F702 /* BeginWith.swift */, - D15ABFB37088B28667827DAA /* Contain.swift */, - 67D5DE6D59BF51152BCC4B1C /* DSL.h */, - 2275E8DB55D5027CF1B4393F /* DSL.m */, - 74303C12A8D0CBBEBAA637AA /* DSL.swift */, - 8D51E6EAED6B1B4DAE631A4B /* DSL+Wait.swift */, - 8275F0B0B8EDD501879BBAC3 /* EndWith.swift */, - F6D0BD06B3C0D85CEE460C32 /* Equal.swift */, - F81E639AEAD5A3D81F0D701F /* Expectation.swift */, - 53798F77EA5A929F238544EC /* Expression.swift */, - 9494CFCCF2C2575F326891D2 /* FailureMessage.swift */, - 9581DD2DBE1FF4810D23110C /* Functional.swift */, - 9D03226DD759020CC116CBE6 /* Match.swift */, - 776939B1355FC6ABC3064E6B /* MatcherFunc.swift */, - D72384CD3C4FE659B6C43043 /* MatcherProtocols.swift */, - A65A70218A84D990ED6B1D57 /* NMBExceptionCapture.h */, - E1FD70EB98AD192885F88A0C /* NMBExceptionCapture.m */, - 2A6311FE6827744A2BC3B4DA /* Nimble.h */, - B2C0733BD0C05FB58837B5E9 /* NimbleXCTestHandler.swift */, - A4F4E4520F56D4239B89CD29 /* ObjCExpectation.swift */, - B0E37AACD6BB268BEF2A4434 /* ObjCMatcher.swift */, - CD185BAB0D1A85128CD187FD /* Poll.swift */, - E5A1C36746B685F9791DF3C7 /* RaisesException.swift */, - 52E92A5BB46C2C4581249E53 /* SourceLocation.swift */, - B3C1082AD9EAF9742FF4A3D8 /* Stringers.swift */, - 9EE1A36AA6E17A8744B46585 /* Support Files */, + C93A3107F55E6438D44384C4 /* Nimble.framework */, + 2B1C2547FF590BEFF285684D /* Pods_Snell.framework */, + C0A6B2AF98D9C579058E1A1D /* Pods_SnellTests.framework */, + 69E3A141AF4F759260330BF6 /* PromiseKit.framework */, + 5FB4B1AAB11F4F303BD75FB7 /* Quick.framework */, ); - path = Nimble; + name = Products; sourceTree = ""; }; - 45669DA2A4D102D3F1D55B21 /* Quick */ = { + 74C8B50F864CE639A4665434 /* Quick */ = { isa = PBXGroup; children = ( - FC863588356251AD6F13ACD0 /* Callsite.swift */, - 06E3315232BEDF5F99EE94D9 /* Closures.swift */, - 2A4BF0D9A8EDC771361A3417 /* Configuration.swift */, - F0C1D8852F6E9FA4F0728470 /* DSL.swift */, - 24C30534A80786614180D7DC /* Example.swift */, - 4857E42D67A8F81BAB39EBD9 /* ExampleGroup.swift */, - B886094B7E1C2ED22FCC3B35 /* ExampleHooks.swift */, - 3E39E9744F53FD91D85F40FE /* ExampleMetadata.swift */, - C51528AD567F9DFD98E7347C /* Filter.swift */, - 7F1496B16BC0988D32C01EBC /* NSString+QCKSelectorName.h */, - 20DF1A9B55BA3FE88B289454 /* NSString+QCKSelectorName.m */, - 5BD02BBE10E8EB9F58ACF003 /* QCKDSL.h */, - 24FBD834B81060EB52FA4B28 /* QCKDSL.m */, - 8BA8DC802B3120641A2F75F8 /* Quick.h */, - 01DDAAD1AF3895A8708CD88D /* QuickConfiguration.h */, - 435416684067EDD5C0E3160A /* QuickConfiguration.m */, - 1D9B393B62A74582363BB104 /* QuickSpec.h */, - E1601CADB84931F1448CD566 /* QuickSpec.m */, - D7457FEC3597A242256A19BC /* SuiteHooks.swift */, - BED7F7FA8BB81E4A2365A5FC /* World.h */, - 3A7338EBEF9B99DA81BB611A /* World.swift */, - 8F19387CDADBB46D59464AED /* World+DSL.h */, - 02C4073E02F2C389A18DF935 /* World+DSL.swift */, - 2DD779999A48C4EBA7D35537 /* Support Files */, + 957B981BBF839BDA8079F540 /* Callsite.swift */, + 4387E4D30C59D4E508D6BE4B /* Closures.swift */, + EF570CC6E80AD006C740C394 /* Configuration.swift */, + 5A14E05E0D0A806370F5DF78 /* DSL.swift */, + D55063533A2F9EFDA6A15875 /* Example.swift */, + 0B42C218E9CB21C4AA33F2EE /* ExampleGroup.swift */, + A527EB94536161E8BC20CD08 /* ExampleHooks.swift */, + A7BDACD3031E56F2F54553F7 /* ExampleMetadata.swift */, + E73F98E9EA826A25AC994009 /* Filter.swift */, + 56DC1B1A955F0862A8D74F62 /* NSString+QCKSelectorName.h */, + 1CA4986575BD09938A8D5047 /* NSString+QCKSelectorName.m */, + BB22CCBAA9B5426D6C054942 /* QCKDSL.h */, + D2F6FB75D9AC564F6536AD54 /* QCKDSL.m */, + 506EA75D231AF7B33CB73E3A /* Quick.h */, + DDC943452C4EA3B30C4635CD /* QuickConfiguration.h */, + CED34D21E78409C3116E2978 /* QuickConfiguration.m */, + 1E8FBC56AEF243BC5861973A /* QuickSpec.h */, + 51271F5BEEA4D51648945440 /* QuickSpec.m */, + EC4C145CE4A0A3001FD38E7F /* SuiteHooks.swift */, + F617A9455A6AAA185E75C042 /* World.h */, + 2DDA940D9B90011D015A9FEC /* World.swift */, + 60CB31B54B4B11333D97FD2D /* World+DSL.h */, + 3AC2A7833B10F271DFC964EF /* World+DSL.swift */, + 7F416A05F60C3F5B616399A7 /* Support Files */, ); path = Quick; sourceTree = ""; }; - 7E97F78D4334086D1F9F9752 /* Pods */ = { + 779E69AC153266584BBCA13C /* Support Files */ = { isa = PBXGroup; children = ( - 38A99B88BAC17289B62C092B /* Nimble */, - 45669DA2A4D102D3F1D55B21 /* Quick */, + 74C384B3FD9EA18DFE0E4ED0 /* Info.plist */, + 4C98C9E2448066AA653C30A4 /* Pods-Snell-PromiseKit.modulemap */, + DCEF0698046CBCAC27E058AE /* Pods-Snell-PromiseKit.xcconfig */, + F208A254B888830E3BEBA36C /* Pods-Snell-PromiseKit-Private.xcconfig */, + 55A496CE60FBDCA7A3922B03 /* Pods-Snell-PromiseKit-dummy.m */, + 134B0BB27CFF463EFFA10C60 /* Pods-Snell-PromiseKit-prefix.pch */, ); - name = Pods; + name = "Support Files"; + path = "../Target Support Files/Pods-Snell-PromiseKit"; sourceTree = ""; }; - 82C751AB87D8AAB462B86B1D /* Pods-SnellTests */ = { + 7F416A05F60C3F5B616399A7 /* Support Files */ = { isa = PBXGroup; children = ( - 2B64D7027437F77180E5ECB2 /* Info.plist */, - ED66C34A8657973399A56C9C /* Pods-SnellTests.modulemap */, - CA827E3341CF3439F654D6A7 /* Pods-SnellTests-acknowledgements.markdown */, - 880C301ECF3786157636F707 /* Pods-SnellTests-acknowledgements.plist */, - CB53798746F6F13FC77630F6 /* Pods-SnellTests-dummy.m */, - 88D2971AE72BB6FBDF73FE65 /* Pods-SnellTests-environment.h */, - 41FECF8E99126F5E0A7D7238 /* Pods-SnellTests-frameworks.sh */, - E9D85EB1DE83EFC574856A8E /* Pods-SnellTests-resources.sh */, - 1E3D5CD2B6AAFAB691840D71 /* Pods-SnellTests-umbrella.h */, - E26639FB75B5E1BDFABF0839 /* Pods-SnellTests.debug.xcconfig */, - 05D68CBC4C67D2B8F1A035EC /* Pods-SnellTests.release.xcconfig */, + 9B55A918B5AFFC7FD8E0BCA3 /* Info.plist */, + 3FFE6C2717EA75DD45FC05F7 /* Pods-SnellTests-Quick.modulemap */, + 99A19537E701DBB5403436A2 /* Pods-SnellTests-Quick.xcconfig */, + 12B2260C3D8711B2B33CF3FE /* Pods-SnellTests-Quick-Private.xcconfig */, + 767EDD15EBCDA39A46E40FD8 /* Pods-SnellTests-Quick-dummy.m */, + A1330106097AE293A46FBAB1 /* Pods-SnellTests-Quick-prefix.pch */, + B6F3911748E9B8FA9270C7C4 /* Pods-SnellTests-Quick-umbrella.h */, ); - name = "Pods-SnellTests"; - path = "Target Support Files/Pods-SnellTests"; + name = "Support Files"; + path = "../Target Support Files/Pods-SnellTests-Quick"; sourceTree = ""; }; - 9EE1A36AA6E17A8744B46585 /* Support Files */ = { + 85DF08DD263FB584C2B8B975 /* CorePromise */ = { isa = PBXGroup; children = ( - FD38141BBB3EEF1FD7AE3B42 /* Info.plist */, - 1B3207C66892FC1977AB7E62 /* Pods-SnellTests-Nimble.modulemap */, - 9CD9FEBECE8C5D5F2AD2163A /* Pods-SnellTests-Nimble.xcconfig */, - 2C002330459B04235303A1CD /* Pods-SnellTests-Nimble-Private.xcconfig */, - 9195E0C98F5B77D95EAB32B6 /* Pods-SnellTests-Nimble-dummy.m */, - 501F241050A2C144A605A2D3 /* Pods-SnellTests-Nimble-prefix.pch */, - 0B52DC078ECFCF4AA2B52D3F /* Pods-SnellTests-Nimble-umbrella.h */, + D23678F73E3C24FC6964EBC0 /* AnyPromise.h */, + CE0B1863AFF6831B4F4548E8 /* AnyPromise.m */, + 1467C7AD45DA35878D65E297 /* AnyPromise.swift */, + EC98E615C19E5B392CF9A015 /* ErrorUnhandler.swift */, + CBC5A3F4B6925F3CEA626527 /* NSError+Cancellation.h */, + F071A43F551726E7DEDCC49C /* NSJSONFromData.swift */, + 665572FF72F87FB10E69A0A2 /* PMKPromise.h */, + 6109D5AB40A2B1FEBFD15523 /* PMKPromise.m */, + B703887E4C289309F5B8E76C /* Promise.h */, + AE5EDC7DF7A636EA021B879B /* Promise.swift */, + 9CEE458406DB67F283E13C12 /* Promise+Properties.swift */, + ACEB45CCBD14BC0C2F9B63CA /* PromiseKit.h */, + 085EF6E325E7390D929EFE98 /* Sealant.swift */, + 69BFA79846EDB5438D8EE480 /* State.swift */, + 7FD51E01710E4709ECD74934 /* Umbrella.h */, + 9851DC8005001BE62B297D54 /* after.m */, + 1C0F9BCE1AA2512139F2FEDE /* after.swift */, + 5DC50AF239D0F3769DFA32C6 /* dispatch_promise.m */, + 7A6FDD230758FCDD298DD5C6 /* dispatch_promise.swift */, + BB3B823FC6A4A2A00462142F /* hang.m */, + BD1F5F584789511886DB4ED9 /* join.m */, + AE7AE95CA58F9F39C873BA77 /* race.swift */, + 878995233B0D060AB35404CE /* when.m */, + 481B55FF0C086B18988E126A /* when.swift */, ); - name = "Support Files"; - path = "../Target Support Files/Pods-SnellTests-Nimble"; + name = CorePromise; sourceTree = ""; }; - A2949F9C241108949F483606 /* Frameworks */ = { + 895F1BCFB40440F397BC1AFE /* Targets Support Files */ = { isa = PBXGroup; children = ( - 34F44B5D478FBC87F7115AC1 /* OS X */, + 2F6E735C539C7AF741BC7717 /* Pods-Snell */, + 0A77E86C33E548530004E4BD /* Pods-SnellTests */, + ); + name = "Targets Support Files"; + sourceTree = ""; + }; + 912A4F63FD7ECCB915233AEB /* Frameworks */ = { + isa = PBXGroup; + children = ( + B9BD4FED500538BAC18714AC /* OS X */, ); name = Frameworks; sourceTree = ""; }; - B3BC52C939D4FDB047A94FA6 /* Targets Support Files */ = { + A597E21C3BD0D13DD2E7A878 = { isa = PBXGroup; children = ( - 82C751AB87D8AAB462B86B1D /* Pods-SnellTests */, + 3BDC718CFCD83E76A4C34175 /* Podfile */, + 912A4F63FD7ECCB915233AEB /* Frameworks */, + BCFCE307D284B3BA15CB990B /* Pods */, + 4DC8E1D3ADC4A6222047DF6D /* Products */, + 895F1BCFB40440F397BC1AFE /* Targets Support Files */, ); - name = "Targets Support Files"; sourceTree = ""; }; - E26AEFEE6912BB6E410F4987 = { + B9BD4FED500538BAC18714AC /* OS X */ = { isa = PBXGroup; children = ( - 04E3EC281DAC775EB1600D30 /* Podfile */, - A2949F9C241108949F483606 /* Frameworks */, - 7E97F78D4334086D1F9F9752 /* Pods */, - F020C6F503990DAF59808AC3 /* Products */, - B3BC52C939D4FDB047A94FA6 /* Targets Support Files */, + 6EC49B636A99C393DAB08B51 /* Cocoa.framework */, + E45620AF2388B929CC99A347 /* Foundation.framework */, + E01F3F4E1AD9A96830E2416D /* XCTest.framework */, ); + name = "OS X"; sourceTree = ""; }; - F020C6F503990DAF59808AC3 /* Products */ = { + BCFCE307D284B3BA15CB990B /* Pods */ = { isa = PBXGroup; children = ( - 8F98195EB07774BA1A075CE0 /* Nimble.framework */, - BF23A56166AAA64162ED3B53 /* Pods_SnellTests.framework */, - 3EC0B3C2EFA806E6CF7E18A2 /* Quick.framework */, + F950B35E9F0321F20F5E0DB0 /* Nimble */, + BE8B11986FF936303BDFBFCE /* PromiseKit */, + 74C8B50F864CE639A4665434 /* Quick */, ); - name = Products; + name = Pods; + sourceTree = ""; + }; + BE8B11986FF936303BDFBFCE /* PromiseKit */ = { + isa = PBXGroup; + children = ( + 85DF08DD263FB584C2B8B975 /* CorePromise */, + 779E69AC153266584BBCA13C /* Support Files */, + ); + path = PromiseKit; + sourceTree = ""; + }; + E59F356809600ABECD9E3A57 /* Support Files */ = { + isa = PBXGroup; + children = ( + 01E85A8FB49BCE9718266DAD /* Info.plist */, + E2272D3B9A50CEFB86D5AF54 /* Pods-SnellTests-Nimble.modulemap */, + 74CE36BCF4B29490E369E278 /* Pods-SnellTests-Nimble.xcconfig */, + 13D552CBC82B3EE236F89FDE /* Pods-SnellTests-Nimble-Private.xcconfig */, + 39FD381DEE611EF17AE5E773 /* Pods-SnellTests-Nimble-dummy.m */, + FAD47EC36EE8506543FA28C8 /* Pods-SnellTests-Nimble-prefix.pch */, + 6A93FFA287F849395E145EE0 /* Pods-SnellTests-Nimble-umbrella.h */, + ); + name = "Support Files"; + path = "../Target Support Files/Pods-SnellTests-Nimble"; + sourceTree = ""; + }; + F950B35E9F0321F20F5E0DB0 /* Nimble */ = { + isa = PBXGroup; + children = ( + 71F358E9AFD1EEE285F6C9A5 /* AdapterProtocols.swift */, + 58A25D7E46307E3F591C0CE3 /* AllPass.swift */, + 3EC70ECFCB9B125448034E39 /* AssertionDispatcher.swift */, + 750D6C910AC75768578686C3 /* AssertionRecorder.swift */, + CF7A0B915DBF0A9C523386E1 /* AsyncMatcherWrapper.swift */, + 43C43FEC0611E0895FEAA6FC /* BeAKindOf.swift */, + 602B7BA74282782B99D85F2D /* BeAnInstanceOf.swift */, + AFBBDBA30B0FBD47E7243389 /* BeCloseTo.swift */, + 227418AC5433AA1529DCC481 /* BeEmpty.swift */, + 8AD34FB113A3C81323905EDB /* BeGreaterThan.swift */, + FD12C9ACDB4BA03B32AF9529 /* BeGreaterThanOrEqualTo.swift */, + 3C6DB796FCEEB6FCB6AEF3C6 /* BeIdenticalTo.swift */, + 4C92D38A63ACB805F19B1FA3 /* BeLessThan.swift */, + D587C7813038D43A68FD7A76 /* BeLessThanOrEqual.swift */, + 04C48F1899F978DAB9D21385 /* BeLogical.swift */, + E0A750A44229CA2DE571FCC4 /* BeNil.swift */, + DB07A729D46C49947B37FB9D /* BeginWith.swift */, + 93578295159BA9AF2C6365F0 /* Contain.swift */, + BAE7FF9277DDFDB35C4248B8 /* DSL.h */, + 093657A6B3C7F639092E4AE1 /* DSL.m */, + 940DE1AED577D1813CA36D47 /* DSL.swift */, + 25CCC410D843747CC1D8F816 /* DSL+Wait.swift */, + D34E0AEF981201B7F3A5BF8D /* EndWith.swift */, + 7A2D7DC041F9811FAA805145 /* Equal.swift */, + 637DD72CFC06EA292D376FC6 /* Expectation.swift */, + 49911E00046F78FC594F820D /* Expression.swift */, + 74E1D67CA694112587A9A32A /* FailureMessage.swift */, + 76BACE8EEB7D245DFE90BD0C /* Functional.swift */, + B3D072C2AEF15805EC5222D8 /* Match.swift */, + E5713B6C10ED6E6FD9BE87AC /* MatcherFunc.swift */, + 798DAC5BE759EBDED09ECD7E /* MatcherProtocols.swift */, + 96D8E988309C567BCE688A3E /* NMBExceptionCapture.h */, + E9369B1200ED15121B2D757B /* NMBExceptionCapture.m */, + 83383187CF081C71C5A0652E /* Nimble.h */, + 81D8FE9BC81DCA00A30A99ED /* NimbleXCTestHandler.swift */, + 3DFD6B2CEDCDC8126ADB2968 /* ObjCExpectation.swift */, + AFA26E0F0E5CFEFA4C67AFD0 /* ObjCMatcher.swift */, + CEB5BB9AAB5D28B57EB094C7 /* Poll.swift */, + C6DE04303208D61A7697157A /* RaisesException.swift */, + 3AC37A115649C56333DB4F4B /* SourceLocation.swift */, + BE08B87E1D7006405B8EBB38 /* Stringers.swift */, + E59F356809600ABECD9E3A57 /* Support Files */, + ); + path = Nimble; sourceTree = ""; }; /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */ - 2ED4B6C2B7E28300E28A9FEE /* Headers */ = { + 294EC6F0E7E0DBA9D8F48EAA /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 3C6E2D6A45718574E659ACA4 /* Pods-SnellTests-umbrella.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 3132A8694B0BBC12362DA27D /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - BA790392FED5B280CC09A40A /* DSL.h in Headers */, - 6CED8E13E01A162B57A316E4 /* NMBExceptionCapture.h in Headers */, - 786EA02A0A1E040EAACA81CD /* Nimble.h in Headers */, - ACEEB4734F2F0112B520CA53 /* Pods-SnellTests-Nimble-umbrella.h in Headers */, + 9F190752B39EE77D01D5798D /* Pods-Snell-umbrella.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - 90352E1EE1F6A66C1045A15F /* Headers */ = { + 6DC0163C42DB3A4210FA167C /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 8CC9C6DA27DB63EA0D0C9D1E /* NSString+QCKSelectorName.h in Headers */, - 0032C2340FF89048367D957E /* Pods-SnellTests-Quick-umbrella.h in Headers */, - 01D2C6CBC6F56AFFCE4AE960 /* QCKDSL.h in Headers */, - 49689281C4546350B53D97A1 /* Quick.h in Headers */, - 2AC9A128D61CE606575846BF /* QuickConfiguration.h in Headers */, - 0C45A40633DC021EDDA787BF /* QuickSpec.h in Headers */, - 286AA6B4E92FF2587FE0B769 /* World+DSL.h in Headers */, - 165703213B2C93C4A0E41047 /* World.h in Headers */, + 75F673F9C8E559B58850716A /* AnyPromise.h in Headers */, + DDEE6A2F7DB3ECD1AEC27909 /* NSError+Cancellation.h in Headers */, + D9CEAD774B0C91D14B1D1EAF /* PMKPromise.h in Headers */, + 96DF523E62CB4FDFCC7D9A4F /* Promise.h in Headers */, + AF65C01142DEF7A8FEB7F1E5 /* PromiseKit.h in Headers */, + C4C0FA34E7888B718F14C981 /* Umbrella.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - E3629862720EF94171C20F18 /* Headers */ = { + 72CF9D6D71AB3797488CDC3D /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 388AB80C74B5AFD30F7C5368 /* Pods-SnellTests-umbrella.h in Headers */, + 629A872BE93AEEB9D48C0450 /* DSL.h in Headers */, + 0946FAB3FC56BB577E3943FF /* NMBExceptionCapture.h in Headers */, + 59847A94514CA526C29DCEFF /* Nimble.h in Headers */, + A09F993958C24D903B73951F /* Pods-SnellTests-Nimble-umbrella.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + D317637EC2D6B4DB638F45A4 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + BEE378BF156FD4EBFC07E7F9 /* NSString+QCKSelectorName.h in Headers */, + 3CCAA22E4DECF588605B2DE9 /* Pods-SnellTests-Quick-umbrella.h in Headers */, + BB5367E88FD7F1B1367DF615 /* QCKDSL.h in Headers */, + 5F73A75B5D4525625DECD6D3 /* Quick.h in Headers */, + 7A9F1872B31F4FBA8BDEBCA4 /* QuickConfiguration.h in Headers */, + 1C68B8E56AF4C276B86DC8AA /* QuickSpec.h in Headers */, + 6F41A74578D9A36D79A11DF0 /* World+DSL.h in Headers */, + 0D417FB77421A35F781D683B /* World.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXHeadersBuildPhase section */ /* Begin PBXNativeTarget section */ - 33F3903AA7B6DB548FC00F55 /* Pods-SnellTests */ = { + 2AA37D69CEF583EBA98754FA /* Pods-SnellTests */ = { isa = PBXNativeTarget; - buildConfigurationList = 215DBE4D346FF47E0049E77E /* Build configuration list for PBXNativeTarget "Pods-SnellTests" */; + buildConfigurationList = 17D86F993DA3880FE9CDF96D /* Build configuration list for PBXNativeTarget "Pods-SnellTests" */; buildPhases = ( - 17D709873909B28422ACF8E8 /* Sources */, - E6CE42092FF76C9233C779B3 /* Frameworks */, - E3629862720EF94171C20F18 /* Headers */, + 6BA68B9C686DF2038F107ABB /* Sources */, + 9D90E7E6C721239F244EC5AB /* Frameworks */, + 294EC6F0E7E0DBA9D8F48EAA /* Headers */, ); buildRules = ( ); dependencies = ( - E31FAD814A39D47B574B61F0 /* PBXTargetDependency */, - 8C108E4224E305BE828A9347 /* PBXTargetDependency */, + B645A607523336F3B1D4B18A /* PBXTargetDependency */, + 346791B94CC9A371B7756223 /* PBXTargetDependency */, ); name = "Pods-SnellTests"; productName = "Pods-SnellTests"; - productReference = BF23A56166AAA64162ED3B53 /* Pods_SnellTests.framework */; + productReference = C0A6B2AF98D9C579058E1A1D /* Pods_SnellTests.framework */; productType = "com.apple.product-type.framework"; }; - 3F2BA4DBD2A9A0652AFA60AF /* Pods-SnellTests-Nimble */ = { + 4DC413C0C6EC17AD52E69F4D /* Pods-Snell-PromiseKit */ = { isa = PBXNativeTarget; - buildConfigurationList = 52CE0DFEA132293A77449632 /* Build configuration list for PBXNativeTarget "Pods-SnellTests-Nimble" */; + buildConfigurationList = 39292A0F182860AA4EDD25D1 /* Build configuration list for PBXNativeTarget "Pods-Snell-PromiseKit" */; buildPhases = ( - E10DB21E2A461AF1B3531417 /* Sources */, - 937B92CB00EC1B93DEB49428 /* Frameworks */, - 2ED4B6C2B7E28300E28A9FEE /* Headers */, + 954F7458E8690C57670ABA60 /* Sources */, + ECCD4626E6F6211C36CFE4DB /* Frameworks */, + 6DC0163C42DB3A4210FA167C /* Headers */, ); buildRules = ( ); dependencies = ( ); - name = "Pods-SnellTests-Nimble"; - productName = "Pods-SnellTests-Nimble"; - productReference = 8F98195EB07774BA1A075CE0 /* Nimble.framework */; + name = "Pods-Snell-PromiseKit"; + productName = "Pods-Snell-PromiseKit"; + productReference = 69E3A141AF4F759260330BF6 /* PromiseKit.framework */; productType = "com.apple.product-type.framework"; }; - 7F91E0E9472A597D7FC7D467 /* Pods-SnellTests-Quick */ = { + 7A2CE3D9E759C4412CA1B3FA /* Pods-Snell */ = { isa = PBXNativeTarget; - buildConfigurationList = 37EDBD02D6D8B756D83632C0 /* Build configuration list for PBXNativeTarget "Pods-SnellTests-Quick" */; + buildConfigurationList = 9DDCBDAD1E9D7326EE77B618 /* Build configuration list for PBXNativeTarget "Pods-Snell" */; buildPhases = ( - D4AE93003ACA6A8EC5E31D47 /* Sources */, - 4DC0426B8E6C508B4EEFF7D7 /* Frameworks */, - 90352E1EE1F6A66C1045A15F /* Headers */, + CA82BD85A1FF79C140B89CD8 /* Sources */, + 9911711D46E0DA50CD186533 /* Frameworks */, + 3132A8694B0BBC12362DA27D /* Headers */, + ); + buildRules = ( + ); + dependencies = ( + CD19CC7D8042584556558DE8 /* PBXTargetDependency */, + ); + name = "Pods-Snell"; + productName = "Pods-Snell"; + productReference = 2B1C2547FF590BEFF285684D /* Pods_Snell.framework */; + productType = "com.apple.product-type.framework"; + }; + C65B43630F2159E021C4144F /* Pods-SnellTests-Quick */ = { + isa = PBXNativeTarget; + buildConfigurationList = CABD77A4C4ECC51AE6118483 /* Build configuration list for PBXNativeTarget "Pods-SnellTests-Quick" */; + buildPhases = ( + FFB32E6AD2A6723F38DAA8C1 /* Sources */, + AB5ADFAE9650AB0ECA0ED6F1 /* Frameworks */, + D317637EC2D6B4DB638F45A4 /* Headers */, ); buildRules = ( ); @@ -503,137 +718,229 @@ ); name = "Pods-SnellTests-Quick"; productName = "Pods-SnellTests-Quick"; - productReference = 3EC0B3C2EFA806E6CF7E18A2 /* Quick.framework */; + productReference = 5FB4B1AAB11F4F303BD75FB7 /* Quick.framework */; + productType = "com.apple.product-type.framework"; + }; + EEABC373A5D18395B27399E3 /* Pods-SnellTests-Nimble */ = { + isa = PBXNativeTarget; + buildConfigurationList = B8B42B047114D55AF1C59946 /* Build configuration list for PBXNativeTarget "Pods-SnellTests-Nimble" */; + buildPhases = ( + 4AC0BBBB120CC9BD8518765E /* Sources */, + 527902F2E1D6C5C87614AEA0 /* Frameworks */, + 72CF9D6D71AB3797488CDC3D /* Headers */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "Pods-SnellTests-Nimble"; + productName = "Pods-SnellTests-Nimble"; + productReference = C93A3107F55E6438D44384C4 /* Nimble.framework */; productType = "com.apple.product-type.framework"; }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ - BB6B62EB42BF0221651312A7 /* Project object */ = { + E4A0026F6535B4F9A11B3DDC /* Project object */ = { isa = PBXProject; attributes = { - LastSwiftUpdateCheck = 0700; LastUpgradeCheck = 0640; }; - buildConfigurationList = B47F31E0687A3287ABA4D5CA /* Build configuration list for PBXProject "Pods" */; + buildConfigurationList = 9648841E214E79E140E81158 /* Build configuration list for PBXProject "Pods" */; compatibilityVersion = "Xcode 3.2"; developmentRegion = English; hasScannedForEncodings = 0; knownRegions = ( en, ); - mainGroup = E26AEFEE6912BB6E410F4987; - productRefGroup = F020C6F503990DAF59808AC3 /* Products */; + mainGroup = A597E21C3BD0D13DD2E7A878; + productRefGroup = 4DC8E1D3ADC4A6222047DF6D /* Products */; projectDirPath = ""; projectRoot = ""; targets = ( - 33F3903AA7B6DB548FC00F55 /* Pods-SnellTests */, - 3F2BA4DBD2A9A0652AFA60AF /* Pods-SnellTests-Nimble */, - 7F91E0E9472A597D7FC7D467 /* Pods-SnellTests-Quick */, + 7A2CE3D9E759C4412CA1B3FA /* Pods-Snell */, + 4DC413C0C6EC17AD52E69F4D /* Pods-Snell-PromiseKit */, + 2AA37D69CEF583EBA98754FA /* Pods-SnellTests */, + EEABC373A5D18395B27399E3 /* Pods-SnellTests-Nimble */, + C65B43630F2159E021C4144F /* Pods-SnellTests-Quick */, ); }; /* End PBXProject section */ /* Begin PBXSourcesBuildPhase section */ - 17D709873909B28422ACF8E8 /* Sources */ = { + 4AC0BBBB120CC9BD8518765E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - AFC49BC747EA30FA5C252BDC /* Pods-SnellTests-dummy.m in Sources */, + 354ACFDFAFA5CE2A33DA58A6 /* AdapterProtocols.swift in Sources */, + DD971377B0C98EDA78D822C1 /* AllPass.swift in Sources */, + 4C0C53EB6B96E596FBFDD2D8 /* AssertionDispatcher.swift in Sources */, + EBD953439F0A174BEC7CB15E /* AssertionRecorder.swift in Sources */, + 6B9DADA3A3462131E2C67700 /* AsyncMatcherWrapper.swift in Sources */, + A59FC49AD082D9B442BC41FE /* BeAKindOf.swift in Sources */, + F00DD34880987ECD2630AB49 /* BeAnInstanceOf.swift in Sources */, + F503935080E1563FE33D8D18 /* BeCloseTo.swift in Sources */, + CD973D9718F90138F0494EA2 /* BeEmpty.swift in Sources */, + D3F0FFC9E86DC34021057D6D /* BeGreaterThan.swift in Sources */, + DFFBC482BBE5CA8778430D1C /* BeGreaterThanOrEqualTo.swift in Sources */, + C8B5A6A7533B7149CF7B04C6 /* BeIdenticalTo.swift in Sources */, + 6161371347587353347EF64A /* BeLessThan.swift in Sources */, + 221C241142821CE7A40D37EC /* BeLessThanOrEqual.swift in Sources */, + 30E48DC87E537891EC0DBE2D /* BeLogical.swift in Sources */, + 64E7C2BC0215C154F33D0F31 /* BeNil.swift in Sources */, + BFAD9CF3891DE76933C1E6B8 /* BeginWith.swift in Sources */, + 5F77E9FF0BC0FB355A9B281B /* Contain.swift in Sources */, + 0C8A0F12E36014D20C91F743 /* DSL+Wait.swift in Sources */, + 31516B03049F3B1E0A559DC2 /* DSL.m in Sources */, + BBE1E64CCA36EE571338D055 /* DSL.swift in Sources */, + 9F961415E4ACF905FEA3C079 /* EndWith.swift in Sources */, + 369D6AF6DDE59A1915867F6A /* Equal.swift in Sources */, + 5A20FA1BFF62B72009E9D1AE /* Expectation.swift in Sources */, + DB6F6E276EFA5F164F75FC3E /* Expression.swift in Sources */, + 817FDEE000E1C480E804777A /* FailureMessage.swift in Sources */, + FAA5E852F5C69D6BF7FB2038 /* Functional.swift in Sources */, + 6EC5365A8EFEC60B16B6F4CE /* Match.swift in Sources */, + 678B936041077B3D9C3BB8D0 /* MatcherFunc.swift in Sources */, + B32055335CF13EE32E8FDD3C /* MatcherProtocols.swift in Sources */, + 54E8CAF4761BA886703F831F /* NMBExceptionCapture.m in Sources */, + 32737E6F29EE08C8D2320A8B /* NimbleXCTestHandler.swift in Sources */, + A63476A9A924A932F2508193 /* ObjCExpectation.swift in Sources */, + 584C99E1992A19E33598E1EA /* ObjCMatcher.swift in Sources */, + 83160B7EA4859DAB90E4B89D /* Pods-SnellTests-Nimble-dummy.m in Sources */, + 4AC98F17D6EC13EF6C37D087 /* Poll.swift in Sources */, + 1C984B16F136691CB6BA5087 /* RaisesException.swift in Sources */, + E9840E7FB547C64983C21A94 /* SourceLocation.swift in Sources */, + 30031AF0B8740BF43302019A /* Stringers.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - D4AE93003ACA6A8EC5E31D47 /* Sources */ = { + 6BA68B9C686DF2038F107ABB /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 362C5BAB82B830243B2F1A02 /* Callsite.swift in Sources */, - 49B314E1C2F64429D85E0AF5 /* Closures.swift in Sources */, - F69F5C605953AD045F0DBA19 /* Configuration.swift in Sources */, - B19525215DA6B5EC8F0A0A5C /* DSL.swift in Sources */, - A2F5AB81FD3A9E3F132AEA64 /* Example.swift in Sources */, - 2EAD062D67287C58984BFBD8 /* ExampleGroup.swift in Sources */, - 367CEEDA11C0C4E4CA0DDC3A /* ExampleHooks.swift in Sources */, - 9192DECA89B92BA716317B55 /* ExampleMetadata.swift in Sources */, - 043F894252DDB6C142B70332 /* Filter.swift in Sources */, - 36D8D7FD8953B57BCB96DDB5 /* NSString+QCKSelectorName.m in Sources */, - 3C63BFED57B3711787C9AD33 /* Pods-SnellTests-Quick-dummy.m in Sources */, - 9599686C85B5ABC53C6AAB0C /* QCKDSL.m in Sources */, - 3E66834035DD13EA098FB012 /* QuickConfiguration.m in Sources */, - D828296AA94D608CB4DC4F5B /* QuickSpec.m in Sources */, - 68371E1A38831E279EC76C59 /* SuiteHooks.swift in Sources */, - 98B538E05DA50DE7B510066A /* World+DSL.swift in Sources */, - 7E2F68958977E02FBC78EB78 /* World.swift in Sources */, + 57A58A0B2370563B69D94251 /* Pods-SnellTests-dummy.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - E10DB21E2A461AF1B3531417 /* Sources */ = { + 954F7458E8690C57670ABA60 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - ACD6EDE06A22F5AE8C60430E /* AdapterProtocols.swift in Sources */, - BE6D8AD466B8D75571AB92F6 /* AllPass.swift in Sources */, - 637583220EA3540356890715 /* AssertionDispatcher.swift in Sources */, - 43E5A11AE675610D66C843B7 /* AssertionRecorder.swift in Sources */, - 55A9B578F36CDB5C13911431 /* AsyncMatcherWrapper.swift in Sources */, - D02090EBC4F667C37950806B /* BeAKindOf.swift in Sources */, - 549AC13F9D4A2DBAD9853063 /* BeAnInstanceOf.swift in Sources */, - 1194F249D5AEAF0FB1184260 /* BeCloseTo.swift in Sources */, - 36D15A60B8A5E62529102429 /* BeEmpty.swift in Sources */, - EE32DA51C814979D4A530066 /* BeGreaterThan.swift in Sources */, - 86415EC0CBCEF7408F0A7753 /* BeGreaterThanOrEqualTo.swift in Sources */, - A6EB058B095B775182FE6890 /* BeIdenticalTo.swift in Sources */, - EEAC872E584E7AF92E5A9E11 /* BeLessThan.swift in Sources */, - 4C06F02A404A3F6F41E883E0 /* BeLessThanOrEqual.swift in Sources */, - 4C515DB1597A7604B08F1E4B /* BeLogical.swift in Sources */, - AEDF7A40B9D8F277454BB815 /* BeNil.swift in Sources */, - E57D68636C9CF39A4DD0ECF8 /* BeginWith.swift in Sources */, - 5E157F18EB4041A931775C55 /* Contain.swift in Sources */, - B344C15983C378C92D45BABB /* DSL+Wait.swift in Sources */, - 0BE663B0CC7AD4513D4256D0 /* DSL.m in Sources */, - AB27897936208F112C344C30 /* DSL.swift in Sources */, - 4CE58175C35077ACAFE1F292 /* EndWith.swift in Sources */, - 521DCC88BAF93916010CE731 /* Equal.swift in Sources */, - 7FB634EF9A0BE1016FF0446E /* Expectation.swift in Sources */, - 20ED1F81F3E610105E9EA83B /* Expression.swift in Sources */, - D5F0CD4E6826C54E8913E0B4 /* FailureMessage.swift in Sources */, - A6BB3F307C07D217E214EEF2 /* Functional.swift in Sources */, - E3281F49BC8C6040FB9F09F4 /* Match.swift in Sources */, - 1301556B1D47614D23CB85E1 /* MatcherFunc.swift in Sources */, - 0E4151991E2758BB34F9F3B4 /* MatcherProtocols.swift in Sources */, - BD8A3398F991755940E5C9A6 /* NMBExceptionCapture.m in Sources */, - 86637DA0AD428E1DC7BDBE8E /* NimbleXCTestHandler.swift in Sources */, - FE613FB1609707E2B055F913 /* ObjCExpectation.swift in Sources */, - F320C96FA59A6BD1F6D4523B /* ObjCMatcher.swift in Sources */, - B064B379040DF3AC2F70A48A /* Pods-SnellTests-Nimble-dummy.m in Sources */, - 4E6C6A498805161D94B77ACF /* Poll.swift in Sources */, - 5A23F7624CEC750379795A08 /* RaisesException.swift in Sources */, - EEE54492DEC439DC6D1842EC /* SourceLocation.swift in Sources */, - EC2C238E94731F5CA063B728 /* Stringers.swift in Sources */, + E3235803CF563C41B47ED6E6 /* AnyPromise.m in Sources */, + A20B4446928F6FFE38413D2D /* AnyPromise.swift in Sources */, + 72A97FF36E9D77D768D7C495 /* ErrorUnhandler.swift in Sources */, + E347238BD6E585E8408107EB /* NSJSONFromData.swift in Sources */, + 93C993603BE5262030FE4406 /* PMKPromise.m in Sources */, + B5FFA9C014C07B7F8FF7B156 /* Pods-Snell-PromiseKit-dummy.m in Sources */, + 20CE3142D8971BC5FFD1A6DE /* Promise+Properties.swift in Sources */, + 93FE8A0D341E2BDCB7AD26D3 /* Promise.swift in Sources */, + 613976EF9B21526263EC7A4D /* Sealant.swift in Sources */, + FD0C8FF619F2A83761515A9B /* State.swift in Sources */, + 0E03F2308A2C8D927512B97C /* after.m in Sources */, + 3DFD33D41BE7AB417198DFD6 /* after.swift in Sources */, + 7F01CF3B16066282266BFC80 /* dispatch_promise.m in Sources */, + 202A9B5F84E1B9CB2136AC55 /* dispatch_promise.swift in Sources */, + 5DBF952A4BF697F0CF3599E1 /* hang.m in Sources */, + D7F127DB82603809A909857B /* join.m in Sources */, + 0FBD0B4C4FE2FE69C70532EF /* race.swift in Sources */, + 297CC514A9D3AC0341A08DF7 /* when.m in Sources */, + FF99585B8E4EE16593FF3726 /* when.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + CA82BD85A1FF79C140B89CD8 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 22891A86924AE5C70BEA6808 /* Pods-Snell-dummy.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + FFB32E6AD2A6723F38DAA8C1 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 22C6083048621F9D18050989 /* Callsite.swift in Sources */, + 0EED1464F39D2BD7435FBBC1 /* Closures.swift in Sources */, + 902E4D0C6DB7D76CDC0420F8 /* Configuration.swift in Sources */, + 3D4AD2CF760D84B4C962C07B /* DSL.swift in Sources */, + 6549E535B9A72329D842CED6 /* Example.swift in Sources */, + 26D02F0F16202C4C56C3115F /* ExampleGroup.swift in Sources */, + DCD4FAC03DBC03902272BAC9 /* ExampleHooks.swift in Sources */, + 8F7BBAE4526F6A050494F70B /* ExampleMetadata.swift in Sources */, + 024BCBF51073C432707B0A93 /* Filter.swift in Sources */, + EDC19D3984E0CCDC8B20CC64 /* NSString+QCKSelectorName.m in Sources */, + EAC18D06945C9CE55E6C6357 /* Pods-SnellTests-Quick-dummy.m in Sources */, + C2B3E8EA2FB5FFBC4AA4DE58 /* QCKDSL.m in Sources */, + 4E4884EEEA705E0597EF3892 /* QuickConfiguration.m in Sources */, + 627E7FDE2C0ED1191E4A3E2A /* QuickSpec.m in Sources */, + 646AE6A5684A0531746ABE00 /* SuiteHooks.swift in Sources */, + A1ECE69BD0C2B3B44A298EC0 /* World+DSL.swift in Sources */, + B472F4C712E83EBA3AD7FC88 /* World.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ - 8C108E4224E305BE828A9347 /* PBXTargetDependency */ = { + 346791B94CC9A371B7756223 /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = "Pods-SnellTests-Quick"; - target = 7F91E0E9472A597D7FC7D467 /* Pods-SnellTests-Quick */; - targetProxy = A4658E9104824F5A52A2F187 /* PBXContainerItemProxy */; + target = C65B43630F2159E021C4144F /* Pods-SnellTests-Quick */; + targetProxy = 96B4F217F85E075188E536F9 /* PBXContainerItemProxy */; }; - E31FAD814A39D47B574B61F0 /* PBXTargetDependency */ = { + B645A607523336F3B1D4B18A /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = "Pods-SnellTests-Nimble"; - target = 3F2BA4DBD2A9A0652AFA60AF /* Pods-SnellTests-Nimble */; - targetProxy = 7E6B6CCDCC31316E35E7EBE7 /* PBXContainerItemProxy */; + target = EEABC373A5D18395B27399E3 /* Pods-SnellTests-Nimble */; + targetProxy = B5DCFC0C71A7F9EC726794A1 /* PBXContainerItemProxy */; + }; + CD19CC7D8042584556558DE8 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "Pods-Snell-PromiseKit"; + target = 4DC413C0C6EC17AD52E69F4D /* Pods-Snell-PromiseKit */; + targetProxy = 325E9ED8B9DD3D1A14C13828 /* PBXContainerItemProxy */; }; /* End PBXTargetDependency section */ /* Begin XCBuildConfiguration section */ - 026E7997631C0AA7919F24BF /* Release */ = { + 0B07E13848CC50A49AC46FF7 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 05D68CBC4C67D2B8F1A035EC /* Pods-SnellTests.release.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = YES; + ENABLE_NS_ASSERTIONS = NO; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_PREPROCESSOR_DEFINITIONS = "RELEASE=1"; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.10; + STRIP_INSTALLED_PRODUCT = NO; + SYMROOT = "${SRCROOT}/../build"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 60C151FC1455F6918FD9C0C7 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 12B2260C3D8711B2B33CF3FE /* Pods-SnellTests-Quick-Private.xcconfig */; buildSettings = { COMBINE_HIDPI_IMAGES = YES; CURRENT_PROJECT_VERSION = 1; @@ -644,26 +951,110 @@ DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_STRICT_OBJC_MSGSEND = YES; FRAMEWORK_VERSION = A; - INFOPLIST_FILE = "Target Support Files/Pods-SnellTests/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/Pods-SnellTests-Quick/Pods-SnellTests-Quick-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/Pods-SnellTests-Quick/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; MACOSX_DEPLOYMENT_TARGET = 10.10; - MODULEMAP_FILE = "Target Support Files/Pods-SnellTests/Pods-SnellTests.modulemap"; + MODULEMAP_FILE = "Target Support Files/Pods-SnellTests-Quick/Pods-SnellTests-Quick.modulemap"; MTL_ENABLE_DEBUG_INFO = NO; + PRODUCT_NAME = Quick; + SDKROOT = macosx; + SKIP_INSTALL = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; + 70C4A67A01375E9FB7DB18F1 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = F208A254B888830E3BEBA36C /* Pods-Snell-PromiseKit-Private.xcconfig */; + buildSettings = { + COMBINE_HIDPI_IMAGES = YES; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + FRAMEWORK_VERSION = A; + GCC_PREFIX_HEADER = "Target Support Files/Pods-Snell-PromiseKit/Pods-Snell-PromiseKit-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/Pods-Snell-PromiseKit/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; + MACOSX_DEPLOYMENT_TARGET = 10.10; + MODULEMAP_FILE = "Target Support Files/Pods-Snell-PromiseKit/Pods-Snell-PromiseKit.modulemap"; + MTL_ENABLE_DEBUG_INFO = YES; + PRODUCT_NAME = PromiseKit; + SDKROOT = macosx; + SKIP_INSTALL = YES; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + 759766986D1A2E636EA16DD6 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 6E0B8993D6A176BEE3037469 /* Pods-Snell.debug.xcconfig */; + buildSettings = { + COMBINE_HIDPI_IMAGES = YES; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + FRAMEWORK_VERSION = A; + INFOPLIST_FILE = "Target Support Files/Pods-Snell/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; + MACOSX_DEPLOYMENT_TARGET = 10.10; + MODULEMAP_FILE = "Target Support Files/Pods-Snell/Pods-Snell.modulemap"; + MTL_ENABLE_DEBUG_INFO = YES; OTHER_LDFLAGS = ""; OTHER_LIBTOOLFLAGS = ""; PODS_ROOT = "$(SRCROOT)"; - PRODUCT_NAME = Pods_SnellTests; + PRODUCT_NAME = Pods_Snell; SDKROOT = macosx; SKIP_INSTALL = YES; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Release; + name = Debug; }; - 24EE11AF4BDA77F3A9229422 /* Debug */ = { + 9E579F6FA1B99C5FBB5B7957 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 2C002330459B04235303A1CD /* Pods-SnellTests-Nimble-Private.xcconfig */; + baseConfigurationReference = 12B2260C3D8711B2B33CF3FE /* Pods-SnellTests-Quick-Private.xcconfig */; + buildSettings = { + COMBINE_HIDPI_IMAGES = YES; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + FRAMEWORK_VERSION = A; + GCC_PREFIX_HEADER = "Target Support Files/Pods-SnellTests-Quick/Pods-SnellTests-Quick-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/Pods-SnellTests-Quick/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; + MACOSX_DEPLOYMENT_TARGET = 10.10; + MODULEMAP_FILE = "Target Support Files/Pods-SnellTests-Quick/Pods-SnellTests-Quick.modulemap"; + MTL_ENABLE_DEBUG_INFO = YES; + PRODUCT_NAME = Quick; + SDKROOT = macosx; + SKIP_INSTALL = YES; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + 9EAB7312EF34F6BFB999E040 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 13D552CBC82B3EE236F89FDE /* Pods-SnellTests-Nimble-Private.xcconfig */; buildSettings = { COMBINE_HIDPI_IMAGES = YES; CURRENT_PROJECT_VERSION = 1; @@ -689,9 +1080,39 @@ }; name = Debug; }; - 42614593DC38EA18C0FA4F1B /* Debug */ = { + B982D9F438654E98FDFD1487 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = E26639FB75B5E1BDFABF0839 /* Pods-SnellTests.debug.xcconfig */; + baseConfigurationReference = 6370A9D71E3F43895A0EE4F6 /* Pods-SnellTests.release.xcconfig */; + buildSettings = { + COMBINE_HIDPI_IMAGES = YES; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + FRAMEWORK_VERSION = A; + INFOPLIST_FILE = "Target Support Files/Pods-SnellTests/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; + MACOSX_DEPLOYMENT_TARGET = 10.10; + MODULEMAP_FILE = "Target Support Files/Pods-SnellTests/Pods-SnellTests.modulemap"; + MTL_ENABLE_DEBUG_INFO = NO; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_NAME = Pods_SnellTests; + SDKROOT = macosx; + SKIP_INSTALL = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; + D421E4C0C23EA1F240B25669 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 77268DBDD58BB92C4566D30D /* Pods-SnellTests.debug.xcconfig */; buildSettings = { COMBINE_HIDPI_IMAGES = YES; CURRENT_PROJECT_VERSION = 1; @@ -719,9 +1140,9 @@ }; name = Debug; }; - 7922AADEC482291106BD8E75 /* Release */ = { + DE9DABBF7EF449AD0C5D57C9 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 2C002330459B04235303A1CD /* Pods-SnellTests-Nimble-Private.xcconfig */; + baseConfigurationReference = 13D552CBC82B3EE236F89FDE /* Pods-SnellTests-Nimble-Private.xcconfig */; buildSettings = { COMBINE_HIDPI_IMAGES = YES; CURRENT_PROJECT_VERSION = 1; @@ -747,9 +1168,9 @@ }; name = Release; }; - 831E0494FD7CEC53AA8AFBD6 /* Release */ = { + E7913D3C74E06BD99F0F16C8 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C9DA8FC28C76B9736BBA6B15 /* Pods-SnellTests-Quick-Private.xcconfig */; + baseConfigurationReference = 9D0B139BA359485F9BAB8A61 /* Pods-Snell.release.xcconfig */; buildSettings = { COMBINE_HIDPI_IMAGES = YES; CURRENT_PROJECT_VERSION = 1; @@ -760,14 +1181,16 @@ DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_STRICT_OBJC_MSGSEND = YES; FRAMEWORK_VERSION = A; - GCC_PREFIX_HEADER = "Target Support Files/Pods-SnellTests-Quick/Pods-SnellTests-Quick-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/Pods-SnellTests-Quick/Info.plist"; + INFOPLIST_FILE = "Target Support Files/Pods-Snell/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; MACOSX_DEPLOYMENT_TARGET = 10.10; - MODULEMAP_FILE = "Target Support Files/Pods-SnellTests-Quick/Pods-SnellTests-Quick.modulemap"; + MODULEMAP_FILE = "Target Support Files/Pods-Snell/Pods-Snell.modulemap"; MTL_ENABLE_DEBUG_INFO = NO; - PRODUCT_NAME = Quick; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_NAME = Pods_Snell; SDKROOT = macosx; SKIP_INSTALL = YES; VERSIONING_SYSTEM = "apple-generic"; @@ -775,41 +1198,7 @@ }; name = Release; }; - 8C12BE688850358B1AF40F60 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = YES; - ENABLE_NS_ASSERTIONS = NO; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_PREPROCESSOR_DEFINITIONS = "RELEASE=1"; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.10; - STRIP_INSTALLED_PRODUCT = NO; - SYMROOT = "${SRCROOT}/../build"; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - A0A6524C228E98FE1CD71E37 /* Debug */ = { + EB4C76F87FB4E10040D396A4 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; @@ -848,74 +1237,92 @@ }; name = Debug; }; - FF25F07C6AB6B3C9100D9EF3 /* Debug */ = { + FA5F489B627CC0748DFE4BB3 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C9DA8FC28C76B9736BBA6B15 /* Pods-SnellTests-Quick-Private.xcconfig */; + baseConfigurationReference = F208A254B888830E3BEBA36C /* Pods-Snell-PromiseKit-Private.xcconfig */; buildSettings = { COMBINE_HIDPI_IMAGES = YES; CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_STRICT_OBJC_MSGSEND = YES; FRAMEWORK_VERSION = A; - GCC_PREFIX_HEADER = "Target Support Files/Pods-SnellTests-Quick/Pods-SnellTests-Quick-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/Pods-SnellTests-Quick/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/Pods-Snell-PromiseKit/Pods-Snell-PromiseKit-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/Pods-Snell-PromiseKit/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; MACOSX_DEPLOYMENT_TARGET = 10.10; - MODULEMAP_FILE = "Target Support Files/Pods-SnellTests-Quick/Pods-SnellTests-Quick.modulemap"; - MTL_ENABLE_DEBUG_INFO = YES; - PRODUCT_NAME = Quick; + MODULEMAP_FILE = "Target Support Files/Pods-Snell-PromiseKit/Pods-Snell-PromiseKit.modulemap"; + MTL_ENABLE_DEBUG_INFO = NO; + PRODUCT_NAME = PromiseKit; SDKROOT = macosx; SKIP_INSTALL = YES; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Debug; + name = Release; }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ - 215DBE4D346FF47E0049E77E /* Build configuration list for PBXNativeTarget "Pods-SnellTests" */ = { + 17D86F993DA3880FE9CDF96D /* Build configuration list for PBXNativeTarget "Pods-SnellTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + D421E4C0C23EA1F240B25669 /* Debug */, + B982D9F438654E98FDFD1487 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 39292A0F182860AA4EDD25D1 /* Build configuration list for PBXNativeTarget "Pods-Snell-PromiseKit" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 70C4A67A01375E9FB7DB18F1 /* Debug */, + FA5F489B627CC0748DFE4BB3 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 9648841E214E79E140E81158 /* Build configuration list for PBXProject "Pods" */ = { isa = XCConfigurationList; buildConfigurations = ( - 42614593DC38EA18C0FA4F1B /* Debug */, - 026E7997631C0AA7919F24BF /* Release */, + EB4C76F87FB4E10040D396A4 /* Debug */, + 0B07E13848CC50A49AC46FF7 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 37EDBD02D6D8B756D83632C0 /* Build configuration list for PBXNativeTarget "Pods-SnellTests-Quick" */ = { + 9DDCBDAD1E9D7326EE77B618 /* Build configuration list for PBXNativeTarget "Pods-Snell" */ = { isa = XCConfigurationList; buildConfigurations = ( - FF25F07C6AB6B3C9100D9EF3 /* Debug */, - 831E0494FD7CEC53AA8AFBD6 /* Release */, + 759766986D1A2E636EA16DD6 /* Debug */, + E7913D3C74E06BD99F0F16C8 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 52CE0DFEA132293A77449632 /* Build configuration list for PBXNativeTarget "Pods-SnellTests-Nimble" */ = { + B8B42B047114D55AF1C59946 /* Build configuration list for PBXNativeTarget "Pods-SnellTests-Nimble" */ = { isa = XCConfigurationList; buildConfigurations = ( - 24EE11AF4BDA77F3A9229422 /* Debug */, - 7922AADEC482291106BD8E75 /* Release */, + 9EAB7312EF34F6BFB999E040 /* Debug */, + DE9DABBF7EF449AD0C5D57C9 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - B47F31E0687A3287ABA4D5CA /* Build configuration list for PBXProject "Pods" */ = { + CABD77A4C4ECC51AE6118483 /* Build configuration list for PBXNativeTarget "Pods-SnellTests-Quick" */ = { isa = XCConfigurationList; buildConfigurations = ( - A0A6524C228E98FE1CD71E37 /* Debug */, - 8C12BE688850358B1AF40F60 /* Release */, + 9E579F6FA1B99C5FBB5B7957 /* Debug */, + 60C151FC1455F6918FD9C0C7 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; /* End XCConfigurationList section */ }; - rootObject = BB6B62EB42BF0221651312A7 /* Project object */; + rootObject = E4A0026F6535B4F9A11B3DDC /* Project object */; } diff --git a/Pods/PromiseKit/README.markdown b/Pods/PromiseKit/README.markdown new file mode 100644 index 0000000..e710407 --- /dev/null +++ b/Pods/PromiseKit/README.markdown @@ -0,0 +1,91 @@ +![PromiseKit](http://methylblue.com/junk/PMKBanner.png) + +Modern development is highly asynchronous: isn’t it about time we had tools that made programming asynchronously powerful, easy and delightful? + +```swift +UIApplication.sharedApplication().networkActivityIndicatorVisible = true + +when(fetchImage(), getLocation()).then { image, location in + self.imageView.image = image; + self.label.text = "Buy your cat a house in \(location)" +}.finally { + UIApplication.sharedApplication().networkActivityIndicatorVisible = false +}.catch { error in + UIAlertView(…).show() +} +``` + +PromiseKit is a thoughtful and complete implementation of promises for iOS and OS X with first-class support for **both** Objective-C *and* Swift. + +[![Join the chat at https://gitter.im/mxcl/PromiseKit](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/mxcl/PromiseKit?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) ![](https://img.shields.io/cocoapods/v/PromiseKit.svg?label=Current%20Release) [![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg)](https://github.com/Carthage/Carthage) + + +# PromiseKit 2 + +PromiseKit 2 contains many interesting and important additions. Check out our our [release announcement](http://promisekit.org/PromiseKit-2.0-Released/) for full details. + + +# How To Get Started + +* Check out the complete, comprehensive [PromiseKit documentation](http://promisekit.org). +* Read the [API documentation](http://cocoadocs.org/docsets/PromiseKit/), (note the documentation is not 100% currently as CocoaDocs is not good with Swift, you may have better luck reading the comments in the sources). +* [Integrate](http://promisekit.org/getting-started) promises into your existing projects. + +## Quick Start Guide + +### CocoaPods + +```ruby +use_frameworks! + +pod "PromiseKit", "~> 2.0" +``` + +### Carthage +```ruby +github "mxcl/PromiseKit" ~> 2.0 +``` + +### Standalone Distributions + +* [iOS 8 & OS X 10.9 Frameworks](https://github.com/mxcl/PromiseKit/releases/download/2.0.3/PromiseKit-2.0.3.zip) (Binaries) + +*Please note*, the preferred way to integrate PromiseKit is CocoaPods or Carthage. + +### iOS 7 And Below + +Neither CocoaPods or Carthage will install PromiseKit 2 for an iOS 7 target. Your options are: + + 1. `pod "PromiseKit", "~> 1.5"` †‡ + 2. Use our [iOS 7 EZ-Bake](https://github.com/PromiseKit/EZiOS7) + 3. Download our pre-built static framework (coming soon!) + +† There is no Swift support with PromiseKit 1.x installed via CocoaPods.
‡ PromiseKit 1.x will work as far back as iOS 5 if required. + + +# Donations + +PromiseKit is hundreds of hours of work almost completely by just me: [Max Howell](https://twitter.com/mxcl). I thoroughly enjoyed making PromiseKit, but nevertheless if you have found it useful then your bitcoin will give me a warm fuzzy feeling from my head right down to my toes: 1JDbV5zuym3jFw4kBCc5Z758maUD8e4dKR. + + +# License + +Copyright 2015, Max Howell; + +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/PromiseKit/Sources/AnyPromise+Private.h b/Pods/PromiseKit/Sources/AnyPromise+Private.h new file mode 100644 index 0000000..3b0f46b --- /dev/null +++ b/Pods/PromiseKit/Sources/AnyPromise+Private.h @@ -0,0 +1,43 @@ +@import Foundation.NSPointerArray; + +#if TARGET_OS_IPHONE + #define NSPointerArrayMake(N) ({ \ + NSPointerArray *aa = [NSPointerArray strongObjectsPointerArray]; \ + aa.count = N; \ + aa; \ + }) +#else + static inline NSPointerArray *NSPointerArrayMake(NSUInteger count) { + #pragma clang diagnostic push + #pragma clang diagnostic ignored "-Wdeprecated-declarations" + NSPointerArray *aa = [[NSPointerArray class] respondsToSelector:@selector(strongObjectsPointerArray)] + ? [NSPointerArray strongObjectsPointerArray] + : [NSPointerArray pointerArrayWithStrongObjects]; + #pragma clang diagnostic pop + aa.count = count; + return aa; + } +#endif + +#define IsError(o) [o isKindOfClass:[NSError class]] +#define IsPromise(o) [o isKindOfClass:[AnyPromise class]] + +#import "AnyPromise.h" + +@interface AnyPromise (Swift) +- (void)pipe:(void (^)(id))body; +- (AnyPromise *)initWithBridge:(void (^)(PMKResolver))resolver; ++ (void)__consume:(id)obj; +@end + +extern NSError *PMKProcessUnhandledException(id thrown); + +// TODO really this is not valid, we should instead nest the errors with NSUnderlyingError +// since a special error subclass may be being used and we may not setup it up correctly +// with our copy +#define NSErrorSupplement(_err, supplements) ({ \ + NSError *err = _err; \ + id userInfo = err.userInfo.mutableCopy ?: [NSMutableArray new]; \ + [userInfo addEntriesFromDictionary:supplements]; \ + [[[err class] alloc] initWithDomain:err.domain code:err.code userInfo:userInfo]; \ +}) diff --git a/Pods/PromiseKit/Sources/AnyPromise.h b/Pods/PromiseKit/Sources/AnyPromise.h new file mode 100644 index 0000000..6e44dd5 --- /dev/null +++ b/Pods/PromiseKit/Sources/AnyPromise.h @@ -0,0 +1,288 @@ +#import +#import +#import + +typedef void (^PMKResolver)(id); + +typedef NS_ENUM(NSInteger, PMKCatchPolicy) { + PMKCatchPolicyAllErrors, + PMKCatchPolicyAllErrorsExceptCancellation +}; + + + +#if defined(PMKEZBake) && defined(SWIFT_CLASS) + // https://github.com/PromiseKit/EZiOS7/issues/2 + #define PMKPromise AnyPromise +#else + +__attribute__((objc_runtime_name("PMKAnyPromise"))) +__attribute__((objc_subclassing_restricted)) +@interface PMKPromise : NSObject +@property (nonatomic, readonly) BOOL pending; +@property (nonatomic, readonly) BOOL resolved; +@property (nonatomic, readonly) BOOL fulfilled; +@property (nonatomic, readonly) BOOL rejected; +@end + +@compatibility_alias AnyPromise PMKPromise; + +#endif + + + +/** + @see AnyPromise.swift +*/ +@interface AnyPromise (objc) + +/** + The provided block is executed when its receiver is resolved. + + If you provide a block that takes a parameter, the value of the receiver will be passed as that parameter. + + @param block The block that is executed when the receiver is resolved. + + [NSURLConnection GET:url].then(^(NSData *data){ + // do something with data + }); + + @return A new promise that is resolved with the value returned from the provided block. For example: + + [NSURLConnection GET:url].then(^(NSData *data){ + return data.length; + }).then(^(NSNumber *number){ + //… + }); + + @warning *Important* The block passed to `then` may take zero, one, two or three arguments, and return an object or return nothing. This flexibility is why the method signature for then is `id`, which means you will not get completion for the block parameter, and must type it yourself. It is safe to type any block syntax here, so to start with try just: `^{}`. + + @warning *Important* If an exception is thrown inside your block, or you return an `NSError` object the next `Promise` will be rejected. See `catch` for documentation on error handling. + + @warning *Important* `then` is always executed on the main queue. + + @see thenOn + @see thenInBackground +*/ +- (AnyPromise *(^)(id))then; + + +/** + The provided block is executed on the default queue when the receiver is fulfilled. + + This method is provided as a convenience for `thenOn`. + + @see then + @see thenOn +*/ +- (AnyPromise *(^)(id))thenInBackground; + +/** + The provided block is executed on the dispatch queue of your choice when the receiver is fulfilled. + + @see then + @see thenInBackground +*/ +- (AnyPromise *(^)(dispatch_queue_t, id))thenOn; + +#ifndef __cplusplus +/** + The provided block is executed when the receiver is rejected. + + Provide a block of form `^(NSError *){}` or simply `^{}`. The parameter has type `id` to give you the freedom to choose either. + + The provided block always runs on the main queue. + + @warning *Note* Cancellation errors are not caught. + + @warning *Note* Since catch is a c++ keyword, this method is not availble in Objective-C++ files. Instead use catchWithPolicy. + + @see catchWithPolicy +*/ +- (AnyPromise *(^)(id))catch; +#endif + +/** + The provided block is executed when the receiver is rejected with the specified policy. + + @param policy The policy with which to catch. Either for all errors, or all errors *except* cancellation errors. + + @see catch +*/ +- (AnyPromise *(^)(PMKCatchPolicy, id))catchWithPolicy; + +/** + The provided block is executed when the receiver is resolved. + + The provided block always runs on the main queue. + + @see finallyOn +*/ +- (AnyPromise *(^)(dispatch_block_t))finally; + +/** + The provided block is executed on the dispatch queue of your choice when the receiver is resolved. + + @see finally + */ +- (AnyPromise *(^)(dispatch_queue_t, dispatch_block_t))finallyOn; + +/** + The value of the asynchronous task this promise represents. + + A promise has `nil` value if the asynchronous task it represents has not + finished. If the value is `nil` the promise is still `pending`. + + @warning *Note* Our Swift variant’s value property returns nil if the + promise is rejected where AnyPromise will return the error object. This + fits with the pattern where AnyPromise is not strictly typed and is more + dynamic, but you should be aware of the distinction. + + @return If `resolved`, the object that was used to resolve this promise; + if `pending`, nil. +*/ +- (id)value; + +/** + Creates a resolved promise. + + When developing your own promise systems, it is ocassionally useful to be able to return an already resolved promise. + + @param value The value with which to resolve this promise. Passing an `NSError` will cause the promise to be rejected, otherwise the promise will be fulfilled. + + @return A resolved promise. +*/ ++ (instancetype)promiseWithValue:(id)value; + +/** + Create a new promise that resolves with the provided block. + + Use this method when wrapping asynchronous code that does *not* use + promises so that this code can be used in promise chains. + + If `resolve` is called with an `NSError` object, the promise is + rejected, otherwise the promise is fulfilled. + + Don’t use this method if you already have promises! Instead, just + return your promise. + + Should you need to fulfill a promise but have no sensical value to use: + your promise is a `void` promise: fulfill with `nil`. + + The block you pass is executed immediately on the calling thread. + + @param block The provided block is immediately executed, inside the block + call `resolve` to resolve this promise and cause any attached handlers to + execute. If you are wrapping a delegate-based system, we recommend + instead to use: promiseWithResolver: + + @return A new promise. + + @warning *Important* Resolving a promise with `nil` fulfills it. + + @see http://promisekit.org/sealing-your-own-promises/ + @see http://promisekit.org/wrapping-delegation/ +*/ ++ (instancetype)promiseWithResolverBlock:(void (^)(PMKResolver resolve))resolverBlock; + +/** + Create a new promise with an associated resolver. + + Use this method when wrapping asynchronous code that does *not* use + promises so that this code can be used in promise chains. Generally, + prefer resolverWithBlock: as the resulting code is more elegant. + + PMKResolver resolve; + AnyPromise *promise = [AnyPromise promiseWithResolver:&resolve]; + + // later + resolve(@"foo"); + + @param resolver A reference to a block pointer of PMKResolver type. + You can then call your resolver to resolve this promise. + + @return A new promise. + + @warning *Important* The resolver strongly retains the promise. + + @see promiseWithResolverBlock: +*/ +- (instancetype)initWithResolver:(PMKResolver __strong *)resolver; + +@end + + + +@interface AnyPromise (Unavailable) + +- (instancetype)init __attribute__((unavailable("It is illegal to create an unresolvable promise."))); ++ (instancetype)new __attribute__((unavailable("It is illegal to create an unresolvable promise."))); + +@end + + + +typedef void (^PMKAdapter)(id, NSError *); +typedef void (^PMKIntegerAdapter)(NSInteger, NSError *); +typedef void (^PMKBooleanAdapter)(BOOL, NSError *); + +@interface AnyPromise (Adapters) + +/** + Create a new promise by adapting an existing asynchronous system. + + The pattern of a completion block that passes two parameters, the first + the result and the second an `NSError` object is so common that we + provide this convenience adapter to make wrapping such systems more + elegant. + + return [PMKPromise promiseWithAdapter:^(PMKAdapter adapter){ + PFQuery *query = [PFQuery …]; + [query findObjectsInBackgroundWithBlock:adapter]; + }]; + + @warning *Important* If both parameters are nil, the promise fulfills, + if both are non-nil the promise rejects. This is per the convention. + + @see http://promisekit.org/sealing-your-own-promises/ + */ ++ (instancetype)promiseWithAdapterBlock:(void (^)(PMKAdapter adapter))block; + +/** + Create a new promise by adapting an existing asynchronous system. + + Adapts asynchronous systems that complete with `^(NSInteger, NSError *)`. + NSInteger will cast to enums provided the enum has been wrapped with + `NS_ENUM`. All of Apple’s enums are, so if you find one that hasn’t you + may need to make a pull-request. + + @see promiseWithAdapter + */ ++ (instancetype)promiseWithIntegerAdapterBlock:(void (^)(PMKIntegerAdapter adapter))block; + +/** + Create a new promise by adapting an existing asynchronous system. + + Adapts asynchronous systems that complete with `^(BOOL, NSError *)`. + + @see promiseWithAdapter + */ ++ (instancetype)promiseWithBooleanAdapterBlock:(void (^)(PMKBooleanAdapter adapter))block; + +@end + + + +/** + Whenever resolving a promise you may resolve with a tuple, eg. + returning from a `then` or `catch` handler or resolving a new promise. + + Consumers of your Promise are not compelled to consume any arguments and + in fact will often only consume the first parameter. Thus ensure the + order of parameters is: from most-important to least-important. + + Currently PromiseKit limits you to THREE parameters to the manifold. +*/ +#define PMKManifold(...) __PMKManifold(__VA_ARGS__, 3, 2, 1) +#define __PMKManifold(_1, _2, _3, N, ...) __PMKArrayWithCount(N, _1, _2, _3) +extern id __PMKArrayWithCount(NSUInteger, ...); diff --git a/Pods/PromiseKit/Sources/AnyPromise.m b/Pods/PromiseKit/Sources/AnyPromise.m new file mode 100644 index 0000000..854590a --- /dev/null +++ b/Pods/PromiseKit/Sources/AnyPromise.m @@ -0,0 +1,164 @@ +#import "AnyPromise.h" +#import "AnyPromise+Private.h" +@import Foundation.NSKeyValueCoding; +#import "PMKCallVariadicBlock.m" + +NSString *const PMKErrorDomain = @"PMKErrorDomain"; + + +@implementation AnyPromise (objc) + +- (instancetype)initWithResolver:(PMKResolver __strong *)resolver { + return [self initWithBridge:^(PMKResolver resolve){ + *resolver = resolve; + }]; +} + ++ (instancetype)promiseWithResolverBlock:(void (^)(PMKResolver))resolveBlock { + return [[self alloc] initWithBridge:resolveBlock]; +} + ++ (instancetype)promiseWithValue:(id)value { + return [[self alloc] initWithBridge:^(PMKResolver resolve){ + resolve(value); + }]; +} + +static inline AnyPromise *AnyPromiseWhen(AnyPromise *when, void(^then)(id, PMKResolver)) { + return [[[when class] alloc] initWithBridge:^(PMKResolver resolve){ + [when pipe:^(id obj){ + then(obj, resolve); + }]; + }]; +} + +static inline AnyPromise *__then(AnyPromise *self, dispatch_queue_t queue, id block) { + return AnyPromiseWhen(self, ^(id obj, PMKResolver resolve) { + if (IsError(obj)) { + resolve(obj); + } else dispatch_async(queue, ^{ + resolve(PMKCallVariadicBlock(block, obj)); + }); + }); +} + +- (AnyPromise *(^)(id))then { + return ^(id block) { + return __then(self, dispatch_get_main_queue(), block); + }; +} + +- (AnyPromise *(^)(dispatch_queue_t, id))thenOn { + return ^(dispatch_queue_t queue, id block) { + return __then(self, queue, block); + }; +} + +- (AnyPromise *(^)(id))thenInBackground { + return ^(id block) { + return __then(self, dispatch_get_global_queue(0, 0), block); + }; +} + +static inline AnyPromise *__catch(AnyPromise *self, BOOL includeCancellation, id block) { + return AnyPromiseWhen(self, ^(id obj, PMKResolver resolve) { + if (IsError(obj) && (includeCancellation || ![obj cancelled])) { + [[self class] __consume:obj]; + dispatch_async(dispatch_get_main_queue(), ^{ + resolve(PMKCallVariadicBlock(block, obj)); + }); + } else { + resolve(obj); + } + }); +} + +- (AnyPromise *(^)(id))catch { + return ^(id block) { + return __catch(self, NO, block); + }; +} + +- (AnyPromise *(^)(PMKCatchPolicy, id))catchWithPolicy { + return ^(PMKCatchPolicy policy, id block) { + return __catch(self, policy == PMKCatchPolicyAllErrors, block); + }; +} + +static inline AnyPromise *__finally(AnyPromise *self, dispatch_queue_t queue, dispatch_block_t block) { + return AnyPromiseWhen(self, ^(id obj, PMKResolver resolve) { + dispatch_async(queue, ^{ + block(); + resolve(obj); + }); + }); +} + +- (AnyPromise *(^)(dispatch_block_t))finally { + return ^(dispatch_block_t block) { + return __finally(self, dispatch_get_main_queue(), block); + }; +} + +- (AnyPromise *(^)(dispatch_queue_t, dispatch_block_t))finallyOn { + return ^(dispatch_queue_t queue, dispatch_block_t block) { + return __finally(self, queue, block); + }; +} + +- (id)value { + id result = [self valueForKey:@"__value"]; + return [result isKindOfClass:[PMKArray class]] + ? result[0] + : result; +} + +@end + + + +@implementation AnyPromise (Adapters) + ++ (instancetype)promiseWithAdapterBlock:(void (^)(PMKAdapter))block { + return [self promiseWithResolverBlock:^(PMKResolver resolve) { + block(^(id value, id error){ + resolve(error ?: value); + }); + }]; +} + ++ (instancetype)promiseWithIntegerAdapterBlock:(void (^)(PMKIntegerAdapter))block { + return [self promiseWithResolverBlock:^(PMKResolver resolve) { + block(^(NSInteger value, id error){ + if (error) { + resolve(error); + } else { + resolve(@(value)); + } + }); + }]; +} + ++ (instancetype)promiseWithBooleanAdapterBlock:(void (^)(PMKBooleanAdapter adapter))block { + return [self promiseWithResolverBlock:^(PMKResolver resolve) { + block(^(BOOL value, id error){ + if (error) { + resolve(error); + } else { + resolve(@(value)); + } + }); + }]; +} + +@end + + + +@interface AnyPromise (XP) ++ (id)setUnhandledErrorHandler:(id)handler; +@end + +id PMKSetUnhandledErrorHandler(void (^handler)(NSError *)) { + return [AnyPromise setUnhandledErrorHandler:handler]; +} diff --git a/Pods/PromiseKit/Sources/AnyPromise.swift b/Pods/PromiseKit/Sources/AnyPromise.swift new file mode 100644 index 0000000..a4e3003 --- /dev/null +++ b/Pods/PromiseKit/Sources/AnyPromise.swift @@ -0,0 +1,217 @@ +import Foundation.NSError + + +private func unbox(resolution: Resolution) -> AnyObject? { + switch resolution { + case .Fulfilled(let value): + return value + case .Rejected(let error): + return error + } +} + + +@objc(PMKAnyPromise) public class AnyPromise: NSObject { + private var state: State + + private typealias Resolution = PromiseKit.Resolution + private typealias State = UnsealedState + + /** + @return A new AnyPromise bound to a Promise. + + The two promises represent the same task, any changes to either + will instantly reflect on both. + */ + public init(bound: Promise) { + //WARNING copy pasta from below. FIXME how? + var resolve: ((Resolution) -> Void)! + state = State(resolver: &resolve) + + //TODO eventually we should be able to just do: bound.pipe(resolve) + bound.pipe { resolution in + switch resolution { + case .Fulfilled(let value): + resolve(.Fulfilled(value)) + case .Rejected(let error): + unconsume(error) + resolve(.Rejected(error)) + } + } + } + + public init(bound: Promise) { + //WARNING copy pasta from above. FIXME how? + var resolve: ((Resolution) -> Void)! + state = State(resolver: &resolve) + bound.pipe { resolution in + switch resolution { + case .Fulfilled(let value): + resolve(.Fulfilled(value)) + case .Rejected(let error): + unconsume(error) + resolve(.Rejected(error)) + } + } + } + + /** + @return A new AnyPromise bound to a Promise<[T]>. + + The two promises represent the same task, any changes to either + will instantly reflect on both. + + The value is converted to an NSArray so Objective-C can use it. + */ + public init(bound: Promise<[T]>) { + //WARNING copy pasta from above. FIXME how? + var resolve: ((Resolution) -> Void)! + state = State(resolver: &resolve) + bound.pipe { resolution in + switch resolution { + case .Fulfilled(let value): + resolve(.Fulfilled(value as NSArray)) + case .Rejected(let error): + unconsume(error) + resolve(.Rejected(error)) + } + } + } + + /** + @return A new AnyPromise bound to a Promise<[T]>. + + The two promises represent the same task, any changes to either + will instantly reflect on both. + + The value is converted to an NSArray so Objective-C can use it. + */ + public init(bound: Promise<[T:U]>) { + //WARNING copy pasta from above. FIXME how? + var resolve: ((Resolution) -> Void)! + state = State(resolver: &resolve) + bound.pipe { resolution in + switch resolution { + case .Fulfilled(let value): + resolve(.Fulfilled(value as NSDictionary)) + case .Rejected(let error): + unconsume(error) + resolve(.Rejected(error)) + } + } + } + + convenience public init(bound: Promise) { + self.init(bound: bound.then(on: zalgo) { NSNumber(integer: $0) }) + } + + convenience public init(bound: Promise) { + self.init(bound: bound.then(on: zalgo) { _ -> AnyObject? in return nil }) + } + + @objc init(@noescape bridge: ((AnyObject?) -> Void) -> Void) { + var resolve: ((Resolution) -> Void)! + state = State(resolver: &resolve) + bridge { result in + func preresolve(obj: AnyObject?) { + if let error = obj as? NSError { + unconsume(error) + resolve(.Rejected(error)) + } else { + resolve(.Fulfilled(obj)) + } + } + if let next = result as? AnyPromise { + next.pipe(preresolve) + } else { + preresolve(result) + } + } + } + + @objc func pipe(anybody: (AnyObject?) -> Void) { + state.get { seal in + func body(resolution: Resolution) { + anybody(unbox(resolution)) + } + switch seal { + case .Pending(let handlers): + handlers.append(body) + case .Resolved(let resolution): + body(resolution) + } + } + } + + @objc var __value: AnyObject? { + if let resolution = state.get() { + return unbox(resolution) + } else { + return nil + } + } + + /** + A promise starts pending and eventually resolves. + + @return True if the promise has not yet resolved. + */ + @objc public var pending: Bool { + return state.get() == nil + } + + /** + A promise starts pending and eventually resolves. + + @return True if the promise has resolved. + */ + @objc public var resolved: Bool { + return !pending + } + + /** + A promise starts pending and eventually resolves. + + A fulfilled promise is resolved and succeeded. + + @return True if the promise was fulfilled. + */ + @objc public var fulfilled: Bool { + switch state.get() { + case .Some(.Fulfilled): + return true + default: + return false + } + } + + /** + A promise starts pending and eventually resolves. + + A rejected promise is resolved and failed. + + @return True if the promise was rejected. + */ + @objc public var rejected: Bool { + switch state.get() { + case .Some(.Rejected): + return true + default: + return false + } + } + + // because you can’t access top-level Swift functions in objc + @objc class func setUnhandledErrorHandler(body: (NSError) -> Void) -> (NSError) -> Void { + let oldHandler = PMKUnhandledErrorHandler + PMKUnhandledErrorHandler = body + return oldHandler + } +} + + +extension AnyPromise { + override public var description: String { + return "AnyPromise: \(state)" + } +} diff --git a/Pods/PromiseKit/Sources/ErrorUnhandler.swift b/Pods/PromiseKit/Sources/ErrorUnhandler.swift new file mode 100644 index 0000000..711bc40 --- /dev/null +++ b/Pods/PromiseKit/Sources/ErrorUnhandler.swift @@ -0,0 +1,107 @@ +import Foundation.NSError + +/** + The unhandled error handler. + + If a promise is rejected and no catch handler is called in its chain, the + provided handler is called. The default handler logs the error. + + PMKUnhandledErrorHandler = { error in + println("Unhandled error: \(error)") + } + + @warning *Important* The handler is executed on an undefined queue. + + @warning *Important* Don’t use promises in your handler, or you risk an + infinite error loop. + + @return The previous unhandled error handler. +*/ +public var PMKUnhandledErrorHandler = { (error: NSError) -> Void in + if !error.cancelled { + NSLog("PromiseKit: Unhandled error: %@", error) + } +} + +private class Consumable: NSObject { + let parentError: NSError + var consumed: Bool = false + + deinit { + if !consumed { + PMKUnhandledErrorHandler(parentError) + } + } + + init(parent: NSError) { + // we take a copy to avoid a retain cycle. A weak ref + // is no good because then the error is deallocated + // before we can call PMKUnhandledErrorHandler() + parentError = parent.copy() as! NSError + } +} + +private var handle: UInt8 = 0 + +func consume(error: NSError) { + let pmke = objc_getAssociatedObject(error, &handle) as! Consumable + pmke.consumed = true +} + +extension AnyPromise { + // objc can't see Swift top-level function :( + //TODO move this and the one in AnyPromise to a compat something + @objc class func __consume(error: NSError) { + consume(error) + } +} + +func unconsume(error: NSError) { + if let pmke = objc_getAssociatedObject(error, &handle) as! Consumable? { + pmke.consumed = false + } else { + // this is how we know when the error is deallocated + // because we will be deallocated at the same time + objc_setAssociatedObject(error, &handle, Consumable(parent: error), .OBJC_ASSOCIATION_RETAIN_NONATOMIC) + } +} + + + +private struct ErrorPair: Hashable { + let domain: String + let code: Int + init(_ d: String, _ c: Int) { + domain = d; code = c + } + var hashValue: Int { + return "\(domain):\(code)".hashValue + } +} + +private func ==(lhs: ErrorPair, rhs: ErrorPair) -> Bool { + return lhs.domain == rhs.domain && lhs.code == rhs.code +} + +private var cancelledErrorIdentifiers = Set([ + ErrorPair(PMKErrorDomain, PMKOperationCancelled), + ErrorPair(NSURLErrorDomain, NSURLErrorCancelled) +]) + +extension NSError { + public class func cancelledError() -> NSError { + let info: [NSObject: AnyObject] = [NSLocalizedDescriptionKey: "The operation was cancelled"] + return NSError(domain: PMKErrorDomain, code: PMKOperationCancelled, userInfo: info) + } + + /** + You may only call this on the main thread. + */ + public class func registerCancelledErrorDomain(domain: String, code: Int) { + cancelledErrorIdentifiers.insert(ErrorPair(domain, code)) + } + + public var cancelled: Bool { + return cancelledErrorIdentifiers.contains(ErrorPair(domain, code)) + } +} diff --git a/Pods/PromiseKit/Sources/NSError+Cancellation.h b/Pods/PromiseKit/Sources/NSError+Cancellation.h new file mode 100644 index 0000000..99d1da6 --- /dev/null +++ b/Pods/PromiseKit/Sources/NSError+Cancellation.h @@ -0,0 +1,16 @@ +#import + +#if !defined(SWIFT_PASTE) +# define SWIFT_PASTE_HELPER(x, y) x##y +# define SWIFT_PASTE(x, y) SWIFT_PASTE_HELPER(x, y) +#endif + +#if !defined(SWIFT_EXTENSION) +# define SWIFT_EXTENSION(M) SWIFT_PASTE(M##_Swift_, __LINE__) +#endif + +@interface NSError (SWIFT_EXTENSION(PromiseKit)) ++ (NSError * __nonnull)cancelledError; ++ (void)registerCancelledErrorDomain:(NSString * __nonnull)domain code:(NSInteger)code; +@property (nonatomic, readonly) BOOL cancelled; +@end diff --git a/Pods/PromiseKit/Sources/NSJSONFromData.swift b/Pods/PromiseKit/Sources/NSJSONFromData.swift new file mode 100644 index 0000000..af932a0 --- /dev/null +++ b/Pods/PromiseKit/Sources/NSJSONFromData.swift @@ -0,0 +1,44 @@ +import Foundation + +private func b0rkedEmptyRailsResponse() -> NSData { + return NSData(bytes: " ", length: 1) +} + +public func NSJSONFromData(data: NSData) throws -> NSArray { + if data == b0rkedEmptyRailsResponse() { + return NSArray() + } else { + return try NSJSONFromDataT(data) + } +} + +public func NSJSONFromData(data: NSData) throws -> NSDictionary { + if data == b0rkedEmptyRailsResponse() { + return NSDictionary() + } else { + return try NSJSONFromDataT(data) + } +} + +private func NSJSONFromDataT(data: NSData) throws -> T { + let json: AnyObject + do { + json = try NSJSONSerialization.JSONObjectWithData(data, options: .AllowFragments) + } catch (let errorType) { + let error = errorType as NSError + let debug = error.userInfo["NSDebugDescription"] as! String + let description = "The server’s JSON response could not be decoded. (\(debug))" + throw NSError(domain: PMKErrorDomain, code: PMKJSONError, userInfo: [ + NSLocalizedDescriptionKey: "There was an error decoding the server’s JSON response.", + NSUnderlyingErrorKey: error, NSLocalizedDescriptionKey: description]) + } + + if let cast = json as? T { + return cast + } else { + var info = [NSObject: AnyObject]() + info[NSLocalizedDescriptionKey] = "The server returned JSON in an unexpected arrangement" + info[PMKJSONErrorJSONObjectKey] = json + throw NSError(domain: PMKErrorDomain, code: PMKJSONError, userInfo: info) + } +} diff --git a/Pods/PromiseKit/Sources/NSMethodSignatureForBlock.m b/Pods/PromiseKit/Sources/NSMethodSignatureForBlock.m new file mode 100644 index 0000000..700c1b3 --- /dev/null +++ b/Pods/PromiseKit/Sources/NSMethodSignatureForBlock.m @@ -0,0 +1,77 @@ +#import + +struct PMKBlockLiteral { + void *isa; // initialized to &_NSConcreteStackBlock or &_NSConcreteGlobalBlock + int flags; + int reserved; + void (*invoke)(void *, ...); + struct block_descriptor { + unsigned long int reserved; // NULL + unsigned long int size; // sizeof(struct Block_literal_1) + // optional helper functions + void (*copy_helper)(void *dst, void *src); // IFF (1<<25) + void (*dispose_helper)(void *src); // IFF (1<<25) + // required ABI.2010.3.16 + const char *signature; // IFF (1<<30) + } *descriptor; + // imported variables +}; + +typedef NS_OPTIONS(NSUInteger, PMKBlockDescriptionFlags) { + PMKBlockDescriptionFlagsHasCopyDispose = (1 << 25), + PMKBlockDescriptionFlagsHasCtor = (1 << 26), // helpers have C++ code + PMKBlockDescriptionFlagsIsGlobal = (1 << 28), + PMKBlockDescriptionFlagsHasStret = (1 << 29), // IFF BLOCK_HAS_SIGNATURE + PMKBlockDescriptionFlagsHasSignature = (1 << 30) +}; + +// It appears 10.7 doesn't support quotes in method signatures. Remove them +// via @rabovik's method. See https://github.com/OliverLetterer/SLObjectiveCRuntimeAdditions/pull/2 +#if defined(__MAC_OS_X_VERSION_MIN_REQUIRED) && __MAC_OS_X_VERSION_MIN_REQUIRED < __MAC_10_8 +NS_INLINE static const char * pmk_removeQuotesFromMethodSignature(const char *str){ + char *result = malloc(strlen(str) + 1); + BOOL skip = NO; + char *to = result; + char c; + while ((c = *str++)) { + if ('"' == c) { + skip = !skip; + continue; + } + if (skip) continue; + *to++ = c; + } + *to = '\0'; + return result; +} +#endif + +static NSMethodSignature *NSMethodSignatureForBlock(id block) { + if (!block) + return nil; + + struct PMKBlockLiteral *blockRef = (__bridge struct PMKBlockLiteral *)block; + PMKBlockDescriptionFlags flags = (PMKBlockDescriptionFlags)blockRef->flags; + + if (flags & PMKBlockDescriptionFlagsHasSignature) { + void *signatureLocation = blockRef->descriptor; + signatureLocation += sizeof(unsigned long int); + signatureLocation += sizeof(unsigned long int); + + if (flags & PMKBlockDescriptionFlagsHasCopyDispose) { + signatureLocation += sizeof(void(*)(void *dst, void *src)); + signatureLocation += sizeof(void (*)(void *src)); + } + + const char *signature = (*(const char **)signatureLocation); +#if defined(__MAC_OS_X_VERSION_MIN_REQUIRED) && __MAC_OS_X_VERSION_MIN_REQUIRED < __MAC_10_8 + signature = pmk_removeQuotesFromMethodSignature(signature); + NSMethodSignature *nsSignature = [NSMethodSignature signatureWithObjCTypes:signature]; + free((void *)signature); + + return nsSignature; +#endif + return [NSMethodSignature signatureWithObjCTypes:signature]; + } + return 0; +} diff --git a/Pods/PromiseKit/Sources/PMK.modulemap b/Pods/PromiseKit/Sources/PMK.modulemap new file mode 100644 index 0000000..7e55ef9 --- /dev/null +++ b/Pods/PromiseKit/Sources/PMK.modulemap @@ -0,0 +1,32 @@ +framework module PromiseKit { + umbrella header "Umbrella.h" + + header "NSError+Cancellation.h" + + exclude header "AnyPromise.h" + exclude header "PromiseKit.h" + exclude header "PMKPromise.h" + exclude header "Promise.h" + + exclude header "Pods-PromiseKit-umbrella.h" + + exclude header "ACAccountStore+AnyPromise.h" + exclude header "AVAudioSession+AnyPromise.h" + exclude header "CKContainer+AnyPromise.h" + exclude header "CKDatabase+AnyPromise.h" + exclude header "CLGeocoder+AnyPromise.h" + exclude header "CLLocationManager+AnyPromise.h" + exclude header "NSNotificationCenter+AnyPromise.h" + exclude header "NSTask+AnyPromise.h" + exclude header "NSURLConnection+AnyPromise.h" + exclude header "MKDirections+AnyPromise.h" + exclude header "MKMapSnapshotter+AnyPromise.h" + exclude header "CALayer+AnyPromise.h" + exclude header "SLRequest+AnyPromise.h" + exclude header "SKRequest+AnyPromise.h" + exclude header "SCNetworkReachability+AnyPromise.h" + exclude header "UIActionSheet+AnyPromise.h" + exclude header "UIAlertView+AnyPromise.h" + exclude header "UIView+AnyPromise.h" + exclude header "UIViewController+AnyPromise.h" +} diff --git a/Pods/PromiseKit/Sources/PMKCallVariadicBlock.m b/Pods/PromiseKit/Sources/PMKCallVariadicBlock.m new file mode 100644 index 0000000..474c44b --- /dev/null +++ b/Pods/PromiseKit/Sources/PMKCallVariadicBlock.m @@ -0,0 +1,142 @@ +#import +#import +#import +#import +#import "NSMethodSignatureForBlock.m" +#import +#import +#import + +#ifndef PMKLog +#define PMKLog NSLog +#endif + +@interface PMKArray : NSObject { +@public + id objs[3]; + NSUInteger count; +} @end + +@implementation PMKArray + +- (id)objectAtIndexedSubscript:(NSUInteger)idx { + if (count <= idx) { + // this check is necessary due to lack of checks in `pmk_safely_call_block` + return nil; + } + return objs[idx]; +} + +@end + +id __PMKArrayWithCount(NSUInteger count, ...) { + PMKArray *this = [PMKArray new]; + this->count = count; + va_list args; + va_start(args, count); + for (NSUInteger x = 0; x < count; ++x) + this->objs[x] = va_arg(args, id); + va_end(args); + return this; +} + + +static inline id _PMKCallVariadicBlock(id frock, id result) { + NSCAssert(frock, @""); + + NSMethodSignature *sig = NSMethodSignatureForBlock(frock); + const NSUInteger nargs = sig.numberOfArguments; + const char rtype = sig.methodReturnType[0]; + + #define call_block_with_rtype(type) ({^type{ \ + switch (nargs) { \ + case 1: \ + return ((type(^)(void))frock)(); \ + case 2: { \ + const id arg = [result class] == [PMKArray class] ? result[0] : result; \ + return ((type(^)(id))frock)(arg); \ + } \ + case 3: { \ + type (^block)(id, id) = frock; \ + return [result class] == [PMKArray class] \ + ? block(result[0], result[1]) \ + : block(result, nil); \ + } \ + case 4: { \ + type (^block)(id, id, id) = frock; \ + return [result class] == [PMKArray class] \ + ? block(result[0], result[1], result[2]) \ + : block(result, nil, nil); \ + } \ + default: \ + @throw [NSException exceptionWithName:NSInvalidArgumentException reason:@"PromiseKit: The provided block’s argument count is unsupported." userInfo:nil]; \ + }}();}) + + switch (rtype) { + case 'v': + call_block_with_rtype(void); + return nil; + case '@': + return call_block_with_rtype(id) ?: nil; + case '*': { + char *str = call_block_with_rtype(char *); + return str ? @(str) : nil; + } + case 'c': return @(call_block_with_rtype(char)); + case 'i': return @(call_block_with_rtype(int)); + case 's': return @(call_block_with_rtype(short)); + case 'l': return @(call_block_with_rtype(long)); + case 'q': return @(call_block_with_rtype(long long)); + case 'C': return @(call_block_with_rtype(unsigned char)); + case 'I': return @(call_block_with_rtype(unsigned int)); + case 'S': return @(call_block_with_rtype(unsigned short)); + case 'L': return @(call_block_with_rtype(unsigned long)); + case 'Q': return @(call_block_with_rtype(unsigned long long)); + case 'f': return @(call_block_with_rtype(float)); + case 'd': return @(call_block_with_rtype(double)); + case 'B': return @(call_block_with_rtype(_Bool)); + case '^': + if (strcmp(sig.methodReturnType, "^v") == 0) { + call_block_with_rtype(void); + return nil; + } + // else fall through! + default: + @throw [NSException exceptionWithName:@"PromiseKit" reason:@"PromiseKit: Unsupported method signature." userInfo:nil]; + } +} + +static id PMKCallVariadicBlock(id frock, id result) { + @try { + return _PMKCallVariadicBlock(frock, result); + } @catch (id thrown) { + return PMKProcessUnhandledException(thrown); + } +} + + +static dispatch_once_t onceToken; +static NSError *(^PMKUnhandledExceptionHandler)(id); + +NSError *PMKProcessUnhandledException(id thrown) { + + dispatch_once(&onceToken, ^{ + PMKUnhandledExceptionHandler = ^id(id reason){ + if ([reason isKindOfClass:[NSError class]]) + return reason; + if ([reason isKindOfClass:[NSString class]]) + return [NSError errorWithDomain:PMKErrorDomain code:PMKUnexpectedError userInfo:@{NSLocalizedDescriptionKey: reason}]; + return nil; + }; + }); + + id err = PMKUnhandledExceptionHandler(thrown); + if (!err) @throw thrown; + return err; +} + +void PMKSetUnhandledExceptionHandler(NSError *(^newHandler)(id)) { + dispatch_once(&onceToken, ^{ + PMKUnhandledExceptionHandler = newHandler; + }); +} diff --git a/Pods/PromiseKit/Sources/PMKPromise.h b/Pods/PromiseKit/Sources/PMKPromise.h new file mode 100644 index 0000000..99d6eb0 --- /dev/null +++ b/Pods/PromiseKit/Sources/PMKPromise.h @@ -0,0 +1,83 @@ +/** + This header provides some compatibility for PromiseKit 1.x’s + PMKPromise class. It will eventually be deprecated. +*/ + +#import + +typedef void (^PMKFulfiller)(id); +typedef void (^PMKRejecter)(NSError *); + +typedef PMKFulfiller PMKPromiseFulfiller; +typedef PMKRejecter PMKPromiseRejecter; + +#define PMKUnderlyingExceptionKey NSUnderlyingErrorKey + + + +@interface PMKPromise (BackCompat) + +/** + Create a new promise that is fulfilled or rejected with the provided + blocks. + + Use this method when wrapping asynchronous code that does *not* use + promises so that this code can be used in promise chains. + + Don’t use this method if you already have promises! Instead, just + return your promise. + + Should you need to fulfill a promise but have no sensical value to use; + your promise is a `void` promise: fulfill with `nil`. + + The block you pass is executed immediately on the calling thread. + + @param block The provided block is immediately executed, any exceptions that occur will be caught and cause the returned promise to be rejected. + + - @param fulfill fulfills the returned promise with the provided value + - @param reject rejects the returned promise with the provided `NSError` + + @return A new promise. + + @see http://promisekit.org/sealing-your-own-promises/ + @see http://promisekit.org/wrapping-delegation/ +*/ ++ (instancetype)new:(void(^)(PMKFulfiller fulfill, PMKRejecter reject))block __attribute__((deprecated("Use +promiseWithResolverBlock:"))); + +/** + Loops until one or more promises have resolved. + + Because Promises are single-shot, the block to until must return one or more promises. They are then `when`’d. If they succeed the until loop is concluded. If they fail then the @param `catch` handler is executed. + + If the `catch` throws or returns an `NSError` then the loop is ended. + + If the `catch` handler returns a Promise then re-execution of the loop is suspended upon resolution of that Promise. If the Promise succeeds then the loop continues. If it fails the loop ends. + + An example usage is an app starting up that must get data from the Internet before the main ViewController can be shown. You can `until` the poll Promise and in the catch handler decide if the poll should be reattempted or not, perhaps returning a `UIAlertView.promise` allowing the user to choose if they continue or not. +*/ ++ (PMKPromise *)until:(id (^)(void))blockReturningPromises catch:(id)failHandler; + +@end + + + +@import Foundation.NSDate; + +@interface PMKPromise (Deprecated) + ++ (PMKPromise *)when:(id)input __attribute__((deprecated("Use PMKWhen()"))); ++ (PMKPromise *)pause:(NSTimeInterval)duration __attribute__((deprecated("Use PMKAfter()"))); ++ (PMKPromise *)join:(id)input __attribute__((deprecated("Use PMKJoin()"))); + +- (PMKPromise *( ^ ) ( id ))thenUnleashZalgo __attribute__((unavailable("If you need this, open a ticket, we will provide it, I just want to say hi."))); + ++ (PMKPromise *)promiseWithResolver:(PMKResolver)block __attribute__((deprecated("Use +promiseWithResolverBlock:"))); ++ (instancetype)promiseWithAdapter:(void (^)(PMKAdapter adapter))block __attribute__((deprecated("Use +promiseWithAdapterBlock:"))); ++ (instancetype)promiseWithIntegerAdapter:(void (^)(PMKIntegerAdapter adapter))block __attribute__((deprecated("Use +promiseWithIntegerAdapterBlock:"))); ++ (instancetype)promiseWithBooleanAdapter:(void (^)(PMKBooleanAdapter adapter))block __attribute__((deprecated("Use +promiseWithBooleanAdapterBlock:"))); + +@end + + + +extern void (^PMKUnhandledErrorHandler)(NSError *) __attribute__((unavailable("Use PMKSetUnhandledErrorHandler()"))); diff --git a/Pods/PromiseKit/Sources/PMKPromise.m b/Pods/PromiseKit/Sources/PMKPromise.m new file mode 100644 index 0000000..7a718f5 --- /dev/null +++ b/Pods/PromiseKit/Sources/PMKPromise.m @@ -0,0 +1,107 @@ +#import "AnyPromise+Private.h" +@import Foundation.NSDictionary; +#import "PMKPromise.h" +#import "PromiseKit.h" + +#ifndef PMKLog +#define PMKLog NSLog +#endif + + +@implementation PMKPromise (BackCompat) + ++ (instancetype)new:(void(^)(PMKFulfiller, PMKRejecter))block { + return [self promiseWithResolverBlock:^(PMKResolver resolve) { + id rejecter = ^(id error){ + if (error == nil) { + error = [NSError errorWithDomain:PMKErrorDomain code:PMKInvalidUsageError userInfo:nil]; + } else if (IsPromise(error)) { + error = ((PMKPromise *)error).value; + } + if (!IsError(error)) { + id userInfo = @{ + NSLocalizedDescriptionKey: [error description], + NSUnderlyingErrorKey: error + }; + error = [NSError errorWithDomain:PMKErrorDomain code:PMKInvalidUsageError userInfo:userInfo]; + } + resolve(error); + }; + + id fulfiller = ^(id result){ + if (IsError(result)) + PMKLog(@"PromiseKit: Warning: PMKFulfiller called with NSError."); + resolve(result); + }; + + @try { + block(fulfiller, rejecter); + } @catch (id thrown) { + resolve(PMKProcessUnhandledException(thrown)); + } + }]; +} + ++ (instancetype)until:(id (^)(void))blockReturningPromises catch:(id)failHandler { + + #pragma clang diagnostic push + #pragma clang diagnostic ignored "-Warc-retain-cycles" + + return [PMKPromise promiseWithResolverBlock:^(PMKResolver resolve) { + __block void (^block)() = ^{ + AnyPromise *next = PMKWhen(blockReturningPromises()); + next.then(^(id o){ + resolve(o); + block = nil; + }); + next.catch(^(NSError *error){ + [AnyPromise promiseWithValue:error].catch(failHandler).then(block).catch(^{ + resolve(error); + block = nil; + }); + }); + }; + block(); + }]; + + #pragma clang diagnostic pop +} + +@end + + + +@implementation PMKPromise (Deprecated) + ++ (instancetype)when:(id)input { + return PMKWhen(input); +} + ++ (instancetype)pause:(NSTimeInterval)duration { + return PMKAfter(duration); +} + ++ (instancetype)join:(id)input { + return PMKJoin(input).then(^(id a, id b, id c){ + // preserving PMK 1.x behavior + return PMKManifold(b, c); + }); +} + ++ (instancetype)promiseWithResolver:(PMKResolver)block { + return [self promiseWithResolverBlock:block]; +} + ++ (instancetype)promiseWithAdapter:(void (^)(PMKAdapter adapter))block { + return [self promiseWithAdapterBlock:block]; +} + ++ (instancetype)promiseWithIntegerAdapter:(void (^)(PMKIntegerAdapter adapter))block { + return [self promiseWithIntegerAdapterBlock:block]; +} + ++ (instancetype)promiseWithBooleanAdapter:(void (^)(PMKBooleanAdapter adapter))block { + return [self promiseWithBooleanAdapterBlock:block]; +} + +@end diff --git a/Pods/PromiseKit/Sources/Promise+Properties.swift b/Pods/PromiseKit/Sources/Promise+Properties.swift new file mode 100644 index 0000000..e4e69f9 --- /dev/null +++ b/Pods/PromiseKit/Sources/Promise+Properties.swift @@ -0,0 +1,60 @@ +import Foundation.NSError + +extension Promise { + /** + @return The error with which this promise was rejected; nil if this promise is not rejected. + */ + public var error: NSError? { + switch state.get() { + case .None: + return nil + case .Some(.Fulfilled): + return nil + case .Some(.Rejected(let error)): + return error + } + } + + /** + @return `YES` if the promise has not yet resolved. + */ + public var pending: Bool { + return state.get() == nil + } + + /** + @return `YES` if the promise has resolved. + */ + public var resolved: Bool { + return !pending + } + + /** + @return `YES` if the promise was fulfilled. + */ + public var fulfilled: Bool { + return value != nil + } + + /** + @return `YES` if the promise was rejected. + */ + public var rejected: Bool { + return error != nil + } + + /** + @return The value with which this promise was fulfilled or nil if this + promise is not fulfilled. + */ + public var value: T? { + switch state.get() { + case .None: + return nil + case .Some(.Fulfilled(let value)): + return value + case .Some(.Rejected): + return nil + } + } +} diff --git a/Pods/PromiseKit/Sources/Promise.h b/Pods/PromiseKit/Sources/Promise.h new file mode 100644 index 0000000..bcd175b --- /dev/null +++ b/Pods/PromiseKit/Sources/Promise.h @@ -0,0 +1,8 @@ +/** + This is a compatability header for PMKPromise.h provided because #import + would import PMKPromise in PromiseKit 1.x + + It will be marked deprecated at PromiseKit 2.1 and removed by 2.3. +*/ + +#import diff --git a/Pods/PromiseKit/Sources/Promise.swift b/Pods/PromiseKit/Sources/Promise.swift new file mode 100644 index 0000000..b6fc11f --- /dev/null +++ b/Pods/PromiseKit/Sources/Promise.swift @@ -0,0 +1,506 @@ +import Foundation.NSError + +public let PMKOperationQueue = NSOperationQueue() + +public enum RescuePolicy { + case AllErrors + case AllErrorsExceptCancellation +} + +/** + A promise represents the future value of a task. + + To obtain the value of a promise we call `then`. + + Promises are chainable: `then` returns a promise, you can call `then` on + that promise, which returns a promise, you can call `then` on that + promise, et cetera. + + Promises start in a pending state and *resolve* with a value to become + *fulfilled* or with an `NSError` to become rejected. + + @see [PromiseKit `then` Guide](http://promisekit.org/then/) + @see [PromiseKit Chaining Guide](http://promisekit.org/chaining/) +*/ +public class Promise { + let state: State + + /** + Create a new pending promise. + + Use this method when wrapping asynchronous systems that do *not* use + promises so that they can be involved in promise chains. + + Don’t use this method if you already have promises! Instead, just return + your promise! + + The closure you pass is executed immediately on the calling thread. + + func fetchKitten() -> Promise { + return Promise { fulfill, reject in + KittenFetcher.fetchWithCompletionBlock({ img, err in + if err == nil { + fulfill(img) + } else { + reject(err) + } + }) + } + } + + @param resolvers The provided closure is called immediately. Inside, + execute your asynchronous system, calling fulfill if it suceeds and + reject for any errors. + + @return A new promise. + + @warning *Note* If you are wrapping a delegate-based system, we recommend + to use instead: Promise.pendingPromise() + + @see http://promisekit.org/sealing-your-own-promises/ + @see http://promisekit.org/wrapping-delegation/ + */ + public convenience init(@noescape resolvers: (fulfill: (T) -> Void, reject: (NSError) -> Void) throws -> Void) { + self.init(sealant: { sealant in + do { + try resolvers(fulfill: sealant.resolve, reject: sealant.resolve) + } catch let error { + sealant.resolve(error as NSError) + } + }) + } + + /** + Create a new pending promise. + + This initializer is convenient when wrapping asynchronous systems that + use common patterns. For example: + + func fetchKitten() -> Promise { + return Promise { sealant in + KittenFetcher.fetchWithCompletionBlock(sealant.resolve) + } + } + + @see Sealant + @see init(resolvers:) + */ + public init(@noescape sealant: (Sealant) -> Void) { + var resolve: ((Resolution) -> Void)! + state = UnsealedState(resolver: &resolve) + sealant(Sealant(body: resolve)) + } + + /** + Create a new fulfilled promise. + */ + public init(_ value: T) { + state = SealedState(resolution: .Fulfilled(value)) + } + + /** + Create a new rejected promise. + */ + public init(_ error: NSError) { + unconsume(error) + state = SealedState(resolution: .Rejected(error)) + } + + /** + I’d prefer this to be the designated initializer, but then there would be no + public designated unsealed initializer! Making this convenience would be + inefficient. Not very inefficient, but still it seems distasteful to me. + */ + init(passthru: ((Resolution) -> Void) -> Void) { + var resolve: ((Resolution) -> Void)! + state = UnsealedState(resolver: &resolve) + passthru { + if case .Rejected(let error) = $0 { + unconsume(error as NSError) + } + resolve($0) + } + } + + /** + pendingPromise is convenient for wrapping delegates or larger asynchronous systems. + + class Foo: BarDelegate { + let (promise, fulfill, reject) = Promise.pendingPromise() + + func barDidFinishWithResult(result: Int) { + fulfill(result) + } + + func barDidError(error: NSError) { + reject(error) + } + } + + :returns: A tuple consisting of: + + 1) A promise + 2) A function that fulfills that promise + 3) A function that rejects that promise + */ + public class func pendingPromise() -> (promise: Promise, fulfill: (T) -> Void, reject: (NSError) -> Void) { + var sealant: Sealant! + let promise = Promise { sealant = $0 } + return (promise, sealant.resolve, sealant.resolve) + } + + func pipe(body: (Resolution) -> Void) { + state.get { seal in + switch seal { + case .Pending(let handlers): + handlers.append(body) + case .Resolved(let resolution): + body(resolution) + } + } + } + + private convenience init(when: Promise, body: (Resolution, (Resolution) -> Void) -> Void) { + self.init(passthru: { (resolve: (Resolution) -> Void) in + when.pipe{ body($0, resolve) } + }) + } + + /** + The provided closure is executed when this Promise is resolved. + + @param on The queue on which body should be executed. + + @param body The closure that is executed when this Promise is fulfilled. + + @return A new promise that is resolved with the value returned from the provided closure. For example: + + NSURLConnection.GET(url).then { (data: NSData) -> Int in + return data.length + }.then { length in + //… + } + + @see thenInBackground + */ + public func then(on q: dispatch_queue_t = dispatch_get_main_queue(), _ body: (T) throws -> U) -> Promise { + return Promise(when: self) { (resolution, resolve: (Resolution -> Void)) in + switch resolution { + case .Rejected(let error): + resolve(.Rejected(error)) + case .Fulfilled(let value): + contain_zalgo(q) { + do { + resolve(.Fulfilled(try body(value))) + } catch let error { + resolve(.Rejected(error as NSError)) + } + } + } + } + } + + public func then(on q: dispatch_queue_t = dispatch_get_main_queue(), _ body: (T) throws -> Promise) -> Promise { + return Promise(when: self) { resolution, resolve in + switch resolution { + case .Rejected(let error): + resolve(.Rejected(error)) + case .Fulfilled(let value): + contain_zalgo(q) { + do { + try body(value).pipe(resolve) + } catch let error { + resolve(.Rejected(error as NSError)) + } + } + } + } + } + + public func then(on q: dispatch_queue_t = dispatch_get_main_queue(), body: (T) throws -> AnyPromise) -> Promise { + return Promise(when: self) { resolution, resolve in + switch resolution { + case .Rejected(let error): + resolve(.Rejected(error)) + case .Fulfilled(let value): + contain_zalgo(q) { + do { + let anypromise = try body(value) + anypromise.pipe { obj in + if let error = obj as? NSError { + resolve(.Rejected(error)) + } else { + // possibly the value of this promise is a PMKManifold, if so + // calling the objc `value` method will return the first item. + let obj: AnyObject? = anypromise.valueForKey("value") + resolve(.Fulfilled(obj)) + } + } + } catch let error { + resolve(.Rejected(error as NSError)) + } + } + } + } + } + + /** + The provided closure is executed on the default background queue when this Promise is fulfilled. + + This method is provided as a convenience for `then`. + + @see then + */ + public func thenInBackground(body: (T) throws -> U) -> Promise { + return then(on: dispatch_get_global_queue(0, 0), body) + } + + public func thenInBackground(body: (T) throws -> Promise) -> Promise { + return then(on: dispatch_get_global_queue(0, 0), body) + } + + /** + The provided closure is executed when this Promise is rejected. + + Rejecting a promise cascades: rejecting all subsequent promises (unless + recover is invoked) thus you will typically place your catch at the end + of a chain. Often utility promises will not have a catch, instead + delegating the error handling to the caller. + + The provided closure always runs on the main queue. + + @param policy The default policy does not execute your handler for + cancellation errors. See registerCancellationError for more + documentation. + + @param body The handler to execute when this Promise is rejected. + + @see registerCancellationError + */ + public func rescue(policy policy: RescuePolicy = .AllErrorsExceptCancellation, _ body: (NSError) -> Void) -> RejectedPromise { + var resolve: ((Resolution) -> Void)! + let rp = RejectedPromise(resolve: &resolve) + + pipe { resolution in + dispatch_async(dispatch_get_main_queue()) { + if case .Rejected(let error) = resolution where policy == .AllErrors || !error.cancelled { + consume(error) + body(error) + } + resolve(.Fulfilled()) + } + } + + return rp + } + + /** + The provided closure is executed when this Promise is rejected giving you + an opportunity to recover from the error and continue the promise chain. + */ + public func recover(on q: dispatch_queue_t = dispatch_get_main_queue(), _ body: (NSError) -> Promise) -> Promise { + return Promise(when: self) { resolution, resolve in + switch resolution { + case .Rejected(let error): + contain_zalgo(q) { + consume(error) + body(error).pipe(resolve) + } + case .Fulfilled: + resolve(resolution) + } + } + } + + public func recover(on q: dispatch_queue_t = dispatch_get_main_queue(), _ body: (NSError) throws -> T) -> Promise { + return Promise(when: self) { resolution, resolve in + switch resolution { + case .Rejected(let error): + contain_zalgo(q) { + do { + consume(error) + resolve(.Fulfilled(try body(error))) + } catch let error { + resolve(.Rejected(error as NSError)) + } + } + case .Fulfilled: + resolve(resolution) + } + } + } + + /** + The provided closure is executed when this Promise is resolved. + + @param on The queue on which body should be executed. + + @param body The closure that is executed when this Promise is resolved. + + UIApplication.sharedApplication().networkActivityIndicatorVisible = true + somePromise().then { + //… + }.finally { + UIApplication.sharedApplication().networkActivityIndicatorVisible = false + } + */ + public func finally(on q: dispatch_queue_t = dispatch_get_main_queue(), _ body: () -> Void) -> Promise { + return Promise(when: self) { resolution, resolve in + contain_zalgo(q) { + body() + resolve(resolution) + } + } + } +} + + +/** + Zalgo is dangerous. + + Pass as the `on` parameter for a `then`. Causes the handler to be executed + as soon as it is resolved. That means it will be executed on the queue it + is resolved. This means you cannot predict the queue. + + In the case that the promise is already resolved the handler will be + executed immediately. + + zalgo is provided for libraries providing promises that have good tests + that prove unleashing zalgo is safe. You can also use it in your + application code in situations where performance is critical, but be + careful: read the essay at the provided link to understand the risks. + + @see http://blog.izs.me/post/59142742143/designing-apis-for-asynchrony +*/ +public let zalgo: dispatch_queue_t = dispatch_queue_create("Zalgo", nil) + +/** + Waldo is dangerous. + + Waldo is zalgo, unless the current queue is the main thread, in which case + we dispatch to the default background queue. + + If your block is likely to take more than a few milliseconds to execute, + then you should use waldo: 60fps means the main thread cannot hang longer + than 17 milliseconds. Don’t contribute to UI lag. + + Conversely if your then block is trivial, use zalgo: GCD is not free and + for whatever reason you may already be on the main thread so just do what + you are doing quickly and pass on execution. + + It is considered good practice for asynchronous APIs to complete onto the + main thread. Apple do not always honor this, nor do other developers. + However, they *should*. In that respect waldo is a good choice if your + then is going to take a while and doesn’t interact with the UI. + + Please note (again) that generally you should not use zalgo or waldo. The + performance gains are neglible and we provide these functions only out of + a misguided sense that library code should be as optimized as possible. + If you use zalgo or waldo without tests proving their correctness you may + unwillingly introduce horrendous, near-impossible-to-trace bugs. + + @see zalgo +*/ +public let waldo: dispatch_queue_t = dispatch_queue_create("Waldo", nil) + +func contain_zalgo(q: dispatch_queue_t, block: () -> Void) { + if q === zalgo { + block() + } else if q === waldo { + if NSThread.isMainThread() { + dispatch_async(dispatch_get_global_queue(0, 0), block) + } else { + block() + } + } else { + dispatch_async(q, block) + } +} + + +extension Promise { + /** + Creates a rejected Promise with `PMKErrorDomain` and a specified localizedDescription and error code. + */ + public convenience init(error: String, code: Int = PMKUnexpectedError) { + let error = NSError(domain: "PMKErrorDomain", code: code, userInfo: [NSLocalizedDescriptionKey: error]) + self.init(error) + } + + /** + Promise is more flexible, and often needed. However Swift won't cast + to directly. Once that is possible we will deprecate this + function. + */ + public func asAny() -> Promise { + return then(on: zalgo) { $0 } + } + + /** + Promise is more flexible, and often needed. However Swift won't + cast to directly. Once that is possible we will deprecate + this function. + */ + public func asAnyObject() -> Promise { + return then(on: zalgo) { $0 as! AnyObject } + } + + /** + Swift (1.2) seems to be much less fussy about Void promises. + */ + public func asVoid() -> Promise { + return then(on: zalgo) { _ in return } + } +} + + +extension Promise: CustomStringConvertible { + public var description: String { + return "Promise: \(state)" + } +} + +/** + Firstly can make chains more readable. + + Compare: + + NSURLConnection.GET(url1).then { + NSURLConnection.GET(url2) + }.then { + NSURLConnection.GET(url3) + } + + With: + + firstly { + NSURLConnection.GET(url1) + }.then { + NSURLConnection.GET(url2) + }.then { + NSURLConnection.GET(url3) + } +*/ +public func firstly(promise: () -> Promise) -> Promise { + return promise() +} + + +public class RejectedPromise { + private let state: UnsealedState + + private init(inout resolve: ((Resolution) -> Void)!) { + state = UnsealedState(resolver: &resolve) + } + + public func finally(on q: dispatch_queue_t = dispatch_get_main_queue(), body: () -> Void) { + state.get { seal in + switch seal { + case .Resolved: + contain_zalgo(q, block: body) + case .Pending(let handlers): + handlers.append { _ in contain_zalgo(q, block: body) } + } + } + } +} diff --git a/Pods/PromiseKit/Sources/PromiseKit.h b/Pods/PromiseKit/Sources/PromiseKit.h new file mode 100644 index 0000000..ee8f24c --- /dev/null +++ b/Pods/PromiseKit/Sources/PromiseKit.h @@ -0,0 +1,262 @@ +#import +#import +#import +#import +#import +#import +#import + + + +/** + @return A new promise that resolves after the specified duration. + + @parameter duration The duration in seconds to wait before this promise is resolve. + + For example: + + PMKAfter(1).then(^{ + //… + }); +*/ +extern AnyPromise * __nonnull PMKAfter(NSTimeInterval duration); + + + +/** + `when` is a mechanism for waiting more than one asynchronous task and responding when they are all complete. + + `PMKWhen` accepts varied input. If an array is passed then when those promises fulfill, when’s promise fulfills with an array of fulfillment values. If a dictionary is passed then the same occurs, but when’s promise fulfills with a dictionary of fulfillments keyed as per the input. + + Interestingly, if a single promise is passed then when waits on that single promise, and if a single non-promise object is passed then when fulfills immediately with that object. If the array or dictionary that is passed contains objects that are not promises, then these objects are considered fulfilled promises. The reason we do this is to allow a pattern know as "abstracting away asynchronicity". + + If *any* of the provided promises reject, the returned promise is immediately rejected with that promise’s rejection. The error’s `userInfo` object is supplemented with `PMKFailingPromiseIndexKey`. + + For example: + + PMKWhen(@[promise1, promise2]).then(^(NSArray *results){ + //… + }); + + @warning *Important* In the event of rejection the other promises will continue to resolve and as per any other promise will eithe fulfill or reject. This is the right pattern for `getter` style asynchronous tasks, but often for `setter` tasks (eg. storing data on a server), you most likely will need to wait on all tasks and then act based on which have succeeded and which have failed. In such situations use `PMKJoin`. + + @param input The input upon which to wait before resolving this promise. + + @return A promise that is resolved with either: + + 1. An array of values from the provided array of promises. + 2. The value from the provided promise. + 3. The provided non-promise object. + + @see PMKJoin + +*/ +extern AnyPromise * __nonnull PMKWhen(id __nonnull input); + + + +/** + Creates a new promise that resolves only when all provided promises have resolved. + + Typically, you should use `PMKWhen`. + + For example: + + PMKJoin(@[promise1, promise2]).then(^(NSArray *results, NSArray *values, NSArray *errors){ + //… + }); + + @warning *Important* This promise is not rejectable. Thus it is up to you to propogate an error if you want any subsequent chain to continue being rejected. + + @param promises An array of promises. + + @return A promise that thens three parameters: + + 1) An array of mixed values and errors from the resolved input. + 2) An array of values from the promises that fulfilled. + 3) An array of errors from the promises that rejected or nil if all promises fulfilled. + + @see when +*/ +AnyPromise *__nonnull PMKJoin(NSArray * __nonnull promises); + + + +/** + Literally hangs this thread until the promise has resolved. + + Do not use hang… unless you are testing, playing or debugging. + + If you use it in production code I will literally and honestly cry like a child. + + @return The resolved value of the promise. + + @warning T SAFE. IT IS NOT SAFE. IT IS NOT SAFE. IT IS NOT SAFE. IT IS NO +*/ +extern id __nullable PMKHang(AnyPromise * __nonnull promise); + + + +/** + Sets the unhandled error handler. + + If a promise is rejected and no catch handler is called in its chain, the + provided handler is called. The default handler logs the error. + + PMKSetUnhandledErrorHandler(^(NSError *error){ + NSLog(@"Unhandled error: %@", error); + }); + + @warning *Important* The handler is executed on an undefined queue. + + @warning *Important* Don’t use promises in your handler, or you risk an + infinite error loop. + + @warning *Important* This function is totally not thread-safe and if + some promise is already executing when you set this the results are + undefined (though safe if you are programming safely because either + your handler or the previous handler will be called). So do this at + application startup and *NOWHERE ELSE!* + + @return The previous unhandled error handler. +*/ +extern id __nonnull PMKSetUnhandledErrorHandler(void (^__nonnull handler)(NSError * __nonnull)); + + + +/** + Sets the unhandled exception handler. + + If an exception is thrown inside an AnyPromise handler it is caught and + this handler is executed to determine if the promise is rejected. + + The default handler rejects the promise if an NSError or an NSString is + thrown. + + The default handler in PromiseKit 1.x would reject whatever object was + thrown (including nil). + + @warning *Important* This handler is provided to allow you to customize + which exceptions cause rejection and which abort. You should either + return a fully-formed NSError object or nil. Returning nil causes the + exception to be re-thrown. + + @warning *Important* The handler is executed on an undefined queue. + + @warning *Important* This function is thread-safe, but to facilitate this + it can only be called once per application lifetime and it must be called + before any promise in the app throws an exception. Subsequent calls will + silently fail. +*/ +extern void PMKSetUnhandledExceptionHandler(NSError * __nullable (^__nonnull handler)(id __nullable)); + + + +/** + Executes the provided block on a background queue. + + dispatch_promise is a convenient way to start a promise chain where the + first step needs to run synchronously on a background queue. + + dispatch_promise(^{ + return md5(input); + }).then(^(NSString *md5){ + NSLog(@"md5: %@", md5); + }); + + @param block The block to be executed in the background. Returning an `NSError` will reject the promise, everything else (including void) fulfills the promise. + + @return A promise resolved with the return value of the provided block. + + @see dispatch_async +*/ +extern AnyPromise * __nonnull dispatch_promise(id __nonnull block); + + + +/** + Executes the provided block on the specified background queue. + + dispatch_promise_on(myDispatchQueue, ^{ + return md5(input); + }).then(^(NSString *md5){ + NSLog(@"md5: %@", md5); + }); + + @param block The block to be executed in the background. Returning an `NSError` will reject the promise, everything else (including void) fulfills the promise. + + @return A promise resolved with the return value of the provided block. + + @see dispatch_promise +*/ +extern AnyPromise * __nonnull dispatch_promise_on(dispatch_queue_t __nonnull queue, id __nonnull block); + + + +#define PMKJSONDeserializationOptions ((NSJSONReadingOptions)(NSJSONReadingAllowFragments | NSJSONReadingMutableContainers)) + +#define PMKHTTPURLResponseIsJSON(rsp) [@[@"application/json", @"text/json", @"text/javascript"] containsObject:[rsp MIMEType]] +#define PMKHTTPURLResponseIsImage(rsp) [@[@"image/tiff", @"image/jpeg", @"image/gif", @"image/png", @"image/ico", @"image/x-icon", @"image/bmp", @"image/x-bmp", @"image/x-xbitmap", @"image/x-win-bitmap"] containsObject:[rsp MIMEType]] +#define PMKHTTPURLResponseIsText(rsp) [[rsp MIMEType] hasPrefix:@"text/"] + + + +#if defined(__has_include) + #if __has_include() + #import + #endif + #if __has_include() + #import + #endif + #if __has_include() + #import + #endif + #if __has_include() + #import + #endif + #if __has_include() + #import + #endif + #if __has_include() + #import + #endif + #if __has_include() + #import + #endif + #if __has_include() + #import + #endif + #if __has_include() + #import + #endif + #if __has_include() + #import + #endif + #if __has_include() + #import + #endif + #if __has_include() + #import + #endif + #if __has_include() + #import + #endif + #if __has_include() + #import + #endif + #if __has_include() + #import + #endif + #if __has_include() + #import + #endif + #if __has_include() + #import + #endif + #if __has_include() + #import + #endif + #if __has_include() + #import + #endif +#endif diff --git a/Pods/PromiseKit/Sources/Sealant.swift b/Pods/PromiseKit/Sources/Sealant.swift new file mode 100644 index 0000000..3b21c77 --- /dev/null +++ b/Pods/PromiseKit/Sources/Sealant.swift @@ -0,0 +1,86 @@ +import Foundation.NSError + +public class Sealant { + let handler: (Resolution) -> () + + init(body: (Resolution) -> Void) { + handler = body + } + + /** internal because it is dangerous */ + func __resolve(obj: AnyObject) { + switch obj { + case is NSError: + resolve(obj as! NSError) + default: + handler(.Fulfilled(obj as! T)) + } + } + + public func resolve(value: T) { + handler(.Fulfilled(value)) + } + + public func resolve(error: NSError) { + unconsume(error) + handler(.Rejected(error)) + } + + /** + Makes wrapping (typical) asynchronous patterns easy. + + For example, here we wrap an `MKLocalSearch`: + + func search() -> Promise { + return Promise { sealant in + MKLocalSearch(request: …).startWithCompletionHandler(sealant.resolve) + } + } + + To get this to work you often have to help the compiler by specifiying + the type. In future versions of Swift, this should become unecessary. + */ + public func resolve(obj: T?, _ error: NSError?) { + if let obj = obj { + handler(.Fulfilled(obj)) + } else if let error = error { + resolve(error) + } else { + //FIXME couldn't get the constants from the umbrella header :( + let error = NSError(domain: PMKErrorDomain, code: /*PMKUnexpectedError*/ 1, userInfo: nil) + resolve(error) + } + } + + public func resolve(obj: T, _ error: NSError?) { + if let error = error { + resolve(error) + } else { + handler(.Fulfilled(obj)) + } + } + + /** + Provided for APIs that *still* return [AnyObject] because they suck. + FIXME fails + */ +// public func convert(objects: [AnyObject]!, _ error: NSError!) { +// if error != nil { +// resolve(error) +// } else { +// handler(.Fulfilled(objects)) +// } +// } + + /** + For the case where T is Void. If it isn’t stuff will crash at some point. + FIXME crashes when T is Void and .Fulfilled contains Void. Fucking sigh. + */ +// public func ignore(obj: U, _ error: NSError!) { +// if error == nil { +// handler(.Fulfilled(T)) +// } else { +// resolve(error) +// } +// } +} diff --git a/Pods/PromiseKit/Sources/State.swift b/Pods/PromiseKit/Sources/State.swift new file mode 100644 index 0000000..79ea6cb --- /dev/null +++ b/Pods/PromiseKit/Sources/State.swift @@ -0,0 +1,155 @@ +import Foundation.NSError + +enum Resolution { + case Fulfilled(T) + case Rejected(NSError) +} + +enum Seal { + case Pending(Handlers) + case Resolved(Resolution) +} + +// would be a protocol, but you can't have typed variables of “generic” +// protocols in Swift 2. +class State { + func get() -> Resolution? { fatalError("Abstract Base Class") } + func get(body: (Seal) -> Void) { fatalError("Abstract Base Class") } +} + +class UnsealedState: State { + private let barrier = dispatch_queue_create("org.promisekit.barrier", DISPATCH_QUEUE_CONCURRENT) + private var seal: Seal + + /** + Quick return, but will not provide the handlers array + because it could be modified while you are using it by + another thread. If you need the handlers, use the second + `get` variant. + */ + override func get() -> Resolution? { + var result: Resolution? + dispatch_sync(barrier) { + switch self.seal { + case .Resolved(let resolution): + result = resolution + case .Pending: + break + } + } + return result + } + + override func get(body: (Seal) -> Void) { + var sealed = false + dispatch_sync(barrier) { + switch self.seal { + case .Resolved: + sealed = true + case .Pending: + sealed = false + } + } + if !sealed { + dispatch_barrier_sync(barrier) { + switch (self.seal) { + case .Pending: + body(self.seal) + case .Resolved: + sealed = true // welcome to race conditions + } + } + } + if sealed { + body(seal) + } + } + + init(inout resolver: ((Resolution) -> Void)!) { + seal = .Pending(Handlers()) + super.init() + resolver = { resolution in + var handlers: Handlers? + dispatch_barrier_sync(self.barrier) { + switch self.seal { + case .Pending(let hh): + self.seal = .Resolved(resolution) + handlers = hh + case .Resolved: + break + } + } + if let handlers = handlers { + for handler in handlers { + handler(resolution) + } + } + } + } +} + +class SealedState: State { + private let resolution: Resolution + + init(resolution: Resolution) { + self.resolution = resolution + } + + override func get() -> Resolution? { + return resolution + } + + override func get(body: (Seal) -> Void) { + body(.Resolved(resolution)) + } +} + + +class Handlers: SequenceType { + var bodies: [(Resolution)->()] = [] + + func append(body: (Resolution)->()) { + bodies.append(body) + } + + func generate() -> IndexingGenerator<[(Resolution)->()]> { + return bodies.generate() + } + + var count: Int { + return bodies.count + } +} + + +extension Resolution: CustomStringConvertible { + var description: String { + switch self { + case .Fulfilled(let value): + return "Fulfilled with value: \(value)" + case .Rejected(let error): + return "Rejected with error: \(error)" + } + } +} + +extension UnsealedState: CustomStringConvertible { + var description: String { + var rv: String? + get { seal in + switch seal { + case .Pending(let handlers): + rv = "Pending with \(handlers.count) handlers" + case .Resolved(let resolution): + rv = "\(resolution)" + } + } + return "UnsealedState: \(rv!)" + } +} + +extension SealedState: CustomStringConvertible { + var description: String { + return "SealedState: \(resolution)" + } +} diff --git a/Pods/PromiseKit/Sources/Umbrella.h b/Pods/PromiseKit/Sources/Umbrella.h new file mode 100644 index 0000000..c4cc228 --- /dev/null +++ b/Pods/PromiseKit/Sources/Umbrella.h @@ -0,0 +1,29 @@ +#import +#import + +FOUNDATION_EXPORT double PromiseKitVersionNumber; +FOUNDATION_EXPORT const unsigned char PromiseKitVersionString[]; + +extern NSString * const PMKErrorDomain; + +#define PMKFailingPromiseIndexKey @"PMKFailingPromiseIndexKey" +#define PMKURLErrorFailingURLResponseKey @"PMKURLErrorFailingURLResponseKey" +#define PMKURLErrorFailingDataKey @"PMKURLErrorFailingDataKey" +#define PMKURLErrorFailingStringKey @"PMKURLErrorFailingStringKey" +#define PMKJSONErrorJSONObjectKey @"PMKJSONErrorJSONObjectKey" + +#define PMKUnexpectedError 1l +#define PMKUnknownError 2l +#define PMKInvalidUsageError 3l +#define PMKAccessDeniedError 4l +#define PMKOperationCancelled 5l +#define PMKNotFoundError 6l +#define PMKJSONError 7l +#define PMKOperationFailed 8l +#define PMKTaskError 9l + +#define PMKTaskErrorLaunchPathKey @"PMKTaskErrorLaunchPathKey" +#define PMKTaskErrorArgumentsKey @"PMKTaskErrorArgumentsKey" +#define PMKTaskErrorStandardOutputKey @"PMKTaskErrorStandardOutputKey" +#define PMKTaskErrorStandardErrorKey @"PMKTaskErrorStandardErrorKey" +#define PMKTaskErrorExitStatusKey @"PMKTaskErrorExitStatusKey" diff --git a/Pods/PromiseKit/Sources/after.m b/Pods/PromiseKit/Sources/after.m new file mode 100644 index 0000000..c5f7a3b --- /dev/null +++ b/Pods/PromiseKit/Sources/after.m @@ -0,0 +1,13 @@ +#import "AnyPromise.h" +@import Dispatch; +@import Foundation.NSDate; +@import Foundation.NSValue; + +AnyPromise *PMKAfter(NSTimeInterval duration) { + return [AnyPromise promiseWithResolverBlock:^(PMKResolver resolve) { + dispatch_time_t time = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(duration * NSEC_PER_SEC)); + dispatch_after(time, dispatch_get_global_queue(0, 0), ^{ + resolve(@(duration)); + }); + }]; +} diff --git a/Pods/PromiseKit/Sources/after.swift b/Pods/PromiseKit/Sources/after.swift new file mode 100644 index 0000000..a646039 --- /dev/null +++ b/Pods/PromiseKit/Sources/after.swift @@ -0,0 +1,23 @@ +import Dispatch +import Foundation.NSDate + +/** + @return A new promise that resolves after the specified duration. + + @parameter duration The duration in seconds to wait before this promise is resolve. + + For example: + + after(1).then { + //… + } +*/ +public func after(delay: NSTimeInterval) -> Promise { + return Promise { fulfill, _ in + let delta = delay * NSTimeInterval(NSEC_PER_SEC) + let when = dispatch_time(DISPATCH_TIME_NOW, Int64(delta)) + dispatch_after(when, dispatch_get_global_queue(0, 0)) { + fulfill() + } + } +} diff --git a/Pods/PromiseKit/Sources/dispatch_promise.m b/Pods/PromiseKit/Sources/dispatch_promise.m new file mode 100644 index 0000000..71c8e74 --- /dev/null +++ b/Pods/PromiseKit/Sources/dispatch_promise.m @@ -0,0 +1,10 @@ +@import Dispatch; +#import "PromiseKit.h" + +AnyPromise *dispatch_promise(id block) { + return dispatch_promise_on(dispatch_get_global_queue(0, 0), block); +} + +AnyPromise *dispatch_promise_on(dispatch_queue_t queue, id block) { + return [AnyPromise promiseWithValue:nil].thenOn(queue, block); +} diff --git a/Pods/PromiseKit/Sources/dispatch_promise.swift b/Pods/PromiseKit/Sources/dispatch_promise.swift new file mode 100644 index 0000000..9a4608b --- /dev/null +++ b/Pods/PromiseKit/Sources/dispatch_promise.swift @@ -0,0 +1,14 @@ +import Dispatch +import Foundation.NSError + +public func dispatch_promise(on queue: dispatch_queue_t = dispatch_get_global_queue(0, 0), body: () throws -> T) -> Promise { + return Promise { fulfill, reject in + contain_zalgo(queue) { + do { + fulfill(try body()) + } catch let error { + reject(error as NSError) + } + } + } +} diff --git a/Pods/PromiseKit/Sources/hang.m b/Pods/PromiseKit/Sources/hang.m new file mode 100644 index 0000000..ee3d9de --- /dev/null +++ b/Pods/PromiseKit/Sources/hang.m @@ -0,0 +1,24 @@ +#import "AnyPromise.h" +#import "AnyPromise+Private.h" +@import CoreFoundation.CFRunLoop; + +id PMKHang(AnyPromise *promise) { + if (promise.pending) { + static CFRunLoopSourceContext context; + + CFRunLoopRef runLoop = CFRunLoopGetCurrent(); + CFRunLoopSourceRef runLoopSource = CFRunLoopSourceCreate(NULL, 0, &context); + CFRunLoopAddSource(runLoop, runLoopSource, kCFRunLoopDefaultMode); + + promise.finally(^{ + CFRunLoopStop(runLoop); + }); + while (promise.pending) { + CFRunLoopRun(); + } + CFRunLoopRemoveSource(runLoop, runLoopSource, kCFRunLoopDefaultMode); + CFRelease(runLoopSource); + } + + return promise.value; +} diff --git a/Pods/PromiseKit/Sources/join.m b/Pods/PromiseKit/Sources/join.m new file mode 100644 index 0000000..b9b8a49 --- /dev/null +++ b/Pods/PromiseKit/Sources/join.m @@ -0,0 +1,40 @@ +#import "AnyPromise.h" +#import "AnyPromise+Private.h" +@import Foundation.NSDictionary; +@import Foundation.NSError; +@import Foundation.NSNull; +#import + +@implementation AnyPromise (join) + +AnyPromise *PMKJoin(NSArray *promises) { + if (promises == nil) + return [AnyPromise promiseWithValue:[NSError errorWithDomain:PMKErrorDomain code:PMKInvalidUsageError userInfo:@{NSLocalizedDescriptionKey: @"PMKJoin(nil)"}]]; + + if (promises.count == 0) + return [AnyPromise promiseWithValue:PMKManifold(promises, promises)]; + + return [AnyPromise promiseWithResolverBlock:^(PMKResolver resolve) { + NSPointerArray *results = NSPointerArrayMake(promises.count); + + __block NSUInteger x = 0; + + [promises enumerateObjectsUsingBlock:^(AnyPromise *promise, NSUInteger ii, BOOL *stop) { + [promise pipe:^(id value) { + [results replacePointerAtIndex:ii withPointer:(__bridge void *)(value ?: [NSNull null])]; + if (++x == promises.count) { + id apples = results.allObjects; + id values = [NSMutableArray new]; + id errors = [NSMutableArray new]; + for (id apple in apples) + [IsError(apple) ? errors : values addObject:apple]; + if ([errors count] == 0) + errors = nil; + resolve(PMKManifold(apples, values, errors)); + } + }]; + }]; + }]; +} + +@end diff --git a/Pods/PromiseKit/Sources/race.swift b/Pods/PromiseKit/Sources/race.swift new file mode 100644 index 0000000..a9fa710 --- /dev/null +++ b/Pods/PromiseKit/Sources/race.swift @@ -0,0 +1,8 @@ + +public func race(promises: Promise...) -> Promise { + return Promise(passthru: { resolve in + for promise in promises { + promise.pipe(resolve) + } + }) +} diff --git a/Pods/PromiseKit/Sources/when.m b/Pods/PromiseKit/Sources/when.m new file mode 100644 index 0000000..d3e9ab2 --- /dev/null +++ b/Pods/PromiseKit/Sources/when.m @@ -0,0 +1,83 @@ +#import "AnyPromise.h" +#import "AnyPromise+Private.h" +@import Foundation.NSDictionary; +@import Foundation.NSError; +@import Foundation.NSProgress; +@import Foundation.NSNull; +#import "Umbrella.h" + +// NSProgress resources: +// * https://robots.thoughtbot.com/asynchronous-nsprogress +// * http://oleb.net/blog/2014/03/nsprogress/ +// NSProgress! Beware! +// * https://github.com/AFNetworking/AFNetworking/issues/2261 + + +AnyPromise *PMKWhen(id promises) { + if (promises == nil) + return [AnyPromise promiseWithValue:[NSError errorWithDomain:PMKErrorDomain code:PMKInvalidUsageError userInfo:@{NSLocalizedDescriptionKey: @"PMKWhen(nil)"}]]; + + if ([promises isKindOfClass:[NSArray class]] || [promises isKindOfClass:[NSDictionary class]]) { + if ([promises count] == 0) + return [AnyPromise promiseWithValue:promises]; + } else if ([promises isKindOfClass:[AnyPromise class]]) { + promises = @[promises]; + } else { + return [AnyPromise promiseWithValue:promises]; + } + +#ifndef PMKDisableProgress + NSProgress *progress = [NSProgress progressWithTotalUnitCount:[promises count]]; + progress.pausable = NO; + progress.cancellable = NO; +#endif + + PMKResolver resolve; + AnyPromise *rootPromise = [[AnyPromise alloc] initWithResolver:&resolve]; + __block void (^fulfill)(); + + __block NSInteger countdown = [promises count]; + void (^yield)(id, id, void(^)(id)) = ^(AnyPromise *promise, id key, void(^set)(id)) { + if (![promise isKindOfClass:[AnyPromise class]]) + promise = [AnyPromise promiseWithValue:promise]; + [promise pipe:^(id value){ + if (!rootPromise.pending) { + // suppress “already resolved” log message + } else if (IsError(value)) { + #ifndef PMKDisableProgress + progress.completedUnitCount = progress.totalUnitCount; + #endif + resolve(NSErrorSupplement(value, @{PMKFailingPromiseIndexKey: key})); + } else { + #ifndef PMKDisableProgress + progress.completedUnitCount++; + #endif + set(promise.value); // we use -value to unwrap PMKManifolds + if (--countdown == 0) + fulfill(); + } + }]; + }; + + if ([promises isKindOfClass:[NSDictionary class]]) { + NSMutableDictionary *results = [NSMutableDictionary new]; + fulfill = ^{ resolve(results); }; + + for (id key in promises) { + yield(promises[key], key, ^(id value){ + results[key] = value; + }); + } + } else { + NSPointerArray *results = NSPointerArrayMake([promises count]); + fulfill = ^{ resolve(results.allObjects); }; + + [promises enumerateObjectsUsingBlock:^(id promise, NSUInteger ii, BOOL *stop) { + yield(promise, @(ii), ^(id value){ + [results replacePointerAtIndex:ii withPointer:(__bridge void *)(value ?: [NSNull null])]; + }); + }]; + } + + return rootPromise; +} diff --git a/Pods/PromiseKit/Sources/when.swift b/Pods/PromiseKit/Sources/when.swift new file mode 100644 index 0000000..00e13b6 --- /dev/null +++ b/Pods/PromiseKit/Sources/when.swift @@ -0,0 +1,56 @@ +import Foundation.NSProgress + +private func when(promises: [Promise]) -> Promise { + let (rootPromise, fulfill, reject) = Promise.pendingPromise() +#if !PMKDisableProgress + let progress = NSProgress(totalUnitCount: Int64(promises.count)) + progress.cancellable = false + progress.pausable = false +#else + var progress: (completedUnitCount: Int, totalUnitCount: Int) = (0, 0) +#endif + var countdown = promises.count + + for promise in promises { + promise.pipe { resolution in + if rootPromise.pending { + switch resolution { + case .Rejected(let error): + progress.completedUnitCount = progress.totalUnitCount + //TODO PMKFailingPromiseIndexKey + reject(error) + case .Fulfilled: + progress.completedUnitCount++ + if --countdown == 0 { + fulfill() + } + } + } + } + } + + return rootPromise +} + +public func when(promises: [Promise]) -> Promise<[T]> { + return when(promises).then(on: zalgo) { promises.map{ $0.value! } } +} + +public func when(promises: Promise...) -> Promise<[T]> { + return when(promises) +} + +public func when(promises: Promise...) -> Promise { + return when(promises) +} + +public func when(pu: Promise, _ pv: Promise) -> Promise<(U, V)> { + return when(pu.asVoid(), pv.asVoid()).then(on: zalgo) { (pu.value!, pv.value!) } +} + +public func when(pu: Promise, _ pv: Promise, _ px: Promise) -> Promise<(U, V, X)> { + return when(pu.asVoid(), pv.asVoid(), px.asVoid()).then(on: zalgo) { (pu.value!, pv.value!, px.value!) } +} + +@available(*, unavailable, message="Use `when`") +public func join(promises: Promise...) {} diff --git a/Pods/Target Support Files/Pods-Snell-PromiseKit/Info.plist b/Pods/Target Support Files/Pods-Snell-PromiseKit/Info.plist new file mode 100644 index 0000000..1151db3 --- /dev/null +++ b/Pods/Target Support Files/Pods-Snell-PromiseKit/Info.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIdentifier + org.cocoapods.${PRODUCT_NAME:rfc1034identifier} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + FMWK + CFBundleShortVersionString + 2.0.3 + CFBundleSignature + ???? + CFBundleVersion + ${CURRENT_PROJECT_VERSION} + NSPrincipalClass + + + diff --git a/Pods/Target Support Files/Pods-Snell-PromiseKit/Pods-Snell-PromiseKit-Private.xcconfig b/Pods/Target Support Files/Pods-Snell-PromiseKit/Pods-Snell-PromiseKit-Private.xcconfig new file mode 100644 index 0000000..34f22ac --- /dev/null +++ b/Pods/Target Support Files/Pods-Snell-PromiseKit/Pods-Snell-PromiseKit-Private.xcconfig @@ -0,0 +1,12 @@ +#include "Pods-Snell-PromiseKit.xcconfig" +CODE_SIGN_IDENTITY = +CONFIGURATION_BUILD_DIR = $PODS_FRAMEWORK_BUILD_PATH +FRAMEWORK_SEARCH_PATHS = "$PODS_FRAMEWORK_BUILD_PATH" +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/PromiseKit" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/Nimble" "${PODS_ROOT}/Headers/Public/PromiseKit" "${PODS_ROOT}/Headers/Public/Quick" +OTHER_LDFLAGS = ${PODS_SNELL_PROMISEKIT_OTHER_LDFLAGS} -ObjC +OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" +PODS_FRAMEWORK_BUILD_PATH = $(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/Pods-Snell +PODS_ROOT = ${SRCROOT} +SKIP_INSTALL = YES +SWIFT_INSTALL_OBJC_HEADER = ${PODS_SNELL_PROMISEKIT_SWIFT_INSTALL_OBJC_HEADER} \ No newline at end of file diff --git a/Pods/Target Support Files/Pods-Snell-PromiseKit/Pods-Snell-PromiseKit-dummy.m b/Pods/Target Support Files/Pods-Snell-PromiseKit/Pods-Snell-PromiseKit-dummy.m new file mode 100644 index 0000000..7e0df77 --- /dev/null +++ b/Pods/Target Support Files/Pods-Snell-PromiseKit/Pods-Snell-PromiseKit-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_Pods_Snell_PromiseKit : NSObject +@end +@implementation PodsDummy_Pods_Snell_PromiseKit +@end diff --git a/Pods/Target Support Files/Pods-Snell-PromiseKit/Pods-Snell-PromiseKit-prefix.pch b/Pods/Target Support Files/Pods-Snell-PromiseKit/Pods-Snell-PromiseKit-prefix.pch new file mode 100644 index 0000000..280e511 --- /dev/null +++ b/Pods/Target Support Files/Pods-Snell-PromiseKit/Pods-Snell-PromiseKit-prefix.pch @@ -0,0 +1,5 @@ +#ifdef __OBJC__ +#import +#endif + +#import "Pods-Snell-environment.h" diff --git a/Pods/Target Support Files/Pods-Snell-PromiseKit/Pods-Snell-PromiseKit.modulemap b/Pods/Target Support Files/Pods-Snell-PromiseKit/Pods-Snell-PromiseKit.modulemap new file mode 100644 index 0000000..7e55ef9 --- /dev/null +++ b/Pods/Target Support Files/Pods-Snell-PromiseKit/Pods-Snell-PromiseKit.modulemap @@ -0,0 +1,32 @@ +framework module PromiseKit { + umbrella header "Umbrella.h" + + header "NSError+Cancellation.h" + + exclude header "AnyPromise.h" + exclude header "PromiseKit.h" + exclude header "PMKPromise.h" + exclude header "Promise.h" + + exclude header "Pods-PromiseKit-umbrella.h" + + exclude header "ACAccountStore+AnyPromise.h" + exclude header "AVAudioSession+AnyPromise.h" + exclude header "CKContainer+AnyPromise.h" + exclude header "CKDatabase+AnyPromise.h" + exclude header "CLGeocoder+AnyPromise.h" + exclude header "CLLocationManager+AnyPromise.h" + exclude header "NSNotificationCenter+AnyPromise.h" + exclude header "NSTask+AnyPromise.h" + exclude header "NSURLConnection+AnyPromise.h" + exclude header "MKDirections+AnyPromise.h" + exclude header "MKMapSnapshotter+AnyPromise.h" + exclude header "CALayer+AnyPromise.h" + exclude header "SLRequest+AnyPromise.h" + exclude header "SKRequest+AnyPromise.h" + exclude header "SCNetworkReachability+AnyPromise.h" + exclude header "UIActionSheet+AnyPromise.h" + exclude header "UIAlertView+AnyPromise.h" + exclude header "UIView+AnyPromise.h" + exclude header "UIViewController+AnyPromise.h" +} diff --git a/Pods/Target Support Files/Pods-Snell-PromiseKit/Pods-Snell-PromiseKit.xcconfig b/Pods/Target Support Files/Pods-Snell-PromiseKit/Pods-Snell-PromiseKit.xcconfig new file mode 100644 index 0000000..32d3bab --- /dev/null +++ b/Pods/Target Support Files/Pods-Snell-PromiseKit/Pods-Snell-PromiseKit.xcconfig @@ -0,0 +1,2 @@ +PODS_SNELL_PROMISEKIT_OTHER_LDFLAGS = -framework "Foundation" +PODS_SNELL_PROMISEKIT_SWIFT_INSTALL_OBJC_HEADER = NO \ No newline at end of file diff --git a/Pods/Target Support Files/Pods-Snell/Info.plist b/Pods/Target Support Files/Pods-Snell/Info.plist new file mode 100644 index 0000000..6974542 --- /dev/null +++ b/Pods/Target Support Files/Pods-Snell/Info.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIdentifier + org.cocoapods.${PRODUCT_NAME:rfc1034identifier} + 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-Snell/Pods-Snell-acknowledgements.markdown b/Pods/Target Support Files/Pods-Snell/Pods-Snell-acknowledgements.markdown new file mode 100644 index 0000000..bacaeaa --- /dev/null +++ b/Pods/Target Support Files/Pods-Snell/Pods-Snell-acknowledgements.markdown @@ -0,0 +1,7 @@ +# Acknowledgements +This application makes use of the following third party libraries: + +## PromiseKit + +@see README +Generated by CocoaPods - http://cocoapods.org diff --git a/Pods/Target Support Files/Pods-Snell/Pods-Snell-acknowledgements.plist b/Pods/Target Support Files/Pods-Snell/Pods-Snell-acknowledgements.plist new file mode 100644 index 0000000..255cc1c --- /dev/null +++ b/Pods/Target Support Files/Pods-Snell/Pods-Snell-acknowledgements.plist @@ -0,0 +1,37 @@ + + + + + PreferenceSpecifiers + + + FooterText + This application makes use of the following third party libraries: + Title + Acknowledgements + Type + PSGroupSpecifier + + + FooterText + @see README + Title + PromiseKit + Type + PSGroupSpecifier + + + FooterText + Generated by CocoaPods - http://cocoapods.org + Title + + Type + PSGroupSpecifier + + + StringsTable + Acknowledgements + Title + Acknowledgements + + diff --git a/Pods/Target Support Files/Pods-Snell/Pods-Snell-dummy.m b/Pods/Target Support Files/Pods-Snell/Pods-Snell-dummy.m new file mode 100644 index 0000000..5dea0d2 --- /dev/null +++ b/Pods/Target Support Files/Pods-Snell/Pods-Snell-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_Pods_Snell : NSObject +@end +@implementation PodsDummy_Pods_Snell +@end diff --git a/Pods/Target Support Files/Pods-Snell/Pods-Snell-environment.h b/Pods/Target Support Files/Pods-Snell/Pods-Snell-environment.h new file mode 100644 index 0000000..75f32c9 --- /dev/null +++ b/Pods/Target Support Files/Pods-Snell/Pods-Snell-environment.h @@ -0,0 +1,14 @@ + +// To check if a library is compiled with CocoaPods you +// can use the `COCOAPODS` macro definition which is +// defined in the xcconfigs so it is available in +// headers also when they are imported in the client +// project. + + +// PromiseKit/CorePromise +#define COCOAPODS_POD_AVAILABLE_PromiseKit_CorePromise +#define COCOAPODS_VERSION_MAJOR_PromiseKit_CorePromise 2 +#define COCOAPODS_VERSION_MINOR_PromiseKit_CorePromise 0 +#define COCOAPODS_VERSION_PATCH_PromiseKit_CorePromise 3 + diff --git a/Pods/Target Support Files/Pods-Snell/Pods-Snell-frameworks.sh b/Pods/Target Support Files/Pods-Snell/Pods-Snell-frameworks.sh new file mode 100755 index 0000000..f89abc0 --- /dev/null +++ b/Pods/Target Support Files/Pods-Snell/Pods-Snell-frameworks.sh @@ -0,0 +1,52 @@ +#!/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}" + +install_framework() +{ + local source="${BUILT_PRODUCTS_DIR}/Pods-Snell/$1" + local destination="${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + + if [ -L "${source}" ]; then + echo "Symlinked..." + source=$(readlink "${source}") + fi + + # use filter instead of exclude so missing patterns dont' throw errors + echo "rsync -av --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers/" --filter "- PrivateHeaders/" --filter "- Modules/" ${source} ${destination}" + rsync -av --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers/" --filter "- PrivateHeaders/" --filter "- Modules/" "${source}" "${destination}" + # Resign the code if required by the build settings to avoid unstable apps + if [ "${CODE_SIGNING_REQUIRED}" == "YES" ]; then + code_sign "${destination}/$1" + fi + + # Embed linked Swift runtime libraries + local basename + basename=$(echo $1 | sed -E s/\\..+// && exit ${PIPESTATUS[0]}) + local swift_runtime_libs + swift_runtime_libs=$(xcrun otool -LX "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/$1/${basename}" | 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}" + if [ "${CODE_SIGNING_REQUIRED}" == "YES" ]; then + code_sign "${destination}/${lib}" + fi + done +} + +# Signs a framework with the provided identity +code_sign() { + # Use the current code_sign_identitiy + echo "Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}" + echo "/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} --preserve-metadata=identifier,entitlements $1" + /usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} --preserve-metadata=identifier,entitlements "$1" +} + + +if [[ "$CONFIGURATION" == "Release" ]]; then + install_framework 'PromiseKit.framework' +fi diff --git a/Pods/Target Support Files/Pods-Snell/Pods-Snell-resources.sh b/Pods/Target Support Files/Pods-Snell/Pods-Snell-resources.sh new file mode 100755 index 0000000..43f0852 --- /dev/null +++ b/Pods/Target Support Files/Pods-Snell/Pods-Snell-resources.sh @@ -0,0 +1,93 @@ +#!/bin/sh +set -e + +mkdir -p "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" + +RESOURCES_TO_COPY=${PODS_ROOT}/resources-to-copy-${TARGETNAME}.txt +> "$RESOURCES_TO_COPY" + +XCASSET_FILES=() + +realpath() { + DIRECTORY=$(cd "${1%/*}" && pwd) + FILENAME="${1##*/}" + echo "$DIRECTORY/$FILENAME" +} + +install_resource() +{ + case $1 in + *.storyboard) + echo "ibtool --reference-external-strings-file --errors --warnings --notices --output-format human-readable-text --compile ${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$1\" .storyboard`.storyboardc ${PODS_ROOT}/$1 --sdk ${SDKROOT}" + ibtool --reference-external-strings-file --errors --warnings --notices --output-format human-readable-text --compile "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$1\" .storyboard`.storyboardc" "${PODS_ROOT}/$1" --sdk "${SDKROOT}" + ;; + *.xib) + echo "ibtool --reference-external-strings-file --errors --warnings --notices --output-format human-readable-text --compile ${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$1\" .xib`.nib ${PODS_ROOT}/$1 --sdk ${SDKROOT}" + ibtool --reference-external-strings-file --errors --warnings --notices --output-format human-readable-text --compile "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$1\" .xib`.nib" "${PODS_ROOT}/$1" --sdk "${SDKROOT}" + ;; + *.framework) + echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + echo "rsync -av ${PODS_ROOT}/$1 ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + rsync -av "${PODS_ROOT}/$1" "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + ;; + *.xcdatamodel) + echo "xcrun momc \"${PODS_ROOT}/$1\" \"${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$1"`.mom\"" + xcrun momc "${PODS_ROOT}/$1" "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$1" .xcdatamodel`.mom" + ;; + *.xcdatamodeld) + echo "xcrun momc \"${PODS_ROOT}/$1\" \"${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$1" .xcdatamodeld`.momd\"" + xcrun momc "${PODS_ROOT}/$1" "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$1" .xcdatamodeld`.momd" + ;; + *.xcmappingmodel) + echo "xcrun mapc \"${PODS_ROOT}/$1\" \"${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$1" .xcmappingmodel`.cdm\"" + xcrun mapc "${PODS_ROOT}/$1" "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$1" .xcmappingmodel`.cdm" + ;; + *.xcassets) + ABSOLUTE_XCASSET_FILE=$(realpath "${PODS_ROOT}/$1") + XCASSET_FILES+=("$ABSOLUTE_XCASSET_FILE") + ;; + /*) + echo "$1" + echo "$1" >> "$RESOURCES_TO_COPY" + ;; + *) + echo "${PODS_ROOT}/$1" + echo "${PODS_ROOT}/$1" >> "$RESOURCES_TO_COPY" + ;; + esac +} + +rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" +if [[ "${ACTION}" == "install" ]]; then + 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 + 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" + ;; + *) + TARGET_DEVICE_ARGS="--target-device mac" + ;; + esac + + # 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 != "`realpath $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 "${IPHONEOS_DEPLOYMENT_TARGET}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" +fi diff --git a/Pods/Target Support Files/Pods-Snell/Pods-Snell-umbrella.h b/Pods/Target Support Files/Pods-Snell/Pods-Snell-umbrella.h new file mode 100644 index 0000000..13f4b89 --- /dev/null +++ b/Pods/Target Support Files/Pods-Snell/Pods-Snell-umbrella.h @@ -0,0 +1,6 @@ +#import + + +FOUNDATION_EXPORT double Pods_SnellVersionNumber; +FOUNDATION_EXPORT const unsigned char Pods_SnellVersionString[]; + diff --git a/Pods/Target Support Files/Pods-Snell/Pods-Snell.debug.xcconfig b/Pods/Target Support Files/Pods-Snell/Pods-Snell.debug.xcconfig new file mode 100644 index 0000000..b3d7ab1 --- /dev/null +++ b/Pods/Target Support Files/Pods-Snell/Pods-Snell.debug.xcconfig @@ -0,0 +1,10 @@ +CODE_SIGN_IDENTITY = +FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_FRAMEWORK_BUILD_PATH" +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/../Frameworks' '@loader_path/Frameworks' +OTHER_CFLAGS = $(inherited) -iquote "$PODS_FRAMEWORK_BUILD_PATH/PromiseKit.framework/Headers" +OTHER_LDFLAGS = $(inherited) -ObjC -framework "PromiseKit" +OTHER_LIBTOOLFLAGS = $(OTHER_LDFLAGS) +OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" +PODS_FRAMEWORK_BUILD_PATH = $(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/Pods-Snell +PODS_ROOT = ${SRCROOT}/Pods \ No newline at end of file diff --git a/Pods/Target Support Files/Pods-Snell/Pods-Snell.modulemap b/Pods/Target Support Files/Pods-Snell/Pods-Snell.modulemap new file mode 100644 index 0000000..1d5e621 --- /dev/null +++ b/Pods/Target Support Files/Pods-Snell/Pods-Snell.modulemap @@ -0,0 +1,6 @@ +framework module Pods_Snell { + umbrella header "Pods-Snell-umbrella.h" + + export * + module * { export * } +} diff --git a/Pods/Target Support Files/Pods-Snell/Pods-Snell.release.xcconfig b/Pods/Target Support Files/Pods-Snell/Pods-Snell.release.xcconfig new file mode 100644 index 0000000..b3d7ab1 --- /dev/null +++ b/Pods/Target Support Files/Pods-Snell/Pods-Snell.release.xcconfig @@ -0,0 +1,10 @@ +CODE_SIGN_IDENTITY = +FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_FRAMEWORK_BUILD_PATH" +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/../Frameworks' '@loader_path/Frameworks' +OTHER_CFLAGS = $(inherited) -iquote "$PODS_FRAMEWORK_BUILD_PATH/PromiseKit.framework/Headers" +OTHER_LDFLAGS = $(inherited) -ObjC -framework "PromiseKit" +OTHER_LIBTOOLFLAGS = $(OTHER_LDFLAGS) +OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" +PODS_FRAMEWORK_BUILD_PATH = $(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/Pods-Snell +PODS_ROOT = ${SRCROOT}/Pods \ No newline at end of file diff --git a/Pods/Target Support Files/Pods-SnellTests-Nimble/Pods-SnellTests-Nimble-Private.xcconfig b/Pods/Target Support Files/Pods-SnellTests-Nimble/Pods-SnellTests-Nimble-Private.xcconfig index 26844cb..6619f1e 100644 --- a/Pods/Target Support Files/Pods-SnellTests-Nimble/Pods-SnellTests-Nimble-Private.xcconfig +++ b/Pods/Target Support Files/Pods-SnellTests-Nimble/Pods-SnellTests-Nimble-Private.xcconfig @@ -3,7 +3,7 @@ CODE_SIGN_IDENTITY = CONFIGURATION_BUILD_DIR = $PODS_FRAMEWORK_BUILD_PATH FRAMEWORK_SEARCH_PATHS = "$PODS_FRAMEWORK_BUILD_PATH" ${PODS_SNELLTESTS_NIMBLE_FRAMEWORK_SEARCH_PATHS} GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/Nimble" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/Nimble" "${PODS_ROOT}/Headers/Public/Quick" +HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/Nimble" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/Nimble" "${PODS_ROOT}/Headers/Public/PromiseKit" "${PODS_ROOT}/Headers/Public/Quick" OTHER_LDFLAGS = ${PODS_SNELLTESTS_NIMBLE_OTHER_LDFLAGS} -ObjC OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" PODS_FRAMEWORK_BUILD_PATH = $(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/Pods-SnellTests diff --git a/Pods/Target Support Files/Pods-SnellTests-Quick/Pods-SnellTests-Quick-Private.xcconfig b/Pods/Target Support Files/Pods-SnellTests-Quick/Pods-SnellTests-Quick-Private.xcconfig index 1177013..cf9e45f 100644 --- a/Pods/Target Support Files/Pods-SnellTests-Quick/Pods-SnellTests-Quick-Private.xcconfig +++ b/Pods/Target Support Files/Pods-SnellTests-Quick/Pods-SnellTests-Quick-Private.xcconfig @@ -3,7 +3,7 @@ CODE_SIGN_IDENTITY = CONFIGURATION_BUILD_DIR = $PODS_FRAMEWORK_BUILD_PATH FRAMEWORK_SEARCH_PATHS = "$PODS_FRAMEWORK_BUILD_PATH" ${PODS_SNELLTESTS_QUICK_FRAMEWORK_SEARCH_PATHS} GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/Quick" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/Nimble" "${PODS_ROOT}/Headers/Public/Quick" +HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/Quick" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/Nimble" "${PODS_ROOT}/Headers/Public/PromiseKit" "${PODS_ROOT}/Headers/Public/Quick" OTHER_LDFLAGS = ${PODS_SNELLTESTS_QUICK_OTHER_LDFLAGS} -ObjC OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" PODS_FRAMEWORK_BUILD_PATH = $(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/Pods-SnellTests diff --git a/Snell.xcodeproj/project.pbxproj b/Snell.xcodeproj/project.pbxproj index 6cd9df0..e3aaf65 100644 --- a/Snell.xcodeproj/project.pbxproj +++ b/Snell.xcodeproj/project.pbxproj @@ -7,6 +7,7 @@ objects = { /* Begin PBXBuildFile section */ + 078217C743876BB68C2F95D4 /* Pods_Snell.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EA26905E57871CEF7D0075FE /* Pods_Snell.framework */; settings = {ATTRIBUTES = (Weak, ); }; }; 4842F1B61B33A0BE00C28CC3 /* main.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4842F1B51B33A0BE00C28CC3 /* main.swift */; }; 4842F1CB1B33A5A900C28CC3 /* SwtlTemplate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4842F1CA1B33A5A900C28CC3 /* SwtlTemplate.swift */; }; 4842F5C91B35909D00C28CC3 /* Controller.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4842F5BF1B35900900C28CC3 /* Controller.swift */; }; @@ -69,6 +70,7 @@ A47B6336DE2221863FB0EB6D /* Pods_SnellTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AEB5A99499D1EFB28731C805 /* Pods_SnellTests.framework */; settings = {ATTRIBUTES = (Weak, ); }; }; C94D07471B3E4C1C00AF49DA /* Failable.swift in Sources */ = {isa = PBXBuildFile; fileRef = C94D07461B3E4C1C00AF49DA /* Failable.swift */; }; C94D07481B3E4C1C00AF49DA /* Failable.swift in Sources */ = {isa = PBXBuildFile; fileRef = C94D07461B3E4C1C00AF49DA /* Failable.swift */; }; + C94D074A1B3E6F5C00AF49DA /* Repository.swift in Sources */ = {isa = PBXBuildFile; fileRef = C94D07491B3E6F5C00AF49DA /* Repository.swift */; }; /* End PBXBuildFile section */ /* Begin PBXBuildRule section */ @@ -187,6 +189,9 @@ 4F11EA7C64B409495E22E8AA /* Pods-SnellTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SnellTests.release.xcconfig"; path = "Pods/Target Support Files/Pods-SnellTests/Pods-SnellTests.release.xcconfig"; sourceTree = ""; }; AEB5A99499D1EFB28731C805 /* Pods_SnellTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_SnellTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; C94D07461B3E4C1C00AF49DA /* Failable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Failable.swift; sourceTree = ""; }; + C94D07491B3E6F5C00AF49DA /* Repository.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Repository.swift; sourceTree = ""; }; + E63B6516C6805A424149F68F /* Pods-Snell.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Snell.release.xcconfig"; path = "Pods/Target Support Files/Pods-Snell/Pods-Snell.release.xcconfig"; sourceTree = ""; }; + EA26905E57871CEF7D0075FE /* Pods_Snell.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Snell.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -211,6 +216,7 @@ buildActionMask = 2147483647; files = ( 48FED8841B2E16200063A175 /* libz.1.dylib in Frameworks */, + 078217C743876BB68C2F95D4 /* Pods_Snell.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -222,6 +228,7 @@ children = ( 48FED8811B2E152A0063A175 /* libz.1.dylib */, AEB5A99499D1EFB28731C805 /* Pods_SnellTests.framework */, + EA26905E57871CEF7D0075FE /* Pods_Snell.framework */, ); name = Frameworks; sourceTree = ""; @@ -259,6 +266,7 @@ 4842F5D11B3593EE00C28CC3 /* View.swift */, 4866A94C1B35A57900BCF429 /* Scope.swift */, 489226961B360AA80001E69D /* Adapters */, + C94D07491B3E6F5C00AF49DA /* Repository.swift */, ); name = SnellCore; path = Snell/SnellCore; @@ -408,6 +416,7 @@ isa = PBXGroup; children = ( 4F11EA7C64B409495E22E8AA /* Pods-SnellTests.release.xcconfig */, + E63B6516C6805A424149F68F /* Pods-Snell.release.xcconfig */, ); name = Pods; sourceTree = ""; @@ -457,9 +466,11 @@ isa = PBXNativeTarget; buildConfigurationList = 48E635D51B2C94B500857520 /* Build configuration list for PBXNativeTarget "Snell" */; buildPhases = ( + 1893D35A47190B67F8BEC4E3 /* Check Pods Manifest.lock */, 48E635CA1B2C94B400857520 /* Sources */, 48E635CB1B2C94B400857520 /* Frameworks */, 48E635CC1B2C94B400857520 /* CopyFiles */, + 96BB5EFFE5D08066885017A5 /* Copy Pods Resources */, ); buildRules = ( 4842F2081B35899900C28CC3 /* PBXBuildRule */, @@ -567,6 +578,36 @@ shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-SnellTests/Pods-SnellTests-resources.sh\"\n"; showEnvVarsInLog = 0; }; + 1893D35A47190B67F8BEC4E3 /* Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Check Pods Manifest.lock"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [[ $? != 0 ]] ; then\n cat << EOM\nerror: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\nEOM\n exit 1\nfi\n"; + showEnvVarsInLog = 0; + }; + 96BB5EFFE5D08066885017A5 /* Copy Pods Resources */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Copy Pods Resources"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-Snell/Pods-Snell-resources.sh\"\n"; + showEnvVarsInLog = 0; + }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -627,6 +668,7 @@ 48922A061B360AAB0001E69D /* GCDWebServerConnection.m in Sources */, 48922D621B362A510001E69D /* DemoRouter.swift in Sources */, 48922D611B362A510001E69D /* DemoController.swift in Sources */, + C94D074A1B3E6F5C00AF49DA /* Repository.swift in Sources */, 48922D631B362A510001E69D /* main.swift in Sources */, 4842F5CB1B35909D00C28CC3 /* Response.swift in Sources */, 48922A0C1B360AAB0001E69D /* GCDWebServerResponse.m in Sources */, @@ -718,6 +760,7 @@ }; 48E635D71B2C94B500857520 /* Release */ = { isa = XCBuildConfiguration; + baseConfigurationReference = E63B6516C6805A424149F68F /* Pods-Snell.release.xcconfig */; buildSettings = { PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OBJC_BRIDGING_HEADER = Snell/SnellServerBridge.h; diff --git a/Snell/DemoProject/Controllers/DemoController.swift b/Snell/DemoProject/Controllers/DemoController.swift index 6db84e6..c5c1ad1 100644 --- a/Snell/DemoProject/Controllers/DemoController.swift +++ b/Snell/DemoProject/Controllers/DemoController.swift @@ -7,14 +7,41 @@ // import Foundation +import PromiseKit class DemoController: Controller { - func index() -> Result { + class User : Repository { + required init() {} + } + + func index() -> Promise { return render(Demo.self, status: 200) } - func create() -> Result { - return Result(error: NSError(domain:"test", code:2, userInfo:nil)) +// def update +// user = User.find(1) +// if user.update_attributes(params[:user]) +// respond_with(@user) +// else +// respond_with(@user.errors, :status => :unprocessable_entity) +// end +// end + + func update() -> Promise { + // Swift's current level of suck at type inference and closures makes this more verbose than + // would otherwise be expected. It should be solvable in llvm and hopefully the situation improves. + return User.find(1) + .then({ (user:Repository) -> Promise in + let user = user as! User + return user.updateAttributes(["name": "Test"]) + .then({ (valid:Bool) -> Response in + if valid { + return Response(status: 200, body: "User updated") + } else { + return Response(status: 422, body: "Validation errors") + } + }) + }) } } diff --git a/Snell/DemoProject/DemoRouter.swift b/Snell/DemoProject/DemoRouter.swift index 628b11e..567fc42 100644 --- a/Snell/DemoProject/DemoRouter.swift +++ b/Snell/DemoProject/DemoRouter.swift @@ -18,14 +18,14 @@ class DemoRouter : Router { route("/", to: DemoController.index) - // Route showing how to do a post - - route("/", via:HTTPMethod.Post, to: DemoController.create) + // Route showing how to use other HTTP verbs + route("/", via:HTTPMethod.Put, to: DemoController.update) + // Route "/closure" to a demo of defining an action as a closure, rather than a controller route("/closure") { request in - Controller.Result(value: Response(status: 200, body: "

An action in a closure...

")) + self.async(Response(status: 200, body: "

An action in a closure...

")) } } } \ No newline at end of file diff --git a/Snell/SnellCore/Adapters/GCDWebServerAdapter.swift b/Snell/SnellCore/Adapters/GCDWebServerAdapter.swift index c218683..44d427c 100644 --- a/Snell/SnellCore/Adapters/GCDWebServerAdapter.swift +++ b/Snell/SnellCore/Adapters/GCDWebServerAdapter.swift @@ -16,19 +16,29 @@ public class GCDWebServerAdapter { public init(router:Router, port:Int = 3000) { self.port = port self.router = router - - for method in ["GET", "POST", "PUT", "DELETE", "PATCH"] { - webServer.addDefaultHandlerForMethod(method, requestClass: GCDWebServerRequest.self, processBlock: { gdcRequest in - return self.response(self.handleRequest(gdcRequest)) - }) - } } public func run() { + setUpRequestHandlers() webServer.runWithPort(3000, bonjourName: "") } - public func handleRequest(GDCRequest:GCDWebServerRequest) -> Response { + func setUpRequestHandlers() { + for method in ["GET", "POST", "PUT", "DELETE", "PATCH"] { + webServer.addDefaultHandlerForMethod(method, requestClass: GCDWebServerRequest.self, asyncProcessBlock: { + gdcRequest, continuation in + // Hack for swift compiler. Moves the reference into the same scope as the promise so that + // the then block can capture it. No fucking clue. + let cont = continuation + + self.handleRequest(gdcRequest) + .then { dispatcherResponse in cont(self.response(dispatcherResponse)) + } + }) + } + } + + func handleRequest(GDCRequest:GCDWebServerRequest) -> AsyncResponse { let params = GDCRequest.query.keys.reduce([:], combine: { (var dict, key) -> [String:String] in dict[key as! String] = GDCRequest.query[key] as? String return dict @@ -39,7 +49,7 @@ public class GCDWebServerAdapter { return router.dispatch(request) } - public func response(response:Response) -> GCDWebServerDataResponse { + func response(response:Response) -> GCDWebServerDataResponse { return GCDWebServerDataResponse(HTML:response.body) } } diff --git a/Snell/SnellCore/Controller.swift b/Snell/SnellCore/Controller.swift index 15ec595..3aeb22a 100644 --- a/Snell/SnellCore/Controller.swift +++ b/Snell/SnellCore/Controller.swift @@ -7,18 +7,19 @@ // import Foundation +import PromiseKit public class Controller { public typealias Result = Failable - + public var request:Request required public init(request:Request) { self.request = request } - public func render(type:View.Type, status:Int) -> Result { - return Result(value: Response(status: status, body: type().render(scope()))) + public func render(type:View.Type, status:Int) -> AsyncResponse { + return Promise { success, _ in success(Response(status: status, body: type().render(scope()))) } } public func scope() -> Scope { diff --git a/Snell/SnellCore/Repository.swift b/Snell/SnellCore/Repository.swift new file mode 100644 index 0000000..c916d72 --- /dev/null +++ b/Snell/SnellCore/Repository.swift @@ -0,0 +1,26 @@ +// +// Repository.swift +// Snell +// +// Created by Matt on 6/27/15. +// Copyright © 2015 artificial. All rights reserved. +// + +import Foundation +import PromiseKit + +class Repository { + class func find(id:Int) -> Promise { + return Promise{ success, _ in + success(self()) + } + } + + required init(){} + + func updateAttributes(attributes:[String:Any]) -> Promise { + return Promise { success, _ in + success(true) + } + } +} \ No newline at end of file diff --git a/Snell/SnellCore/Response.swift b/Snell/SnellCore/Response.swift index aa2dbd0..a4b52b7 100644 --- a/Snell/SnellCore/Response.swift +++ b/Snell/SnellCore/Response.swift @@ -6,6 +6,8 @@ // Copyright © 2015 artificial. All rights reserved. // +import PromiseKit + public class Response { var status:Int var body:String @@ -16,3 +18,5 @@ public class Response { self.status = status } } + +public typealias AsyncResponse = Promise diff --git a/Snell/SnellCore/Router.swift b/Snell/SnellCore/Router.swift index 2840a38..d2add7a 100644 --- a/Snell/SnellCore/Router.swift +++ b/Snell/SnellCore/Router.swift @@ -7,10 +7,11 @@ // import Foundation +import PromiseKit public class Router { - typealias Handler = (Request) -> () -> Controller.Result + typealias Handler = (Request) -> () -> AsyncResponse public enum HTTPMethod : String { case Get = "GET" @@ -45,33 +46,38 @@ public class Router { public init() { } - public func route(pattern:String, via:HTTPMethod = HTTPMethod.Get, to action:(T) -> () -> Controller.Result) { + public func route(pattern:String, via:HTTPMethod = HTTPMethod.Get, to action:(T) -> () -> AsyncResponse) { route(pattern, via:via, closure: { request in action(T(request: request))() }) } - public func route(pattern:String, via:HTTPMethod = HTTPMethod.Get, closure: (request:Request) -> Controller.Result) { + public func route(pattern:String, via:HTTPMethod = HTTPMethod.Get, closure: (request:Request) -> AsyncResponse) { do { let regex = try NSRegularExpression(pattern: "^\(pattern)$", options: NSRegularExpressionOptions()) - self.routingTable.append(Route(method: via, pattern: regex, handler: { (r:Request) -> () -> Controller.Result in { closure(request: r) } })) + self.routingTable.append(Route(method: via, pattern: regex, handler: { (r:Request) -> () -> AsyncResponse in { closure(request: r) } })) } catch { NSLog("Error: could not compile pattern \(pattern)") } } - func dispatch(request:Request) -> Response { - var response:Response - if let route = routingTable.filter({ route in route.matches(request) }).first { - let result = route.handler(request)() - if let r = result.success() { - response = r - } else { - response = Response(status: 500, body: "An error occurred") + func dispatch(request:Request) -> AsyncResponse { + let route = routingTable.filter({ route in route.matches(request) }).first + let response:AsyncResponse = { + switch route { + case .Some(let route): + return route.handler(request)() + .recover { _ in Response(status: 500, body: "An error occurred") } + default: + return async(Response(status: 404, body: "No route matches this action")) } - } else { - response = Response(status: 404, body: "No route matches this action") - } + }() - NSLog("\(request.method) \(request.path) \(response.status)") - return response + return response.then { (response) -> Response in + NSLog("\(request.method) \(request.path) \(response.status)") + return response + } + } + + func async(response:Response) -> AsyncResponse { + return Promise { success, _ in success(response) } } } diff --git a/Snell/SnellCore/Snell.swift b/Snell/SnellCore/Snell.swift index 0c4ba91..8b92594 100644 --- a/Snell/SnellCore/Snell.swift +++ b/Snell/SnellCore/Snell.swift @@ -21,7 +21,7 @@ public class Snell { public func startCGI() { let CGI = CGIAdapter() - let response = router.dispatch(CGI.request()!) - CGI.render(response) + router.dispatch(CGI.request()!) + .then { response in CGI.render(response) } } } \ No newline at end of file