From 47bc48f16fb88e6ef29fe554feda62b34c7ba95f Mon Sep 17 00:00:00 2001 From: Filip Gulan Date: Sat, 24 Aug 2019 09:13:16 +0200 Subject: [PATCH 01/13] Allow parsing relationships even if their object is not in include list. --- Japx/Classes/Core/Japx.swift | 51 +++++++++++++++++++++++++++--------- 1 file changed, 39 insertions(+), 12 deletions(-) diff --git a/Japx/Classes/Core/Japx.swift b/Japx/Classes/Core/Japx.swift index 46b96e0..3633b7a 100644 --- a/Japx/Classes/Core/Japx.swift +++ b/Japx/Classes/Core/Japx.swift @@ -48,6 +48,17 @@ private struct TypeIdPair { let id: String } +extension TypeIdPair { + + var asDictionary: NSDictionary { + return [ + Consts.APIKeys.type: type, + Consts.APIKeys.id: id + ] + } + +} + /// A class for converting (parsing) JSON:API object to simple JSON object and vice versa. public struct Japx { @@ -70,7 +81,7 @@ public extension Japx.Decoder { /// - parameter includeList: The include list for deserializing JSON:API relationships. /// /// - returns: JSON object. - static func jsonObject(withJSONAPIObject object: Parameters, includeList: String? = nil) throws -> Parameters { + static func jsonObject(withJSONAPIObject object: Parameters, includeList: String? = nil, parseMissingRelationships: Bool = false) throws -> Parameters { // First check if JSON API object has `include` list since // parsing objects with include list is done using native // Swift dictionary, while objects without it use `NSDictionary` @@ -78,7 +89,7 @@ public extension Japx.Decoder { if let includeList = includeList { decoded = try decode(jsonApiInput: object, include: includeList) } else { - decoded = try decode(jsonApiInput: object as NSDictionary) + decoded = try decode(jsonApiInput: object as NSDictionary, parseMissingRelationships: parseMissingRelationships) } if let decodedProperties = decoded as? Parameters { return decodedProperties @@ -92,8 +103,8 @@ public extension Japx.Decoder { /// - parameter includeList: The include list for deserializing JSON:API relationships. /// /// - returns: JSON object as Data. - static func data(withJSONAPIObject object: Parameters, includeList: String? = nil) throws -> Data { - let decoded = try jsonObject(withJSONAPIObject: object, includeList: includeList) + static func data(withJSONAPIObject object: Parameters, includeList: String? = nil, parseMissingRelationships: Bool = false) throws -> Data { + let decoded = try jsonObject(withJSONAPIObject: object, includeList: includeList, parseMissingRelationships: parseMissingRelationships) return try JSONSerialization.data(withJSONObject: decoded) } @@ -103,7 +114,7 @@ public extension Japx.Decoder { /// - parameter includeList: The include list for deserializing JSON:API relationships. /// /// - returns: JSON object. - static func jsonObject(with data: Data, includeList: String? = nil) throws -> Parameters { + static func jsonObject(with data: Data, includeList: String? = nil, parseMissingRelationships: Bool = true) throws -> Parameters { let jsonApiObject = try JSONSerialization.jsonObject(with: data) // With include list @@ -118,7 +129,7 @@ public extension Japx.Decoder { guard let json = jsonApiObject as? NSDictionary else { throw JapxError.unableToConvertDataToJson(data: data) } - let decoded = try decode(jsonApiInput: json as NSDictionary) + let decoded = try decode(jsonApiInput: json as NSDictionary, parseMissingRelationships: parseMissingRelationships) if let decodedProperties = decoded as? Parameters { return decodedProperties @@ -227,7 +238,7 @@ private extension Japx.Decoder { return jsonApi } - static func decode(jsonApiInput: NSDictionary) throws -> NSDictionary { + static func decode(jsonApiInput: NSDictionary, parseMissingRelationships: Bool) throws -> NSDictionary { let jsonApi = jsonApiInput.mutable let dataObjectsArray = try jsonApi.array(from: Consts.APIKeys.data) ?? [] @@ -249,7 +260,7 @@ private extension Japx.Decoder { } try resolveAttributes(from: objects) - try resolveRelationships(from: objects) + try resolveRelationships(from: objects, parseMissingRelationships: parseMissingRelationships) let isObject = jsonApiInput.object(forKey: Consts.APIKeys.data) is NSDictionary if isObject && dataObjects.count == 1 { @@ -266,7 +277,7 @@ private extension Japx.Decoder { private extension Japx.Decoder { - private static func resolve(object: Parameters, allObjects: [TypeIdPair: Parameters], paramsDict: NSDictionary) throws -> Parameters { + static func resolve(object: Parameters, allObjects: [TypeIdPair: Parameters], paramsDict: NSDictionary) throws -> Parameters { var attributes = (try? object.dictionary(for: Consts.APIKeys.attributes)) ?? Parameters() attributes[Consts.APIKeys.type] = object[Consts.APIKeys.type] attributes[Consts.APIKeys.id] = object[Consts.APIKeys.id] @@ -306,7 +317,7 @@ private extension Japx.Decoder { } } - static func resolveRelationships(from objects: [TypeIdPair: NSMutableDictionary]) throws { + static func resolveRelationships(from objects: [TypeIdPair: NSMutableDictionary], parseMissingRelationships: Bool) throws { try objects.values.forEach { (object) in try object.dictionary(for: Consts.APIKeys.relationships, defaultDict: NSDictionary()).forEach { (relationship) in @@ -320,11 +331,12 @@ private extension Japx.Decoder { object.setObject(NSNull(), forKey: relationship.key as! NSCopying) return } - + + let extractRelationship = resloveRelationship(from: objects, parseMissingRelationship: parseMissingRelationships) // Fetch those object from `objects` let othersObjects = try others .map { try $0.extractTypeIdPair() } - .compactMap { objects[$0] } + .compactMap { extractRelationship($0) } // Store relationships let isObject = relationshipParams @@ -340,6 +352,21 @@ private extension Japx.Decoder { object.removeObject(forKey: Consts.APIKeys.relationships) } } + + static func resloveRelationship( + from objects: [TypeIdPair: NSMutableDictionary], + parseMissingRelationship: Bool + ) -> ((TypeIdPair) -> NSMutableDictionary?) { + // In case that relationship object is not in objects list, then check should + // we fallback to relationship key itself + return { + guard let resolvedObject = objects[$0] else { + return parseMissingRelationship ? $0.asDictionary.mutable : nil + } + return resolvedObject + } + } + } // MARK: - Encoding From 60616d4b01398692ee2e9aab6f2f18535ce7019a Mon Sep 17 00:00:00 2001 From: Filip Gulan Date: Sat, 24 Aug 2019 09:13:24 +0200 Subject: [PATCH 02/13] Missing relationship object tests. --- Example/Japx.xcodeproj/project.pbxproj | 52 +++++++++++- Example/Japx/Base.lproj/Main.storyboard | 81 ++++++++++++------- .../MissingRelationshipObjects-Json.json | 32 ++++++++ .../MissingRelationshipObjects-JsonApi.json | 48 +++++++++++ .../MissingRelationshipObjectsEmpty-Json.json | 26 ++++++ .../MissingRelationship-Json.json | 0 .../MissingRelationship-JsonApi.json | 0 .../MissingRelationshipObject-Json.json | 29 +++++++ .../MissingRelationshipObject-JsonApi.json | 45 +++++++++++ .../MissingRelationshipObjectNull-Json.json | 26 ++++++ Example/Tests/Swift/DecoderTester.swift | 28 +++++++ .../Tests/Utilities/AdditionalFunctions.swift | 4 + 12 files changed, 339 insertions(+), 32 deletions(-) create mode 100644 Example/Tests/Resources/Decoding/MissingRelationship/Array/MissingRelationshipObjects-Json.json create mode 100644 Example/Tests/Resources/Decoding/MissingRelationship/Array/MissingRelationshipObjects-JsonApi.json create mode 100644 Example/Tests/Resources/Decoding/MissingRelationship/Array/MissingRelationshipObjectsEmpty-Json.json rename Example/Tests/Resources/Decoding/MissingRelationship/{ => Include}/MissingRelationship-Json.json (100%) rename Example/Tests/Resources/Decoding/MissingRelationship/{ => Include}/MissingRelationship-JsonApi.json (100%) create mode 100644 Example/Tests/Resources/Decoding/MissingRelationship/Object/MissingRelationshipObject-Json.json create mode 100644 Example/Tests/Resources/Decoding/MissingRelationship/Object/MissingRelationshipObject-JsonApi.json create mode 100644 Example/Tests/Resources/Decoding/MissingRelationship/Object/MissingRelationshipObjectNull-Json.json diff --git a/Example/Japx.xcodeproj/project.pbxproj b/Example/Japx.xcodeproj/project.pbxproj index dbedca5..68d9842 100644 --- a/Example/Japx.xcodeproj/project.pbxproj +++ b/Example/Japx.xcodeproj/project.pbxproj @@ -7,8 +7,14 @@ objects = { /* Begin PBXBuildFile section */ + 0A30B5C9231111820041F828 /* MissingRelationshipObject-JsonApi.json in Resources */ = {isa = PBXBuildFile; fileRef = 0A30B5C62311117C0041F828 /* MissingRelationshipObject-JsonApi.json */; }; + 0A30B5CA231111850041F828 /* MissingRelationshipObject-Json.json in Resources */ = {isa = PBXBuildFile; fileRef = 0A30B5C52311117C0041F828 /* MissingRelationshipObject-Json.json */; }; + 0A30B5CD231111A60041F828 /* MissingRelationshipObjects-Json.json in Resources */ = {isa = PBXBuildFile; fileRef = 0A30B5CB231111A60041F828 /* MissingRelationshipObjects-Json.json */; }; + 0A30B5CE231111A60041F828 /* MissingRelationshipObjects-JsonApi.json in Resources */ = {isa = PBXBuildFile; fileRef = 0A30B5CC231111A60041F828 /* MissingRelationshipObjects-JsonApi.json */; }; 0A4CEF7621FF560400D3F0B8 /* RelationshipNoInclude-Json.json in Resources */ = {isa = PBXBuildFile; fileRef = 0A4CEF7421FF560400D3F0B8 /* RelationshipNoInclude-Json.json */; }; 0A4CEF7721FF560400D3F0B8 /* RelationshipNoInclude-JsonApi.json in Resources */ = {isa = PBXBuildFile; fileRef = 0A4CEF7521FF560400D3F0B8 /* RelationshipNoInclude-JsonApi.json */; }; + 0A57D7FD231119AC0009FBEB /* MissingRelationshipObjectNull-Json.json in Resources */ = {isa = PBXBuildFile; fileRef = 0A57D7FC231119AB0009FBEB /* MissingRelationshipObjectNull-Json.json */; }; + 0A57D7FF231119C10009FBEB /* MissingRelationshipObjectsEmpty-Json.json in Resources */ = {isa = PBXBuildFile; fileRef = 0A57D7FE231119C10009FBEB /* MissingRelationshipObjectsEmpty-Json.json */; }; 0A6C2FEF21FB3BB900D16186 /* EmptyRelationship-JsonApi.json in Resources */ = {isa = PBXBuildFile; fileRef = 0A6C2FEE21FB3BB900D16186 /* EmptyRelationship-JsonApi.json */; }; 0A6C2FF121FB3BD000D16186 /* EmptyRelationship-Json.json in Resources */ = {isa = PBXBuildFile; fileRef = 0A6C2FF021FB3BD000D16186 /* EmptyRelationship-Json.json */; }; 0A6C2FF621FB3F4900D16186 /* EmptyRelationshipDeep-Json.json in Resources */ = {isa = PBXBuildFile; fileRef = 0A6C2FF321FB3F4100D16186 /* EmptyRelationshipDeep-Json.json */; }; @@ -55,8 +61,14 @@ /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ + 0A30B5C52311117C0041F828 /* MissingRelationshipObject-Json.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = "MissingRelationshipObject-Json.json"; sourceTree = ""; }; + 0A30B5C62311117C0041F828 /* MissingRelationshipObject-JsonApi.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = "MissingRelationshipObject-JsonApi.json"; sourceTree = ""; }; + 0A30B5CB231111A60041F828 /* MissingRelationshipObjects-Json.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = "MissingRelationshipObjects-Json.json"; sourceTree = ""; }; + 0A30B5CC231111A60041F828 /* MissingRelationshipObjects-JsonApi.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = "MissingRelationshipObjects-JsonApi.json"; sourceTree = ""; }; 0A4CEF7421FF560400D3F0B8 /* RelationshipNoInclude-Json.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = "RelationshipNoInclude-Json.json"; sourceTree = ""; }; 0A4CEF7521FF560400D3F0B8 /* RelationshipNoInclude-JsonApi.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = "RelationshipNoInclude-JsonApi.json"; sourceTree = ""; }; + 0A57D7FC231119AB0009FBEB /* MissingRelationshipObjectNull-Json.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = "MissingRelationshipObjectNull-Json.json"; sourceTree = ""; }; + 0A57D7FE231119C10009FBEB /* MissingRelationshipObjectsEmpty-Json.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = "MissingRelationshipObjectsEmpty-Json.json"; sourceTree = ""; }; 0A6C2FEE21FB3BB900D16186 /* EmptyRelationship-JsonApi.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = "EmptyRelationship-JsonApi.json"; sourceTree = ""; }; 0A6C2FF021FB3BD000D16186 /* EmptyRelationship-Json.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = "EmptyRelationship-Json.json"; sourceTree = ""; }; 0A6C2FF321FB3F4100D16186 /* EmptyRelationshipDeep-Json.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = "EmptyRelationshipDeep-Json.json"; sourceTree = ""; }; @@ -131,6 +143,35 @@ /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 0A30B5C2231111360041F828 /* Include */ = { + isa = PBXGroup; + children = ( + E18794FE2018CA7100E472C4 /* MissingRelationship-Json.json */, + E18794FF2018CA7100E472C4 /* MissingRelationship-JsonApi.json */, + ); + path = Include; + sourceTree = ""; + }; + 0A30B5C3231111400041F828 /* Object */ = { + isa = PBXGroup; + children = ( + 0A30B5C52311117C0041F828 /* MissingRelationshipObject-Json.json */, + 0A30B5C62311117C0041F828 /* MissingRelationshipObject-JsonApi.json */, + 0A57D7FC231119AB0009FBEB /* MissingRelationshipObjectNull-Json.json */, + ); + path = Object; + sourceTree = ""; + }; + 0A30B5C4231111460041F828 /* Array */ = { + isa = PBXGroup; + children = ( + 0A57D7FE231119C10009FBEB /* MissingRelationshipObjectsEmpty-Json.json */, + 0A30B5CB231111A60041F828 /* MissingRelationshipObjects-Json.json */, + 0A30B5CC231111A60041F828 /* MissingRelationshipObjects-JsonApi.json */, + ); + path = Array; + sourceTree = ""; + }; 0A4CEF7321FF560400D3F0B8 /* RelationshipNoInclude */ = { isa = PBXGroup; children = ( @@ -325,8 +366,9 @@ E18794FD2018CA7100E472C4 /* MissingRelationship */ = { isa = PBXGroup; children = ( - E18794FE2018CA7100E472C4 /* MissingRelationship-Json.json */, - E18794FF2018CA7100E472C4 /* MissingRelationship-JsonApi.json */, + 0A30B5C2231111360041F828 /* Include */, + 0A30B5C3231111400041F828 /* Object */, + 0A30B5C4231111460041F828 /* Array */, ); path = MissingRelationship; sourceTree = ""; @@ -461,15 +503,20 @@ 2C5FA429202CA35D00399CC7 /* Images.xcassets in Resources */, 0A4CEF7721FF560400D3F0B8 /* RelationshipNoInclude-JsonApi.json in Resources */, E18794FC2018AEC900E472C4 /* RecursivSample-JsonApi.json in Resources */, + 0A57D7FD231119AC0009FBEB /* MissingRelationshipObjectNull-Json.json in Resources */, E18795042018CA7100E472C4 /* MissingRelationship-JsonApi.json in Resources */, E18795062018CA7100E472C4 /* ArticleExample-Json.json in Resources */, + 0A30B5CE231111A60041F828 /* MissingRelationshipObjects-JsonApi.json in Resources */, E18794F32018ABA000E472C4 /* ArticlePerson-Json.json in Resources */, 2C5FA42C202CA39500399CC7 /* Main.storyboard in Resources */, E18795132018D76300E472C4 /* SimpleEncoding-Json.json in Resources */, E18795102018D76300E472C4 /* RecursivRelationships-Json.json in Resources */, 0A6C2FF121FB3BD000D16186 /* EmptyRelationship-Json.json in Resources */, + 0A57D7FF231119C10009FBEB /* MissingRelationshipObjectsEmpty-Json.json in Resources */, E18795152018D76300E472C4 /* ExtraParams-JsonApi.json in Resources */, E18795112018D76300E472C4 /* RecursivRelationships-JsonApi.json in Resources */, + 0A30B5CD231111A60041F828 /* MissingRelationshipObjects-Json.json in Resources */, + 0A30B5CA231111850041F828 /* MissingRelationshipObject-Json.json in Resources */, E18795142018D76300E472C4 /* ExtraParams-Json.json in Resources */, E18795122018D76300E472C4 /* SimpleEncoding-JsonApi.json in Resources */, E18795032018CA7100E472C4 /* MissingRelationship-Json.json in Resources */, @@ -478,6 +525,7 @@ 0A6C2FF621FB3F4900D16186 /* EmptyRelationshipDeep-Json.json in Resources */, 2C5FA42D202CA39700399CC7 /* LaunchScreen.xib in Resources */, 0A4CEF7621FF560400D3F0B8 /* RelationshipNoInclude-Json.json in Resources */, + 0A30B5C9231111820041F828 /* MissingRelationshipObject-JsonApi.json in Resources */, 0A6C2FEF21FB3BB900D16186 /* EmptyRelationship-JsonApi.json in Resources */, ); runOnlyForDeploymentPostprocessing = 0; diff --git a/Example/Japx/Base.lproj/Main.storyboard b/Example/Japx/Base.lproj/Main.storyboard index 01dfabe..eb59872 100644 --- a/Example/Japx/Base.lproj/Main.storyboard +++ b/Example/Japx/Base.lproj/Main.storyboard @@ -1,12 +1,11 @@ - + - - + @@ -195,34 +194,56 @@ - { - "data": [{ - "type": "articles", - "id": "1", - "attributes": { - "title": "JSON API paints my bikeshed!", - "body": "The shortest article. Ever.", - "created": "2015-05-22T14:56:29.000Z", - "updated": "2015-05-22T14:56:28.000Z" + { + "data": [ + { + "id": "33", + "type": "time_off_request", + "attributes": { + "status": "approved", + "start_date": "2019-01-14", + "end_date": "2019-01-31" + }, + "relationships": { + "user": { + "data": { + "id": "25", + "type": "user" + } + }, + "policy": { + "data": [{ + "id": "24", + "type": "time_off_policy" + }, { + "id": "25", + "type": "time_off_policy" + }] + } + } + } + ], + "included": [ + { + "id": "25", + "type": "user", + "attributes": { + "id": 20550, + "name": "user name", + "email": "user@email.com", + "avatar": "", + "avatar_url": null + } + } + ], + "meta": { + "total_pages": 1, + "total_count": 1 }, - "relationships": { - "author": { - "data": {"id": "42", "type": "people"} - } - } - }], - "included": [ - { - "type": "people", - "id": "42", - "attributes": { - "name": "John", - "age": 80, - "gender": "male" - } + "links": { + "self": "url link" } - ] -} +} @@ -265,6 +286,6 @@ - + diff --git a/Example/Tests/Resources/Decoding/MissingRelationship/Array/MissingRelationshipObjects-Json.json b/Example/Tests/Resources/Decoding/MissingRelationship/Array/MissingRelationshipObjects-Json.json new file mode 100644 index 0000000..9fa2f0f --- /dev/null +++ b/Example/Tests/Resources/Decoding/MissingRelationship/Array/MissingRelationshipObjects-Json.json @@ -0,0 +1,32 @@ +{ + "links" : { + "self" : "url link" + }, + "meta" : { + "total_pages" : 1, + "total_count" : 1 + }, + "data" : [ + { + "status" : "approved", + "policy" : [{ + "id": "24", + "type": "time_off_policy" + }, { + "id": "25", + "type": "time_off_policy" + }], + "id" : "33", + "start_date" : "2019-01-14", + "type" : "time_off_request", + "end_date" : "2019-01-31", + "user" : { + "avatar" : "", + "id" : "25", + "email" : "user@email.com", + "type" : "user", + "name" : "user name" + } + } + ] +} diff --git a/Example/Tests/Resources/Decoding/MissingRelationship/Array/MissingRelationshipObjects-JsonApi.json b/Example/Tests/Resources/Decoding/MissingRelationship/Array/MissingRelationshipObjects-JsonApi.json new file mode 100644 index 0000000..6b53315 --- /dev/null +++ b/Example/Tests/Resources/Decoding/MissingRelationship/Array/MissingRelationshipObjects-JsonApi.json @@ -0,0 +1,48 @@ +{ + "data": [ + { + "id": "33", + "type": "time_off_request", + "attributes": { + "status": "approved", + "start_date": "2019-01-14", + "end_date": "2019-01-31" + }, + "relationships": { + "user": { + "data": { + "id": "25", + "type": "user" + } + }, + "policy": { + "data": [{ + "id": "24", + "type": "time_off_policy" + }, { + "id": "25", + "type": "time_off_policy" + }] + } + } + } + ], + "included": [ + { + "id": "25", + "type": "user", + "attributes": { + "name": "user name", + "email": "user@email.com", + "avatar": "", + } + } + ], + "meta": { + "total_pages": 1, + "total_count": 1 + }, + "links": { + "self": "url link" + } +} diff --git a/Example/Tests/Resources/Decoding/MissingRelationship/Array/MissingRelationshipObjectsEmpty-Json.json b/Example/Tests/Resources/Decoding/MissingRelationship/Array/MissingRelationshipObjectsEmpty-Json.json new file mode 100644 index 0000000..454ce7d --- /dev/null +++ b/Example/Tests/Resources/Decoding/MissingRelationship/Array/MissingRelationshipObjectsEmpty-Json.json @@ -0,0 +1,26 @@ +{ + "links" : { + "self" : "url link" + }, + "meta" : { + "total_pages" : 1, + "total_count" : 1 + }, + "data" : [ + { + "status" : "approved", + "policy" : [], + "id" : "33", + "start_date" : "2019-01-14", + "type" : "time_off_request", + "end_date" : "2019-01-31", + "user" : { + "avatar" : "", + "id" : "25", + "email" : "user@email.com", + "type" : "user", + "name" : "user name" + } + } + ] +} diff --git a/Example/Tests/Resources/Decoding/MissingRelationship/MissingRelationship-Json.json b/Example/Tests/Resources/Decoding/MissingRelationship/Include/MissingRelationship-Json.json similarity index 100% rename from Example/Tests/Resources/Decoding/MissingRelationship/MissingRelationship-Json.json rename to Example/Tests/Resources/Decoding/MissingRelationship/Include/MissingRelationship-Json.json diff --git a/Example/Tests/Resources/Decoding/MissingRelationship/MissingRelationship-JsonApi.json b/Example/Tests/Resources/Decoding/MissingRelationship/Include/MissingRelationship-JsonApi.json similarity index 100% rename from Example/Tests/Resources/Decoding/MissingRelationship/MissingRelationship-JsonApi.json rename to Example/Tests/Resources/Decoding/MissingRelationship/Include/MissingRelationship-JsonApi.json diff --git a/Example/Tests/Resources/Decoding/MissingRelationship/Object/MissingRelationshipObject-Json.json b/Example/Tests/Resources/Decoding/MissingRelationship/Object/MissingRelationshipObject-Json.json new file mode 100644 index 0000000..b3fc66b --- /dev/null +++ b/Example/Tests/Resources/Decoding/MissingRelationship/Object/MissingRelationshipObject-Json.json @@ -0,0 +1,29 @@ +{ + "links" : { + "self" : "url link" + }, + "meta" : { + "total_pages" : 1, + "total_count" : 1 + }, + "data" : [ + { + "status" : "approved", + "policy" : { + "id": "24", + "type": "time_off_policy" + }, + "id" : "33", + "start_date" : "2019-01-14", + "type" : "time_off_request", + "end_date" : "2019-01-31", + "user" : { + "avatar" : "", + "id" : "25", + "email" : "user@email.com", + "type" : "user", + "name" : "user name" + } + } + ] +} diff --git a/Example/Tests/Resources/Decoding/MissingRelationship/Object/MissingRelationshipObject-JsonApi.json b/Example/Tests/Resources/Decoding/MissingRelationship/Object/MissingRelationshipObject-JsonApi.json new file mode 100644 index 0000000..84df168 --- /dev/null +++ b/Example/Tests/Resources/Decoding/MissingRelationship/Object/MissingRelationshipObject-JsonApi.json @@ -0,0 +1,45 @@ +{ + "data": [ + { + "id": "33", + "type": "time_off_request", + "attributes": { + "status": "approved", + "start_date": "2019-01-14", + "end_date": "2019-01-31" + }, + "relationships": { + "user": { + "data": { + "id": "25", + "type": "user" + } + }, + "policy": { + "data": { + "id": "24", + "type": "time_off_policy" + } + } + } + } + ], + "included": [ + { + "id": "25", + "type": "user", + "attributes": { + "name": "user name", + "email": "user@email.com", + "avatar": "", + } + } + ], + "meta": { + "total_pages": 1, + "total_count": 1 + }, + "links": { + "self": "url link" + } +} diff --git a/Example/Tests/Resources/Decoding/MissingRelationship/Object/MissingRelationshipObjectNull-Json.json b/Example/Tests/Resources/Decoding/MissingRelationship/Object/MissingRelationshipObjectNull-Json.json new file mode 100644 index 0000000..745777c --- /dev/null +++ b/Example/Tests/Resources/Decoding/MissingRelationship/Object/MissingRelationshipObjectNull-Json.json @@ -0,0 +1,26 @@ +{ + "links" : { + "self" : "url link" + }, + "meta" : { + "total_pages" : 1, + "total_count" : 1 + }, + "data" : [ + { + "status" : "approved", + "policy" : null, + "id" : "33", + "start_date" : "2019-01-14", + "type" : "time_off_request", + "end_date" : "2019-01-31", + "user" : { + "avatar" : "", + "id" : "25", + "email" : "user@email.com", + "type" : "user", + "name" : "user name" + } + } + ] +} diff --git a/Example/Tests/Swift/DecoderTester.swift b/Example/Tests/Swift/DecoderTester.swift index f4220c0..fd3ee07 100644 --- a/Example/Tests/Swift/DecoderTester.swift +++ b/Example/Tests/Swift/DecoderTester.swift @@ -75,6 +75,34 @@ class DecoderTesterSpec: QuickSpec { } expect(correctlyParsed) == true } + + it("Should parse missing relationship object as type-id pair if parseMissingRelationships is set to true") { + let correctlyParsed = AdditionalFunctions.does(jsonFromFileNamed: "MissingRelationshipObject-JsonApi", containsEverethingFrom: "MissingRelationshipObject-Json") { + return try! Japx.Decoder.jsonObject(with: $0, parseMissingRelationships: true) + } + expect(correctlyParsed) == true + } + + it("Should parse missing relationship array of object as array of type-id pairs if parseMissingRelationships is set to true") { + let correctlyParsed = AdditionalFunctions.does(jsonFromFileNamed: "MissingRelationshipObjects-JsonApi", containsEverethingFrom: "MissingRelationshipObjects-Json") { + return try! Japx.Decoder.jsonObject(with: $0, parseMissingRelationships: true) + } + expect(correctlyParsed) == true + } + + it("Should skip missing relationship object if parseMissingRelationships is set to false") { + let correctlyParsed = AdditionalFunctions.does(jsonFromFileNamed: "MissingRelationshipObject-JsonApi", containsEverethingFrom: "MissingRelationshipObjectNull-Json") { + return try! Japx.Decoder.jsonObject(with: $0, parseMissingRelationships: false) + } + expect(correctlyParsed) == true + } + + it("Should skip missing relationship array if parseMissingRelationships is set to false") { + let correctlyParsed = AdditionalFunctions.does(jsonFromFileNamed: "MissingRelationshipObjects-JsonApi", containsEverethingFrom: "MissingRelationshipObjectsEmpty-Json") { + return try! Japx.Decoder.jsonObject(with: $0, parseMissingRelationships: false) + } + expect(correctlyParsed) == true + } } } diff --git a/Example/Tests/Utilities/AdditionalFunctions.swift b/Example/Tests/Utilities/AdditionalFunctions.swift index cead57a..5ea55a0 100644 --- a/Example/Tests/Utilities/AdditionalFunctions.swift +++ b/Example/Tests/Utilities/AdditionalFunctions.swift @@ -73,6 +73,10 @@ public typealias ParsingPipelineCallback = (_ json: Data) -> (Any) return number == numberOther } + if entry.value is NSNull && (jsonParameter[entry.key] == nil || jsonParameter[entry.key] is NSNull) { + return true + } + assert(false, "You should not end up here") } } From fd3d79d407f88a476596822c0b4074ac1fadb3b1 Mon Sep 17 00:00:00 2001 From: Vlaho Date: Thu, 14 Nov 2019 13:08:19 +0100 Subject: [PATCH 03/13] parseNotIncludedRelationships to finish issue #18 --- Example/Podfile.lock | 33 +- Example/Pods/Alamofire/README.md | 21 +- .../Source/NetworkReachabilityManager.swift | 3 + Example/Pods/Alamofire/Source/Request.swift | 15 +- Example/Pods/Alamofire/Source/Response.swift | 47 +- .../Alamofire/Source/ServerTrustPolicy.swift | 17 +- .../Pods/Alamofire/Source/Validation.swift | 10 +- Example/Pods/Local Podspecs/Japx.podspec.json | 15 +- Example/Pods/Manifest.lock | 33 +- Example/Pods/Pods.xcodeproj/project.pbxproj | 2052 ++++++++--------- Example/Pods/RxSwift/README.md | 12 + .../Alamofire/Alamofire-Info.plist | 2 +- .../Alamofire/Alamofire.xcconfig | 1 + .../Target Support Files/Japx/Japx-Info.plist | 2 +- .../Target Support Files/Japx/Japx.xcconfig | 1 + .../Nimble/Nimble.xcconfig | 1 + .../Pods-Japx_Example-frameworks.sh | 2 +- .../Pods-Japx_Example.debug.xcconfig | 1 + .../Pods-Japx_Example.release.xcconfig | 1 + .../Pods-Japx_Tests-frameworks.sh | 2 +- .../Pods-Japx_Tests.debug.xcconfig | 1 + .../Pods-Japx_Tests.release.xcconfig | 1 + .../Target Support Files/Quick/Quick.xcconfig | 1 + .../Target Support Files/RxSwift/Info.plist | 26 - .../RxSwift/RxSwift-Info.plist | 2 +- .../RxSwift/RxSwift.xcconfig | 1 + Example/Tests/Objc/DecoderTester.m | 14 +- Example/Tests/Swift/DecoderTester.swift | 31 +- .../Tests/Utilities/AdditionalFunctions.swift | 4 +- Japx.podspec | 9 +- Japx/Classes/Alamofire/JapxAlamofire.swift | 27 +- Japx/Classes/Codable/JapxCodable.swift | 10 +- .../JapxCodableAlamofire.swift | 2 +- .../Classes/CodableMoya/JapxCodableMoya.swift | 2 +- Japx/Classes/Core/Japx.swift | 164 +- Japx/Classes/Moya/JapxMoya.swift | 5 +- Japx/Classes/ObjC/JapxObjC.swift | 59 +- .../Classes/RxAlamofire/JapxRxAlamofire.swift | 10 +- Japx/Classes/RxMoya/JapxRxMoya.swift | 6 +- 39 files changed, 1398 insertions(+), 1248 deletions(-) delete mode 100644 Example/Pods/Target Support Files/RxSwift/Info.plist diff --git a/Example/Podfile.lock b/Example/Podfile.lock index 9dfac06..f8486d5 100644 --- a/Example/Podfile.lock +++ b/Example/Podfile.lock @@ -1,25 +1,25 @@ PODS: - - Alamofire (4.8.2) - - Japx/Alamofire (2.1.0): - - Alamofire (~> 4.8) + - Alamofire (4.9.1) + - Japx/Alamofire (2.2.0): + - Alamofire (~> 4.9) - Japx/Core - - Japx/Codable (2.1.0): + - Japx/Codable (2.2.0): - Japx/Core - - Japx/CodableAlamofire (2.1.0): + - Japx/CodableAlamofire (2.2.0): - Japx/Alamofire - Japx/Codable - - Japx/Core (2.1.0) - - Japx/ObjC (2.1.0): + - Japx/Core (2.2.0) + - Japx/ObjC (2.2.0): - Japx/Core - - Japx/RxAlamofire (2.1.0): + - Japx/RxAlamofire (2.2.0): - Japx/Alamofire - RxSwift (~> 5.0) - - Japx/RxCodableAlamofire (2.1.0): + - Japx/RxCodableAlamofire (2.2.0): - Japx/CodableAlamofire - Japx/RxAlamofire - Nimble (8.0.1) - Quick (2.1.0) - - RxSwift (5.0.0) + - RxSwift (5.0.1) DEPENDENCIES: - Japx/ObjC (from `../`) @@ -28,10 +28,11 @@ DEPENDENCIES: - Quick SPEC REPOS: - https://github.com/cocoapods/specs.git: - - Alamofire + https://github.com/CocoaPods/Specs.git: - Nimble - Quick + trunk: + - Alamofire - RxSwift EXTERNAL SOURCES: @@ -39,12 +40,12 @@ EXTERNAL SOURCES: :path: "../" SPEC CHECKSUMS: - Alamofire: ae5c501addb7afdbb13687d7f2f722c78734c2d3 - Japx: 7efe9c1b93b6f3cdb561e41f23fbc607a603d03b + Alamofire: 85e8a02c69d6020a0d734f6054870d7ecb75cf18 + Japx: 339108c7da597bf4e2ce1e846c5e6c3f624e8332 Nimble: 45f786ae66faa9a709624227fae502db55a8bdd0 Quick: 4be43f6634acfa727dd106bdf3929ce125ffa79d - RxSwift: 8b0671caa829a763bbce7271095859121cbd895f + RxSwift: e2dc62b366a3adf6a0be44ba9f405efd4c94e0c4 PODFILE CHECKSUM: 0854e6acc1d6ac3258147607046a63ceb040b5e5 -COCOAPODS: 1.7.0.rc.2 +COCOAPODS: 1.8.3 diff --git a/Example/Pods/Alamofire/README.md b/Example/Pods/Alamofire/README.md index 26e364a..bafa09a 100644 --- a/Example/Pods/Alamofire/README.md +++ b/Example/Pods/Alamofire/README.md @@ -57,8 +57,8 @@ In order to keep Alamofire focused specifically on core networking implementatio ## Requirements - iOS 8.0+ / macOS 10.10+ / tvOS 9.0+ / watchOS 2.0+ -- Xcode 8.3+ -- Swift 3.1+ +- Xcode 9.3+ +- Swift 4.0+ ## Migration Guides @@ -85,7 +85,7 @@ In order to keep Alamofire focused specifically on core networking implementatio $ gem install cocoapods ``` -> CocoaPods 1.1+ is required to build Alamofire 4.0+. +> CocoaPods 1.7+ is required to build Alamofire 4.9+. To integrate Alamofire into your Xcode project using CocoaPods, specify it in your `Podfile`: @@ -95,7 +95,7 @@ platform :ios, '10.0' use_frameworks! target '' do - pod 'Alamofire', '~> 4.7' + pod 'Alamofire', '~> 4.9' end ``` @@ -112,14 +112,13 @@ $ pod install You can install Carthage with [Homebrew](https://brew.sh/) using the following command: ```bash -$ brew update $ brew install carthage ``` To integrate Alamofire into your Xcode project using Carthage, specify it in your `Cartfile`: ```ogdl -github "Alamofire/Alamofire" ~> 4.7 +github "Alamofire/Alamofire" ~> 4.9 ``` Run `carthage update` to build the framework and drag the built `Alamofire.framework` into your Xcode project. @@ -130,19 +129,11 @@ The [Swift Package Manager](https://swift.org/package-manager/) is a tool for au Once you have your Swift package set up, adding Alamofire as a dependency is as easy as adding it to the `dependencies` value of your `Package.swift`. -#### Swift 3 - -```swift -dependencies: [ - .Package(url: "https://github.com/Alamofire/Alamofire.git", majorVersion: 4) -] -``` - #### Swift 4 ```swift dependencies: [ - .package(url: "https://github.com/Alamofire/Alamofire.git", from: "4.0.0") + .package(url: "https://github.com/Alamofire/Alamofire.git", from: "4.9") ] ``` diff --git a/Example/Pods/Alamofire/Source/NetworkReachabilityManager.swift b/Example/Pods/Alamofire/Source/NetworkReachabilityManager.swift index 5470eec..398ca82 100644 --- a/Example/Pods/Alamofire/Source/NetworkReachabilityManager.swift +++ b/Example/Pods/Alamofire/Source/NetworkReachabilityManager.swift @@ -159,7 +159,10 @@ open class NetworkReachabilityManager { let queueEnabled = SCNetworkReachabilitySetDispatchQueue(reachability, listenerQueue) listenerQueue.async { + self.previousFlags = SCNetworkReachabilityFlags(rawValue: 1 << 30) + guard let flags = self.flags else { return } + self.notifyListener(flags) } diff --git a/Example/Pods/Alamofire/Source/Request.swift b/Example/Pods/Alamofire/Source/Request.swift index a2efaa0..2be2ce0 100644 --- a/Example/Pods/Alamofire/Source/Request.swift +++ b/Example/Pods/Alamofire/Source/Request.swift @@ -497,8 +497,19 @@ open class DownloadRequest: Request { // MARK: State /// Cancels the request. - open override func cancel() { - downloadDelegate.downloadTask.cancel { self.downloadDelegate.resumeData = $0 } + override open func cancel() { + cancel(createResumeData: true) + } + + /// Cancels the request. + /// + /// - parameter createResumeData: Determines whether resume data is created via the underlying download task or not. + open func cancel(createResumeData: Bool) { + if createResumeData { + downloadDelegate.downloadTask.cancel { self.downloadDelegate.resumeData = $0 } + } else { + downloadDelegate.downloadTask.cancel() + } NotificationCenter.default.post( name: Notification.Name.Task.DidCancel, diff --git a/Example/Pods/Alamofire/Source/Response.swift b/Example/Pods/Alamofire/Source/Response.swift index 747a471..d05cfb0 100644 --- a/Example/Pods/Alamofire/Source/Response.swift +++ b/Example/Pods/Alamofire/Source/Response.swift @@ -131,15 +131,19 @@ extension DataResponse: CustomStringConvertible, CustomDebugStringConvertible { /// The debug textual representation used when written to an output stream, which includes the URL request, the URL /// response, the server data, the response serialization result and the timeline. public var debugDescription: String { - var output: [String] = [] - - output.append(request != nil ? "[Request]: \(request!.httpMethod ?? "GET") \(request!)" : "[Request]: nil") - output.append(response != nil ? "[Response]: \(response!)" : "[Response]: nil") - output.append("[Data]: \(data?.count ?? 0) bytes") - output.append("[Result]: \(result.debugDescription)") - output.append("[Timeline]: \(timeline.debugDescription)") - - return output.joined(separator: "\n") + let requestDescription = request.map { "\($0.httpMethod ?? "GET") \($0)"} ?? "nil" + let requestBody = request?.httpBody.map { String(decoding: $0, as: UTF8.self) } ?? "None" + let responseDescription = response.map { "\($0)" } ?? "nil" + let responseBody = data.map { String(decoding: $0, as: UTF8.self) } ?? "None" + + return """ + [Request]: \(requestDescription) + [Request Body]: \n\(requestBody) + [Response]: \(responseDescription) + [Response Body]: \n\(responseBody) + [Result]: \(result) + [Timeline]: \(timeline.debugDescription) + """ } } @@ -384,17 +388,20 @@ extension DownloadResponse: CustomStringConvertible, CustomDebugStringConvertibl /// response, the temporary and destination URLs, the resume data, the response serialization result and the /// timeline. public var debugDescription: String { - var output: [String] = [] - - output.append(request != nil ? "[Request]: \(request!.httpMethod ?? "GET") \(request!)" : "[Request]: nil") - output.append(response != nil ? "[Response]: \(response!)" : "[Response]: nil") - output.append("[TemporaryURL]: \(temporaryURL?.path ?? "nil")") - output.append("[DestinationURL]: \(destinationURL?.path ?? "nil")") - output.append("[ResumeData]: \(resumeData?.count ?? 0) bytes") - output.append("[Result]: \(result.debugDescription)") - output.append("[Timeline]: \(timeline.debugDescription)") - - return output.joined(separator: "\n") + let requestDescription = request.map { "\($0.httpMethod ?? "GET") \($0)"} ?? "nil" + let requestBody = request?.httpBody.map { String(decoding: $0, as: UTF8.self) } ?? "None" + let responseDescription = response.map { "\($0)" } ?? "nil" + + return """ + [Request]: \(requestDescription) + [Request Body]: \n\(requestBody) + [Response]: \(responseDescription) + [TemporaryURL]: \(temporaryURL?.path ?? "nil") + [DestinationURL]: \(destinationURL?.path ?? "nil") + [ResumeData]: \(resumeData?.count ?? 0) bytes + [Result]: \(result) + [Timeline]: \(timeline.debugDescription) + """ } } diff --git a/Example/Pods/Alamofire/Source/ServerTrustPolicy.swift b/Example/Pods/Alamofire/Source/ServerTrustPolicy.swift index dea099e..fccdc02 100644 --- a/Example/Pods/Alamofire/Source/ServerTrustPolicy.swift +++ b/Example/Pods/Alamofire/Source/ServerTrustPolicy.swift @@ -242,15 +242,18 @@ public enum ServerTrustPolicy { private func trustIsValid(_ trust: SecTrust) -> Bool { var isValid = false - var result = SecTrustResultType.invalid - let status = SecTrustEvaluate(trust, &result) + if #available(iOS 12, macOS 10.14, tvOS 12, watchOS 5, *) { + isValid = SecTrustEvaluateWithError(trust, nil) + } else { + var result = SecTrustResultType.invalid + let status = SecTrustEvaluate(trust, &result) - if status == errSecSuccess { - let unspecified = SecTrustResultType.unspecified - let proceed = SecTrustResultType.proceed + if status == errSecSuccess { + let unspecified = SecTrustResultType.unspecified + let proceed = SecTrustResultType.proceed - - isValid = result == unspecified || result == proceed + isValid = result == unspecified || result == proceed + } } return isValid diff --git a/Example/Pods/Alamofire/Source/Validation.swift b/Example/Pods/Alamofire/Source/Validation.swift index 5640789..59e0bbb 100644 --- a/Example/Pods/Alamofire/Source/Validation.swift +++ b/Example/Pods/Alamofire/Source/Validation.swift @@ -219,7 +219,10 @@ extension DataRequest { /// - returns: The request. @discardableResult public func validate() -> Self { - return validate(statusCode: self.acceptableStatusCodes).validate(contentType: self.acceptableContentTypes) + let contentTypes = { [unowned self] in + self.acceptableContentTypes + } + return validate(statusCode: acceptableStatusCodes).validate(contentType: contentTypes()) } } @@ -310,6 +313,9 @@ extension DownloadRequest { /// - returns: The request. @discardableResult public func validate() -> Self { - return validate(statusCode: self.acceptableStatusCodes).validate(contentType: self.acceptableContentTypes) + let contentTypes = { [unowned self] in + self.acceptableContentTypes + } + return validate(statusCode: acceptableStatusCodes).validate(contentType: contentTypes()) } } diff --git a/Example/Pods/Local Podspecs/Japx.podspec.json b/Example/Pods/Local Podspecs/Japx.podspec.json index 3503a50..b6d032c 100644 --- a/Example/Pods/Local Podspecs/Japx.podspec.json +++ b/Example/Pods/Local Podspecs/Japx.podspec.json @@ -1,6 +1,6 @@ { "name": "Japx", - "version": "2.1.0", + "version": "2.2.0", "summary": "Lightweight JSON:API parser.", "description": "Lightweight JSON:API parser that flattens complex JSON:API structure and turns it into simple JSON. It can also take simple JSON and turn it into JSON:API structure.\nIt works by transfering Dictionary to Dictionary, so you can use Codable, Unbox, Wrap, ObjectMapper, or any other object mapping tool that you preffer.", "homepage": "https://github.com/infinum/Japx", @@ -15,14 +15,14 @@ }, "source": { "git": "https://github.com/infinum/Japx.git", - "tag": "2.1.0" + "tag": "2.2.0" }, "requires_arc": true, "platforms": { "ios": "9.0", "osx": "10.10" }, - "swift_versions": "5.0", + "swift_versions": "5.1", "default_subspecs": "Core", "subspecs": [ { @@ -47,7 +47,7 @@ ], "Alamofire": [ - "~> 4.8" + "~> 4.9" ] } }, @@ -94,7 +94,7 @@ "Japx/Core": [ ], - "Moya/RxSwift": [ + "Moya/Core": [ "~> 13.0" ] } @@ -105,6 +105,9 @@ "dependencies": { "Japx/Moya": [ + ], + "Moya/RxSwift": [ + "~> 13.0" ] } }, @@ -148,5 +151,5 @@ } } ], - "swift_version": "5.0" + "swift_version": "5.1" } diff --git a/Example/Pods/Manifest.lock b/Example/Pods/Manifest.lock index 9dfac06..f8486d5 100644 --- a/Example/Pods/Manifest.lock +++ b/Example/Pods/Manifest.lock @@ -1,25 +1,25 @@ PODS: - - Alamofire (4.8.2) - - Japx/Alamofire (2.1.0): - - Alamofire (~> 4.8) + - Alamofire (4.9.1) + - Japx/Alamofire (2.2.0): + - Alamofire (~> 4.9) - Japx/Core - - Japx/Codable (2.1.0): + - Japx/Codable (2.2.0): - Japx/Core - - Japx/CodableAlamofire (2.1.0): + - Japx/CodableAlamofire (2.2.0): - Japx/Alamofire - Japx/Codable - - Japx/Core (2.1.0) - - Japx/ObjC (2.1.0): + - Japx/Core (2.2.0) + - Japx/ObjC (2.2.0): - Japx/Core - - Japx/RxAlamofire (2.1.0): + - Japx/RxAlamofire (2.2.0): - Japx/Alamofire - RxSwift (~> 5.0) - - Japx/RxCodableAlamofire (2.1.0): + - Japx/RxCodableAlamofire (2.2.0): - Japx/CodableAlamofire - Japx/RxAlamofire - Nimble (8.0.1) - Quick (2.1.0) - - RxSwift (5.0.0) + - RxSwift (5.0.1) DEPENDENCIES: - Japx/ObjC (from `../`) @@ -28,10 +28,11 @@ DEPENDENCIES: - Quick SPEC REPOS: - https://github.com/cocoapods/specs.git: - - Alamofire + https://github.com/CocoaPods/Specs.git: - Nimble - Quick + trunk: + - Alamofire - RxSwift EXTERNAL SOURCES: @@ -39,12 +40,12 @@ EXTERNAL SOURCES: :path: "../" SPEC CHECKSUMS: - Alamofire: ae5c501addb7afdbb13687d7f2f722c78734c2d3 - Japx: 7efe9c1b93b6f3cdb561e41f23fbc607a603d03b + Alamofire: 85e8a02c69d6020a0d734f6054870d7ecb75cf18 + Japx: 339108c7da597bf4e2ce1e846c5e6c3f624e8332 Nimble: 45f786ae66faa9a709624227fae502db55a8bdd0 Quick: 4be43f6634acfa727dd106bdf3929ce125ffa79d - RxSwift: 8b0671caa829a763bbce7271095859121cbd895f + RxSwift: e2dc62b366a3adf6a0be44ba9f405efd4c94e0c4 PODFILE CHECKSUM: 0854e6acc1d6ac3258147607046a63ceb040b5e5 -COCOAPODS: 1.7.0.rc.2 +COCOAPODS: 1.8.3 diff --git a/Example/Pods/Pods.xcodeproj/project.pbxproj b/Example/Pods/Pods.xcodeproj/project.pbxproj index bf8601f..26b55bf 100644 --- a/Example/Pods/Pods.xcodeproj/project.pbxproj +++ b/Example/Pods/Pods.xcodeproj/project.pbxproj @@ -7,359 +7,359 @@ objects = { /* Begin PBXBuildFile section */ - 0026356797A73C8C4922B4D1B404C8E7 /* Callsite.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34CECF8B9E01D94D80F7833B195A128C /* Callsite.swift */; }; - 00E1B59A422C81EB501062FC75ABB89C /* Window.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4057915F8E4D4926F0A82D4D0F850573 /* Window.swift */; }; - 01A1BFDD1A5405F88AF5FA4A8162209A /* World.swift in Sources */ = {isa = PBXBuildFile; fileRef = D8466BB6BB2E6B504CC75806882F2202 /* World.swift */; }; - 01C6031BE8305D58AA30A76BACF00063 /* SchedulerType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 86EF6D09C443CE94C7FEF4E9123321B3 /* SchedulerType.swift */; }; - 031DAE10197F202BFB8480D111D1AEC9 /* JapxObjC.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA3C4EA2908A9BDDED83E0208C137F92 /* JapxObjC.swift */; }; - 07A0E900150AD88654C2165C3397D58E /* Pods-Japx_Example-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 5600C425B693BE6751BC2B7777047D9A /* Pods-Japx_Example-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 07DB3A3042A521B95F40F5523B579139 /* Zip+Collection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 900268EB248BDF9CB6960020A0C75C3F /* Zip+Collection.swift */; }; - 093B514AF1063F1DA238899699E270DC /* QuickSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = F795E855926EE8F25F3C41BB518EA648 /* QuickSpec.m */; }; - 09A4AE78C2899A16B4DB8BA983EAA973 /* Completable+AndThen.swift in Sources */ = {isa = PBXBuildFile; fileRef = D96AE999025056CB72F4478E5688210D /* Completable+AndThen.swift */; }; - 09B297BD6AFB877C72BAACA93DA5A883 /* MatcherProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = D551F6A7E763A68E30F0719D4DAC0D74 /* MatcherProtocols.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - 0AECF1E83CBECC083136E419C6C632CA /* NMBStringify.m in Sources */ = {isa = PBXBuildFile; fileRef = 67FFEECD7F79E0A3A4DBB94994C8BD9D /* NMBStringify.m */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - 0B2BF7556395180AC0AD8634E7529870 /* ElementAt.swift in Sources */ = {isa = PBXBuildFile; fileRef = C73A70C1D1B2618A0696B45B6E7938D2 /* ElementAt.swift */; }; - 0BFD8E1BFB6D87D13DB1EF30AB5378C0 /* Bag.swift in Sources */ = {isa = PBXBuildFile; fileRef = C39715F5E6B6A8978463699F6B9AC5B5 /* Bag.swift */; }; - 0CB3323BEB8C223CA9AA38602D1B38B2 /* Japx.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51C7D35D7DED817500D34F7435CDE5BD /* Japx.swift */; }; - 138B504E9722FDA9AE1959CFBEE4B019 /* ObserverBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30F6BC37D8E97D142068B3B7544D49D6 /* ObserverBase.swift */; }; - 14B66B11A0E3B8D3B64A19A3919E6FB9 /* Optional.swift in Sources */ = {isa = PBXBuildFile; fileRef = AB6B84A6B10E08F2626AB1A086760BC1 /* Optional.swift */; }; - 14ECF6E40B0356170FEDE170B2EB6F2F /* Request.swift in Sources */ = {isa = PBXBuildFile; fileRef = 48549552B564F1E513F0C246BE6AF626 /* Request.swift */; }; - 15A29851E570FF0D7FB6DE10D20AAB55 /* MatchError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 49820A9C897E6F8391639FD2E18D8573 /* MatchError.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - 1635FE542AADC84063CC1653F53CF269 /* BeLessThanOrEqual.swift in Sources */ = {isa = PBXBuildFile; fileRef = FED89BE9A59FB84FA7AEE8B5CE1B2CA2 /* BeLessThanOrEqual.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - 1677F2056EEBB73C04885F6CAE7A76CB /* Pods-Japx_Tests-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 0B8CA20402F57C0121D42E12D664A998 /* Pods-Japx_Tests-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 16C989EF6AE4B379BA629A1A22CF2694 /* BehaviorSubject.swift in Sources */ = {isa = PBXBuildFile; fileRef = 95931F09F8C0DB165C46E68D1108337F /* BehaviorSubject.swift */; }; - 185A90450B46684E6614548598EBFFC3 /* NopDisposable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 389C5D6905F3AB6BADB59DF47300F6F9 /* NopDisposable.swift */; }; - 19BAEC04FD72D8DCAD21288BC65BB65A /* ConnectableObservableType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0315611A5D451156BECB5480D8D243B3 /* ConnectableObservableType.swift */; }; - 19F501020A5EBB613BFCA66B06922901 /* Platform.Darwin.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9EFCB5BB3A66BDB20CBC008E3B2F3446 /* Platform.Darwin.swift */; }; - 1A13DD3FA71C9418F5FAB2E8C0657D95 /* Deferred.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8A9C108C8EE45FE3A231BF42947C5EF1 /* Deferred.swift */; }; - 1B84CD4780109223790812BD2C1D2811 /* CwlMachBadInstructionHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = B68B64ADF11781A371382A8BFF064177 /* CwlMachBadInstructionHandler.m */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - 1C670BC5B1E056D55E49DBA11CE87707 /* Scan.swift in Sources */ = {isa = PBXBuildFile; fileRef = D733C5C67DC51FA65C4056A9024EB2F7 /* Scan.swift */; }; - 1D646E73C898852F752411019B5A6623 /* DSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2B0968C2EDB6E20E410135509A303113 /* DSL.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - 1D7E5329DBA0CA57BDC240F2E1B0C770 /* ScheduledDisposable.swift in Sources */ = {isa = PBXBuildFile; fileRef = A5D61FC3B9189B1D27086DACBC485BB1 /* ScheduledDisposable.swift */; }; - 1D8DBB991E579BE3719B36522A054BDF /* QuickConfiguration.m in Sources */ = {isa = PBXBuildFile; fileRef = 8D7C99DD4432B8396A13747A54AD1AC3 /* QuickConfiguration.m */; }; - 1F975F6DA732FDFC9E7E41EE72939650 /* BooleanDisposable.swift in Sources */ = {isa = PBXBuildFile; fileRef = FB2C79487041F1CAE2A86165900A577E /* BooleanDisposable.swift */; }; - 20BD790E960F21B80BC36E33A65B9817 /* Behavior.swift in Sources */ = {isa = PBXBuildFile; fileRef = 564AD342DC8DE5F92BE8B79881F90D57 /* Behavior.swift */; }; - 213932C0F8C0E74B88FFA88E4883F263 /* DispatchQueueConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC74D0B70015CA3C4092CDCC2A1C820B /* DispatchQueueConfiguration.swift */; }; - 2275009124882AD498FF3DD1F504A579 /* ToSucceed.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF5210C600304E2CEFA77E1A6D877DF9 /* ToSucceed.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - 22A03DACA8256F2068C1FB014DAB2965 /* Japx-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 68653544F36673156B8C84C8A281DC94 /* Japx-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 22D2AE42BA8E816A736A59EB90ECDF7E /* QCKDSL.h in Headers */ = {isa = PBXBuildFile; fileRef = 01D274B6D0D178A97785751D4817F24B /* QCKDSL.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2602C690AD53B8F1081A2668C13CB8A7 /* SwitchIfEmpty.swift in Sources */ = {isa = PBXBuildFile; fileRef = F5434193F6C2688A18BD4BB19C0E6405 /* SwitchIfEmpty.swift */; }; - 26C4F6EB13FA9DCCE53573DE3C8079A4 /* DistinctUntilChanged.swift in Sources */ = {isa = PBXBuildFile; fileRef = FC3E1FB94970FB039D92C6C71616D16D /* DistinctUntilChanged.swift */; }; - 26D0536BE29C6E97D8BBCA2F4CBF0479 /* Sink.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0807F4765B0193DE01862E09DCDD2EB3 /* Sink.swift */; }; - 2791CB26164B91B7664162831D49093E /* AnyObserver.swift in Sources */ = {isa = PBXBuildFile; fileRef = 71004CE7EA33ABE0D1D717A052A8B3A6 /* AnyObserver.swift */; }; - 28446C027888709D72CCF46A3AB9D72D /* Errors.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8866F838671DE5C661AFC214169EABD8 /* Errors.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - 29D80797F6623CD2CB3DE25027BD33F8 /* SuiteHooks.swift in Sources */ = {isa = PBXBuildFile; fileRef = 91E84DF32BD1A73A11B84FBD6A24B0FD /* SuiteHooks.swift */; }; - 2C91D5210B8791C1610C3329A473AD4D /* Map.swift in Sources */ = {isa = PBXBuildFile; fileRef = C19B8CD163AB980C793701F7C901A7DE /* Map.swift */; }; - 2CE2973D9738952207E45E18B6BA4D88 /* Delay.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4FCA06E17E6E798A5A1FBF641AD4C7E1 /* Delay.swift */; }; - 2D736F351B23B38B20834FA451B3A53A /* Debounce.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9858A92B7E4D7BE5995C330E4D68BB68 /* Debounce.swift */; }; - 2E337C690EC22D7A14B8CECCEC0E0DB0 /* NMBObjCMatcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A029B8176AB9ED7DDF3DCC6D7D4E941 /* NMBObjCMatcher.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - 2ED8027DDE87BA96D1015EEBF51AD9E6 /* Quick-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 9DAB24C40E5706F5F8FE8F06E2DE46F7 /* Quick-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2F0EF87A019B19DD28C57742DA47B8EC /* Deprecated.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BD1A90A5CC4B4AEDBE30FD02164581D /* Deprecated.swift */; }; - 2FA8A34100187D5C3FA290CC595AD0E6 /* Nimble-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = DDF07459AC53D4F2F593F1B07CDA62D2 /* Nimble-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2FD86CB8F363BB93876FE06CFBA7F081 /* Producer.swift in Sources */ = {isa = PBXBuildFile; fileRef = E47374FC81FE6F65463B9DA4B4060BDB /* Producer.swift */; }; - 300F38729493A8AA14CC2D7D57E2718F /* Async.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B9149624DB280438D7F8B0A7BF10C7C /* Async.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - 30384A41C21C621B3FF52074D33FCDDF /* SkipUntil.swift in Sources */ = {isa = PBXBuildFile; fileRef = 49BA939C5DB09D4A131D8626CFE23CFE /* SkipUntil.swift */; }; - 30B0DD215254FA6DC4A567D165F38F29 /* Japx-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 3C9440F6D996A4D7207A4AB27F4149E5 /* Japx-dummy.m */; }; - 318031C30FF0A82ACAA7A26C31EDA33B /* EndWith.swift in Sources */ = {isa = PBXBuildFile; fileRef = B6591CEA4224D4AE7827FC73521D5D9A /* EndWith.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - 3312595853732AEC4A5BCB4C54F928DE /* BeGreaterThanOrEqualTo.swift in Sources */ = {isa = PBXBuildFile; fileRef = A81814BB57547A8D1CF8469FEE8EFEDF /* BeGreaterThanOrEqualTo.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - 337DE6552D289713BE006EB645251944 /* Catch.swift in Sources */ = {isa = PBXBuildFile; fileRef = D791E303C6E40436B6D82B8206329DA4 /* Catch.swift */; }; - 346259BFD748AA38ACD34074B5FFA518 /* Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = ED80E40520AC3595AAACE476A4DEC29A /* Rx.swift */; }; - 34DD23522AC99972B177230F312AE2DC /* Functional.swift in Sources */ = {isa = PBXBuildFile; fileRef = D15913AD700B43FDE81084DA4DDADC0C /* Functional.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - 35ABB7749DBDCCD41017FF001E61A151 /* CompositeDisposable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8F1DA3BA72D1CE653973E95D06C2A2A4 /* CompositeDisposable.swift */; }; - 361C428836410F865BF9F0173BAE931A /* SubscribeOn.swift in Sources */ = {isa = PBXBuildFile; fileRef = 26927C1208FEA1908CE1F5C2DA0700E8 /* SubscribeOn.swift */; }; - 36986C451FF340C0CF8E2E32F872781A /* Throttle.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA5BFAE3D0DD6839D560BEFE761EBD99 /* Throttle.swift */; }; - 36FC3E02B8F86A133DA244814835A038 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1129FAEE8383C900905425892E61419F /* Foundation.framework */; }; - 38742796019A84E25F69D27ABA09BD02 /* RaisesException.swift in Sources */ = {isa = PBXBuildFile; fileRef = FD325C8276167CB7791580193F206690 /* RaisesException.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - 38DAA4F3E1E62BD26CBD76E003071B8B /* Amb.swift in Sources */ = {isa = PBXBuildFile; fileRef = 72D0B9C4EDB5E0A92E36E66C60D527E3 /* Amb.swift */; }; - 3974CDEF031F83A455C33C0381A7CE63 /* Zip+arity.swift in Sources */ = {isa = PBXBuildFile; fileRef = 893848C7B6D07B137086501BD598DDB9 /* Zip+arity.swift */; }; - 3A5AFCFF87E5A6008A5F8698B6F86CA1 /* HaveCount.swift in Sources */ = {isa = PBXBuildFile; fileRef = 300895167A947BE2EA5F064CDEB76020 /* HaveCount.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - 3BB096D58E2607F299636ADCD88F7EFB /* ShareReplayScope.swift in Sources */ = {isa = PBXBuildFile; fileRef = 178949A14ACF54F6480B2A835C89235E /* ShareReplayScope.swift */; }; - 3BD03493EEE212E66F8841968C976A0A /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1129FAEE8383C900905425892E61419F /* Foundation.framework */; }; - 3BD1DAFE1F3E6C9E4EB0F2099B6D6FA2 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1129FAEE8383C900905425892E61419F /* Foundation.framework */; }; - 3C90CA85C31A7FE07892E4D087D72ECA /* SourceLocation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 305F52C9F2F3CA0F5F46AE5E881A41C5 /* SourceLocation.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - 3DAEAFB7BB868F963FC5DC823927CA4E /* RxMutableBox.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34D0631C3358A850D5CFAA9AA5066B91 /* RxMutableBox.swift */; }; - 3E78CD2F6DB58B2E6EBCA905B8B63C00 /* Equal.swift in Sources */ = {isa = PBXBuildFile; fileRef = E4869F7C71B4840407DBF0A263F66575 /* Equal.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - 3E8598936463F9359E7B8BF4B0407D42 /* TailRecursiveSink.swift in Sources */ = {isa = PBXBuildFile; fileRef = 04255F5DF63B9CF6D66CC56F4C449D7F /* TailRecursiveSink.swift */; }; - 3EE0FE394C3304DCB4C49DCFE071C788 /* RecursiveLock.swift in Sources */ = {isa = PBXBuildFile; fileRef = 64719B798B47D58F5FEF4ADE80698C7E /* RecursiveLock.swift */; }; - 3F01DB6C2BD33AD837903127BBCB0B89 /* SchedulerServices+Emulation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3E817879CF720D69ED95475F784DE84D /* SchedulerServices+Emulation.swift */; }; - 4031587954D664CF4AB63BB5A7807226 /* Reduce.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7CE324EA4820032B145C5C25BC68DED /* Reduce.swift */; }; - 40452C81FD36D74825F21E24E0DB9016 /* JapxCodable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 129F5FAF301C926FB7C4AC99578EBB3B /* JapxCodable.swift */; }; - 409F539232793D78BF5B41705E31DD61 /* Closures.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0D0099971A716FD2A1F8224872367A02 /* Closures.swift */; }; - 40FAC27B3A3F6C018FA5889D6F31AA62 /* RetryWhen.swift in Sources */ = {isa = PBXBuildFile; fileRef = D2113A2111BCDCCD1B4122619C85FDD7 /* RetryWhen.swift */; }; - 4208D4D7BC8D015127DF3BB4250224B6 /* AnonymousDisposable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09895B44878690CD8FB60276AAFED4C6 /* AnonymousDisposable.swift */; }; - 4323D32B3358A3EC9A6115C532E80314 /* Quick-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 16F8FE3B4CE3AFE770EEA248FAFC0483 /* Quick-dummy.m */; }; - 432DF494BFC5A493F2E5DB275904AD9F /* LockOwnerType.swift in Sources */ = {isa = PBXBuildFile; fileRef = F670326DBBDB7DB4BB59950D455CBCDA /* LockOwnerType.swift */; }; - 43E71598645E37195AADBED93A41337F /* AsyncLock.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4514B1B18EB2C55C5164B4BB54C5323E /* AsyncLock.swift */; }; - 45019F868DE1FA964F8A050F1684AF89 /* Pods-Japx_Tests-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 0472B9CAED7972CF1EDF6C37CEC45F57 /* Pods-Japx_Tests-dummy.m */; }; - 45BC601FADAD02057F4B0E387E5F6F9A /* XCTest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 31E7BD345FF85B6A0E3289AC31EFE361 /* XCTest.framework */; }; - 47670595847368876E3EE8B7D433C506 /* HooksPhase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 70ABCCBBEFDFB00B8ECBA241AEDDFB21 /* HooksPhase.swift */; }; - 48C05EDDE78E16073DE5370C325E0C84 /* CurrentThreadScheduler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3F8C3582E960B3DCC7C79B083F82F1C4 /* CurrentThreadScheduler.swift */; }; - 4920AD2B3D668DB550BEDED6747F925B /* ServerTrustPolicy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BC59294E38D626B19887A4E8B1471E6 /* ServerTrustPolicy.swift */; }; - 4ABA0BAAAF71D9E310C724707340E658 /* SingleAssignmentDisposable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7E7DB7C15E2D6D0BA20D82E2B75E6A6F /* SingleAssignmentDisposable.swift */; }; - 4B383D94AFF853D779B2AD84092B3006 /* PriorityQueue.swift in Sources */ = {isa = PBXBuildFile; fileRef = 17C93550DBB9CB8529D12A8E7A4A3455 /* PriorityQueue.swift */; }; - 4B50F23522122126609B394D30F92406 /* Do.swift in Sources */ = {isa = PBXBuildFile; fileRef = 577806517FD769FEB5B147035BFDE7F9 /* Do.swift */; }; - 4EEC9C035622F4D4506DD25468515304 /* mach_excServer.h in Headers */ = {isa = PBXBuildFile; fileRef = A9EAFAF233489337FD6201E5911B9F6A /* mach_excServer.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 50507B7B2A53B164B173A66463422828 /* BeEmpty.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09EE1E0C0EC73E7F5D55EB7C90F74318 /* BeEmpty.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - 505B75241DCEA8C1FBF9F479C2DDEF31 /* Timeline.swift in Sources */ = {isa = PBXBuildFile; fileRef = A082439308C86FA993ADF34E408AE63D /* Timeline.swift */; }; - 507E6364730FA80DC27F1D604F4E0A06 /* Timer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 736058054C56A280D2AD55D0BAF7EA7A /* Timer.swift */; }; - 532183A9E6EC34E4C731DA3125B9E0CD /* SynchronizedDisposeType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 50DA397FD4173183296FFBD3D8127AB6 /* SynchronizedDisposeType.swift */; }; - 536F5DD4F006338E0591CDBDBBA79123 /* OperationQueueScheduler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07CDA8B08253EEF91F20725154528FC2 /* OperationQueueScheduler.swift */; }; - 550407BE017E8F9C887FB3C2E3AF5641 /* Contain.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84BF8693482E5010DE24DD9F985E8D7E /* Contain.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - 552476489423BE8B6F3D12CC7097A3B4 /* Nimble-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = AE8997D4270D55D0BBF474319667AE3B /* Nimble-dummy.m */; }; - 559368DD6966DB1193B3FD6E7CBF5FED /* Alamofire-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 96409F854B923941CCEABB7D91DBBEE8 /* Alamofire-dummy.m */; }; - 55BFCDDB21CC743FACCD0C9511A0872F /* Enumerated.swift in Sources */ = {isa = PBXBuildFile; fileRef = FF272122421CA7DCF5D96F03BC36DF78 /* Enumerated.swift */; }; - 56562B9AD541A8FC6BB0AF0EB7FE9127 /* Repeat.swift in Sources */ = {isa = PBXBuildFile; fileRef = DF0837BF48C8F7AA0E611E0FBE64F20D /* Repeat.swift */; }; - 568310A2E893E20ACFEE76615BCC4F64 /* Alamofire.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3DD31C93E3C233A8E39873FE2BD70F5E /* Alamofire.framework */; }; - 57694C401F4C87A06394D9B589E412B9 /* AllPass.swift in Sources */ = {isa = PBXBuildFile; fileRef = 962A05D4C9EEB141CAD7D013559970F0 /* AllPass.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - 58489F14E71BBAA7179632C277C4ABF2 /* DSL.m in Sources */ = {isa = PBXBuildFile; fileRef = BD2EB7CC961AC4781A83A1C23D90020D /* DSL.m */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - 594494BAB3E029862D7009DE60FCC904 /* TaskDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = F5FABCDF6E4ACB986B9EEA712A0E8BE3 /* TaskDelegate.swift */; }; - 5A4B48E22D2D0FD3145D8298F6DFC02C /* Disposables.swift in Sources */ = {isa = PBXBuildFile; fileRef = BDDFE5DC9D1DFDF890C2B2504A754402 /* Disposables.swift */; }; - 5A9630982F71E4587F98FB1E3E49B9EB /* Date+Dispatch.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B78DB362630E4BDF1D355EC86A5430A /* Date+Dispatch.swift */; }; - 5AD6E464DD1EE56955DE290C3C8B8FEC /* mach_excServer.c in Sources */ = {isa = PBXBuildFile; fileRef = 28CA65DB7257B8ED32A2D4C8CE3EB468 /* mach_excServer.c */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - 5ADD44A9A1DEE51ECC6712E2ECC9420E /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1129FAEE8383C900905425892E61419F /* Foundation.framework */; }; - 5B007DA41E2B195E5FF32A567AFD41DB /* XCTestSuite+QuickTestSuiteBuilder.m in Sources */ = {isa = PBXBuildFile; fileRef = 2818748183B52656281B226AAC00129A /* XCTestSuite+QuickTestSuiteBuilder.m */; }; - 5B1086B0A866704A6CAF72B5A47582C6 /* Alamofire.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E880690A199E4360FAC9FBABD181B05 /* Alamofire.swift */; }; - 5C2F9E5485166B59DD032D7DF4C29CF0 /* Response.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6517720E400CEDE40CFF654C99E55698 /* Response.swift */; }; - 5DAEA150DEB1AA23703B146B7386457E /* MainScheduler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 86841DE698E2B853BE3BF7168D1E5030 /* MainScheduler.swift */; }; - 5ED738281131106C6070594D132C5533 /* BeLogical.swift in Sources */ = {isa = PBXBuildFile; fileRef = 82FD42CF7926F97863AE7692797C9561 /* BeLogical.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - 5EEE9470AAC63C5E5255F3A577F903A3 /* AtomicInt.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9CF550F150F87F1CACAC33EA419F51D /* AtomicInt.swift */; }; - 5F65D045836DDF358C8EA4A6C656CD4E /* SynchronizedOnType.swift in Sources */ = {isa = PBXBuildFile; fileRef = B2CB3C357B36368AEF0C3C80F4686447 /* SynchronizedOnType.swift */; }; - 62377A173C53B53C5F4B76C651F51AED /* BinaryDisposable.swift in Sources */ = {isa = PBXBuildFile; fileRef = C428B01DBC56934F26A660128FC18FA6 /* BinaryDisposable.swift */; }; - 62B796A4BFB7869CF7C0BA5E1527F20D /* Dematerialize.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84C86148BEBED12B9A3C8038AF5D609E /* Dematerialize.swift */; }; - 64D8637513DBAD343A343739C25F7937 /* Error.swift in Sources */ = {isa = PBXBuildFile; fileRef = CA7A43F34D340B9339310E1F46D2E8F6 /* Error.swift */; }; - 67533550F6B3AC052D36BF026A0DC5A4 /* Configuration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 770CC7A30CB0A128DE95BE47CE15CF3D /* Configuration.swift */; }; - 68B9719EB76E38AC25B8D83077C3C24C /* BeNil.swift in Sources */ = {isa = PBXBuildFile; fileRef = BA1A0C5616A82CB492F186AFC1D66D47 /* BeNil.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - 68E32674357CA0E3712FF2E969291CAB /* JapxAlamofire.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4DFAAF9C3FF63E76DFA9A731C71F499C /* JapxAlamofire.swift */; }; - 69F8672DBE7447F0A38C5ADE007CD2E0 /* TakeUntil.swift in Sources */ = {isa = PBXBuildFile; fileRef = 55840485C351B9A20721F54286D5BB9C /* TakeUntil.swift */; }; - 6DB152002B875AC6D3C39B52E36B25E9 /* GroupedObservable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2ECED79EB56EF84A2E97A7DEE4A451EB /* GroupedObservable.swift */; }; - 6DCC73FBBEE4D783EAD2172908AA5EBD /* CompactMap.swift in Sources */ = {isa = PBXBuildFile; fileRef = F663E60C6606155825BE47E338BABE86 /* CompactMap.swift */; }; - 6E10044C8A5FC0BCB6B13A0038A9B592 /* Predicate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 339C5548B5FBD510D5F51F82FFFC861A /* Predicate.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - 6E769EB7A1EB4B2FA667A0DF27F29102 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1129FAEE8383C900905425892E61419F /* Foundation.framework */; }; - 70C5FD378538C3871C62065C2F49F94A /* Completable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D77C90DCEEBD755B571D778013F708D6 /* Completable.swift */; }; - 70DE171B773F51597A90956D8B10AAB7 /* DefaultIfEmpty.swift in Sources */ = {isa = PBXBuildFile; fileRef = AC1400E8ABD4066EE8E60B611E75E651 /* DefaultIfEmpty.swift */; }; - 719748C5F2486AC754FD4337FA02E294 /* ConcurrentMainScheduler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2C9F4C346385C521B38ABADB795E63E4 /* ConcurrentMainScheduler.swift */; }; - 72847C4AC831BFB91B51991196626D5A /* Just.swift in Sources */ = {isa = PBXBuildFile; fileRef = D6C8E0A071CFA6B66A24C913A19192C2 /* Just.swift */; }; - 72C2F0877FAB758F102C1D5FB6641559 /* NetworkReachabilityManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4BA29F63324E4A754BB752B79303B7AA /* NetworkReachabilityManager.swift */; }; - 72F4983A53F7248EB878ABEE5BE94FD5 /* NMBExceptionCapture.h in Headers */ = {isa = PBXBuildFile; fileRef = 9712F3C678204EEC04DDA9070FA9E39C /* NMBExceptionCapture.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 730FB12C3EA5A617D3265FBE275E7E3A /* Cancelable.swift in Sources */ = {isa = PBXBuildFile; fileRef = FB349BB04636457639EAD39C277463AD /* Cancelable.swift */; }; - 758F20B4D6AFFF69C648FCEC0A907D68 /* Filter.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4CFA067F8D26DE553945F0E2B4D0AC9 /* Filter.swift */; }; - 75C9C0982F3B92D4CB98778871237CDC /* ExampleMetadata.swift in Sources */ = {isa = PBXBuildFile; fileRef = 793FA0EF1E88D9AA114B25A2CC865231 /* ExampleMetadata.swift */; }; - 76229A7F18BC854CE693868361CDABC8 /* AddRef.swift in Sources */ = {isa = PBXBuildFile; fileRef = 171206DB8DA29A0460CA25E31488EF5D /* AddRef.swift */; }; - 779DC067311B3C70E904B56FAA72447D /* DSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = 62214C37230E7DAD8325B28D67C970D4 /* DSL.swift */; }; - 7814702F97E0025B3FD9C509FFAC8744 /* NMBExceptionCapture.m in Sources */ = {isa = PBXBuildFile; fileRef = FDDFEBD4F5E583947A2835E085C8DCF4 /* NMBExceptionCapture.m */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - 79C3421150AEB0300D270036979B1798 /* QuickSpec.h in Headers */ = {isa = PBXBuildFile; fileRef = 47D9F449B57F5D507D7BD2325A4A92A3 /* QuickSpec.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7A659EE3B9EC629FB0499870C933B5AE /* Using.swift in Sources */ = {isa = PBXBuildFile; fileRef = 971A35444A7FB19B88D58AE194C248CF /* Using.swift */; }; - 7B0DCABC7CA404EEAF4B7626E8A157DD /* CwlCatchException.m in Sources */ = {isa = PBXBuildFile; fileRef = A4166D3B23622555FADB5C95EB762FF2 /* CwlCatchException.m */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - 7C0B0A5AFADABD47DADE8D9956B8E6D0 /* AssertionDispatcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 79383C28EF98DAE8CC506FC420D47994 /* AssertionDispatcher.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - 7C8D1E2396072F32471413E38EC86939 /* Event.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5294943F61EBF01BA5BA9FD866164D4 /* Event.swift */; }; - 7E26957AFF4A2D1563E817E8EF8FEB69 /* VirtualTimeConverterType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 02B4344742D8CD5E4B6CEA4F3502CC0B /* VirtualTimeConverterType.swift */; }; - 7F4F540E4AE68B46DA70D5243739AF32 /* NimbleEnvironment.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5537ACD9B41FE2DA9009FFDEB266FBAB /* NimbleEnvironment.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - 7FF71826A43E10CE1670A03BA7F791BD /* SerialDispatchQueueScheduler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52BAD60DAC70E76B244324343301F01B /* SerialDispatchQueueScheduler.swift */; }; - 809BC8E784A197919474C1C3EE0EC96B /* Never.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA03566D2EB0631CAD6FEC9E3A09882C /* Never.swift */; }; - 814568412B575F21702E37BF00D71916 /* DisposeBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2A72D7E479297C1F73E6B4A7FB53CC9C /* DisposeBase.swift */; }; - 82309B96437E0CE941081EF871144115 /* ObserverType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 212CC06CBA97B82B0388DD4622F6D73E /* ObserverType.swift */; }; - 836B968E1EA15BA9CB9B2705638A2679 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1129FAEE8383C900905425892E61419F /* Foundation.framework */; }; - 865CDE4E8A819DA78D4916091868F86E /* Create.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4BD5BBF9BAFC21ADF91BC34F8DED66D2 /* Create.swift */; }; - 875E14F2DC19FE4D537B0ADAFA3CA5B9 /* ExampleHooks.swift in Sources */ = {isa = PBXBuildFile; fileRef = 536E8C2670A21948DA298A2BD413B773 /* ExampleHooks.swift */; }; - 893C84B10779FA4477B7C7D2B3D723B1 /* XCTestObservationCenter+Register.m in Sources */ = {isa = PBXBuildFile; fileRef = F7A27390513B6C3ECBF1FE7F70634119 /* XCTestObservationCenter+Register.m */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - 89C63526040B7B2B0BF5EFAC00539689 /* Pods-Japx_Example-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = D2EA1E96F6BD7798EBC08754860F183D /* Pods-Japx_Example-dummy.m */; }; - 8B4530ED16F8FCB26FF52029E38B09D2 /* CombineLatest+Collection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 55A6A9155A5C10C46211BD6D962B7F92 /* CombineLatest+Collection.swift */; }; - 8C6F0B29DF7E1491E931990CDB34E16B /* SatisfyAllOf.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2949F88E61AC0DCEA064501C74EA3F0B /* SatisfyAllOf.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - 8D7D4CEE43E104CC6365CE30DCCB72CD /* Maybe.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4552D07C2066F84BCF6DCC92DD36913E /* Maybe.swift */; }; - 8E86A8249244246AF1AEC5931BCB84E9 /* ConcurrentDispatchQueueScheduler.swift in Sources */ = {isa = PBXBuildFile; fileRef = FD103D0B7F7F526E738B7BD345CBFEB3 /* ConcurrentDispatchQueueScheduler.swift */; }; - 8F723175D0894EC0B87F3DD8A8BBCAFF /* VirtualTimeScheduler.swift in Sources */ = {isa = PBXBuildFile; fileRef = B213222267E53671484A1186C737F657 /* VirtualTimeScheduler.swift */; }; - 8F891487CD3D8F8FC6CA2A31ADB6F2BF /* BeCloseTo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 289AA8560267D6FE71AE59B1DD9DC1A6 /* BeCloseTo.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - 91588632E51DDF15408DD0E701901CA4 /* World+DSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = D2446BD6AD0BDD49112B206A1436ACC9 /* World+DSL.swift */; }; - 9160746DE490CC23C9963FF4C90E521C /* ExampleGroup.swift in Sources */ = {isa = PBXBuildFile; fileRef = B4A2CBAF6BC9B83ACBE421DFBDC1A4A1 /* ExampleGroup.swift */; }; - 9251481E934B38D1D0F1C2551E68B550 /* QCKDSL.m in Sources */ = {isa = PBXBuildFile; fileRef = E442269CBD76E7D82BE1190F2073B14F /* QCKDSL.m */; }; - 92AF5F26943E64219F444626AB0DEBCA /* Match.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEC13D70DC2A9EB89F1D7CD79AC4E274 /* Match.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - 92B256AEBC87010FA00EC184001B98E7 /* JapxRxCodableAlamofire.swift in Sources */ = {isa = PBXBuildFile; fileRef = B291C674A36D0DDB4C2793FA506230B2 /* JapxRxCodableAlamofire.swift */; }; - 92DBF89DA7776E395DA7CCBA4133889D /* BeIdenticalTo.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAB9D6C3F60852ADA0F1CE881F621897 /* BeIdenticalTo.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - 93448D340A8E100FA8FE112BCEE6F1E2 /* NMBStringify.h in Headers */ = {isa = PBXBuildFile; fileRef = A2FAB1AC98722EFF8BBE85FB95565494 /* NMBStringify.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 95283BD22191A8620FADC2152C1A2999 /* BeginWith.swift in Sources */ = {isa = PBXBuildFile; fileRef = D3FB4A5242BBE1E92389957C7B3AAC01 /* BeginWith.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - 956883FE665783DBE86DA4DEF2B4FEA3 /* MatcherFunc.swift in Sources */ = {isa = PBXBuildFile; fileRef = E6F646FAAEE3E0AB13DC512B80D08F3A /* MatcherFunc.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - 95F0814C79EE87496EAA19FE88221DF4 /* Take.swift in Sources */ = {isa = PBXBuildFile; fileRef = A354061CB5AD12621E2AF90AEF0B1DCC /* Take.swift */; }; - 96A9D2B59C27325800051D4E4A0034E8 /* PrimitiveSequence+Zip+arity.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1694C45BC91914540F64F67606885508 /* PrimitiveSequence+Zip+arity.swift */; }; - 971D32B76CC67F800CEBD49C2889C98E /* PrimitiveSequence.swift in Sources */ = {isa = PBXBuildFile; fileRef = B151C968DA9E831ECC1FEDA2BAA67C0C /* PrimitiveSequence.swift */; }; - 9771FCDAA443C5C506040FF461C5C552 /* JapxRxAlamofire.swift in Sources */ = {isa = PBXBuildFile; fileRef = 82378C5FBA30B592FF9CB304183C844E /* JapxRxAlamofire.swift */; }; - 9942DC764F580CD1F991D176BB01CDD5 /* Buffer.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA1DF869F982578951E99C5B94DD2C0F /* Buffer.swift */; }; - 9A7521D410822D28E1B6B4269D07007E /* SwiftSupport.swift in Sources */ = {isa = PBXBuildFile; fileRef = A3A623B7D8CE0AC3A8C2DC0B7869E848 /* SwiftSupport.swift */; }; - 9C04E23367532FF10D6D6E48A2E599CC /* ImmediateSchedulerType.swift in Sources */ = {isa = PBXBuildFile; fileRef = AC5A14A61EC59727FCCE41CBC224DF9D /* ImmediateSchedulerType.swift */; }; - 9DB7FC7D31DD14D9DB88A2B5F94A5707 /* AssertionRecorder.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFA9DCE95A62F2F6089238A70E5E42F4 /* AssertionRecorder.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - 9EA9BC5652F703011810E295ACB9A50B /* InfiniteSequence.swift in Sources */ = {isa = PBXBuildFile; fileRef = A06D0B8AEF790D3388D83F8052A891C4 /* InfiniteSequence.swift */; }; - 9F585CDA5A2FD9BCB0B9A37E722AD387 /* ExpectationMessage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C7C4D6476743C624BB7FE21AE4D1A58 /* ExpectationMessage.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - 9FD0C405C0C5B5F1AD75ABA1A743F8AC /* NSError+Japx.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1567530F58DEF49734DABDF10496B2A8 /* NSError+Japx.swift */; }; - A01F43A066E49080EDF1247955804114 /* QuickTestSuite.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CAD9B4DD65BE19A2F998CD0B1A54EFD /* QuickTestSuite.swift */; }; - A024C89B15A4BF7631686F526CD1CA53 /* DispatchQueue+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 53C89B59714AAFCB60841E800AACD0E5 /* DispatchQueue+Extensions.swift */; }; - A036C8323484A5009F20DDBC73B8DFD4 /* QuickSelectedTestSuiteBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 49D0C944710A85D4F7299903DE5B8AFF /* QuickSelectedTestSuiteBuilder.swift */; }; - A26B5473D153E59B947B18DC60F13C87 /* String+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = 68C60EA1E09FCCF52166F6959CB8E461 /* String+Rx.swift */; }; - A2E6E82D31B0AEC354FC06E89B378328 /* StartWith.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD42D78126E15567AF99D1A0EA5CF6A4 /* StartWith.swift */; }; - A350958D67377DE80E194D50D5F6C3B4 /* CwlBadInstructionException.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2BC10D0C7A8B7D66C455582FC474A94B /* CwlBadInstructionException.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - A49166B9899FB8D9EA2EE261EB7ACA48 /* ReplaySubject.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3FB6FED914F798E0412DEAFC725FC65A /* ReplaySubject.swift */; }; - A5ADEF55257E4C1A482BF072C205F388 /* ParameterEncoding.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52B723982438311F31203845D8233D71 /* ParameterEncoding.swift */; }; - A77C011D550EFFB05C3609BFB4DAE378 /* NMBExpectation.swift in Sources */ = {isa = PBXBuildFile; fileRef = F863E85DC61331F07EC3526419F49675 /* NMBExpectation.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - A971D89C528D23212F024B371F0E1718 /* Quick.h in Headers */ = {isa = PBXBuildFile; fileRef = 5C1E748E84F429734A1718281BAEB279 /* Quick.h */; settings = {ATTRIBUTES = (Public, ); }; }; - AAD8D9F508F9CC045C4715D1F27B2A73 /* ThrowError.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB68F50D7E397F0F80908E0513ED2FB3 /* ThrowError.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - ABAEB9DEE3CE05729A9442CFA1988407 /* SessionManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5F8A220C38BEFC89B039ED846473EC88 /* SessionManager.swift */; }; - ACD34B5677A4CE058773F3C8362ACD63 /* Single.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFFF0AD1AE14BD28753DD5F1491A4DC0 /* Single.swift */; }; - AD6681E3DFBC3870EA1FB6AF1B94CF6E /* CwlDarwinDefinitions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3A0F2F5350B6E20BEDC839C6E2FF75E9 /* CwlDarwinDefinitions.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - ADB18D94C4F71AE2FCE388100D556B0F /* ResponseSerialization.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA371A094C22C3A379F35087022E1A46 /* ResponseSerialization.swift */; }; - ADBA177B4874038FCE159C211BC6FAF9 /* Empty.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9F42392E8A648E90EFA8C5EC22A1725C /* Empty.swift */; }; - AECE4C75909A2BE8E124BAE6DA90E9E1 /* ScheduledItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 64A0B52426454456A449ECA94FCB5731 /* ScheduledItem.swift */; }; - AF24D133DECD77F269E7977E3F2AD315 /* InvocableScheduledItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 04BDF81A464445E0B81DCE4F598C6443 /* InvocableScheduledItem.swift */; }; - AF749D5A7AB360F4FFCAA9BB96E5065F /* URL+FileName.swift in Sources */ = {isa = PBXBuildFile; fileRef = CBAC7A2EF9147C4C871156392041F36A /* URL+FileName.swift */; }; - B082FA7223428C8DE32F7DE7F5AF441C /* AFError.swift in Sources */ = {isa = PBXBuildFile; fileRef = C42C6204EC93C6CF85FE5ACF97B37BED /* AFError.swift */; }; - B256929ECC15CB5E4132E0AC72E4CD80 /* FailureMessage.swift in Sources */ = {isa = PBXBuildFile; fileRef = C2116C6E3701131739336F194C497D79 /* FailureMessage.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - B2E54789768E4F4EE35F11E0034C7383 /* Notifications.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB8E85A65821C769A3FDDEDE63A2DA16 /* Notifications.swift */; }; - B348521C288DE431D23839823A4A1ACB /* SatisfyAnyOf.swift in Sources */ = {isa = PBXBuildFile; fileRef = FD13C7D09BC660970DAD4DD42BFBE2EA /* SatisfyAnyOf.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - B388E514638CB570FFB66D10716E9EE5 /* BeLessThan.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1758EF14EC4F7CD16EA6C3DA6A167CE6 /* BeLessThan.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - B42F12890A2DCE31CA121F14408782DD /* SingleAsync.swift in Sources */ = {isa = PBXBuildFile; fileRef = D30E3DED98C12B9FE61CFCA35D7A9718 /* SingleAsync.swift */; }; - B49BC835D3E492C4B21ED71F13477D5D /* InvocableType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 05719976128743C58E4F30E2FB42A06B /* InvocableType.swift */; }; - B59269BDD5B3326B34F57EEAC19DA43C /* Zip.swift in Sources */ = {isa = PBXBuildFile; fileRef = 71CBF2CA8CF8F7365FB77E7DFECDFE3A /* Zip.swift */; }; - B5FC8C15EDF2EA1B3CCCFDC98C7B61F7 /* ObservableType+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 867C65C596D4FF2A189A392CA57DBD2F /* ObservableType+Extensions.swift */; }; - B6F6E4CC26451E91B59FAE0F6841DC1F /* Alamofire-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = ED3D76ED5A8DC18569067B146CA39DA1 /* Alamofire-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B7CD7BFA384624FFAE3B2BDD59BA53D1 /* Filter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5270575E56EA5E147CC37D56829F8F62 /* Filter.swift */; }; - B9088020D1F8B4236755F2E1699D760D /* Generate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9E7AF262FD73F2513838FB1DFE4BFDF4 /* Generate.swift */; }; - B96FD45AF33789C853F5A4FB615287AD /* Sequence.swift in Sources */ = {isa = PBXBuildFile; fileRef = 50FD72273A31070FDCD6CA547CB45C12 /* Sequence.swift */; }; - B99ECC46BBF6E56801F7B93466CC0FB7 /* DisposeBag.swift in Sources */ = {isa = PBXBuildFile; fileRef = B0C4AB0FCF25365AC9DB3B7D19FBB0FD /* DisposeBag.swift */; }; - BA6F467D77F5B693B44971F76580D507 /* TakeWhile.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8B060D843ED2FD2A493542FD7A7DAA49 /* TakeWhile.swift */; }; - BBEA31617537DDB119670F63194AB440 /* Queue.swift in Sources */ = {isa = PBXBuildFile; fileRef = A4B5F7EC753C7490A198948C58239CAF /* Queue.swift */; }; - BC51FFBE1CEEFBB157B8DA358C7FFA23 /* ScheduledItemType.swift in Sources */ = {isa = PBXBuildFile; fileRef = D4EB4C4A060157A90FE48087C6729192 /* ScheduledItemType.swift */; }; - BC53B1347CCACC50814A102FA46B658B /* BeAKindOf.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0A0EFC912C204103D7E01C5C40A8970A /* BeAKindOf.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - BC8BE6AAA7987E8961C0B1FBF6A174A9 /* Bag+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F5DAFD442C0375634DFAC7160C1EBFD /* Bag+Rx.swift */; }; - BCA742E6126C8F55FB3085AC5A056CB7 /* Stringers.swift in Sources */ = {isa = PBXBuildFile; fileRef = D9F633375CC471F97147FDF2D13E0E61 /* Stringers.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - BD91B77F283982F04CE948EA38795EFA /* Await.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5ACD9828C1F96512B025A33F9E179CAF /* Await.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - BF367D5F3EA004099E9A9D1C042F78D8 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1129FAEE8383C900905425892E61419F /* Foundation.framework */; }; - BF9235130FD15BA4CAB3E828ADFACD97 /* ElementsEqual.swift in Sources */ = {isa = PBXBuildFile; fileRef = CBA2D008A9FAE1895A076F3AE36BB6D0 /* ElementsEqual.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - C1E632C4990E19B8795DC697081D78A1 /* GroupBy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2FCA042D7CFA28CD26EB6C463AA0AD16 /* GroupBy.swift */; }; - C362C08C3C9DF2344E7F9754F740EF25 /* DSL.h in Headers */ = {isa = PBXBuildFile; fileRef = FE195C6A0BE17B04690BBACD545FF260 /* DSL.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C38D67EFE019F0EE4BD6A4423A00C7B5 /* SubscriptionDisposable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9166CC7AAA44E1DFD7097F23111EE2A4 /* SubscriptionDisposable.swift */; }; - C3A312461F1E4CF3D4BBA84B0F0AC40F /* ObservableType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 57B2620330E19F1AB4D6763ED9D53466 /* ObservableType.swift */; }; - C3B48959D0922D2414C5417104736E6E /* HistoricalSchedulerTimeConverter.swift in Sources */ = {isa = PBXBuildFile; fileRef = C7E7D772C83C11DC5D0E3E6DE391C336 /* HistoricalSchedulerTimeConverter.swift */; }; - C425B8C3EC8C0612698840BEE599E2A4 /* Example.swift in Sources */ = {isa = PBXBuildFile; fileRef = E7823AEC82305C1DAD50759EB0C12FC0 /* Example.swift */; }; - C472DA557E7C8581DD4C6FAA91A3AEDF /* CwlMachBadInstructionHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = 978D2DB91830151D82F0A03BF828A0F2 /* CwlMachBadInstructionHandler.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C4F2A127B586164C9C33B09271CC54E2 /* HistoricalScheduler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0A939186257B6587868E549D56C68970 /* HistoricalScheduler.swift */; }; - C5031E73785A648DB774B7B400990B70 /* CwlCatchException.h in Headers */ = {isa = PBXBuildFile; fileRef = 916D97BE0D1B8ADFBAF6E2ABE6A6C794 /* CwlCatchException.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C7DE901D1FB7AB3EAD19AEA6B41C8A48 /* TakeLast.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6B0809C87C3A811F9B96CC7E9F9332E4 /* TakeLast.swift */; }; - C7FA5672022A0D0675E2F61E01A79277 /* RefCountDisposable.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBE40900DAF6F3F033CF344BE57D0A25 /* RefCountDisposable.swift */; }; - C9233D1C51F3DE21246E54CC1768DBD6 /* Range.swift in Sources */ = {isa = PBXBuildFile; fileRef = D300EB8271CDCE6BDDFED84D5E1111D7 /* Range.swift */; }; - CB7529E05315B2C9B27A2C55A48E27E4 /* SubjectType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 70B290486D3A112F2F57B090D37EE1B9 /* SubjectType.swift */; }; - CB8F6C788B3B913D5DB96BECFC05A3DB /* QuickSpecBase.m in Sources */ = {isa = PBXBuildFile; fileRef = 5C359D0B9E2D5BBC7B28A3BB1CC27C72 /* QuickSpecBase.m */; }; - CD2E23AD197BC0E08EBAF7B7E1A7B04C /* Platform.Linux.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1156EECD92EC3A0D0C17613B765369AF /* Platform.Linux.swift */; }; - CD86215E5BC4DB5C76E575AE1A6CAB63 /* CwlCatchException.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4720F3A17069EDDF749001C8F81595C3 /* CwlCatchException.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - CDA937481BD42B7D996B3060FD00F10F /* First.swift in Sources */ = {isa = PBXBuildFile; fileRef = 899567CFF4C6BDED365F7DED5A66D272 /* First.swift */; }; - CEB97DF581095CC132B2F66E4AC4D82E /* RxSwift-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 25E58A933CBCF7186848B6534DAB7F44 /* RxSwift-dummy.m */; }; - CF5B0FF9D223C5A2C4FF109A7EB15220 /* Concat.swift in Sources */ = {isa = PBXBuildFile; fileRef = D5CE1836B53B3A5F50EC7BD765075CD5 /* Concat.swift */; }; - CFDA57AB27E3E0109773CBD64E9CAC8E /* CombineLatest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9CEF1DBA87B51DE7D676C87314C59AED /* CombineLatest.swift */; }; - D01BF8FF4B0F677911122C2EB5F52A7B /* ThrowAssertion.swift in Sources */ = {isa = PBXBuildFile; fileRef = 63140FA6F9DFC7949CCA619F4E4D4326 /* ThrowAssertion.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - D05D8656F5C5E0338C2B7AFA1997666F /* PostNotification.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2342112B6394C85F80EBB9CABA0DAE96 /* PostNotification.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - D179E9340A43289F77DD4FB946403249 /* SkipWhile.swift in Sources */ = {isa = PBXBuildFile; fileRef = 23596BF81EDF3D0E5B25A5121CDB280A /* SkipWhile.swift */; }; - D2B384893454A891D32CB20A53E4EDAF /* DispatchQueue+Alamofire.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5DA561000475C2B9E0429D1834CD3E6E /* DispatchQueue+Alamofire.swift */; }; - D3EC987B4B3FE156D2E0DD65E332C776 /* WithLatestFrom.swift in Sources */ = {isa = PBXBuildFile; fileRef = 73D46314659DFB3716F6B9090CA55939 /* WithLatestFrom.swift */; }; - D3FE01922F55858A586B21D6967AC1D6 /* AsSingle.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7ED3490E6F1D29F6A87D467F70B70F26 /* AsSingle.swift */; }; - D4A3046559B51318AA40D658B4F5B8FF /* CombineLatest+arity.swift in Sources */ = {isa = PBXBuildFile; fileRef = C3F370F08FE9B9544C99EAA2E3586BB8 /* CombineLatest+arity.swift */; }; - D583829CA1D3C6B9B8F5C085B1D597EF /* Validation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8C8F16E516F0415418E7498D38C160CA /* Validation.swift */; }; - D73EABBA1747D2F7B49BD355516B6B27 /* RxSwift.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 96FA2FC8D08EDC34A0DAF9788ECE32C4 /* RxSwift.framework */; }; - D7F1FC2CD64C4575A609FF752122CABF /* Nimble.h in Headers */ = {isa = PBXBuildFile; fileRef = 6F81C4E7B13A574A2F22BBE896C82A69 /* Nimble.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D8E24B7B38824ACB3B7F50D1E17849F6 /* Sample.swift in Sources */ = {isa = PBXBuildFile; fileRef = 141A1E6980A0DB70A48E325B582A0D29 /* Sample.swift */; }; - DA3A0C0176F0825E6CE95021620DA84D /* Reactive.swift in Sources */ = {isa = PBXBuildFile; fileRef = 28A07193C90C3AF318728556EBBFC379 /* Reactive.swift */; }; - DBAF9AA1184598C014E733C648AC90E9 /* Errors.swift in Sources */ = {isa = PBXBuildFile; fileRef = B328B37F957D9852E7F34DF7FBC67D5A /* Errors.swift */; }; - DBF31BBF7D554DB7BEEBA700D32D31AC /* JapxCodableAlamofire.swift in Sources */ = {isa = PBXBuildFile; fileRef = D41571FA3C256D71A92E72A077844451 /* JapxCodableAlamofire.swift */; }; - DC02CFAED21121E30E9838AEA3796627 /* Expression.swift in Sources */ = {isa = PBXBuildFile; fileRef = B1EECAA5C2F4AF87C930C3429F2DB670 /* Expression.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - DC814E889B3E67A3A4D1A0C00E033171 /* ContainElementSatisfying.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CB6A3ECA80A21CE808C59910479BF92 /* ContainElementSatisfying.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - DD391609FCC7913EF98C53E634713EE5 /* ObservableType+PrimitiveSequence.swift in Sources */ = {isa = PBXBuildFile; fileRef = 63A8F7E8A425EB243E727F33599099B2 /* ObservableType+PrimitiveSequence.swift */; }; - DFAE635C5E8AFE5B690A1818E00CE1B2 /* Timeout.swift in Sources */ = {isa = PBXBuildFile; fileRef = C15ABF7AE3E3F880FE497B41E019B745 /* Timeout.swift */; }; - E04DE7D4CC34E8D0E57C9A5E90957BD9 /* SerialDisposable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6866DC1CFF4C3FB9D63AA93DF850C669 /* SerialDisposable.swift */; }; - E04EFEEAEF6AFAA1D988CF2C237018A1 /* DelaySubscription.swift in Sources */ = {isa = PBXBuildFile; fileRef = 12DD9B60A436C3FB71E12A1B7CAB0C12 /* DelaySubscription.swift */; }; - E2A183DF1AB8B1D4F9270BD844900F19 /* Merge.swift in Sources */ = {isa = PBXBuildFile; fileRef = A63FCE3E8EC723378B15B85AC0925BB2 /* Merge.swift */; }; - E31A3CC87FF9AF95D70499E0431FDB14 /* AsMaybe.swift in Sources */ = {isa = PBXBuildFile; fileRef = E39C4B0028EDE095EB7D8807F97F946E /* AsMaybe.swift */; }; - E3DABA64A7C8FAD96B6F7234A72AB0A0 /* AnonymousObserver.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC8D8E4383C5D9FB96733F16B5400E30 /* AnonymousObserver.swift */; }; - E608140179A5D294C91496AEE7136774 /* DSL+Wait.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0D59860F14F040F1C95C0936BF1BCAE8 /* DSL+Wait.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - E7BA58DE1AA8F11BAA7E8817D8AB509C /* Result.swift in Sources */ = {isa = PBXBuildFile; fileRef = DF9052D709829D2A32C79BEA0FF5573C /* Result.swift */; }; - E90BD1844A60E3A65F8664BB795B71FF /* String+C99ExtendedIdentifier.swift in Sources */ = {isa = PBXBuildFile; fileRef = D725834000B2F6361F3891343E27A928 /* String+C99ExtendedIdentifier.swift */; }; - EAD1A83D5D4A662426C3E8898F358C40 /* Skip.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2262DDDDDACEC05BC6DC57C6B511081B /* Skip.swift */; }; - EB68AB47285200287AF1BAA726101A97 /* ToArray.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADC18B1E7D7110769DB60C214014B17E /* ToArray.swift */; }; - EB9BE2C335235BE47AA627BF567A365A /* Debug.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0D0E2331C1913C07C3F63A1B56C8A698 /* Debug.swift */; }; - EBA32302B6D87E589245832B2C6EF50F /* BeGreaterThan.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C13B799FBBE01ED2DA7DD609C99D4D6 /* BeGreaterThan.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - ECA13E8BB0EF60C0A9243E0E8039A4C5 /* QuickSpecBase.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C90AAF28F25B0B13E1FB5CFF777A6F3 /* QuickSpecBase.h */; settings = {ATTRIBUTES = (Project, ); }; }; - ED1DFE005A6162E9BEF25864282CF98E /* ErrorUtility.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4EDB9F999CF47074E07ADA74C072520E /* ErrorUtility.swift */; }; - ED3E709ABD60330B9E8DDCE53BBF67B5 /* PublishSubject.swift in Sources */ = {isa = PBXBuildFile; fileRef = 70C2F5369CE6D0D1615A8A1C1137496B /* PublishSubject.swift */; }; - F057B0B5A21F053B344FD2CE6B7031C5 /* ObservableConvertibleType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 10060999FA110AEAFAA5A492B3F04A1B /* ObservableConvertibleType.swift */; }; - F0A6D424C5E83532D1A828FE09588B4C /* AdapterProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4FEF1E8A6277161BAC05548D564D82A6 /* AdapterProtocols.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - F0EB5EDC6364CBBB8D73B9680BC5FBF6 /* BeVoid.swift in Sources */ = {isa = PBXBuildFile; fileRef = F4DE92299ACBEA76596B10C81D47457A /* BeVoid.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - F10A1B92C1E050E153738C5C4BAC664F /* QuickConfiguration.h in Headers */ = {isa = PBXBuildFile; fileRef = F7113487E18073C510F4DC28050B10AF /* QuickConfiguration.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F185DD177F74554EBA88078B6E9135FA /* ObserveOn.swift in Sources */ = {isa = PBXBuildFile; fileRef = 365509E197817752D23DCCF395DD7E0C /* ObserveOn.swift */; }; - F18A92EC2E55462C6EBA05ADF6D8D1F6 /* AsyncSubject.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBFDBAF86DA5A80D38C9DC50A86F864C /* AsyncSubject.swift */; }; - F1BBB0E2E94C471B1DB7897053B4D522 /* Observable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 83D1AEA3C7F0B1D8C1A403B1A8BA4055 /* Observable.swift */; }; - F4D3C734AAF98DB3A17ECC3D6A95BC52 /* CwlCatchBadInstruction.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2B88602B328A20FDB7AAD8CE761BE7C3 /* CwlCatchBadInstruction.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - F4D82D78C14BF258042CDA3C1B15B7E1 /* MultipartFormData.swift in Sources */ = {isa = PBXBuildFile; fileRef = FCAD77C30A69C7B0BDF1EA47B9E49019 /* MultipartFormData.swift */; }; - F63DF3404C15E8690622A510170A9AC1 /* Materialize.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1C7D563718B2B05EC295EC4E8F9B8A9B /* Materialize.swift */; }; - F6C049051B0D9819F5D6E7915ECAEEB3 /* RxSwift-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = FC04B32F062855DA0B3ED4D9A37A1428 /* RxSwift-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F6C7AE2241991BCFAC8DC2ECEFD2FA21 /* RecursiveScheduler.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1CB9A3E3CEA651B6C1EADABB9C7EC53 /* RecursiveScheduler.swift */; }; - F72E8C9D01979824B70FBA6E7A70249F /* BeAnInstanceOf.swift in Sources */ = {isa = PBXBuildFile; fileRef = 48EF5C50242CDB78F321B525EE954B03 /* BeAnInstanceOf.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - F8288C110798436DBF4DD10513976AC3 /* Lock.swift in Sources */ = {isa = PBXBuildFile; fileRef = 23B3452A498760A3E1713B189659CCED /* Lock.swift */; }; - F8C158113817C97929BF5EE06E1CA03B /* Switch.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84252249834CA372426B7701288B5005 /* Switch.swift */; }; - FA883119A3267FD7559C2A1D7CE7A3CF /* Multicast.swift in Sources */ = {isa = PBXBuildFile; fileRef = D21AE4B7FAE9A1F34F916CF771006AAF /* Multicast.swift */; }; - FAE8D9F50C5FEAF65617922C46B704C3 /* NimbleXCTestHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13D17F3ED0AE1FE68DBE77F1091337BE /* NimbleXCTestHandler.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - FB40FED7E750AF80AB50BC8E3B49994F /* CwlPreconditionTesting.h in Headers */ = {isa = PBXBuildFile; fileRef = 81F161311D15A1000F8CAF9330A74D1C /* CwlPreconditionTesting.h */; settings = {ATTRIBUTES = (Public, ); }; }; - FC5C276D1E3D21748F58F3577C928AD2 /* Expectation.swift in Sources */ = {isa = PBXBuildFile; fileRef = D2658FE22AE9DE33046243E74EFB2C4E /* Expectation.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - FCBAE53F839A7F728A9C4DEF966DDB3F /* Disposable.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC1736495E00EA1FAC8CB3AA7D34FF84 /* Disposable.swift */; }; - FD2A38B62603F0FF59C66F8095A3EFFE /* NSBundle+CurrentTestBundle.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF0F767AFB6A3924EC9A082E6EEEEF5B /* NSBundle+CurrentTestBundle.swift */; }; - FF77FBA774CA40E2DE50C7937D85769A /* SynchronizedUnsubscribeType.swift in Sources */ = {isa = PBXBuildFile; fileRef = DF1F03205B013D99BE5CB93B1B342BCC /* SynchronizedUnsubscribeType.swift */; }; - FFB9BA683C701138C08A211F3E192F56 /* SessionDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C9C5AF948678265D6B05F001AA64FA3 /* SessionDelegate.swift */; }; + 0006E0E41ECB3592AE456DB0B1E5521C /* BooleanDisposable.swift in Sources */ = {isa = PBXBuildFile; fileRef = FB2C79487041F1CAE2A86165900A577E /* BooleanDisposable.swift */; }; + 00737105B7FC6E241A72C8CA3DB03F68 /* TakeWhile.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8B060D843ED2FD2A493542FD7A7DAA49 /* TakeWhile.swift */; }; + 00746523D347B51DCEAC350646D4A609 /* SwitchIfEmpty.swift in Sources */ = {isa = PBXBuildFile; fileRef = F5434193F6C2688A18BD4BB19C0E6405 /* SwitchIfEmpty.swift */; }; + 0078D6113A07FC2352065C9A9A4B2319 /* Merge.swift in Sources */ = {isa = PBXBuildFile; fileRef = A63FCE3E8EC723378B15B85AC0925BB2 /* Merge.swift */; }; + 011CAC6A74AAEEAF9F54E817D1A9FD33 /* QuickTestSuite.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CAD9B4DD65BE19A2F998CD0B1A54EFD /* QuickTestSuite.swift */; }; + 01692FC85BC6ECB122F1380ECBBA6EF5 /* String+C99ExtendedIdentifier.swift in Sources */ = {isa = PBXBuildFile; fileRef = D725834000B2F6361F3891343E27A928 /* String+C99ExtendedIdentifier.swift */; }; + 01A100AE3D2AF7A7D6A6BF1A91A4EDF3 /* SuiteHooks.swift in Sources */ = {isa = PBXBuildFile; fileRef = 91E84DF32BD1A73A11B84FBD6A24B0FD /* SuiteHooks.swift */; }; + 0202EFC9BBBBEAD79330C66F27381EAA /* First.swift in Sources */ = {isa = PBXBuildFile; fileRef = 899567CFF4C6BDED365F7DED5A66D272 /* First.swift */; }; + 02A1AAA49758A955770775CD409D8635 /* CwlCatchException.m in Sources */ = {isa = PBXBuildFile; fileRef = A4166D3B23622555FADB5C95EB762FF2 /* CwlCatchException.m */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; + 04FDD3BD021F92DA0A6F432D1B3F7E50 /* Japx-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 68653544F36673156B8C84C8A281DC94 /* Japx-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 05376A2B4A599FB919C25922E08EF492 /* Filter.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4CFA067F8D26DE553945F0E2B4D0AC9 /* Filter.swift */; }; + 05AA14302A6822F50605CF81E523CB8D /* Disposable.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC1736495E00EA1FAC8CB3AA7D34FF84 /* Disposable.swift */; }; + 060F80CDE19450AFF2AE8B4DC7767619 /* TakeLast.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6B0809C87C3A811F9B96CC7E9F9332E4 /* TakeLast.swift */; }; + 0892D14FE7A3452423E9129D7917664B /* MatchError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 49820A9C897E6F8391639FD2E18D8573 /* MatchError.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; + 0BBF73AD76AD264F22A028B8D5320D74 /* ConnectableObservableType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0315611A5D451156BECB5480D8D243B3 /* ConnectableObservableType.swift */; }; + 0BCD3903A5E6C1901D7566CD2C81D898 /* Catch.swift in Sources */ = {isa = PBXBuildFile; fileRef = D791E303C6E40436B6D82B8206329DA4 /* Catch.swift */; }; + 0C5E11DE24DAA737704B355F5F2F3426 /* ParameterEncoding.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52B723982438311F31203845D8233D71 /* ParameterEncoding.swift */; }; + 0D5EAD9182E13C532DE6A1A8130C13A7 /* JapxRxCodableAlamofire.swift in Sources */ = {isa = PBXBuildFile; fileRef = B291C674A36D0DDB4C2793FA506230B2 /* JapxRxCodableAlamofire.swift */; }; + 0FC285BE0A6E773F8229B1B66A93E51E /* Multicast.swift in Sources */ = {isa = PBXBuildFile; fileRef = D21AE4B7FAE9A1F34F916CF771006AAF /* Multicast.swift */; }; + 0FE385F122B1372C80CDF23CC3BF6C3C /* Delay.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4FCA06E17E6E798A5A1FBF641AD4C7E1 /* Delay.swift */; }; + 109C479ABBE7B1DE720215B6867CD600 /* VirtualTimeConverterType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 02B4344742D8CD5E4B6CEA4F3502CC0B /* VirtualTimeConverterType.swift */; }; + 129812D1A258933554B49E23022F195F /* DisposeBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2A72D7E479297C1F73E6B4A7FB53CC9C /* DisposeBase.swift */; }; + 12A5AF072463622EE29839DA03E78D70 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E6587F8CC961169103A4B57E0C611279 /* Foundation.framework */; }; + 12B090F407F2BED6DA952E4BEE962E42 /* RxSwift-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 25E58A933CBCF7186848B6534DAB7F44 /* RxSwift-dummy.m */; }; + 132E0F619E4338E5D1B27E4C72076B3F /* Notifications.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB8E85A65821C769A3FDDEDE63A2DA16 /* Notifications.swift */; }; + 138A5DC34882EB14C392409FA13DF13F /* Materialize.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1C7D563718B2B05EC295EC4E8F9B8A9B /* Materialize.swift */; }; + 13D2A4D59DD9612E1AA7F3182A342162 /* mach_excServer.c in Sources */ = {isa = PBXBuildFile; fileRef = 28CA65DB7257B8ED32A2D4C8CE3EB468 /* mach_excServer.c */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; + 1855088DFF281DC7261B87A94F53638A /* BehaviorSubject.swift in Sources */ = {isa = PBXBuildFile; fileRef = 95931F09F8C0DB165C46E68D1108337F /* BehaviorSubject.swift */; }; + 192A3F8BEC1A99FD8712D3E09724D72C /* FailureMessage.swift in Sources */ = {isa = PBXBuildFile; fileRef = C2116C6E3701131739336F194C497D79 /* FailureMessage.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; + 1945CD5D63A1C164AEAAA9A33E85571E /* Alamofire-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 96409F854B923941CCEABB7D91DBBEE8 /* Alamofire-dummy.m */; }; + 1986B50C74F1697EA43F68335C93CEB3 /* MultipartFormData.swift in Sources */ = {isa = PBXBuildFile; fileRef = FCAD77C30A69C7B0BDF1EA47B9E49019 /* MultipartFormData.swift */; }; + 19BA8AF46D9CC49E3E2CEDCAF6354442 /* CwlPreconditionTesting.h in Headers */ = {isa = PBXBuildFile; fileRef = 81F161311D15A1000F8CAF9330A74D1C /* CwlPreconditionTesting.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1B4C7E64676769E5BD5E0A43F5671247 /* ToArray.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADC18B1E7D7110769DB60C214014B17E /* ToArray.swift */; }; + 1B4D25D41B2CE138D184DD18A534ADB2 /* ExampleHooks.swift in Sources */ = {isa = PBXBuildFile; fileRef = 536E8C2670A21948DA298A2BD413B773 /* ExampleHooks.swift */; }; + 1C4ED8D7595AA0F2ED0220D611AC238B /* DispatchQueue+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 53C89B59714AAFCB60841E800AACD0E5 /* DispatchQueue+Extensions.swift */; }; + 1DDC1057ADFF6BCD4C0ED4BE14F34BFF /* GroupBy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2FCA042D7CFA28CD26EB6C463AA0AD16 /* GroupBy.swift */; }; + 1E5C4F9EB261B75BECC921A303CA3AA6 /* ErrorUtility.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4EDB9F999CF47074E07ADA74C072520E /* ErrorUtility.swift */; }; + 208F9DADCC8F01AAC14247BF0E54C863 /* ExampleGroup.swift in Sources */ = {isa = PBXBuildFile; fileRef = B4A2CBAF6BC9B83ACBE421DFBDC1A4A1 /* ExampleGroup.swift */; }; + 20DBC351C1CC754EB00A499537D2D703 /* SkipWhile.swift in Sources */ = {isa = PBXBuildFile; fileRef = 23596BF81EDF3D0E5B25A5121CDB280A /* SkipWhile.swift */; }; + 221CA1AF05402754140DDD0BFA647F73 /* Producer.swift in Sources */ = {isa = PBXBuildFile; fileRef = E47374FC81FE6F65463B9DA4B4060BDB /* Producer.swift */; }; + 221ED892E5138A00F3CDF540E914519D /* CwlCatchException.h in Headers */ = {isa = PBXBuildFile; fileRef = 916D97BE0D1B8ADFBAF6E2ABE6A6C794 /* CwlCatchException.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 234849AD309265FD107C74357FC8C0CF /* DSL+Wait.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0D59860F14F040F1C95C0936BF1BCAE8 /* DSL+Wait.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; + 2391FFD3230B40E2348B5257D6296BBB /* BeGreaterThanOrEqualTo.swift in Sources */ = {isa = PBXBuildFile; fileRef = A81814BB57547A8D1CF8469FEE8EFEDF /* BeGreaterThanOrEqualTo.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; + 254A139F6149C62CB0CFA1622FF5EB77 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E6587F8CC961169103A4B57E0C611279 /* Foundation.framework */; }; + 25E6E74E226E52AFB37C8AFE58CC2D9A /* Dematerialize.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84C86148BEBED12B9A3C8038AF5D609E /* Dematerialize.swift */; }; + 2665F1B678FB60F411F920FA3800990C /* Disposables.swift in Sources */ = {isa = PBXBuildFile; fileRef = BDDFE5DC9D1DFDF890C2B2504A754402 /* Disposables.swift */; }; + 26B9FEAB3DE0C8B91709D53571752A3B /* MatcherFunc.swift in Sources */ = {isa = PBXBuildFile; fileRef = E6F646FAAEE3E0AB13DC512B80D08F3A /* MatcherFunc.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; + 26BFBD738BB96C6C730D4DC96D47A107 /* QuickConfiguration.m in Sources */ = {isa = PBXBuildFile; fileRef = 8D7C99DD4432B8396A13747A54AD1AC3 /* QuickConfiguration.m */; }; + 274F67CE3CA7EF8DF81C9F01B29CA8AF /* ConcurrentMainScheduler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2C9F4C346385C521B38ABADB795E63E4 /* ConcurrentMainScheduler.swift */; }; + 29499B0A22F8F99A040A5F92CB505726 /* Enumerated.swift in Sources */ = {isa = PBXBuildFile; fileRef = FF272122421CA7DCF5D96F03BC36DF78 /* Enumerated.swift */; }; + 29A01568B1DE5036788045AC0372A913 /* JapxObjC.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA3C4EA2908A9BDDED83E0208C137F92 /* JapxObjC.swift */; }; + 2A63FA5BBAE37D1E3414B7ADAF1D20E8 /* Completable+AndThen.swift in Sources */ = {isa = PBXBuildFile; fileRef = D96AE999025056CB72F4478E5688210D /* Completable+AndThen.swift */; }; + 2B350015B9F7546D0769649EE12D7D1A /* NimbleXCTestHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13D17F3ED0AE1FE68DBE77F1091337BE /* NimbleXCTestHandler.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; + 2BE5D1B1D8986048A3B0E3D73B9EE158 /* XCTestSuite+QuickTestSuiteBuilder.m in Sources */ = {isa = PBXBuildFile; fileRef = 2818748183B52656281B226AAC00129A /* XCTestSuite+QuickTestSuiteBuilder.m */; }; + 2C61B040BA6A9A7AE66C4D9BA26D5520 /* SessionDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C9C5AF948678265D6B05F001AA64FA3 /* SessionDelegate.swift */; }; + 2E3F284D1ED2EC146F38DBC8E7BE1210 /* Switch.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84252249834CA372426B7701288B5005 /* Switch.swift */; }; + 2EC60BF9E56C922B1A0C4F5C0CEADDD4 /* Lock.swift in Sources */ = {isa = PBXBuildFile; fileRef = 23B3452A498760A3E1713B189659CCED /* Lock.swift */; }; + 2F2FF1AE41BE851794FD34CBB639FC30 /* SchedulerType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 86EF6D09C443CE94C7FEF4E9123321B3 /* SchedulerType.swift */; }; + 303CB9037EF4F084815EC33FC2344234 /* Zip+Collection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 900268EB248BDF9CB6960020A0C75C3F /* Zip+Collection.swift */; }; + 31D5B18DE4145CD1F5A2EB79F9C5FD48 /* NopDisposable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 389C5D6905F3AB6BADB59DF47300F6F9 /* NopDisposable.swift */; }; + 3262B230B938C8D6522790093FEAF69D /* EndWith.swift in Sources */ = {isa = PBXBuildFile; fileRef = B6591CEA4224D4AE7827FC73521D5D9A /* EndWith.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; + 330E8E4A6596ED625E9B34C94CC4136E /* Await.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5ACD9828C1F96512B025A33F9E179CAF /* Await.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; + 33D645BE872850BD99C37C3EEB433C16 /* HistoricalSchedulerTimeConverter.swift in Sources */ = {isa = PBXBuildFile; fileRef = C7E7D772C83C11DC5D0E3E6DE391C336 /* HistoricalSchedulerTimeConverter.swift */; }; + 3460FEA0CEADB05D3B56C2E1CAF9590C /* ElementsEqual.swift in Sources */ = {isa = PBXBuildFile; fileRef = CBA2D008A9FAE1895A076F3AE36BB6D0 /* ElementsEqual.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; + 348D10D82BAD4F8DFD0B7DC810F4CE23 /* Maybe.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4552D07C2066F84BCF6DCC92DD36913E /* Maybe.swift */; }; + 34EA8D74C57BC1A6AC8C0A5B5267E56C /* QuickConfiguration.h in Headers */ = {isa = PBXBuildFile; fileRef = F7113487E18073C510F4DC28050B10AF /* QuickConfiguration.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3571F958A3907B3A806E62D50C2550D4 /* NetworkReachabilityManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4BA29F63324E4A754BB752B79303B7AA /* NetworkReachabilityManager.swift */; }; + 359367013A3DF7C681D9870A45670376 /* Sequence.swift in Sources */ = {isa = PBXBuildFile; fileRef = 50FD72273A31070FDCD6CA547CB45C12 /* Sequence.swift */; }; + 35B75341D118DC93250EF6A3666B207B /* PrimitiveSequence+Zip+arity.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1694C45BC91914540F64F67606885508 /* PrimitiveSequence+Zip+arity.swift */; }; + 36A174F5C9C1686342B9E78372CFBF3E /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E6587F8CC961169103A4B57E0C611279 /* Foundation.framework */; }; + 372DFDC2B478FA6846013992732701D2 /* Pods-Japx_Example-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 5600C425B693BE6751BC2B7777047D9A /* Pods-Japx_Example-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 37D2159C32D8CE5AB8C4D29B99BEBBA4 /* InvocableType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 05719976128743C58E4F30E2FB42A06B /* InvocableType.swift */; }; + 39133A7716CEDEB690A7DA9D12C45C4D /* CwlDarwinDefinitions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3A0F2F5350B6E20BEDC839C6E2FF75E9 /* CwlDarwinDefinitions.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; + 3945C968E94F5538CA744091E212218C /* Pods-Japx_Example-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = D2EA1E96F6BD7798EBC08754860F183D /* Pods-Japx_Example-dummy.m */; }; + 3A624AEE69586D92846E92C66DED2F17 /* MainScheduler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 86841DE698E2B853BE3BF7168D1E5030 /* MainScheduler.swift */; }; + 3BD0C370BBCEBDEA68B8EDBD969370EB /* mach_excServer.h in Headers */ = {isa = PBXBuildFile; fileRef = A9EAFAF233489337FD6201E5911B9F6A /* mach_excServer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3DCBCDCA5FC02DD9A912D33A5AAAD85E /* SerialDispatchQueueScheduler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52BAD60DAC70E76B244324343301F01B /* SerialDispatchQueueScheduler.swift */; }; + 403F837F9B4AC86C901D238D847A767A /* QuickSpecBase.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C90AAF28F25B0B13E1FB5CFF777A6F3 /* QuickSpecBase.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 409D9D85AF8BA907EB6F73D672667B38 /* JapxCodableAlamofire.swift in Sources */ = {isa = PBXBuildFile; fileRef = D41571FA3C256D71A92E72A077844451 /* JapxCodableAlamofire.swift */; }; + 416E6579EBDB56D3D9B2B7B6E34F0F9F /* DispatchQueueConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC74D0B70015CA3C4092CDCC2A1C820B /* DispatchQueueConfiguration.swift */; }; + 4203EF96811AE514D64AE069311B1575 /* AllPass.swift in Sources */ = {isa = PBXBuildFile; fileRef = 962A05D4C9EEB141CAD7D013559970F0 /* AllPass.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; + 42F76698690916E0407F51610D829412 /* BeGreaterThan.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C13B799FBBE01ED2DA7DD609C99D4D6 /* BeGreaterThan.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; + 441D82199837CB3B664F8BEA38202272 /* Observable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 83D1AEA3C7F0B1D8C1A403B1A8BA4055 /* Observable.swift */; }; + 44C9470137EF941955A1FDCE71D68C26 /* MatcherProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = D551F6A7E763A68E30F0719D4DAC0D74 /* MatcherProtocols.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; + 46B90B2CF2EB97B38C43A31E9A5478C2 /* PostNotification.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2342112B6394C85F80EBB9CABA0DAE96 /* PostNotification.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; + 46BDEBF35D99D2CC53EF72DFC5BDCDCC /* BeLessThanOrEqual.swift in Sources */ = {isa = PBXBuildFile; fileRef = FED89BE9A59FB84FA7AEE8B5CE1B2CA2 /* BeLessThanOrEqual.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; + 46CA52D34E72C3C8ADCF3C304B57F665 /* PublishSubject.swift in Sources */ = {isa = PBXBuildFile; fileRef = 70C2F5369CE6D0D1615A8A1C1137496B /* PublishSubject.swift */; }; + 472E717B6877D9CE9D39D1CDA560160F /* DelaySubscription.swift in Sources */ = {isa = PBXBuildFile; fileRef = 12DD9B60A436C3FB71E12A1B7CAB0C12 /* DelaySubscription.swift */; }; + 47CD7BF10EB479215A92E9DDE75A02AE /* Do.swift in Sources */ = {isa = PBXBuildFile; fileRef = 577806517FD769FEB5B147035BFDE7F9 /* Do.swift */; }; + 4B7E8C9C8A4FAE9B2E9F9A71B921839D /* Error.swift in Sources */ = {isa = PBXBuildFile; fileRef = CA7A43F34D340B9339310E1F46D2E8F6 /* Error.swift */; }; + 4D294B2BFD248971A3744820D59762DD /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E6587F8CC961169103A4B57E0C611279 /* Foundation.framework */; }; + 4E737D040955550EACFE774A383EB4A2 /* World+DSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = D2446BD6AD0BDD49112B206A1436ACC9 /* World+DSL.swift */; }; + 4F3FCA4CAE13C4F275CC4677A0D45AF9 /* Japx.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51C7D35D7DED817500D34F7435CDE5BD /* Japx.swift */; }; + 527F49D439E5593D1674720598DDFF60 /* Reactive.swift in Sources */ = {isa = PBXBuildFile; fileRef = 28A07193C90C3AF318728556EBBFC379 /* Reactive.swift */; }; + 52AB6461CAA9481D24835F3E48301FC6 /* BeIdenticalTo.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAB9D6C3F60852ADA0F1CE881F621897 /* BeIdenticalTo.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; + 53791F5E5F07400F92CFDFC89A432305 /* Validation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8C8F16E516F0415418E7498D38C160CA /* Validation.swift */; }; + 54FC301140536CFB2590902FC5FAF6DB /* Filter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5270575E56EA5E147CC37D56829F8F62 /* Filter.swift */; }; + 55218F497F6A4490DB07DD6CE9A7B58E /* Window.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4057915F8E4D4926F0A82D4D0F850573 /* Window.swift */; }; + 5578F928AEFA8B2B7CC542033590DFD6 /* Match.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEC13D70DC2A9EB89F1D7CD79AC4E274 /* Match.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; + 5791BF9838F256D2C7619364F9351BA8 /* SynchronizedDisposeType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 50DA397FD4173183296FFBD3D8127AB6 /* SynchronizedDisposeType.swift */; }; + 579D9F2868ACCEDFE3EA01060B37D43F /* Sample.swift in Sources */ = {isa = PBXBuildFile; fileRef = 141A1E6980A0DB70A48E325B582A0D29 /* Sample.swift */; }; + 59487C428DC9E09A74C547B2151B3939 /* RecursiveLock.swift in Sources */ = {isa = PBXBuildFile; fileRef = 64719B798B47D58F5FEF4ADE80698C7E /* RecursiveLock.swift */; }; + 5A833996D3B5B80F1FE44FC24FB486A5 /* SchedulerServices+Emulation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3E817879CF720D69ED95475F784DE84D /* SchedulerServices+Emulation.swift */; }; + 5B49BD659B59E251694D5411CAFA24AA /* AddRef.swift in Sources */ = {isa = PBXBuildFile; fileRef = 171206DB8DA29A0460CA25E31488EF5D /* AddRef.swift */; }; + 5B6F70DDD4C63CF6ED95291BCB633494 /* ContainElementSatisfying.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CB6A3ECA80A21CE808C59910479BF92 /* ContainElementSatisfying.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; + 5D9DAA597D97F6132FB45848D48D45AC /* String+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = 68C60EA1E09FCCF52166F6959CB8E461 /* String+Rx.swift */; }; + 5E62F16577E3DD0D80253FD0529B98D1 /* AtomicInt.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9CF550F150F87F1CACAC33EA419F51D /* AtomicInt.swift */; }; + 5FFC8254039A54540761DC5656615630 /* QCKDSL.m in Sources */ = {isa = PBXBuildFile; fileRef = E442269CBD76E7D82BE1190F2073B14F /* QCKDSL.m */; }; + 602E3758C0EF64AF6B7FCEA05BF5B9B9 /* Expectation.swift in Sources */ = {isa = PBXBuildFile; fileRef = D2658FE22AE9DE33046243E74EFB2C4E /* Expectation.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; + 603A2FC60B90F1279D399DAF8104201F /* Callsite.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34CECF8B9E01D94D80F7833B195A128C /* Callsite.swift */; }; + 608EDF7DCBFEAD9ACF43833EA0DF7E54 /* Optional.swift in Sources */ = {isa = PBXBuildFile; fileRef = AB6B84A6B10E08F2626AB1A086760BC1 /* Optional.swift */; }; + 6155261E8E1E5DF070E6576BCA3DE313 /* Timeout.swift in Sources */ = {isa = PBXBuildFile; fileRef = C15ABF7AE3E3F880FE497B41E019B745 /* Timeout.swift */; }; + 61C50F55827AC2F13A554086AB4EFB54 /* AnyObserver.swift in Sources */ = {isa = PBXBuildFile; fileRef = 71004CE7EA33ABE0D1D717A052A8B3A6 /* AnyObserver.swift */; }; + 63B7ECA666221B5EE437EFE136434959 /* DSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = 62214C37230E7DAD8325B28D67C970D4 /* DSL.swift */; }; + 64380725BB1FDEF598AF66214D9D347C /* DistinctUntilChanged.swift in Sources */ = {isa = PBXBuildFile; fileRef = FC3E1FB94970FB039D92C6C71616D16D /* DistinctUntilChanged.swift */; }; + 64744C911253C3E01461FAD7C935C8D7 /* Result.swift in Sources */ = {isa = PBXBuildFile; fileRef = DF9052D709829D2A32C79BEA0FF5573C /* Result.swift */; }; + 64E26D7D025AC4462DFA8BA66B38C9D8 /* HaveCount.swift in Sources */ = {isa = PBXBuildFile; fileRef = 300895167A947BE2EA5F064CDEB76020 /* HaveCount.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; + 65E00ABF215988046F5B76101015BB40 /* WithLatestFrom.swift in Sources */ = {isa = PBXBuildFile; fileRef = 73D46314659DFB3716F6B9090CA55939 /* WithLatestFrom.swift */; }; + 667751D0A9B365F30B4D48AB0D99F330 /* RxSwift-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = FC04B32F062855DA0B3ED4D9A37A1428 /* RxSwift-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6774759EFF86EE068A48C3CE74EBF5C5 /* GroupedObservable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2ECED79EB56EF84A2E97A7DEE4A451EB /* GroupedObservable.swift */; }; + 680547672182CC77A91C340D545FD8E4 /* CurrentThreadScheduler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3F8C3582E960B3DCC7C79B083F82F1C4 /* CurrentThreadScheduler.swift */; }; + 69B37B37B9EA7D0415C6ADA396E0CC3E /* JapxAlamofire.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4DFAAF9C3FF63E76DFA9A731C71F499C /* JapxAlamofire.swift */; }; + 6AAF7D1071FACEB1A8EA8B2B25C20837 /* Alamofire.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3DD31C93E3C233A8E39873FE2BD70F5E /* Alamofire.framework */; }; + 6ADD59320C7BA6C6520C27EF42B2DFFE /* RetryWhen.swift in Sources */ = {isa = PBXBuildFile; fileRef = D2113A2111BCDCCD1B4122619C85FDD7 /* RetryWhen.swift */; }; + 6BECBF9002B8710DE1A003A4C6888C80 /* ObserverBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30F6BC37D8E97D142068B3B7544D49D6 /* ObserverBase.swift */; }; + 6CC2484565989B2E4D4DF635DCD5D75D /* Completable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D77C90DCEEBD755B571D778013F708D6 /* Completable.swift */; }; + 6D0D99CB7BB3D712E5AA0389EC95F863 /* AsMaybe.swift in Sources */ = {isa = PBXBuildFile; fileRef = E39C4B0028EDE095EB7D8807F97F946E /* AsMaybe.swift */; }; + 6DF52D876A50EB28124421843C4E4539 /* SingleAssignmentDisposable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7E7DB7C15E2D6D0BA20D82E2B75E6A6F /* SingleAssignmentDisposable.swift */; }; + 6EC5F727FC621C1DAFBAF64268A8F922 /* PrimitiveSequence.swift in Sources */ = {isa = PBXBuildFile; fileRef = B151C968DA9E831ECC1FEDA2BAA67C0C /* PrimitiveSequence.swift */; }; + 6FB38A0814A3B3F9DE97DA65168F4A94 /* HistoricalScheduler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0A939186257B6587868E549D56C68970 /* HistoricalScheduler.swift */; }; + 701DE7D4E0E542E635AC2DE269970CA3 /* InfiniteSequence.swift in Sources */ = {isa = PBXBuildFile; fileRef = A06D0B8AEF790D3388D83F8052A891C4 /* InfiniteSequence.swift */; }; + 7034D0B6AE91D924AB27F6B828C79EB8 /* Closures.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0D0099971A716FD2A1F8224872367A02 /* Closures.swift */; }; + 712E987D79829DC53E38FC6DA1B17CFB /* QuickSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = F795E855926EE8F25F3C41BB518EA648 /* QuickSpec.m */; }; + 72FB8CEABF346A37D54CC08647489A98 /* ThrowAssertion.swift in Sources */ = {isa = PBXBuildFile; fileRef = 63140FA6F9DFC7949CCA619F4E4D4326 /* ThrowAssertion.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; + 750A00BF1938F8600C3D1C84C51EB274 /* VirtualTimeScheduler.swift in Sources */ = {isa = PBXBuildFile; fileRef = B213222267E53671484A1186C737F657 /* VirtualTimeScheduler.swift */; }; + 75FD14D60702D626E0D4BF7332CB126F /* SkipUntil.swift in Sources */ = {isa = PBXBuildFile; fileRef = 49BA939C5DB09D4A131D8626CFE23CFE /* SkipUntil.swift */; }; + 7664FD4F59A0C00866CBAE60B0A3AD64 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E6587F8CC961169103A4B57E0C611279 /* Foundation.framework */; }; + 7815612CD8B1F0DBAF5178EF950B0843 /* AsyncSubject.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBFDBAF86DA5A80D38C9DC50A86F864C /* AsyncSubject.swift */; }; + 78A51B7FCC1DFB888AAA254529013C12 /* BeginWith.swift in Sources */ = {isa = PBXBuildFile; fileRef = D3FB4A5242BBE1E92389957C7B3AAC01 /* BeginWith.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; + 78EB5E93E8521FB5EE5D0065C2914A4A /* Map.swift in Sources */ = {isa = PBXBuildFile; fileRef = C19B8CD163AB980C793701F7C901A7DE /* Map.swift */; }; + 79E21333FFAD7CD30EE1FC87B09CBCAA /* Debounce.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9858A92B7E4D7BE5995C330E4D68BB68 /* Debounce.swift */; }; + 7AC93EB6DCDA9226165D5BC354FE7BC6 /* DSL.m in Sources */ = {isa = PBXBuildFile; fileRef = BD2EB7CC961AC4781A83A1C23D90020D /* DSL.m */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; + 7BCC1E21AD0581F508C189CA6CDBF923 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E6587F8CC961169103A4B57E0C611279 /* Foundation.framework */; }; + 7CA415E4CDA575C6A649108B8C5B824D /* Buffer.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA1DF869F982578951E99C5B94DD2C0F /* Buffer.swift */; }; + 7D8FDE2050305984C41BDCB7AFDF51E3 /* AnonymousObserver.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC8D8E4383C5D9FB96733F16B5400E30 /* AnonymousObserver.swift */; }; + 7DAC86DCBC36C10F43FA5FEB819B7BF1 /* Functional.swift in Sources */ = {isa = PBXBuildFile; fileRef = D15913AD700B43FDE81084DA4DDADC0C /* Functional.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; + 8002CF0D0985737F8D5211D9177CBC93 /* NSError+Japx.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1567530F58DEF49734DABDF10496B2A8 /* NSError+Japx.swift */; }; + 806B9040D79A3DC58FB56EAC16FE19BF /* Stringers.swift in Sources */ = {isa = PBXBuildFile; fileRef = D9F633375CC471F97147FDF2D13E0E61 /* Stringers.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; + 81FED3E061FA39538B0AA3092F6F380B /* Example.swift in Sources */ = {isa = PBXBuildFile; fileRef = E7823AEC82305C1DAD50759EB0C12FC0 /* Example.swift */; }; + 837F24918CB44B9336ED5805DDF52A68 /* JapxRxAlamofire.swift in Sources */ = {isa = PBXBuildFile; fileRef = 82378C5FBA30B592FF9CB304183C844E /* JapxRxAlamofire.swift */; }; + 83956E20859CDBBE7BC38ABADE0170FB /* AFError.swift in Sources */ = {isa = PBXBuildFile; fileRef = C42C6204EC93C6CF85FE5ACF97B37BED /* AFError.swift */; }; + 83CEDD0B6B620A051772BA19852EA943 /* ElementAt.swift in Sources */ = {isa = PBXBuildFile; fileRef = C73A70C1D1B2618A0696B45B6E7938D2 /* ElementAt.swift */; }; + 83E5C209BE96578DE219FBE4CD6B18C8 /* CompactMap.swift in Sources */ = {isa = PBXBuildFile; fileRef = F663E60C6606155825BE47E338BABE86 /* CompactMap.swift */; }; + 863D3B3DF3C82159B065A3A4A0BA02B1 /* Cancelable.swift in Sources */ = {isa = PBXBuildFile; fileRef = FB349BB04636457639EAD39C277463AD /* Cancelable.swift */; }; + 88AC59300D7301EA46AF0295D5D0000E /* SerialDisposable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6866DC1CFF4C3FB9D63AA93DF850C669 /* SerialDisposable.swift */; }; + 88F403109D33F993ACD635A3D01134BC /* NSBundle+CurrentTestBundle.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF0F767AFB6A3924EC9A082E6EEEEF5B /* NSBundle+CurrentTestBundle.swift */; }; + 89DE19B6DF1ADEDAB13AABD94107CF1B /* Japx-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 3C9440F6D996A4D7207A4AB27F4149E5 /* Japx-dummy.m */; }; + 89EE4D6DBDB79963D65AA1E67B543B6D /* CwlCatchBadInstruction.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2B88602B328A20FDB7AAD8CE761BE7C3 /* CwlCatchBadInstruction.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; + 8A0EF19254BAC5DF0885D1FBA345E016 /* CwlMachBadInstructionHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = B68B64ADF11781A371382A8BFF064177 /* CwlMachBadInstructionHandler.m */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; + 8AF8644D24AC61C514F845D64A906099 /* Timer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 736058054C56A280D2AD55D0BAF7EA7A /* Timer.swift */; }; + 8C48EFFC0D175D05FE4740709EFC4EBA /* CompositeDisposable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8F1DA3BA72D1CE653973E95D06C2A2A4 /* CompositeDisposable.swift */; }; + 8D17749611AB0C8BD51C068749D8DF68 /* NMBExceptionCapture.h in Headers */ = {isa = PBXBuildFile; fileRef = 9712F3C678204EEC04DDA9070FA9E39C /* NMBExceptionCapture.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8D543DAD9A6C0B8BF8A5DB38AD876677 /* SatisfyAnyOf.swift in Sources */ = {isa = PBXBuildFile; fileRef = FD13C7D09BC660970DAD4DD42BFBE2EA /* SatisfyAnyOf.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; + 8D75EC8969EA46FBD6E1BED7791A3C37 /* BeLogical.swift in Sources */ = {isa = PBXBuildFile; fileRef = 82FD42CF7926F97863AE7692797C9561 /* BeLogical.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; + 8F24A435D16DE8BE2BEBFD5E52A39D8B /* Sink.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0807F4765B0193DE01862E09DCDD2EB3 /* Sink.swift */; }; + 925A505F030A39903C9FDB0369791AD5 /* ScheduledDisposable.swift in Sources */ = {isa = PBXBuildFile; fileRef = A5D61FC3B9189B1D27086DACBC485BB1 /* ScheduledDisposable.swift */; }; + 931BBB8230A25161D5C37528A8F9FECF /* SessionManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5F8A220C38BEFC89B039ED846473EC88 /* SessionManager.swift */; }; + 933FDA5970AA525D6CB92BFEBA2BAB4A /* Timeline.swift in Sources */ = {isa = PBXBuildFile; fileRef = A082439308C86FA993ADF34E408AE63D /* Timeline.swift */; }; + 9472BAF549C9B047A21547E18AC389E1 /* Platform.Linux.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1156EECD92EC3A0D0C17613B765369AF /* Platform.Linux.swift */; }; + 94DA3131D64B3D904BE28E72F1871065 /* BeAKindOf.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0A0EFC912C204103D7E01C5C40A8970A /* BeAKindOf.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; + 95E1FDA26A77B6ED7248A792CE1740A9 /* TailRecursiveSink.swift in Sources */ = {isa = PBXBuildFile; fileRef = 04255F5DF63B9CF6D66CC56F4C449D7F /* TailRecursiveSink.swift */; }; + 98A929C8E9012AB167672714FFD2113C /* Request.swift in Sources */ = {isa = PBXBuildFile; fileRef = 48549552B564F1E513F0C246BE6AF626 /* Request.swift */; }; + 99E8019F4689A514DAC6AA40AFF7352E /* NMBObjCMatcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A029B8176AB9ED7DDF3DCC6D7D4E941 /* NMBObjCMatcher.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; + 99E8C428C70FEE6B11BDE79FDA1F3F81 /* Bag.swift in Sources */ = {isa = PBXBuildFile; fileRef = C39715F5E6B6A8978463699F6B9AC5B5 /* Bag.swift */; }; + 9B17E20C0B2811A5F21A01A3BA408751 /* Bag+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F5DAFD442C0375634DFAC7160C1EBFD /* Bag+Rx.swift */; }; + 9B9714C476F416AD7FD803EA1184D113 /* BeLessThan.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1758EF14EC4F7CD16EA6C3DA6A167CE6 /* BeLessThan.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; + 9BB2E6C13B25C0157C4BECFC9F8DF489 /* URL+FileName.swift in Sources */ = {isa = PBXBuildFile; fileRef = CBAC7A2EF9147C4C871156392041F36A /* URL+FileName.swift */; }; + 9BB5E9B6487FE95C710687B484C17161 /* Nimble.h in Headers */ = {isa = PBXBuildFile; fileRef = 6F81C4E7B13A574A2F22BBE896C82A69 /* Nimble.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9C460BA614D4B1D314A252C4C5CE1D87 /* BeAnInstanceOf.swift in Sources */ = {isa = PBXBuildFile; fileRef = 48EF5C50242CDB78F321B525EE954B03 /* BeAnInstanceOf.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; + 9F70369EF71BD9ABAFF687AF532CC20D /* CwlMachBadInstructionHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = 978D2DB91830151D82F0A03BF828A0F2 /* CwlMachBadInstructionHandler.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A01437B1567B3A8E80894A62F33BD3AA /* LockOwnerType.swift in Sources */ = {isa = PBXBuildFile; fileRef = F670326DBBDB7DB4BB59950D455CBCDA /* LockOwnerType.swift */; }; + A1172662B93132A359873F2C4FFB9D16 /* Create.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4BD5BBF9BAFC21ADF91BC34F8DED66D2 /* Create.swift */; }; + A173703877A14EBF47A8A4FF41F7DBE6 /* QuickSelectedTestSuiteBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 49D0C944710A85D4F7299903DE5B8AFF /* QuickSelectedTestSuiteBuilder.swift */; }; + A1A6711D4917D908FD5261DDD382AB19 /* Take.swift in Sources */ = {isa = PBXBuildFile; fileRef = A354061CB5AD12621E2AF90AEF0B1DCC /* Take.swift */; }; + A3F4E955F8D0E1426F0C98B53F148B0C /* DisposeBag.swift in Sources */ = {isa = PBXBuildFile; fileRef = B0C4AB0FCF25365AC9DB3B7D19FBB0FD /* DisposeBag.swift */; }; + A43F44E910B351BFE686EB169E2F8F78 /* Date+Dispatch.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B78DB362630E4BDF1D355EC86A5430A /* Date+Dispatch.swift */; }; + A5E204773854F070F50D14271A7684CC /* ConcurrentDispatchQueueScheduler.swift in Sources */ = {isa = PBXBuildFile; fileRef = FD103D0B7F7F526E738B7BD345CBFEB3 /* ConcurrentDispatchQueueScheduler.swift */; }; + A7BCB5FE236F0B7E8EDDBF60E9A079C0 /* ObservableConvertibleType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 10060999FA110AEAFAA5A492B3F04A1B /* ObservableConvertibleType.swift */; }; + A974EED774223BB5B72FF345DCB54CB0 /* PriorityQueue.swift in Sources */ = {isa = PBXBuildFile; fileRef = 17C93550DBB9CB8529D12A8E7A4A3455 /* PriorityQueue.swift */; }; + A9996A6303084D17B9C439CB132A1F69 /* DSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2B0968C2EDB6E20E410135509A303113 /* DSL.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; + A9BF211D24462D531E278F2AE317AEA4 /* Quick.h in Headers */ = {isa = PBXBuildFile; fileRef = 5C1E748E84F429734A1718281BAEB279 /* Quick.h */; settings = {ATTRIBUTES = (Public, ); }; }; + AA171B8392EA0F718DFFECFD6577DEEA /* Zip.swift in Sources */ = {isa = PBXBuildFile; fileRef = 71CBF2CA8CF8F7365FB77E7DFECDFE3A /* Zip.swift */; }; + AC64F4DC4A2683E7C0E58A216C379CD7 /* ScheduledItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 64A0B52426454456A449ECA94FCB5731 /* ScheduledItem.swift */; }; + AD69407E2FA1D39A9E09248052F2D81B /* ExpectationMessage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C7C4D6476743C624BB7FE21AE4D1A58 /* ExpectationMessage.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; + AD9E045D45D3FDA70E56FF87F6B66301 /* SwiftSupport.swift in Sources */ = {isa = PBXBuildFile; fileRef = A3A623B7D8CE0AC3A8C2DC0B7869E848 /* SwiftSupport.swift */; }; + AE191084C68BDF1A2878978CCFBF29E2 /* Configuration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 770CC7A30CB0A128DE95BE47CE15CF3D /* Configuration.swift */; }; + AE68CF21D91E88B5606C79BC1CF43E19 /* OperationQueueScheduler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07CDA8B08253EEF91F20725154528FC2 /* OperationQueueScheduler.swift */; }; + AE6EDB27A8F1552C7E3B895DEA7FBE17 /* StartWith.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD42D78126E15567AF99D1A0EA5CF6A4 /* StartWith.swift */; }; + AFC64B1097F7355FF423D6A73E9C7210 /* TaskDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = F5FABCDF6E4ACB986B9EEA712A0E8BE3 /* TaskDelegate.swift */; }; + B12369EDC6CE33BB15EA09AD32263C69 /* Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = ED80E40520AC3595AAACE476A4DEC29A /* Rx.swift */; }; + B1655633DAEBBBD7E8F7B54800305DCC /* CombineLatest+arity.swift in Sources */ = {isa = PBXBuildFile; fileRef = C3F370F08FE9B9544C99EAA2E3586BB8 /* CombineLatest+arity.swift */; }; + B1A96EF84A90B6AD8935DFC035C58222 /* Range.swift in Sources */ = {isa = PBXBuildFile; fileRef = D300EB8271CDCE6BDDFED84D5E1111D7 /* Range.swift */; }; + B2A65EEDB5D5EC246EA68E10964FF7B3 /* ThrowError.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB68F50D7E397F0F80908E0513ED2FB3 /* ThrowError.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; + B2C062A5841E9B5FDC969E948106D34A /* SynchronizedUnsubscribeType.swift in Sources */ = {isa = PBXBuildFile; fileRef = DF1F03205B013D99BE5CB93B1B342BCC /* SynchronizedUnsubscribeType.swift */; }; + B4058A2AA8486E9879F113E6F67B9679 /* AdapterProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4FEF1E8A6277161BAC05548D564D82A6 /* AdapterProtocols.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; + B426D4A8C7C2FE045BDC75DDAA20CF2C /* ScheduledItemType.swift in Sources */ = {isa = PBXBuildFile; fileRef = D4EB4C4A060157A90FE48087C6729192 /* ScheduledItemType.swift */; }; + B53E1D8A3E895314BFBD987576197AB0 /* Errors.swift in Sources */ = {isa = PBXBuildFile; fileRef = B328B37F957D9852E7F34DF7FBC67D5A /* Errors.swift */; }; + B53E38263DDCAF8775C39B1088665DB3 /* AnonymousDisposable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09895B44878690CD8FB60276AAFED4C6 /* AnonymousDisposable.swift */; }; + B5AEEFF5F31AC069BD96E8104301AD4D /* World.swift in Sources */ = {isa = PBXBuildFile; fileRef = D8466BB6BB2E6B504CC75806882F2202 /* World.swift */; }; + B625501C4972F3BC7A17761ADBA433C7 /* DefaultIfEmpty.swift in Sources */ = {isa = PBXBuildFile; fileRef = AC1400E8ABD4066EE8E60B611E75E651 /* DefaultIfEmpty.swift */; }; + B6CC23C6C288F4EB9EDD3A06F1F5F094 /* Predicate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 339C5548B5FBD510D5F51F82FFFC861A /* Predicate.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; + B71070160CF07EFA99ED0445B0D191E7 /* Nimble-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = AE8997D4270D55D0BBF474319667AE3B /* Nimble-dummy.m */; }; + B7662703AF8D3FFFCB0070C50FEDCC58 /* Errors.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8866F838671DE5C661AFC214169EABD8 /* Errors.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; + B774AB255422893C7C3A00D91CBA8479 /* Concat.swift in Sources */ = {isa = PBXBuildFile; fileRef = D5CE1836B53B3A5F50EC7BD765075CD5 /* Concat.swift */; }; + B7977833FE910D5DB829DCCC6EA3D104 /* Quick-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 16F8FE3B4CE3AFE770EEA248FAFC0483 /* Quick-dummy.m */; }; + B79FC6E46F642C3FC74B3E6D9175B1AB /* SatisfyAllOf.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2949F88E61AC0DCEA064501C74EA3F0B /* SatisfyAllOf.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; + B9397BD911F09C73BC598D60DC04C1A7 /* Behavior.swift in Sources */ = {isa = PBXBuildFile; fileRef = 564AD342DC8DE5F92BE8B79881F90D57 /* Behavior.swift */; }; + B9600F3434BFF22DFF7FFC7DEAE79185 /* Single.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFFF0AD1AE14BD28753DD5F1491A4DC0 /* Single.swift */; }; + BBD553F0B9EEA76BB34E3A54551A6BA1 /* Never.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA03566D2EB0631CAD6FEC9E3A09882C /* Never.swift */; }; + BBEE2B823DC0A5F1347E8DD3B63FA46A /* RxMutableBox.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34D0631C3358A850D5CFAA9AA5066B91 /* RxMutableBox.swift */; }; + BD379F95293A811D8E591CAC8E9FF410 /* Quick-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 9DAB24C40E5706F5F8FE8F06E2DE46F7 /* Quick-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + BD64495DA02741A056FF9AD5B58C7F3B /* Using.swift in Sources */ = {isa = PBXBuildFile; fileRef = 971A35444A7FB19B88D58AE194C248CF /* Using.swift */; }; + BEE6B677416CA71C981D1D3F60B18C96 /* Alamofire.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E880690A199E4360FAC9FBABD181B05 /* Alamofire.swift */; }; + C051C0411627BD5FCDA031782EB1F716 /* DSL.h in Headers */ = {isa = PBXBuildFile; fileRef = FE195C6A0BE17B04690BBACD545FF260 /* DSL.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C0C98C8C7D07E1598F20EE2F0539197D /* NMBExpectation.swift in Sources */ = {isa = PBXBuildFile; fileRef = F863E85DC61331F07EC3526419F49675 /* NMBExpectation.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; + C15CAECFDEA4890FBB7BBDA98786B4B3 /* Debug.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0D0E2331C1913C07C3F63A1B56C8A698 /* Debug.swift */; }; + C180630D136A2B3F9D28E4E90F2D481C /* Scan.swift in Sources */ = {isa = PBXBuildFile; fileRef = D733C5C67DC51FA65C4056A9024EB2F7 /* Scan.swift */; }; + C206C5FE984876C0D85D2D71044FA2A9 /* Zip+arity.swift in Sources */ = {isa = PBXBuildFile; fileRef = 893848C7B6D07B137086501BD598DDB9 /* Zip+arity.swift */; }; + C2A2C8C9B701D3BF8763103C2ECF46F3 /* SubjectType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 70B290486D3A112F2F57B090D37EE1B9 /* SubjectType.swift */; }; + C30D22D7CD2D6DF082689771E634E1F8 /* CombineLatest+Collection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 55A6A9155A5C10C46211BD6D962B7F92 /* CombineLatest+Collection.swift */; }; + C40816FEB2D868C17A8DCD6C1B0412F8 /* RefCountDisposable.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBE40900DAF6F3F033CF344BE57D0A25 /* RefCountDisposable.swift */; }; + C43DDB46852F07373069553531F9339D /* RxSwift.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 96FA2FC8D08EDC34A0DAF9788ECE32C4 /* RxSwift.framework */; }; + C43FC4EFD9E762C454E4168953475A55 /* HooksPhase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 70ABCCBBEFDFB00B8ECBA241AEDDFB21 /* HooksPhase.swift */; }; + C5089C2B555D7923AD94469202458848 /* SubscribeOn.swift in Sources */ = {isa = PBXBuildFile; fileRef = 26927C1208FEA1908CE1F5C2DA0700E8 /* SubscribeOn.swift */; }; + C5396ECCCC5595700DEEE6AFEF2200A9 /* RecursiveScheduler.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1CB9A3E3CEA651B6C1EADABB9C7EC53 /* RecursiveScheduler.swift */; }; + C6A86479B1236153B50C59E9ACB07D0D /* QuickSpecBase.m in Sources */ = {isa = PBXBuildFile; fileRef = 5C359D0B9E2D5BBC7B28A3BB1CC27C72 /* QuickSpecBase.m */; }; + C825A7EFBAC66C2AE444B4BF2AAC91DA /* AsSingle.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7ED3490E6F1D29F6A87D467F70B70F26 /* AsSingle.swift */; }; + C8DD98E31084FF7D52B6B3DE814E8D7E /* Empty.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9F42392E8A648E90EFA8C5EC22A1725C /* Empty.swift */; }; + C8FD0A8A1F5B77DA86B7045B08FE6FFF /* SynchronizedOnType.swift in Sources */ = {isa = PBXBuildFile; fileRef = B2CB3C357B36368AEF0C3C80F4686447 /* SynchronizedOnType.swift */; }; + C903AEFEEB4E73644A03FB8285543107 /* BeEmpty.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09EE1E0C0EC73E7F5D55EB7C90F74318 /* BeEmpty.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; + C912897D77798A90873A3DAD8A4BDC50 /* QCKDSL.h in Headers */ = {isa = PBXBuildFile; fileRef = 01D274B6D0D178A97785751D4817F24B /* QCKDSL.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C979EEB0159A65246F6BD2C906A8ADB7 /* BeVoid.swift in Sources */ = {isa = PBXBuildFile; fileRef = F4DE92299ACBEA76596B10C81D47457A /* BeVoid.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; + C9918E4CEFB35033892F50BCB7F16EAC /* JapxCodable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 129F5FAF301C926FB7C4AC99578EBB3B /* JapxCodable.swift */; }; + C99BBC3F70E056CB6A3CC0516318939D /* AssertionDispatcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 79383C28EF98DAE8CC506FC420D47994 /* AssertionDispatcher.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; + CAAC3A5175BFFE040E0CA3CA7783AE7B /* Skip.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2262DDDDDACEC05BC6DC57C6B511081B /* Skip.swift */; }; + CAACEBB97A7D23E6782B47A805DFED81 /* CwlCatchException.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4720F3A17069EDDF749001C8F81595C3 /* CwlCatchException.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; + CC74C3E4C773BBD869BDE4F827D032CF /* Repeat.swift in Sources */ = {isa = PBXBuildFile; fileRef = DF0837BF48C8F7AA0E611E0FBE64F20D /* Repeat.swift */; }; + CD6848163E6F18591B0F447E62B0165E /* ReplaySubject.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3FB6FED914F798E0412DEAFC725FC65A /* ReplaySubject.swift */; }; + CD6B1F146B0E157FE5B9CAFFAE77A5B5 /* Nimble-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = DDF07459AC53D4F2F593F1B07CDA62D2 /* Nimble-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + CEE8D31A4E76BB7B350BF2A7175D4BC2 /* NMBExceptionCapture.m in Sources */ = {isa = PBXBuildFile; fileRef = FDDFEBD4F5E583947A2835E085C8DCF4 /* NMBExceptionCapture.m */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; + CF9218FF56D8EE43681150A3E1635C9A /* ToSucceed.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF5210C600304E2CEFA77E1A6D877DF9 /* ToSucceed.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; + D20C796892B62242A8E826C511688C67 /* Deprecated.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BD1A90A5CC4B4AEDBE30FD02164581D /* Deprecated.swift */; }; + D34D0540ADCBF163575B6B5444B1AAF6 /* Contain.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84BF8693482E5010DE24DD9F985E8D7E /* Contain.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; + D3D8C379C6E4FB487E5ABD6800AD7B7E /* DispatchQueue+Alamofire.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5DA561000475C2B9E0429D1834CD3E6E /* DispatchQueue+Alamofire.swift */; }; + D3EB5B55B5D43C34AA946C73D49989CC /* ObservableType+PrimitiveSequence.swift in Sources */ = {isa = PBXBuildFile; fileRef = 63A8F7E8A425EB243E727F33599099B2 /* ObservableType+PrimitiveSequence.swift */; }; + D4D2586787224418A39344AD365BC865 /* Amb.swift in Sources */ = {isa = PBXBuildFile; fileRef = 72D0B9C4EDB5E0A92E36E66C60D527E3 /* Amb.swift */; }; + D65C254F5ABF2CB5ECEE50FE8F8E1A80 /* Response.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6517720E400CEDE40CFF654C99E55698 /* Response.swift */; }; + D755642ECA73CFE2E4C31CDD0DFBA42E /* QuickSpec.h in Headers */ = {isa = PBXBuildFile; fileRef = 47D9F449B57F5D507D7BD2325A4A92A3 /* QuickSpec.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D98F1791073FDD389F9BC984CA8BE106 /* SingleAsync.swift in Sources */ = {isa = PBXBuildFile; fileRef = D30E3DED98C12B9FE61CFCA35D7A9718 /* SingleAsync.swift */; }; + D9A97E0689D0BD16F0E95A10F9B43B1F /* InvocableScheduledItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 04BDF81A464445E0B81DCE4F598C6443 /* InvocableScheduledItem.swift */; }; + D9CFB8E5E354D7BE61D092259779F437 /* Equal.swift in Sources */ = {isa = PBXBuildFile; fileRef = E4869F7C71B4840407DBF0A263F66575 /* Equal.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; + D9D6150D329A87CBB415FD349F0C50FD /* SourceLocation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 305F52C9F2F3CA0F5F46AE5E881A41C5 /* SourceLocation.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; + DA5B32B2104CA24325E603F5C093FE77 /* Pods-Japx_Tests-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 0B8CA20402F57C0121D42E12D664A998 /* Pods-Japx_Tests-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DB84342A0C0DEABBF7F729DE55225D82 /* XCTestObservationCenter+Register.m in Sources */ = {isa = PBXBuildFile; fileRef = F7A27390513B6C3ECBF1FE7F70634119 /* XCTestObservationCenter+Register.m */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; + DC972A4472EDE89CF1009756F1163441 /* ObserveOn.swift in Sources */ = {isa = PBXBuildFile; fileRef = 365509E197817752D23DCCF395DD7E0C /* ObserveOn.swift */; }; + DCD198D49C0A198A09525B7688EE3BC9 /* Async.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B9149624DB280438D7F8B0A7BF10C7C /* Async.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; + DFF81C1FCD62A60DC310F84B9FEB206B /* CombineLatest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9CEF1DBA87B51DE7D676C87314C59AED /* CombineLatest.swift */; }; + E0EAC85F7ACFAD998B14FCE66144000E /* NMBStringify.h in Headers */ = {isa = PBXBuildFile; fileRef = A2FAB1AC98722EFF8BBE85FB95565494 /* NMBStringify.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E3747EC31FCCA97D75A81FC700CF7E24 /* ResponseSerialization.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA371A094C22C3A379F35087022E1A46 /* ResponseSerialization.swift */; }; + E3996D189108FB43C00D9348726CFC20 /* Queue.swift in Sources */ = {isa = PBXBuildFile; fileRef = A4B5F7EC753C7490A198948C58239CAF /* Queue.swift */; }; + E458AAE1AE9E2250F29806E5633B1860 /* Expression.swift in Sources */ = {isa = PBXBuildFile; fileRef = B1EECAA5C2F4AF87C930C3429F2DB670 /* Expression.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; + E71FEA0250E6794C4483DE5545B38A9B /* Throttle.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA5BFAE3D0DD6839D560BEFE761EBD99 /* Throttle.swift */; }; + E7D79F27D78F9E4AE0562736A359EDCD /* SubscriptionDisposable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9166CC7AAA44E1DFD7097F23111EE2A4 /* SubscriptionDisposable.swift */; }; + E8C772F2BAE84A19358C9DCFD0888843 /* Event.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5294943F61EBF01BA5BA9FD866164D4 /* Event.swift */; }; + E9A873C8405E38FAA4F1443C97F19B8D /* Pods-Japx_Tests-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 0472B9CAED7972CF1EDF6C37CEC45F57 /* Pods-Japx_Tests-dummy.m */; }; + EABD66CC40436535B02C469F79C59DDD /* Deferred.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8A9C108C8EE45FE3A231BF42947C5EF1 /* Deferred.swift */; }; + EC7EF3D5778783BD93EBC6F82016ADA9 /* BeNil.swift in Sources */ = {isa = PBXBuildFile; fileRef = BA1A0C5616A82CB492F186AFC1D66D47 /* BeNil.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; + ECCA1FA570A912E8CDB54EB843F1D030 /* NimbleEnvironment.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5537ACD9B41FE2DA9009FFDEB266FBAB /* NimbleEnvironment.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; + EF26890BE517076AACE433468B78F99F /* ImmediateSchedulerType.swift in Sources */ = {isa = PBXBuildFile; fileRef = AC5A14A61EC59727FCCE41CBC224DF9D /* ImmediateSchedulerType.swift */; }; + EFA45F5AEF1347C0475086CBFEF12B66 /* ObservableType+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 867C65C596D4FF2A189A392CA57DBD2F /* ObservableType+Extensions.swift */; }; + EFB9CC9267297D8104141A4046AAD14E /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E6587F8CC961169103A4B57E0C611279 /* Foundation.framework */; }; + F030668A0E39672AB7CA8DD4FC3B1C59 /* Reduce.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7CE324EA4820032B145C5C25BC68DED /* Reduce.swift */; }; + F13F2AA7F2E6D95A181CAB99B900D531 /* ServerTrustPolicy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BC59294E38D626B19887A4E8B1471E6 /* ServerTrustPolicy.swift */; }; + F310B21703A7BC438A09DDB96670583F /* AssertionRecorder.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFA9DCE95A62F2F6089238A70E5E42F4 /* AssertionRecorder.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; + F4877B3857C780DCDB7F413A03F95600 /* BeCloseTo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 289AA8560267D6FE71AE59B1DD9DC1A6 /* BeCloseTo.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; + F4BFD44F6D69DFDFB3C7AE1FED080DD0 /* ShareReplayScope.swift in Sources */ = {isa = PBXBuildFile; fileRef = 178949A14ACF54F6480B2A835C89235E /* ShareReplayScope.swift */; }; + F5F8D36071A0049AEBA3CA9092245FA8 /* TakeUntil.swift in Sources */ = {isa = PBXBuildFile; fileRef = 55840485C351B9A20721F54286D5BB9C /* TakeUntil.swift */; }; + F64E6804C812DAF5B259C6F29E93F846 /* AsyncLock.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4514B1B18EB2C55C5164B4BB54C5323E /* AsyncLock.swift */; }; + F663C3CEE3FEA344943C738AF2A67C0B /* ObserverType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 212CC06CBA97B82B0388DD4622F6D73E /* ObserverType.swift */; }; + F78E35D04F09485FA5DFA72FE1AD5AB2 /* NMBStringify.m in Sources */ = {isa = PBXBuildFile; fileRef = 67FFEECD7F79E0A3A4DBB94994C8BD9D /* NMBStringify.m */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; + F7B74645E07C39771156A1FA413B98D4 /* Alamofire-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = ED3D76ED5A8DC18569067B146CA39DA1 /* Alamofire-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F8487070A246FA3FB7FA73F7194A3CFA /* ObservableType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 57B2620330E19F1AB4D6763ED9D53466 /* ObservableType.swift */; }; + F8F97046AEE1F97E3C7DA22FDECF20B7 /* Platform.Darwin.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9EFCB5BB3A66BDB20CBC008E3B2F3446 /* Platform.Darwin.swift */; }; + F9787327EBDD68A57AAF770F1B661F5D /* Just.swift in Sources */ = {isa = PBXBuildFile; fileRef = D6C8E0A071CFA6B66A24C913A19192C2 /* Just.swift */; }; + F9E85548BF1EF8C5035BAF92233C34B6 /* RaisesException.swift in Sources */ = {isa = PBXBuildFile; fileRef = FD325C8276167CB7791580193F206690 /* RaisesException.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; + FA33EF89CB22AD9AA886B2A0FC0698F4 /* Generate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9E7AF262FD73F2513838FB1DFE4BFDF4 /* Generate.swift */; }; + FAB138C78D85FA04FE1501DD996F26F4 /* BinaryDisposable.swift in Sources */ = {isa = PBXBuildFile; fileRef = C428B01DBC56934F26A660128FC18FA6 /* BinaryDisposable.swift */; }; + FBBE9D9A2D1C31E86BEABF94B224C4EE /* XCTest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EB196ACDA1395292B3D3142BB40BF693 /* XCTest.framework */; }; + FF4C06BD3EF989D203359A47EAA0A287 /* ExampleMetadata.swift in Sources */ = {isa = PBXBuildFile; fileRef = 793FA0EF1E88D9AA114B25A2CC865231 /* ExampleMetadata.swift */; }; + FF920E965F1CA016FF302DE8C92C5122 /* CwlBadInstructionException.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2BC10D0C7A8B7D66C455582FC474A94B /* CwlBadInstructionException.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ - 260CF153572452B005EFFB1EDF16258D /* PBXContainerItemProxy */ = { + 00325B369B009C86EF81A0815F4C70E0 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; remoteGlobalIDString = DBF638E41A88B506C17D9D5F9F411553; remoteInfo = "Pods-Japx_Example"; }; - 33D52945A5F354CB3E26728E3655A597 /* PBXContainerItemProxy */ = { + 014A3C333FAD0AACEB866143266D7388 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; remoteGlobalIDString = C82891EAB7293DBEE916B21F57E8474D; remoteInfo = Quick; }; - 3CD077F1C0974E37E5CC2230EF470D76 /* PBXContainerItemProxy */ = { + 125DC525FFAC18E307AF345EE520E50D /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = 6F13695E06195A78EA8A95F8C7ED0D2F; - remoteInfo = Nimble; + remoteGlobalIDString = 8D5C454863D7AE3089967443AEF1672F; + remoteInfo = Japx; }; - 76CCA5290B680FD925002E250500CC12 /* PBXContainerItemProxy */ = { + 3EE832353C0D3BBA1FD4B2470F713D40 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = EA9EA43B3B503823EE36C60D9C8A865F; - remoteInfo = RxSwift; + remoteGlobalIDString = EAAA1AD3A8A1B59AB91319EE40752C6D; + remoteInfo = Alamofire; }; - 90612CAC4DF45E84AA3B91F8686AB6A0 /* PBXContainerItemProxy */ = { + B8A2D151B3097DB97B67974609D25B23 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = 8D5C454863D7AE3089967443AEF1672F; - remoteInfo = Japx; + remoteGlobalIDString = EAAA1AD3A8A1B59AB91319EE40752C6D; + remoteInfo = Alamofire; }; - B0A174678C37770D0B3184915458BBCC /* PBXContainerItemProxy */ = { + C7DCF2E85E3CA59B13087A474A280D8D /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = EAAA1AD3A8A1B59AB91319EE40752C6D; - remoteInfo = Alamofire; + remoteGlobalIDString = 6F13695E06195A78EA8A95F8C7ED0D2F; + remoteInfo = Nimble; }; - D0B9CCA393A07BD3BE154D5687D3A332 /* PBXContainerItemProxy */ = { + CA97229B31FF6FA282B5304B5D9FBF3C /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = EAAA1AD3A8A1B59AB91319EE40752C6D; - remoteInfo = Alamofire; + remoteGlobalIDString = EA9EA43B3B503823EE36C60D9C8A865F; + remoteInfo = RxSwift; }; - D673E6040EA08C2222BA73A785806C79 /* PBXContainerItemProxy */ = { + E80F404584698D89F469B7615B318635 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; @@ -369,7 +369,6 @@ /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ - 009AB37BE27619C730615D1005A921D9 /* RxSwift.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = RxSwift.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 00EFD03AF54B1963F7605634CC3C87C3 /* Quick.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Quick.xcconfig; sourceTree = ""; }; 01D274B6D0D178A97785751D4817F24B /* QCKDSL.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = QCKDSL.h; path = Sources/QuickObjectiveC/DSL/QCKDSL.h; sourceTree = ""; }; 024B30757940EA0D5743096D2995139B /* Pods-Japx_Tests-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-Japx_Tests-acknowledgements.markdown"; sourceTree = ""; }; @@ -390,10 +389,10 @@ 0D0099971A716FD2A1F8224872367A02 /* Closures.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Closures.swift; path = Sources/Quick/Hooks/Closures.swift; sourceTree = ""; }; 0D0E2331C1913C07C3F63A1B56C8A698 /* Debug.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Debug.swift; path = RxSwift/Observables/Debug.swift; sourceTree = ""; }; 0D59860F14F040F1C95C0936BF1BCAE8 /* DSL+Wait.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "DSL+Wait.swift"; path = "Sources/Nimble/DSL+Wait.swift"; sourceTree = ""; }; + 0D631E9908483F9525A6B3F36F16CC61 /* Quick.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Quick.framework; path = Quick.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 0E880690A199E4360FAC9FBABD181B05 /* Alamofire.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Alamofire.swift; path = Source/Alamofire.swift; sourceTree = ""; }; 10060999FA110AEAFAA5A492B3F04A1B /* ObservableConvertibleType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ObservableConvertibleType.swift; path = RxSwift/ObservableConvertibleType.swift; sourceTree = ""; }; 107CF6C0266A715ADF7BBC8C79AF1E3B /* Japx-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Japx-prefix.pch"; sourceTree = ""; }; - 1129FAEE8383C900905425892E61419F /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.0.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; 1156EECD92EC3A0D0C17613B765369AF /* Platform.Linux.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Platform.Linux.swift; path = Platform/Platform.Linux.swift; sourceTree = ""; }; 129F5FAF301C926FB7C4AC99578EBB3B /* JapxCodable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = JapxCodable.swift; path = Japx/Classes/Codable/JapxCodable.swift; sourceTree = ""; }; 12DD9B60A436C3FB71E12A1B7CAB0C12 /* DelaySubscription.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DelaySubscription.swift; path = RxSwift/Observables/DelaySubscription.swift; sourceTree = ""; }; @@ -410,7 +409,6 @@ 184F3B40C0D1F5B1D3C9F011DE5C5646 /* Nimble-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Nimble-Info.plist"; sourceTree = ""; }; 18B9A697B65E4E054B7EA36CC03FA7EA /* Pods-Japx_Example-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-Japx_Example-acknowledgements.plist"; sourceTree = ""; }; 1A3D22002854616EE2404E256B2CDF11 /* Quick.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = Quick.modulemap; sourceTree = ""; }; - 1A7F57970C2D8CA59EF7C46514E36131 /* Pods_Japx_Example.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Japx_Example.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 1C7D563718B2B05EC295EC4E8F9B8A9B /* Materialize.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Materialize.swift; path = RxSwift/Observables/Materialize.swift; sourceTree = ""; }; 1F5DAFD442C0375634DFAC7160C1EBFD /* Bag+Rx.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Bag+Rx.swift"; path = "RxSwift/Extensions/Bag+Rx.swift"; sourceTree = ""; }; 212CC06CBA97B82B0388DD4622F6D73E /* ObserverType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ObserverType.swift; path = RxSwift/ObserverType.swift; sourceTree = ""; }; @@ -424,7 +422,7 @@ 2818748183B52656281B226AAC00129A /* XCTestSuite+QuickTestSuiteBuilder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "XCTestSuite+QuickTestSuiteBuilder.m"; path = "Sources/QuickObjectiveC/XCTestSuite+QuickTestSuiteBuilder.m"; sourceTree = ""; }; 289AA8560267D6FE71AE59B1DD9DC1A6 /* BeCloseTo.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BeCloseTo.swift; path = Sources/Nimble/Matchers/BeCloseTo.swift; sourceTree = ""; }; 28A07193C90C3AF318728556EBBFC379 /* Reactive.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Reactive.swift; path = RxSwift/Reactive.swift; sourceTree = ""; }; - 28CA65DB7257B8ED32A2D4C8CE3EB468 /* mach_excServer.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = mach_excServer.c; path = Carthage/Checkouts/CwlPreconditionTesting/Sources/CwlMachBadInstructionHandler/mach_excServer.c; sourceTree = ""; }; + 28CA65DB7257B8ED32A2D4C8CE3EB468 /* mach_excServer.c */ = {isa = PBXFileReference; includeInIndex = 1; name = mach_excServer.c; path = Carthage/Checkouts/CwlPreconditionTesting/Sources/CwlMachBadInstructionHandler/mach_excServer.c; sourceTree = ""; }; 2949F88E61AC0DCEA064501C74EA3F0B /* SatisfyAllOf.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SatisfyAllOf.swift; path = Sources/Nimble/Matchers/SatisfyAllOf.swift; sourceTree = ""; }; 2A72D7E479297C1F73E6B4A7FB53CC9C /* DisposeBase.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DisposeBase.swift; path = RxSwift/Disposables/DisposeBase.swift; sourceTree = ""; }; 2AFE833C2B98C21D27A35447004BB6EF /* Pods-Japx_Example.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-Japx_Example.modulemap"; sourceTree = ""; }; @@ -438,7 +436,6 @@ 300895167A947BE2EA5F064CDEB76020 /* HaveCount.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = HaveCount.swift; path = Sources/Nimble/Matchers/HaveCount.swift; sourceTree = ""; }; 305F52C9F2F3CA0F5F46AE5E881A41C5 /* SourceLocation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SourceLocation.swift; path = Sources/Nimble/Utils/SourceLocation.swift; sourceTree = ""; }; 30F6BC37D8E97D142068B3B7544D49D6 /* ObserverBase.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ObserverBase.swift; path = RxSwift/Observers/ObserverBase.swift; sourceTree = ""; }; - 31E7BD345FF85B6A0E3289AC31EFE361 /* XCTest.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = XCTest.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.0.sdk/System/Library/Frameworks/XCTest.framework; sourceTree = DEVELOPER_DIR; }; 3217F02AC318B0AEDC5470D90B91D66B /* Japx.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = Japx.modulemap; sourceTree = ""; }; 339C5548B5FBD510D5F51F82FFFC861A /* Predicate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Predicate.swift; path = Sources/Nimble/Matchers/Predicate.swift; sourceTree = ""; }; 34CECF8B9E01D94D80F7833B195A128C /* Callsite.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Callsite.swift; path = Sources/Quick/Callsite.swift; sourceTree = ""; }; @@ -454,6 +451,7 @@ 3F8C3582E960B3DCC7C79B083F82F1C4 /* CurrentThreadScheduler.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CurrentThreadScheduler.swift; path = RxSwift/Schedulers/CurrentThreadScheduler.swift; sourceTree = ""; }; 3FB6FED914F798E0412DEAFC725FC65A /* ReplaySubject.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ReplaySubject.swift; path = RxSwift/Subjects/ReplaySubject.swift; sourceTree = ""; }; 4057915F8E4D4926F0A82D4D0F850573 /* Window.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Window.swift; path = RxSwift/Observables/Window.swift; sourceTree = ""; }; + 432A3CF557776A78066B3BF0F9BB8B16 /* Pods_Japx_Tests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Pods_Japx_Tests.framework; path = "Pods-Japx_Tests.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; 444FEA77B4D654FA71C1A44F038E8FD3 /* Nimble-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Nimble-prefix.pch"; sourceTree = ""; }; 4514B1B18EB2C55C5164B4BB54C5323E /* AsyncLock.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AsyncLock.swift; path = RxSwift/Concurrency/AsyncLock.swift; sourceTree = ""; }; 4552D07C2066F84BCF6DCC92DD36913E /* Maybe.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Maybe.swift; path = RxSwift/Traits/Maybe.swift; sourceTree = ""; }; @@ -489,7 +487,6 @@ 55A6A9155A5C10C46211BD6D962B7F92 /* CombineLatest+Collection.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "CombineLatest+Collection.swift"; path = "RxSwift/Observables/CombineLatest+Collection.swift"; sourceTree = ""; }; 5600C425B693BE6751BC2B7777047D9A /* Pods-Japx_Example-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-Japx_Example-umbrella.h"; sourceTree = ""; }; 564AD342DC8DE5F92BE8B79881F90D57 /* Behavior.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Behavior.swift; path = Sources/Quick/Behavior.swift; sourceTree = ""; }; - 571B05F3977BB11BD7B38F10C54FA75E /* Pods_Japx_Tests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Japx_Tests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 577806517FD769FEB5B147035BFDE7F9 /* Do.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Do.swift; path = RxSwift/Observables/Do.swift; sourceTree = ""; }; 57B2620330E19F1AB4D6763ED9D53466 /* ObservableType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ObservableType.swift; path = RxSwift/ObservableType.swift; sourceTree = ""; }; 5ACD9828C1F96512B025A33F9E179CAF /* Await.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Await.swift; path = Sources/Nimble/Utils/Await.swift; sourceTree = ""; }; @@ -500,6 +497,7 @@ 5C359D0B9E2D5BBC7B28A3BB1CC27C72 /* QuickSpecBase.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = QuickSpecBase.m; path = Sources/QuickSpecBase/QuickSpecBase.m; sourceTree = ""; }; 5C7C4D6476743C624BB7FE21AE4D1A58 /* ExpectationMessage.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ExpectationMessage.swift; path = Sources/Nimble/ExpectationMessage.swift; sourceTree = ""; }; 5C9C5AF948678265D6B05F001AA64FA3 /* SessionDelegate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SessionDelegate.swift; path = Source/SessionDelegate.swift; sourceTree = ""; }; + 5D797E9A5C5782CE845840781FA1CC81 /* Alamofire.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Alamofire.framework; path = Alamofire.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 5DA561000475C2B9E0429D1834CD3E6E /* DispatchQueue+Alamofire.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "DispatchQueue+Alamofire.swift"; path = "Source/DispatchQueue+Alamofire.swift"; sourceTree = ""; }; 5F8A220C38BEFC89B039ED846473EC88 /* SessionManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SessionManager.swift; path = Source/SessionManager.swift; sourceTree = ""; }; 603FFBA34D80D04030D59EA09AAC865F /* Pods-Japx_Example.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Japx_Example.release.xcconfig"; sourceTree = ""; }; @@ -517,6 +515,7 @@ 68C60EA1E09FCCF52166F6959CB8E461 /* String+Rx.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "String+Rx.swift"; path = "RxSwift/Extensions/String+Rx.swift"; sourceTree = ""; }; 6A85A91CE693681951E6DA9EA8DBDA01 /* RxSwift-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "RxSwift-Info.plist"; sourceTree = ""; }; 6B0809C87C3A811F9B96CC7E9F9332E4 /* TakeLast.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TakeLast.swift; path = RxSwift/Observables/TakeLast.swift; sourceTree = ""; }; + 6C9C976F7199F8585AD3C38106D1FA9B /* Japx.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Japx.framework; path = Japx.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 6F81C4E7B13A574A2F22BBE896C82A69 /* Nimble.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Nimble.h; path = Sources/Nimble/Nimble.h; sourceTree = ""; }; 703932B01C4BCC06EE58E403EB6F41FF /* Alamofire.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = Alamofire.modulemap; sourceTree = ""; }; 70ABCCBBEFDFB00B8ECBA241AEDDFB21 /* HooksPhase.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = HooksPhase.swift; path = Sources/Quick/Hooks/HooksPhase.swift; sourceTree = ""; }; @@ -534,9 +533,9 @@ 793FA0EF1E88D9AA114B25A2CC865231 /* ExampleMetadata.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ExampleMetadata.swift; path = Sources/Quick/ExampleMetadata.swift; sourceTree = ""; }; 7A029B8176AB9ED7DDF3DCC6D7D4E941 /* NMBObjCMatcher.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NMBObjCMatcher.swift; path = Sources/Nimble/Adapters/NMBObjCMatcher.swift; sourceTree = ""; }; 7CC4788145FD0E5F0AE94314EDB2252A /* Pods-Japx_Tests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Japx_Tests.release.xcconfig"; sourceTree = ""; }; - 7E1DF0BCBD3BB05F6200254570B0046F /* Nimble.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Nimble.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 7E7DB7C15E2D6D0BA20D82E2B75E6A6F /* SingleAssignmentDisposable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SingleAssignmentDisposable.swift; path = RxSwift/Disposables/SingleAssignmentDisposable.swift; sourceTree = ""; }; 7ED3490E6F1D29F6A87D467F70B70F26 /* AsSingle.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AsSingle.swift; path = RxSwift/Observables/AsSingle.swift; sourceTree = ""; }; + 809C5FAB588354C9BA37DC3EAB8CB45C /* RxSwift.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = RxSwift.framework; path = RxSwift.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 81F161311D15A1000F8CAF9330A74D1C /* CwlPreconditionTesting.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CwlPreconditionTesting.h; path = Carthage/Checkouts/CwlPreconditionTesting/Sources/CwlPreconditionTesting/Mach/CwlPreconditionTesting.h; sourceTree = ""; }; 82378C5FBA30B592FF9CB304183C844E /* JapxRxAlamofire.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = JapxRxAlamofire.swift; path = Japx/Classes/RxAlamofire/JapxRxAlamofire.swift; sourceTree = ""; }; 82FD42CF7926F97863AE7692797C9561 /* BeLogical.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BeLogical.swift; path = Sources/Nimble/Matchers/BeLogical.swift; sourceTree = ""; }; @@ -552,7 +551,7 @@ 899567CFF4C6BDED365F7DED5A66D272 /* First.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = First.swift; path = RxSwift/Observables/First.swift; sourceTree = ""; }; 8A9C108C8EE45FE3A231BF42947C5EF1 /* Deferred.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Deferred.swift; path = RxSwift/Observables/Deferred.swift; sourceTree = ""; }; 8B060D843ED2FD2A493542FD7A7DAA49 /* TakeWhile.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TakeWhile.swift; path = RxSwift/Observables/TakeWhile.swift; sourceTree = ""; }; - 8BD0481B29E0304CCE6E952ADC36E707 /* README.md */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = ""; }; + 8BD0481B29E0304CCE6E952ADC36E707 /* README.md */ = {isa = PBXFileReference; includeInIndex = 1; path = README.md; sourceTree = ""; }; 8C8F16E516F0415418E7498D38C160CA /* Validation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Validation.swift; path = Source/Validation.swift; sourceTree = ""; }; 8D7C99DD4432B8396A13747A54AD1AC3 /* QuickConfiguration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = QuickConfiguration.m; path = Sources/QuickObjectiveC/Configuration/QuickConfiguration.m; sourceTree = ""; }; 8F1DA3BA72D1CE653973E95D06C2A2A4 /* CompositeDisposable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CompositeDisposable.swift; path = RxSwift/Disposables/CompositeDisposable.swift; sourceTree = ""; }; @@ -570,7 +569,7 @@ 9858A92B7E4D7BE5995C330E4D68BB68 /* Debounce.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Debounce.swift; path = RxSwift/Observables/Debounce.swift; sourceTree = ""; }; 9C90AAF28F25B0B13E1FB5CFF777A6F3 /* QuickSpecBase.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = QuickSpecBase.h; path = Sources/QuickSpecBase/include/QuickSpecBase.h; sourceTree = ""; }; 9CEF1DBA87B51DE7D676C87314C59AED /* CombineLatest.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CombineLatest.swift; path = RxSwift/Observables/CombineLatest.swift; sourceTree = ""; }; - 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; + 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; 9DAB24C40E5706F5F8FE8F06E2DE46F7 /* Quick-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Quick-umbrella.h"; sourceTree = ""; }; 9E7AF262FD73F2513838FB1DFE4BFDF4 /* Generate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Generate.swift; path = RxSwift/Observables/Generate.swift; sourceTree = ""; }; 9EFCB5BB3A66BDB20CBC008E3B2F3446 /* Platform.Darwin.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Platform.Darwin.swift; path = Platform/Platform.Darwin.swift; sourceTree = ""; }; @@ -609,6 +608,7 @@ B6591CEA4224D4AE7827FC73521D5D9A /* EndWith.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = EndWith.swift; path = Sources/Nimble/Matchers/EndWith.swift; sourceTree = ""; }; B68B64ADF11781A371382A8BFF064177 /* CwlMachBadInstructionHandler.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = CwlMachBadInstructionHandler.m; path = Carthage/Checkouts/CwlPreconditionTesting/Sources/CwlMachBadInstructionHandler/CwlMachBadInstructionHandler.m; sourceTree = ""; }; BA1A0C5616A82CB492F186AFC1D66D47 /* BeNil.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BeNil.swift; path = Sources/Nimble/Matchers/BeNil.swift; sourceTree = ""; }; + BAE263041362D074978BB3B577DF0A05 /* Nimble.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Nimble.framework; path = Nimble.framework; sourceTree = BUILT_PRODUCTS_DIR; }; BB561E88B9E2BBC62569733E9A57EF96 /* Japx.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Japx.xcconfig; sourceTree = ""; }; BB8E85A65821C769A3FDDEDE63A2DA16 /* Notifications.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Notifications.swift; path = Source/Notifications.swift; sourceTree = ""; }; BBE40900DAF6F3F033CF344BE57D0A25 /* RefCountDisposable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RefCountDisposable.swift; path = RxSwift/Disposables/RefCountDisposable.swift; sourceTree = ""; }; @@ -634,9 +634,8 @@ CA7A43F34D340B9339310E1F46D2E8F6 /* Error.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Error.swift; path = RxSwift/Observables/Error.swift; sourceTree = ""; }; CBA2D008A9FAE1895A076F3AE36BB6D0 /* ElementsEqual.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ElementsEqual.swift; path = Sources/Nimble/Matchers/ElementsEqual.swift; sourceTree = ""; }; CBAC7A2EF9147C4C871156392041F36A /* URL+FileName.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "URL+FileName.swift"; path = "Sources/Quick/URL+FileName.swift"; sourceTree = ""; }; - CDC29541592B33F38644FD1CBF938B03 /* Japx.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Japx.framework; sourceTree = BUILT_PRODUCTS_DIR; }; CEC13D70DC2A9EB89F1D7CD79AC4E274 /* Match.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Match.swift; path = Sources/Nimble/Matchers/Match.swift; sourceTree = ""; }; - D1523C78183115D4D4EF5D88C0FAA0AC /* Alamofire.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Alamofire.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D04C3B445D070BA51952F33F68CA24C4 /* Pods_Japx_Example.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Pods_Japx_Example.framework; path = "Pods-Japx_Example.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; D15913AD700B43FDE81084DA4DDADC0C /* Functional.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Functional.swift; path = Sources/Nimble/Utils/Functional.swift; sourceTree = ""; }; D1CB9A3E3CEA651B6C1EADABB9C7EC53 /* RecursiveScheduler.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RecursiveScheduler.swift; path = RxSwift/Schedulers/RecursiveScheduler.swift; sourceTree = ""; }; D2113A2111BCDCCD1B4122619C85FDD7 /* RetryWhen.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RetryWhen.swift; path = RxSwift/Observables/RetryWhen.swift; sourceTree = ""; }; @@ -664,7 +663,6 @@ DA371A094C22C3A379F35087022E1A46 /* ResponseSerialization.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ResponseSerialization.swift; path = Source/ResponseSerialization.swift; sourceTree = ""; }; DBFDBAF86DA5A80D38C9DC50A86F864C /* AsyncSubject.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AsyncSubject.swift; path = RxSwift/Subjects/AsyncSubject.swift; sourceTree = ""; }; DDF07459AC53D4F2F593F1B07CDA62D2 /* Nimble-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Nimble-umbrella.h"; sourceTree = ""; }; - DE714A99C22819FA4332683CE9D1DCF0 /* Quick.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Quick.framework; sourceTree = BUILT_PRODUCTS_DIR; }; DF0837BF48C8F7AA0E611E0FBE64F20D /* Repeat.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Repeat.swift; path = RxSwift/Observables/Repeat.swift; sourceTree = ""; }; DF1F03205B013D99BE5CB93B1B342BCC /* SynchronizedUnsubscribeType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SynchronizedUnsubscribeType.swift; path = RxSwift/Concurrency/SynchronizedUnsubscribeType.swift; sourceTree = ""; }; DF9052D709829D2A32C79BEA0FF5573C /* Result.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Result.swift; path = Source/Result.swift; sourceTree = ""; }; @@ -672,17 +670,19 @@ E442269CBD76E7D82BE1190F2073B14F /* QCKDSL.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = QCKDSL.m; path = Sources/QuickObjectiveC/DSL/QCKDSL.m; sourceTree = ""; }; E47374FC81FE6F65463B9DA4B4060BDB /* Producer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Producer.swift; path = RxSwift/Observables/Producer.swift; sourceTree = ""; }; E4869F7C71B4840407DBF0A263F66575 /* Equal.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Equal.swift; path = Sources/Nimble/Matchers/Equal.swift; sourceTree = ""; }; + E6587F8CC961169103A4B57E0C611279 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.2.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; E6F646FAAEE3E0AB13DC512B80D08F3A /* MatcherFunc.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MatcherFunc.swift; path = Sources/Nimble/Matchers/MatcherFunc.swift; sourceTree = ""; }; E7823AEC82305C1DAD50759EB0C12FC0 /* Example.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Example.swift; path = Sources/Quick/Example.swift; sourceTree = ""; }; - E7DE4A0A6658540E95D898C7146E46F5 /* LICENSE */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = LICENSE; sourceTree = ""; }; + E7DE4A0A6658540E95D898C7146E46F5 /* LICENSE */ = {isa = PBXFileReference; includeInIndex = 1; path = LICENSE; sourceTree = ""; }; E97F50E655FEABF150F986EB47B4DD6D /* Pods-Japx_Tests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Japx_Tests.debug.xcconfig"; sourceTree = ""; }; EA5BFAE3D0DD6839D560BEFE761EBD99 /* Throttle.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Throttle.swift; path = RxSwift/Observables/Throttle.swift; sourceTree = ""; }; + EB196ACDA1395292B3D3142BB40BF693 /* XCTest.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = XCTest.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.2.sdk/System/Library/Frameworks/XCTest.framework; sourceTree = DEVELOPER_DIR; }; EB68F50D7E397F0F80908E0513ED2FB3 /* ThrowError.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ThrowError.swift; path = Sources/Nimble/Matchers/ThrowError.swift; sourceTree = ""; }; ED3D76ED5A8DC18569067B146CA39DA1 /* Alamofire-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Alamofire-umbrella.h"; sourceTree = ""; }; ED80E40520AC3595AAACE476A4DEC29A /* Rx.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Rx.swift; path = RxSwift/Rx.swift; sourceTree = ""; }; F3C25924DDE6D53980A218358DB24F40 /* Nimble.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = Nimble.modulemap; sourceTree = ""; }; F470FE8659C959C24B6E08E960753D44 /* Pods-Japx_Tests-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-Japx_Tests-acknowledgements.plist"; sourceTree = ""; }; - F4A70646110F727385C3442A0BE17144 /* Japx.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; path = Japx.podspec; sourceTree = ""; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; + F4A70646110F727385C3442A0BE17144 /* Japx.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; path = Japx.podspec; sourceTree = ""; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; F4DE92299ACBEA76596B10C81D47457A /* BeVoid.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BeVoid.swift; path = Sources/Nimble/Matchers/BeVoid.swift; sourceTree = ""; }; F5434193F6C2688A18BD4BB19C0E6405 /* SwitchIfEmpty.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SwitchIfEmpty.swift; path = RxSwift/Observables/SwitchIfEmpty.swift; sourceTree = ""; }; F5FABCDF6E4ACB986B9EEA712A0E8BE3 /* TaskDelegate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TaskDelegate.swift; path = Source/TaskDelegate.swift; sourceTree = ""; }; @@ -711,62 +711,62 @@ /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 073F3FE184800BFE878ACD3BC5A342BE /* Frameworks */ = { + 090C1D63463ACF622287EFF9D5C9392D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 3BD03493EEE212E66F8841968C976A0A /* Foundation.framework in Frameworks */, + 7664FD4F59A0C00866CBAE60B0A3AD64 /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 20E0E49E28E935CFEA09F28BBE6B6F6E /* Frameworks */ = { + 36A2785FE48F54D6EE7729478D755BDB /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 568310A2E893E20ACFEE76615BCC4F64 /* Alamofire.framework in Frameworks */, - BF367D5F3EA004099E9A9D1C042F78D8 /* Foundation.framework in Frameworks */, - D73EABBA1747D2F7B49BD355516B6B27 /* RxSwift.framework in Frameworks */, + 254A139F6149C62CB0CFA1622FF5EB77 /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 3F5152C2C3B861B9F6CA92DAE5050FA1 /* Frameworks */ = { + 55C81EE76C6A69F1F69792A679310C68 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 5ADD44A9A1DEE51ECC6712E2ECC9420E /* Foundation.framework in Frameworks */, - 45BC601FADAD02057F4B0E387E5F6F9A /* XCTest.framework in Frameworks */, + EFB9CC9267297D8104141A4046AAD14E /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - A6CE8B7ED3BEB6AB80972A0184883542 /* Frameworks */ = { + C531BE2BBC90601122B6B8FEE5D7E61E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 36FC3E02B8F86A133DA244814835A038 /* Foundation.framework in Frameworks */, + 6AAF7D1071FACEB1A8EA8B2B25C20837 /* Alamofire.framework in Frameworks */, + 12A5AF072463622EE29839DA03E78D70 /* Foundation.framework in Frameworks */, + C43DDB46852F07373069553531F9339D /* RxSwift.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - AEEB621CE40A1ACB207908FA87C15A57 /* Frameworks */ = { + D9523B817C92EFD8BCE3CDE77F54908E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 6E769EB7A1EB4B2FA667A0DF27F29102 /* Foundation.framework in Frameworks */, + 7BCC1E21AD0581F508C189CA6CDBF923 /* Foundation.framework in Frameworks */, + FBBE9D9A2D1C31E86BEABF94B224C4EE /* XCTest.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - F1626ADC3A7EC435D2722B3173355D36 /* Frameworks */ = { + D9D71B3281E5296B4D9E4E70640DCF7D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 3BD1DAFE1F3E6C9E4EB0F2099B6D6FA2 /* Foundation.framework in Frameworks */, + 36A174F5C9C1686342B9E78372CFBF3E /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - F9F8CFCD3C9798C561B7623608D3C821 /* Frameworks */ = { + EC2B2702C21FF8A509C60F5D35545F8A /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 836B968E1EA15BA9CB9B2705638A2679 /* Foundation.framework in Frameworks */, + 4D294B2BFD248971A3744820D59762DD /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -776,13 +776,13 @@ 041BA1C692F73FDA89DF9AC2519E6C0E /* Products */ = { isa = PBXGroup; children = ( - D1523C78183115D4D4EF5D88C0FAA0AC /* Alamofire.framework */, - CDC29541592B33F38644FD1CBF938B03 /* Japx.framework */, - 7E1DF0BCBD3BB05F6200254570B0046F /* Nimble.framework */, - 1A7F57970C2D8CA59EF7C46514E36131 /* Pods_Japx_Example.framework */, - 571B05F3977BB11BD7B38F10C54FA75E /* Pods_Japx_Tests.framework */, - DE714A99C22819FA4332683CE9D1DCF0 /* Quick.framework */, - 009AB37BE27619C730615D1005A921D9 /* RxSwift.framework */, + 5D797E9A5C5782CE845840781FA1CC81 /* Alamofire.framework */, + 6C9C976F7199F8585AD3C38106D1FA9B /* Japx.framework */, + BAE263041362D074978BB3B577DF0A05 /* Nimble.framework */, + D04C3B445D070BA51952F33F68CA24C4 /* Pods_Japx_Example.framework */, + 432A3CF557776A78066B3BF0F9BB8B16 /* Pods_Japx_Tests.framework */, + 0D631E9908483F9525A6B3F36F16CC61 /* Quick.framework */, + 809C5FAB588354C9BA37DC3EAB8CB45C /* RxSwift.framework */, ); name = Products; sourceTree = ""; @@ -834,6 +834,7 @@ 8C8F16E516F0415418E7498D38C160CA /* Validation.swift */, 3A0904C76E217B6AB64EF9D224914A2B /* Support Files */, ); + name = Alamofire; path = Alamofire; sourceTree = ""; }; @@ -1015,6 +1016,7 @@ 900268EB248BDF9CB6960020A0C75C3F /* Zip+Collection.swift */, A6B617498CC7BFF10E75306F5265BA07 /* Support Files */, ); + name = RxSwift; path = RxSwift; sourceTree = ""; }; @@ -1045,7 +1047,7 @@ children = ( 3DD31C93E3C233A8E39873FE2BD70F5E /* Alamofire.framework */, 96FA2FC8D08EDC34A0DAF9788ECE32C4 /* RxSwift.framework */, - D3F5100187DDB28737E8C5BE03BD1D1C /* iOS */, + 5D30EADFA7FDBB535DED4AA633A7B58B /* iOS */, ); name = Frameworks; sourceTree = ""; @@ -1075,6 +1077,15 @@ path = "Target Support Files/Pods-Japx_Example"; sourceTree = ""; }; + 5D30EADFA7FDBB535DED4AA633A7B58B /* iOS */ = { + isa = PBXGroup; + children = ( + E6587F8CC961169103A4B57E0C611279 /* Foundation.framework */, + EB196ACDA1395292B3D3142BB40BF693 /* XCTest.framework */, + ); + name = iOS; + sourceTree = ""; + }; 5EEB1A6D983D7ED5C5ED44254FA16A81 /* Alamofire */ = { isa = PBXGroup; children = ( @@ -1168,6 +1179,7 @@ 2818748183B52656281B226AAC00129A /* XCTestSuite+QuickTestSuiteBuilder.m */, FA0ACE512D5FCE6201AC78AFAB991F75 /* Support Files */, ); + name = Quick; path = Quick; sourceTree = ""; }; @@ -1269,6 +1281,7 @@ F7A27390513B6C3ECBF1FE7F70634119 /* XCTestObservationCenter+Register.m */, 83FA5624801A192E4B6039E40327FB64 /* Support Files */, ); + name = Nimble; path = Nimble; sourceTree = ""; }; @@ -1302,15 +1315,6 @@ ); sourceTree = ""; }; - D3F5100187DDB28737E8C5BE03BD1D1C /* iOS */ = { - isa = PBXGroup; - children = ( - 1129FAEE8383C900905425892E61419F /* Foundation.framework */, - 31E7BD345FF85B6A0E3289AC31EFE361 /* XCTest.framework */, - ); - name = iOS; - sourceTree = ""; - }; E92AAF240789938BC0AC7DFB8DA43372 /* ObjC */ = { isa = PBXGroup; children = ( @@ -1337,72 +1341,72 @@ /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */ - 23D70D9651451F43E7E8CC1A87B4B7E9 /* Headers */ = { + 1FA9737FC59638CFBCFA8D88127CADB2 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - B6F6E4CC26451E91B59FAE0F6841DC1F /* Alamofire-umbrella.h in Headers */, + 372DFDC2B478FA6846013992732701D2 /* Pods-Japx_Example-umbrella.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - 40A2E7F210597909ADD326267C30BE49 /* Headers */ = { + 2582784E4FA6A1AC5D23FC53AC3F6EE2 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 1677F2056EEBB73C04885F6CAE7A76CB /* Pods-Japx_Tests-umbrella.h in Headers */, + F7B74645E07C39771156A1FA413B98D4 /* Alamofire-umbrella.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - 6690559A0FA18F0752F27A511B8DAAD6 /* Headers */ = { + 30F0A3559EE729FD03C84AD40FD505E2 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - C5031E73785A648DB774B7B400990B70 /* CwlCatchException.h in Headers */, - C472DA557E7C8581DD4C6FAA91A3AEDF /* CwlMachBadInstructionHandler.h in Headers */, - FB40FED7E750AF80AB50BC8E3B49994F /* CwlPreconditionTesting.h in Headers */, - C362C08C3C9DF2344E7F9754F740EF25 /* DSL.h in Headers */, - 4EEC9C035622F4D4506DD25468515304 /* mach_excServer.h in Headers */, - 2FA8A34100187D5C3FA290CC595AD0E6 /* Nimble-umbrella.h in Headers */, - D7F1FC2CD64C4575A609FF752122CABF /* Nimble.h in Headers */, - 72F4983A53F7248EB878ABEE5BE94FD5 /* NMBExceptionCapture.h in Headers */, - 93448D340A8E100FA8FE112BCEE6F1E2 /* NMBStringify.h in Headers */, + 667751D0A9B365F30B4D48AB0D99F330 /* RxSwift-umbrella.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - 6E09AF003D5456676EA514BC469BB216 /* Headers */ = { + 51A00ABBA2BEF3913A4628399CEBD45B /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 22A03DACA8256F2068C1FB014DAB2965 /* Japx-umbrella.h in Headers */, + 221ED892E5138A00F3CDF540E914519D /* CwlCatchException.h in Headers */, + 9F70369EF71BD9ABAFF687AF532CC20D /* CwlMachBadInstructionHandler.h in Headers */, + 19BA8AF46D9CC49E3E2CEDCAF6354442 /* CwlPreconditionTesting.h in Headers */, + C051C0411627BD5FCDA031782EB1F716 /* DSL.h in Headers */, + 3BD0C370BBCEBDEA68B8EDBD969370EB /* mach_excServer.h in Headers */, + CD6B1F146B0E157FE5B9CAFFAE77A5B5 /* Nimble-umbrella.h in Headers */, + 9BB5E9B6487FE95C710687B484C17161 /* Nimble.h in Headers */, + 8D17749611AB0C8BD51C068749D8DF68 /* NMBExceptionCapture.h in Headers */, + E0EAC85F7ACFAD998B14FCE66144000E /* NMBStringify.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - 8E5082D894B74F0F1E818F21FB9D8D8E /* Headers */ = { + 60D2F9C1AB044F11FC985F2EFA91A744 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - F6C049051B0D9819F5D6E7915ECAEEB3 /* RxSwift-umbrella.h in Headers */, + 04FDD3BD021F92DA0A6F432D1B3F7E50 /* Japx-umbrella.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - CBA2707A202D1B1E850BBE92256B45C0 /* Headers */ = { + A6B4F1131B44C7FADDF1593EEC425D38 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 22D2AE42BA8E816A736A59EB90ECDF7E /* QCKDSL.h in Headers */, - 2ED8027DDE87BA96D1015EEBF51AD9E6 /* Quick-umbrella.h in Headers */, - A971D89C528D23212F024B371F0E1718 /* Quick.h in Headers */, - F10A1B92C1E050E153738C5C4BAC664F /* QuickConfiguration.h in Headers */, - 79C3421150AEB0300D270036979B1798 /* QuickSpec.h in Headers */, - ECA13E8BB0EF60C0A9243E0E8039A4C5 /* QuickSpecBase.h in Headers */, + DA5B32B2104CA24325E603F5C093FE77 /* Pods-Japx_Tests-umbrella.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - CEC1CFD46BFC9A72A33BF1B849AD4DDB /* Headers */ = { + EC3EC9092F61BD757267FD6009C275C5 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 07A0E900150AD88654C2165C3397D58E /* Pods-Japx_Example-umbrella.h in Headers */, + C912897D77798A90873A3DAD8A4BDC50 /* QCKDSL.h in Headers */, + BD379F95293A811D8E591CAC8E9FF410 /* Quick-umbrella.h in Headers */, + A9BF211D24462D531E278F2AE317AEA4 /* Quick.h in Headers */, + 34EA8D74C57BC1A6AC8C0A5B5267E56C /* QuickConfiguration.h in Headers */, + D755642ECA73CFE2E4C31CDD0DFBA42E /* QuickSpec.h in Headers */, + 403F837F9B4AC86C901D238D847A767A /* QuickSpecBase.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1411,33 +1415,33 @@ /* Begin PBXNativeTarget section */ 1C28ABB3FB0E54BD7AF16D90DA065594 /* Pods-Japx_Tests */ = { isa = PBXNativeTarget; - buildConfigurationList = 71610ECE2186E5279B934AB97D1DFD11 /* Build configuration list for PBXNativeTarget "Pods-Japx_Tests" */; + buildConfigurationList = FA1DBD84C09A94FD8323F49EC88B5D8A /* Build configuration list for PBXNativeTarget "Pods-Japx_Tests" */; buildPhases = ( - 40A2E7F210597909ADD326267C30BE49 /* Headers */, - 86AAFC153FF4DDB63C56B6A295B3242F /* Sources */, - A6CE8B7ED3BEB6AB80972A0184883542 /* Frameworks */, - B35202D8BC4134840DC79742417729F6 /* Resources */, + A6B4F1131B44C7FADDF1593EEC425D38 /* Headers */, + 85B292F55A6A3AA28B1459C408C030F5 /* Sources */, + D9D71B3281E5296B4D9E4E70640DCF7D /* Frameworks */, + 4D516789CC4F41EDFFAD9576EFED3DA2 /* Resources */, ); buildRules = ( ); dependencies = ( - 35EC8BFB5B1317A920CCB8A5DC051258 /* PBXTargetDependency */, - 9E87E67A75B7FCD6C9D356E438A97999 /* PBXTargetDependency */, - AAB781A69E4756C88E99483445C223EF /* PBXTargetDependency */, + 1D4B482C504790C2F683FB3A7A22BDF7 /* PBXTargetDependency */, + E6F50C7984BB575A1D8AA4E273507BFA /* PBXTargetDependency */, + 02111FF85682FEF2D6CC3106967D8FD3 /* PBXTargetDependency */, ); name = "Pods-Japx_Tests"; productName = "Pods-Japx_Tests"; - productReference = 571B05F3977BB11BD7B38F10C54FA75E /* Pods_Japx_Tests.framework */; + productReference = 432A3CF557776A78066B3BF0F9BB8B16 /* Pods_Japx_Tests.framework */; productType = "com.apple.product-type.framework"; }; 6F13695E06195A78EA8A95F8C7ED0D2F /* Nimble */ = { isa = PBXNativeTarget; - buildConfigurationList = E3A98634DB5DA9D006BDFE48B5C34CB5 /* Build configuration list for PBXNativeTarget "Nimble" */; + buildConfigurationList = 9AC65E53333ACA93EEB1D8EBAB58CBB6 /* Build configuration list for PBXNativeTarget "Nimble" */; buildPhases = ( - 6690559A0FA18F0752F27A511B8DAAD6 /* Headers */, - 696291B3BF50FCD63898B3DD76DEB747 /* Sources */, - F9F8CFCD3C9798C561B7623608D3C821 /* Frameworks */, - AD1799A208BE417CCE05899E167D813E /* Resources */, + 51A00ABBA2BEF3913A4628399CEBD45B /* Headers */, + D399136A0E6FE19CACE7F05143312FB1 /* Sources */, + 55C81EE76C6A69F1F69792A679310C68 /* Frameworks */, + D7EBE1F47ACC336A60ED6056AF3261E1 /* Resources */, ); buildRules = ( ); @@ -1445,37 +1449,37 @@ ); name = Nimble; productName = Nimble; - productReference = 7E1DF0BCBD3BB05F6200254570B0046F /* Nimble.framework */; + productReference = BAE263041362D074978BB3B577DF0A05 /* Nimble.framework */; productType = "com.apple.product-type.framework"; }; 8D5C454863D7AE3089967443AEF1672F /* Japx */ = { isa = PBXNativeTarget; - buildConfigurationList = C7CBB43CC8359CCD0A90464B83ECD474 /* Build configuration list for PBXNativeTarget "Japx" */; + buildConfigurationList = 7BA2871073BADA98924CEA9411E2DD6E /* Build configuration list for PBXNativeTarget "Japx" */; buildPhases = ( - 6E09AF003D5456676EA514BC469BB216 /* Headers */, - 3CA174DEF00E248D0C1F2379319CE255 /* Sources */, - 20E0E49E28E935CFEA09F28BBE6B6F6E /* Frameworks */, - 16C75709A6C0D17B74C5DFD9C7B5005E /* Resources */, + 60D2F9C1AB044F11FC985F2EFA91A744 /* Headers */, + B23BFA97BC2966BB0855348083DA4F1A /* Sources */, + C531BE2BBC90601122B6B8FEE5D7E61E /* Frameworks */, + 75A36AA9EBFD02B64754550A48ECBA6D /* Resources */, ); buildRules = ( ); dependencies = ( - AAC9D6AD942328C01F0D3288820E583B /* PBXTargetDependency */, - D734F73DE8B63F258B7B94DC372AF733 /* PBXTargetDependency */, + 7D34A805C6A99D41CCCD3D69A3D8415B /* PBXTargetDependency */, + 0B44B37FA8D5A45346C6301BB33026C9 /* PBXTargetDependency */, ); name = Japx; productName = Japx; - productReference = CDC29541592B33F38644FD1CBF938B03 /* Japx.framework */; + productReference = 6C9C976F7199F8585AD3C38106D1FA9B /* Japx.framework */; productType = "com.apple.product-type.framework"; }; C82891EAB7293DBEE916B21F57E8474D /* Quick */ = { isa = PBXNativeTarget; - buildConfigurationList = 0E20BBA58157205BEC002EF4C5479247 /* Build configuration list for PBXNativeTarget "Quick" */; + buildConfigurationList = A482E8F0F5BEDCE177543007D23A5736 /* Build configuration list for PBXNativeTarget "Quick" */; buildPhases = ( - CBA2707A202D1B1E850BBE92256B45C0 /* Headers */, - 4E10A61C31E280036400F07A356CAEE1 /* Sources */, - 3F5152C2C3B861B9F6CA92DAE5050FA1 /* Frameworks */, - 4B6C0D2D4C02C9930A3F9C8DA4F3E277 /* Resources */, + EC3EC9092F61BD757267FD6009C275C5 /* Headers */, + 507CFA4217F0978AF450319CC96D5C36 /* Sources */, + D9523B817C92EFD8BCE3CDE77F54908E /* Frameworks */, + 42E082BE7328DA6969AECE264ACD14E0 /* Resources */, ); buildRules = ( ); @@ -1483,38 +1487,38 @@ ); name = Quick; productName = Quick; - productReference = DE714A99C22819FA4332683CE9D1DCF0 /* Quick.framework */; + productReference = 0D631E9908483F9525A6B3F36F16CC61 /* Quick.framework */; productType = "com.apple.product-type.framework"; }; DBF638E41A88B506C17D9D5F9F411553 /* Pods-Japx_Example */ = { isa = PBXNativeTarget; - buildConfigurationList = 88C6F3479A4EFBB6783ED53DAC76705C /* Build configuration list for PBXNativeTarget "Pods-Japx_Example" */; + buildConfigurationList = B6B87F13804ABF0E3AD9FCD5147EED8E /* Build configuration list for PBXNativeTarget "Pods-Japx_Example" */; buildPhases = ( - CEC1CFD46BFC9A72A33BF1B849AD4DDB /* Headers */, - 340064629DE007227450E96A0F0ACF1B /* Sources */, - AEEB621CE40A1ACB207908FA87C15A57 /* Frameworks */, - B0D3DB3174ADE357071DD9ABDAD8FFEE /* Resources */, + 1FA9737FC59638CFBCFA8D88127CADB2 /* Headers */, + C7CDB6B06CAB59BECE469D10545FD75A /* Sources */, + 36A2785FE48F54D6EE7729478D755BDB /* Frameworks */, + 6951ADF9AD15CD4DE3FE067D9CABD7C8 /* Resources */, ); buildRules = ( ); dependencies = ( - 633BDCBC91ABC54AC75EAA5F040C41BA /* PBXTargetDependency */, - 62D8BE105F3504E2C517A79856F533DE /* PBXTargetDependency */, - 0956A104330D0BA9194E750D3DA2CF77 /* PBXTargetDependency */, + FED1B9F054FFE063E1F54B6C20B6C07A /* PBXTargetDependency */, + 01FD97D679B5DF0DD20729B39BA4376F /* PBXTargetDependency */, + 9D4230867E01DE56A13592EE3282973A /* PBXTargetDependency */, ); name = "Pods-Japx_Example"; productName = "Pods-Japx_Example"; - productReference = 1A7F57970C2D8CA59EF7C46514E36131 /* Pods_Japx_Example.framework */; + productReference = D04C3B445D070BA51952F33F68CA24C4 /* Pods_Japx_Example.framework */; productType = "com.apple.product-type.framework"; }; EA9EA43B3B503823EE36C60D9C8A865F /* RxSwift */ = { isa = PBXNativeTarget; - buildConfigurationList = E8949A8D9034B0752237CB279E4B4A5C /* Build configuration list for PBXNativeTarget "RxSwift" */; + buildConfigurationList = 47B2ED1DB2551CC08020A3160EED216D /* Build configuration list for PBXNativeTarget "RxSwift" */; buildPhases = ( - 8E5082D894B74F0F1E818F21FB9D8D8E /* Headers */, - D19F13EB0E6DFCF463277775AC6E04E8 /* Sources */, - 073F3FE184800BFE878ACD3BC5A342BE /* Frameworks */, - 2D0CAB33736CF0FE3AAB78F97019D45B /* Resources */, + 30F0A3559EE729FD03C84AD40FD505E2 /* Headers */, + 98A10758574CC6E660A45A5E2D430203 /* Sources */, + EC2B2702C21FF8A509C60F5D35545F8A /* Frameworks */, + 92091B1DE715782FC4674CE5433C15C0 /* Resources */, ); buildRules = ( ); @@ -1522,17 +1526,17 @@ ); name = RxSwift; productName = RxSwift; - productReference = 009AB37BE27619C730615D1005A921D9 /* RxSwift.framework */; + productReference = 809C5FAB588354C9BA37DC3EAB8CB45C /* RxSwift.framework */; productType = "com.apple.product-type.framework"; }; EAAA1AD3A8A1B59AB91319EE40752C6D /* Alamofire */ = { isa = PBXNativeTarget; - buildConfigurationList = E87124444A44B7DB55208E7FEC21D331 /* Build configuration list for PBXNativeTarget "Alamofire" */; + buildConfigurationList = E4A5194ABAF7A4780609E0E581DA6B54 /* Build configuration list for PBXNativeTarget "Alamofire" */; buildPhases = ( - 23D70D9651451F43E7E8CC1A87B4B7E9 /* Headers */, - CFA11E47B3EB3A36AA49F6F7F060CB98 /* Sources */, - F1626ADC3A7EC435D2722B3173355D36 /* Frameworks */, - 28FF73341543B6F0A7DF3C20CFFEA0AA /* Resources */, + 2582784E4FA6A1AC5D23FC53AC3F6EE2 /* Headers */, + 2DDFD9AC10F181CD7130BDF5F9E0502B /* Sources */, + 090C1D63463ACF622287EFF9D5C9392D /* Frameworks */, + 473D3E892ABB6C798CFF290644259B34 /* Resources */, ); buildRules = ( ); @@ -1540,7 +1544,7 @@ ); name = Alamofire; productName = Alamofire; - productReference = D1523C78183115D4D4EF5D88C0FAA0AC /* Alamofire.framework */; + productReference = 5D797E9A5C5782CE845840781FA1CC81 /* Alamofire.framework */; productType = "com.apple.product-type.framework"; }; /* End PBXNativeTarget section */ @@ -1549,23 +1553,14 @@ BFDFE7DC352907FC980B868725387E98 /* Project object */ = { isa = PBXProject; attributes = { - LastSwiftUpdateCheck = 0930; - LastUpgradeCheck = 1020; - TargetAttributes = { - 6F13695E06195A78EA8A95F8C7ED0D2F = { - LastSwiftMigration = 1020; - }; - C82891EAB7293DBEE916B21F57E8474D = { - LastSwiftMigration = 1020; - }; - }; + LastSwiftUpdateCheck = 1100; + LastUpgradeCheck = 1100; }; buildConfigurationList = 4821239608C13582E20E6DA73FD5F1F9 /* Build configuration list for PBXProject "Pods" */; compatibilityVersion = "Xcode 3.2"; - developmentRegion = English; + developmentRegion = en; hasScannedForEncodings = 0; knownRegions = ( - English, en, ); mainGroup = CF1408CF629C7361332E53B88F7BD30C; @@ -1585,49 +1580,49 @@ /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ - 16C75709A6C0D17B74C5DFD9C7B5005E /* Resources */ = { + 42E082BE7328DA6969AECE264ACD14E0 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; - 28FF73341543B6F0A7DF3C20CFFEA0AA /* Resources */ = { + 473D3E892ABB6C798CFF290644259B34 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; - 2D0CAB33736CF0FE3AAB78F97019D45B /* Resources */ = { + 4D516789CC4F41EDFFAD9576EFED3DA2 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; - 4B6C0D2D4C02C9930A3F9C8DA4F3E277 /* Resources */ = { + 6951ADF9AD15CD4DE3FE067D9CABD7C8 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; - AD1799A208BE417CCE05899E167D813E /* Resources */ = { + 75A36AA9EBFD02B64754550A48ECBA6D /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; - B0D3DB3174ADE357071DD9ABDAD8FFEE /* Resources */ = { + 92091B1DE715782FC4674CE5433C15C0 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; - B35202D8BC4134840DC79742417729F6 /* Resources */ = { + D7EBE1F47ACC336A60ED6056AF3261E1 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( @@ -1637,445 +1632,380 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ - 340064629DE007227450E96A0F0ACF1B /* Sources */ = { + 2DDFD9AC10F181CD7130BDF5F9E0502B /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 89C63526040B7B2B0BF5EFAC00539689 /* Pods-Japx_Example-dummy.m in Sources */, + 83956E20859CDBBE7BC38ABADE0170FB /* AFError.swift in Sources */, + 1945CD5D63A1C164AEAAA9A33E85571E /* Alamofire-dummy.m in Sources */, + BEE6B677416CA71C981D1D3F60B18C96 /* Alamofire.swift in Sources */, + D3D8C379C6E4FB487E5ABD6800AD7B7E /* DispatchQueue+Alamofire.swift in Sources */, + 1986B50C74F1697EA43F68335C93CEB3 /* MultipartFormData.swift in Sources */, + 3571F958A3907B3A806E62D50C2550D4 /* NetworkReachabilityManager.swift in Sources */, + 132E0F619E4338E5D1B27E4C72076B3F /* Notifications.swift in Sources */, + 0C5E11DE24DAA737704B355F5F2F3426 /* ParameterEncoding.swift in Sources */, + 98A929C8E9012AB167672714FFD2113C /* Request.swift in Sources */, + D65C254F5ABF2CB5ECEE50FE8F8E1A80 /* Response.swift in Sources */, + E3747EC31FCCA97D75A81FC700CF7E24 /* ResponseSerialization.swift in Sources */, + 64744C911253C3E01461FAD7C935C8D7 /* Result.swift in Sources */, + F13F2AA7F2E6D95A181CAB99B900D531 /* ServerTrustPolicy.swift in Sources */, + 2C61B040BA6A9A7AE66C4D9BA26D5520 /* SessionDelegate.swift in Sources */, + 931BBB8230A25161D5C37528A8F9FECF /* SessionManager.swift in Sources */, + AFC64B1097F7355FF423D6A73E9C7210 /* TaskDelegate.swift in Sources */, + 933FDA5970AA525D6CB92BFEBA2BAB4A /* Timeline.swift in Sources */, + 53791F5E5F07400F92CFDFC89A432305 /* Validation.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 3CA174DEF00E248D0C1F2379319CE255 /* Sources */ = { + 507CFA4217F0978AF450319CC96D5C36 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 30B0DD215254FA6DC4A567D165F38F29 /* Japx-dummy.m in Sources */, - 0CB3323BEB8C223CA9AA38602D1B38B2 /* Japx.swift in Sources */, - 68E32674357CA0E3712FF2E969291CAB /* JapxAlamofire.swift in Sources */, - 40452C81FD36D74825F21E24E0DB9016 /* JapxCodable.swift in Sources */, - DBF31BBF7D554DB7BEEBA700D32D31AC /* JapxCodableAlamofire.swift in Sources */, - 031DAE10197F202BFB8480D111D1AEC9 /* JapxObjC.swift in Sources */, - 9771FCDAA443C5C506040FF461C5C552 /* JapxRxAlamofire.swift in Sources */, - 92B256AEBC87010FA00EC184001B98E7 /* JapxRxCodableAlamofire.swift in Sources */, - 9FD0C405C0C5B5F1AD75ABA1A743F8AC /* NSError+Japx.swift in Sources */, + B9397BD911F09C73BC598D60DC04C1A7 /* Behavior.swift in Sources */, + 603A2FC60B90F1279D399DAF8104201F /* Callsite.swift in Sources */, + 7034D0B6AE91D924AB27F6B828C79EB8 /* Closures.swift in Sources */, + AE191084C68BDF1A2878978CCFBF29E2 /* Configuration.swift in Sources */, + 63B7ECA666221B5EE437EFE136434959 /* DSL.swift in Sources */, + 1E5C4F9EB261B75BECC921A303CA3AA6 /* ErrorUtility.swift in Sources */, + 81FED3E061FA39538B0AA3092F6F380B /* Example.swift in Sources */, + 208F9DADCC8F01AAC14247BF0E54C863 /* ExampleGroup.swift in Sources */, + 1B4D25D41B2CE138D184DD18A534ADB2 /* ExampleHooks.swift in Sources */, + FF4C06BD3EF989D203359A47EAA0A287 /* ExampleMetadata.swift in Sources */, + 05376A2B4A599FB919C25922E08EF492 /* Filter.swift in Sources */, + C43FC4EFD9E762C454E4168953475A55 /* HooksPhase.swift in Sources */, + 88F403109D33F993ACD635A3D01134BC /* NSBundle+CurrentTestBundle.swift in Sources */, + 5FFC8254039A54540761DC5656615630 /* QCKDSL.m in Sources */, + B7977833FE910D5DB829DCCC6EA3D104 /* Quick-dummy.m in Sources */, + 26BFBD738BB96C6C730D4DC96D47A107 /* QuickConfiguration.m in Sources */, + A173703877A14EBF47A8A4FF41F7DBE6 /* QuickSelectedTestSuiteBuilder.swift in Sources */, + 712E987D79829DC53E38FC6DA1B17CFB /* QuickSpec.m in Sources */, + C6A86479B1236153B50C59E9ACB07D0D /* QuickSpecBase.m in Sources */, + 011CAC6A74AAEEAF9F54E817D1A9FD33 /* QuickTestSuite.swift in Sources */, + 01692FC85BC6ECB122F1380ECBBA6EF5 /* String+C99ExtendedIdentifier.swift in Sources */, + 01A100AE3D2AF7A7D6A6BF1A91A4EDF3 /* SuiteHooks.swift in Sources */, + 9BB2E6C13B25C0157C4BECFC9F8DF489 /* URL+FileName.swift in Sources */, + 4E737D040955550EACFE774A383EB4A2 /* World+DSL.swift in Sources */, + B5AEEFF5F31AC069BD96E8104301AD4D /* World.swift in Sources */, + 2BE5D1B1D8986048A3B0E3D73B9EE158 /* XCTestSuite+QuickTestSuiteBuilder.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 4E10A61C31E280036400F07A356CAEE1 /* Sources */ = { + 85B292F55A6A3AA28B1459C408C030F5 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 20BD790E960F21B80BC36E33A65B9817 /* Behavior.swift in Sources */, - 0026356797A73C8C4922B4D1B404C8E7 /* Callsite.swift in Sources */, - 409F539232793D78BF5B41705E31DD61 /* Closures.swift in Sources */, - 67533550F6B3AC052D36BF026A0DC5A4 /* Configuration.swift in Sources */, - 779DC067311B3C70E904B56FAA72447D /* DSL.swift in Sources */, - ED1DFE005A6162E9BEF25864282CF98E /* ErrorUtility.swift in Sources */, - C425B8C3EC8C0612698840BEE599E2A4 /* Example.swift in Sources */, - 9160746DE490CC23C9963FF4C90E521C /* ExampleGroup.swift in Sources */, - 875E14F2DC19FE4D537B0ADAFA3CA5B9 /* ExampleHooks.swift in Sources */, - 75C9C0982F3B92D4CB98778871237CDC /* ExampleMetadata.swift in Sources */, - 758F20B4D6AFFF69C648FCEC0A907D68 /* Filter.swift in Sources */, - 47670595847368876E3EE8B7D433C506 /* HooksPhase.swift in Sources */, - FD2A38B62603F0FF59C66F8095A3EFFE /* NSBundle+CurrentTestBundle.swift in Sources */, - 9251481E934B38D1D0F1C2551E68B550 /* QCKDSL.m in Sources */, - 4323D32B3358A3EC9A6115C532E80314 /* Quick-dummy.m in Sources */, - 1D8DBB991E579BE3719B36522A054BDF /* QuickConfiguration.m in Sources */, - A036C8323484A5009F20DDBC73B8DFD4 /* QuickSelectedTestSuiteBuilder.swift in Sources */, - 093B514AF1063F1DA238899699E270DC /* QuickSpec.m in Sources */, - CB8F6C788B3B913D5DB96BECFC05A3DB /* QuickSpecBase.m in Sources */, - A01F43A066E49080EDF1247955804114 /* QuickTestSuite.swift in Sources */, - E90BD1844A60E3A65F8664BB795B71FF /* String+C99ExtendedIdentifier.swift in Sources */, - 29D80797F6623CD2CB3DE25027BD33F8 /* SuiteHooks.swift in Sources */, - AF749D5A7AB360F4FFCAA9BB96E5065F /* URL+FileName.swift in Sources */, - 91588632E51DDF15408DD0E701901CA4 /* World+DSL.swift in Sources */, - 01A1BFDD1A5405F88AF5FA4A8162209A /* World.swift in Sources */, - 5B007DA41E2B195E5FF32A567AFD41DB /* XCTestSuite+QuickTestSuiteBuilder.m in Sources */, + E9A873C8405E38FAA4F1443C97F19B8D /* Pods-Japx_Tests-dummy.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 696291B3BF50FCD63898B3DD76DEB747 /* Sources */ = { + 98A10758574CC6E660A45A5E2D430203 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - F0A6D424C5E83532D1A828FE09588B4C /* AdapterProtocols.swift in Sources */, - 57694C401F4C87A06394D9B589E412B9 /* AllPass.swift in Sources */, - 7C0B0A5AFADABD47DADE8D9956B8E6D0 /* AssertionDispatcher.swift in Sources */, - 9DB7FC7D31DD14D9DB88A2B5F94A5707 /* AssertionRecorder.swift in Sources */, - 300F38729493A8AA14CC2D7D57E2718F /* Async.swift in Sources */, - BD91B77F283982F04CE948EA38795EFA /* Await.swift in Sources */, - BC53B1347CCACC50814A102FA46B658B /* BeAKindOf.swift in Sources */, - F72E8C9D01979824B70FBA6E7A70249F /* BeAnInstanceOf.swift in Sources */, - 8F891487CD3D8F8FC6CA2A31ADB6F2BF /* BeCloseTo.swift in Sources */, - 50507B7B2A53B164B173A66463422828 /* BeEmpty.swift in Sources */, - 95283BD22191A8620FADC2152C1A2999 /* BeginWith.swift in Sources */, - EBA32302B6D87E589245832B2C6EF50F /* BeGreaterThan.swift in Sources */, - 3312595853732AEC4A5BCB4C54F928DE /* BeGreaterThanOrEqualTo.swift in Sources */, - 92DBF89DA7776E395DA7CCBA4133889D /* BeIdenticalTo.swift in Sources */, - B388E514638CB570FFB66D10716E9EE5 /* BeLessThan.swift in Sources */, - 1635FE542AADC84063CC1653F53CF269 /* BeLessThanOrEqual.swift in Sources */, - 5ED738281131106C6070594D132C5533 /* BeLogical.swift in Sources */, - 68B9719EB76E38AC25B8D83077C3C24C /* BeNil.swift in Sources */, - F0EB5EDC6364CBBB8D73B9680BC5FBF6 /* BeVoid.swift in Sources */, - 550407BE017E8F9C887FB3C2E3AF5641 /* Contain.swift in Sources */, - DC814E889B3E67A3A4D1A0C00E033171 /* ContainElementSatisfying.swift in Sources */, - A350958D67377DE80E194D50D5F6C3B4 /* CwlBadInstructionException.swift in Sources */, - F4D3C734AAF98DB3A17ECC3D6A95BC52 /* CwlCatchBadInstruction.swift in Sources */, - 7B0DCABC7CA404EEAF4B7626E8A157DD /* CwlCatchException.m in Sources */, - CD86215E5BC4DB5C76E575AE1A6CAB63 /* CwlCatchException.swift in Sources */, - AD6681E3DFBC3870EA1FB6AF1B94CF6E /* CwlDarwinDefinitions.swift in Sources */, - 1B84CD4780109223790812BD2C1D2811 /* CwlMachBadInstructionHandler.m in Sources */, - E608140179A5D294C91496AEE7136774 /* DSL+Wait.swift in Sources */, - 58489F14E71BBAA7179632C277C4ABF2 /* DSL.m in Sources */, - 1D646E73C898852F752411019B5A6623 /* DSL.swift in Sources */, - BF9235130FD15BA4CAB3E828ADFACD97 /* ElementsEqual.swift in Sources */, - 318031C30FF0A82ACAA7A26C31EDA33B /* EndWith.swift in Sources */, - 3E78CD2F6DB58B2E6EBCA905B8B63C00 /* Equal.swift in Sources */, - 28446C027888709D72CCF46A3AB9D72D /* Errors.swift in Sources */, - FC5C276D1E3D21748F58F3577C928AD2 /* Expectation.swift in Sources */, - 9F585CDA5A2FD9BCB0B9A37E722AD387 /* ExpectationMessage.swift in Sources */, - DC02CFAED21121E30E9838AEA3796627 /* Expression.swift in Sources */, - B256929ECC15CB5E4132E0AC72E4CD80 /* FailureMessage.swift in Sources */, - 34DD23522AC99972B177230F312AE2DC /* Functional.swift in Sources */, - 3A5AFCFF87E5A6008A5F8698B6F86CA1 /* HaveCount.swift in Sources */, - 5AD6E464DD1EE56955DE290C3C8B8FEC /* mach_excServer.c in Sources */, - 92AF5F26943E64219F444626AB0DEBCA /* Match.swift in Sources */, - 956883FE665783DBE86DA4DEF2B4FEA3 /* MatcherFunc.swift in Sources */, - 09B297BD6AFB877C72BAACA93DA5A883 /* MatcherProtocols.swift in Sources */, - 15A29851E570FF0D7FB6DE10D20AAB55 /* MatchError.swift in Sources */, - 552476489423BE8B6F3D12CC7097A3B4 /* Nimble-dummy.m in Sources */, - 7F4F540E4AE68B46DA70D5243739AF32 /* NimbleEnvironment.swift in Sources */, - FAE8D9F50C5FEAF65617922C46B704C3 /* NimbleXCTestHandler.swift in Sources */, - 7814702F97E0025B3FD9C509FFAC8744 /* NMBExceptionCapture.m in Sources */, - A77C011D550EFFB05C3609BFB4DAE378 /* NMBExpectation.swift in Sources */, - 2E337C690EC22D7A14B8CECCEC0E0DB0 /* NMBObjCMatcher.swift in Sources */, - 0AECF1E83CBECC083136E419C6C632CA /* NMBStringify.m in Sources */, - D05D8656F5C5E0338C2B7AFA1997666F /* PostNotification.swift in Sources */, - 6E10044C8A5FC0BCB6B13A0038A9B592 /* Predicate.swift in Sources */, - 38742796019A84E25F69D27ABA09BD02 /* RaisesException.swift in Sources */, - 8C6F0B29DF7E1491E931990CDB34E16B /* SatisfyAllOf.swift in Sources */, - B348521C288DE431D23839823A4A1ACB /* SatisfyAnyOf.swift in Sources */, - 3C90CA85C31A7FE07892E4D087D72ECA /* SourceLocation.swift in Sources */, - BCA742E6126C8F55FB3085AC5A056CB7 /* Stringers.swift in Sources */, - D01BF8FF4B0F677911122C2EB5F52A7B /* ThrowAssertion.swift in Sources */, - AAD8D9F508F9CC045C4715D1F27B2A73 /* ThrowError.swift in Sources */, - 2275009124882AD498FF3DD1F504A579 /* ToSucceed.swift in Sources */, - 893C84B10779FA4477B7C7D2B3D723B1 /* XCTestObservationCenter+Register.m in Sources */, + 5B49BD659B59E251694D5411CAFA24AA /* AddRef.swift in Sources */, + D4D2586787224418A39344AD365BC865 /* Amb.swift in Sources */, + B53E38263DDCAF8775C39B1088665DB3 /* AnonymousDisposable.swift in Sources */, + 7D8FDE2050305984C41BDCB7AFDF51E3 /* AnonymousObserver.swift in Sources */, + 61C50F55827AC2F13A554086AB4EFB54 /* AnyObserver.swift in Sources */, + 6D0D99CB7BB3D712E5AA0389EC95F863 /* AsMaybe.swift in Sources */, + C825A7EFBAC66C2AE444B4BF2AAC91DA /* AsSingle.swift in Sources */, + F64E6804C812DAF5B259C6F29E93F846 /* AsyncLock.swift in Sources */, + 7815612CD8B1F0DBAF5178EF950B0843 /* AsyncSubject.swift in Sources */, + 5E62F16577E3DD0D80253FD0529B98D1 /* AtomicInt.swift in Sources */, + 9B17E20C0B2811A5F21A01A3BA408751 /* Bag+Rx.swift in Sources */, + 99E8C428C70FEE6B11BDE79FDA1F3F81 /* Bag.swift in Sources */, + 1855088DFF281DC7261B87A94F53638A /* BehaviorSubject.swift in Sources */, + FAB138C78D85FA04FE1501DD996F26F4 /* BinaryDisposable.swift in Sources */, + 0006E0E41ECB3592AE456DB0B1E5521C /* BooleanDisposable.swift in Sources */, + 7CA415E4CDA575C6A649108B8C5B824D /* Buffer.swift in Sources */, + 863D3B3DF3C82159B065A3A4A0BA02B1 /* Cancelable.swift in Sources */, + 0BCD3903A5E6C1901D7566CD2C81D898 /* Catch.swift in Sources */, + B1655633DAEBBBD7E8F7B54800305DCC /* CombineLatest+arity.swift in Sources */, + C30D22D7CD2D6DF082689771E634E1F8 /* CombineLatest+Collection.swift in Sources */, + DFF81C1FCD62A60DC310F84B9FEB206B /* CombineLatest.swift in Sources */, + 83E5C209BE96578DE219FBE4CD6B18C8 /* CompactMap.swift in Sources */, + 2A63FA5BBAE37D1E3414B7ADAF1D20E8 /* Completable+AndThen.swift in Sources */, + 6CC2484565989B2E4D4DF635DCD5D75D /* Completable.swift in Sources */, + 8C48EFFC0D175D05FE4740709EFC4EBA /* CompositeDisposable.swift in Sources */, + B774AB255422893C7C3A00D91CBA8479 /* Concat.swift in Sources */, + A5E204773854F070F50D14271A7684CC /* ConcurrentDispatchQueueScheduler.swift in Sources */, + 274F67CE3CA7EF8DF81C9F01B29CA8AF /* ConcurrentMainScheduler.swift in Sources */, + 0BBF73AD76AD264F22A028B8D5320D74 /* ConnectableObservableType.swift in Sources */, + A1172662B93132A359873F2C4FFB9D16 /* Create.swift in Sources */, + 680547672182CC77A91C340D545FD8E4 /* CurrentThreadScheduler.swift in Sources */, + A43F44E910B351BFE686EB169E2F8F78 /* Date+Dispatch.swift in Sources */, + 79E21333FFAD7CD30EE1FC87B09CBCAA /* Debounce.swift in Sources */, + C15CAECFDEA4890FBB7BBDA98786B4B3 /* Debug.swift in Sources */, + B625501C4972F3BC7A17761ADBA433C7 /* DefaultIfEmpty.swift in Sources */, + EABD66CC40436535B02C469F79C59DDD /* Deferred.swift in Sources */, + 0FE385F122B1372C80CDF23CC3BF6C3C /* Delay.swift in Sources */, + 472E717B6877D9CE9D39D1CDA560160F /* DelaySubscription.swift in Sources */, + 25E6E74E226E52AFB37C8AFE58CC2D9A /* Dematerialize.swift in Sources */, + D20C796892B62242A8E826C511688C67 /* Deprecated.swift in Sources */, + 1C4ED8D7595AA0F2ED0220D611AC238B /* DispatchQueue+Extensions.swift in Sources */, + 416E6579EBDB56D3D9B2B7B6E34F0F9F /* DispatchQueueConfiguration.swift in Sources */, + 05AA14302A6822F50605CF81E523CB8D /* Disposable.swift in Sources */, + 2665F1B678FB60F411F920FA3800990C /* Disposables.swift in Sources */, + A3F4E955F8D0E1426F0C98B53F148B0C /* DisposeBag.swift in Sources */, + 129812D1A258933554B49E23022F195F /* DisposeBase.swift in Sources */, + 64380725BB1FDEF598AF66214D9D347C /* DistinctUntilChanged.swift in Sources */, + 47CD7BF10EB479215A92E9DDE75A02AE /* Do.swift in Sources */, + 83CEDD0B6B620A051772BA19852EA943 /* ElementAt.swift in Sources */, + C8DD98E31084FF7D52B6B3DE814E8D7E /* Empty.swift in Sources */, + 29499B0A22F8F99A040A5F92CB505726 /* Enumerated.swift in Sources */, + 4B7E8C9C8A4FAE9B2E9F9A71B921839D /* Error.swift in Sources */, + B53E1D8A3E895314BFBD987576197AB0 /* Errors.swift in Sources */, + E8C772F2BAE84A19358C9DCFD0888843 /* Event.swift in Sources */, + 54FC301140536CFB2590902FC5FAF6DB /* Filter.swift in Sources */, + 0202EFC9BBBBEAD79330C66F27381EAA /* First.swift in Sources */, + FA33EF89CB22AD9AA886B2A0FC0698F4 /* Generate.swift in Sources */, + 1DDC1057ADFF6BCD4C0ED4BE14F34BFF /* GroupBy.swift in Sources */, + 6774759EFF86EE068A48C3CE74EBF5C5 /* GroupedObservable.swift in Sources */, + 6FB38A0814A3B3F9DE97DA65168F4A94 /* HistoricalScheduler.swift in Sources */, + 33D645BE872850BD99C37C3EEB433C16 /* HistoricalSchedulerTimeConverter.swift in Sources */, + EF26890BE517076AACE433468B78F99F /* ImmediateSchedulerType.swift in Sources */, + 701DE7D4E0E542E635AC2DE269970CA3 /* InfiniteSequence.swift in Sources */, + D9A97E0689D0BD16F0E95A10F9B43B1F /* InvocableScheduledItem.swift in Sources */, + 37D2159C32D8CE5AB8C4D29B99BEBBA4 /* InvocableType.swift in Sources */, + F9787327EBDD68A57AAF770F1B661F5D /* Just.swift in Sources */, + 2EC60BF9E56C922B1A0C4F5C0CEADDD4 /* Lock.swift in Sources */, + A01437B1567B3A8E80894A62F33BD3AA /* LockOwnerType.swift in Sources */, + 3A624AEE69586D92846E92C66DED2F17 /* MainScheduler.swift in Sources */, + 78EB5E93E8521FB5EE5D0065C2914A4A /* Map.swift in Sources */, + 138A5DC34882EB14C392409FA13DF13F /* Materialize.swift in Sources */, + 348D10D82BAD4F8DFD0B7DC810F4CE23 /* Maybe.swift in Sources */, + 0078D6113A07FC2352065C9A9A4B2319 /* Merge.swift in Sources */, + 0FC285BE0A6E773F8229B1B66A93E51E /* Multicast.swift in Sources */, + BBD553F0B9EEA76BB34E3A54551A6BA1 /* Never.swift in Sources */, + 31D5B18DE4145CD1F5A2EB79F9C5FD48 /* NopDisposable.swift in Sources */, + 441D82199837CB3B664F8BEA38202272 /* Observable.swift in Sources */, + A7BCB5FE236F0B7E8EDDBF60E9A079C0 /* ObservableConvertibleType.swift in Sources */, + EFA45F5AEF1347C0475086CBFEF12B66 /* ObservableType+Extensions.swift in Sources */, + D3EB5B55B5D43C34AA946C73D49989CC /* ObservableType+PrimitiveSequence.swift in Sources */, + F8487070A246FA3FB7FA73F7194A3CFA /* ObservableType.swift in Sources */, + DC972A4472EDE89CF1009756F1163441 /* ObserveOn.swift in Sources */, + 6BECBF9002B8710DE1A003A4C6888C80 /* ObserverBase.swift in Sources */, + F663C3CEE3FEA344943C738AF2A67C0B /* ObserverType.swift in Sources */, + AE68CF21D91E88B5606C79BC1CF43E19 /* OperationQueueScheduler.swift in Sources */, + 608EDF7DCBFEAD9ACF43833EA0DF7E54 /* Optional.swift in Sources */, + F8F97046AEE1F97E3C7DA22FDECF20B7 /* Platform.Darwin.swift in Sources */, + 9472BAF549C9B047A21547E18AC389E1 /* Platform.Linux.swift in Sources */, + 35B75341D118DC93250EF6A3666B207B /* PrimitiveSequence+Zip+arity.swift in Sources */, + 6EC5F727FC621C1DAFBAF64268A8F922 /* PrimitiveSequence.swift in Sources */, + A974EED774223BB5B72FF345DCB54CB0 /* PriorityQueue.swift in Sources */, + 221CA1AF05402754140DDD0BFA647F73 /* Producer.swift in Sources */, + 46CA52D34E72C3C8ADCF3C304B57F665 /* PublishSubject.swift in Sources */, + E3996D189108FB43C00D9348726CFC20 /* Queue.swift in Sources */, + B1A96EF84A90B6AD8935DFC035C58222 /* Range.swift in Sources */, + 527F49D439E5593D1674720598DDFF60 /* Reactive.swift in Sources */, + 59487C428DC9E09A74C547B2151B3939 /* RecursiveLock.swift in Sources */, + C5396ECCCC5595700DEEE6AFEF2200A9 /* RecursiveScheduler.swift in Sources */, + F030668A0E39672AB7CA8DD4FC3B1C59 /* Reduce.swift in Sources */, + C40816FEB2D868C17A8DCD6C1B0412F8 /* RefCountDisposable.swift in Sources */, + CC74C3E4C773BBD869BDE4F827D032CF /* Repeat.swift in Sources */, + CD6848163E6F18591B0F447E62B0165E /* ReplaySubject.swift in Sources */, + 6ADD59320C7BA6C6520C27EF42B2DFFE /* RetryWhen.swift in Sources */, + B12369EDC6CE33BB15EA09AD32263C69 /* Rx.swift in Sources */, + BBEE2B823DC0A5F1347E8DD3B63FA46A /* RxMutableBox.swift in Sources */, + 12B090F407F2BED6DA952E4BEE962E42 /* RxSwift-dummy.m in Sources */, + 579D9F2868ACCEDFE3EA01060B37D43F /* Sample.swift in Sources */, + C180630D136A2B3F9D28E4E90F2D481C /* Scan.swift in Sources */, + 925A505F030A39903C9FDB0369791AD5 /* ScheduledDisposable.swift in Sources */, + AC64F4DC4A2683E7C0E58A216C379CD7 /* ScheduledItem.swift in Sources */, + B426D4A8C7C2FE045BDC75DDAA20CF2C /* ScheduledItemType.swift in Sources */, + 5A833996D3B5B80F1FE44FC24FB486A5 /* SchedulerServices+Emulation.swift in Sources */, + 2F2FF1AE41BE851794FD34CBB639FC30 /* SchedulerType.swift in Sources */, + 359367013A3DF7C681D9870A45670376 /* Sequence.swift in Sources */, + 3DCBCDCA5FC02DD9A912D33A5AAAD85E /* SerialDispatchQueueScheduler.swift in Sources */, + 88AC59300D7301EA46AF0295D5D0000E /* SerialDisposable.swift in Sources */, + F4BFD44F6D69DFDFB3C7AE1FED080DD0 /* ShareReplayScope.swift in Sources */, + B9600F3434BFF22DFF7FFC7DEAE79185 /* Single.swift in Sources */, + 6DF52D876A50EB28124421843C4E4539 /* SingleAssignmentDisposable.swift in Sources */, + D98F1791073FDD389F9BC984CA8BE106 /* SingleAsync.swift in Sources */, + 8F24A435D16DE8BE2BEBFD5E52A39D8B /* Sink.swift in Sources */, + CAAC3A5175BFFE040E0CA3CA7783AE7B /* Skip.swift in Sources */, + 75FD14D60702D626E0D4BF7332CB126F /* SkipUntil.swift in Sources */, + 20DBC351C1CC754EB00A499537D2D703 /* SkipWhile.swift in Sources */, + AE6EDB27A8F1552C7E3B895DEA7FBE17 /* StartWith.swift in Sources */, + 5D9DAA597D97F6132FB45848D48D45AC /* String+Rx.swift in Sources */, + C2A2C8C9B701D3BF8763103C2ECF46F3 /* SubjectType.swift in Sources */, + C5089C2B555D7923AD94469202458848 /* SubscribeOn.swift in Sources */, + E7D79F27D78F9E4AE0562736A359EDCD /* SubscriptionDisposable.swift in Sources */, + AD9E045D45D3FDA70E56FF87F6B66301 /* SwiftSupport.swift in Sources */, + 2E3F284D1ED2EC146F38DBC8E7BE1210 /* Switch.swift in Sources */, + 00746523D347B51DCEAC350646D4A609 /* SwitchIfEmpty.swift in Sources */, + 5791BF9838F256D2C7619364F9351BA8 /* SynchronizedDisposeType.swift in Sources */, + C8FD0A8A1F5B77DA86B7045B08FE6FFF /* SynchronizedOnType.swift in Sources */, + B2C062A5841E9B5FDC969E948106D34A /* SynchronizedUnsubscribeType.swift in Sources */, + 95E1FDA26A77B6ED7248A792CE1740A9 /* TailRecursiveSink.swift in Sources */, + A1A6711D4917D908FD5261DDD382AB19 /* Take.swift in Sources */, + 060F80CDE19450AFF2AE8B4DC7767619 /* TakeLast.swift in Sources */, + F5F8D36071A0049AEBA3CA9092245FA8 /* TakeUntil.swift in Sources */, + 00737105B7FC6E241A72C8CA3DB03F68 /* TakeWhile.swift in Sources */, + E71FEA0250E6794C4483DE5545B38A9B /* Throttle.swift in Sources */, + 6155261E8E1E5DF070E6576BCA3DE313 /* Timeout.swift in Sources */, + 8AF8644D24AC61C514F845D64A906099 /* Timer.swift in Sources */, + 1B4C7E64676769E5BD5E0A43F5671247 /* ToArray.swift in Sources */, + BD64495DA02741A056FF9AD5B58C7F3B /* Using.swift in Sources */, + 109C479ABBE7B1DE720215B6867CD600 /* VirtualTimeConverterType.swift in Sources */, + 750A00BF1938F8600C3D1C84C51EB274 /* VirtualTimeScheduler.swift in Sources */, + 55218F497F6A4490DB07DD6CE9A7B58E /* Window.swift in Sources */, + 65E00ABF215988046F5B76101015BB40 /* WithLatestFrom.swift in Sources */, + C206C5FE984876C0D85D2D71044FA2A9 /* Zip+arity.swift in Sources */, + 303CB9037EF4F084815EC33FC2344234 /* Zip+Collection.swift in Sources */, + AA171B8392EA0F718DFFECFD6577DEEA /* Zip.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 86AAFC153FF4DDB63C56B6A295B3242F /* Sources */ = { + B23BFA97BC2966BB0855348083DA4F1A /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 45019F868DE1FA964F8A050F1684AF89 /* Pods-Japx_Tests-dummy.m in Sources */, + 89DE19B6DF1ADEDAB13AABD94107CF1B /* Japx-dummy.m in Sources */, + 4F3FCA4CAE13C4F275CC4677A0D45AF9 /* Japx.swift in Sources */, + 69B37B37B9EA7D0415C6ADA396E0CC3E /* JapxAlamofire.swift in Sources */, + C9918E4CEFB35033892F50BCB7F16EAC /* JapxCodable.swift in Sources */, + 409D9D85AF8BA907EB6F73D672667B38 /* JapxCodableAlamofire.swift in Sources */, + 29A01568B1DE5036788045AC0372A913 /* JapxObjC.swift in Sources */, + 837F24918CB44B9336ED5805DDF52A68 /* JapxRxAlamofire.swift in Sources */, + 0D5EAD9182E13C532DE6A1A8130C13A7 /* JapxRxCodableAlamofire.swift in Sources */, + 8002CF0D0985737F8D5211D9177CBC93 /* NSError+Japx.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - CFA11E47B3EB3A36AA49F6F7F060CB98 /* Sources */ = { + C7CDB6B06CAB59BECE469D10545FD75A /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - B082FA7223428C8DE32F7DE7F5AF441C /* AFError.swift in Sources */, - 559368DD6966DB1193B3FD6E7CBF5FED /* Alamofire-dummy.m in Sources */, - 5B1086B0A866704A6CAF72B5A47582C6 /* Alamofire.swift in Sources */, - D2B384893454A891D32CB20A53E4EDAF /* DispatchQueue+Alamofire.swift in Sources */, - F4D82D78C14BF258042CDA3C1B15B7E1 /* MultipartFormData.swift in Sources */, - 72C2F0877FAB758F102C1D5FB6641559 /* NetworkReachabilityManager.swift in Sources */, - B2E54789768E4F4EE35F11E0034C7383 /* Notifications.swift in Sources */, - A5ADEF55257E4C1A482BF072C205F388 /* ParameterEncoding.swift in Sources */, - 14ECF6E40B0356170FEDE170B2EB6F2F /* Request.swift in Sources */, - 5C2F9E5485166B59DD032D7DF4C29CF0 /* Response.swift in Sources */, - ADB18D94C4F71AE2FCE388100D556B0F /* ResponseSerialization.swift in Sources */, - E7BA58DE1AA8F11BAA7E8817D8AB509C /* Result.swift in Sources */, - 4920AD2B3D668DB550BEDED6747F925B /* ServerTrustPolicy.swift in Sources */, - FFB9BA683C701138C08A211F3E192F56 /* SessionDelegate.swift in Sources */, - ABAEB9DEE3CE05729A9442CFA1988407 /* SessionManager.swift in Sources */, - 594494BAB3E029862D7009DE60FCC904 /* TaskDelegate.swift in Sources */, - 505B75241DCEA8C1FBF9F479C2DDEF31 /* Timeline.swift in Sources */, - D583829CA1D3C6B9B8F5C085B1D597EF /* Validation.swift in Sources */, + 3945C968E94F5538CA744091E212218C /* Pods-Japx_Example-dummy.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - D19F13EB0E6DFCF463277775AC6E04E8 /* Sources */ = { + D399136A0E6FE19CACE7F05143312FB1 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 76229A7F18BC854CE693868361CDABC8 /* AddRef.swift in Sources */, - 38DAA4F3E1E62BD26CBD76E003071B8B /* Amb.swift in Sources */, - 4208D4D7BC8D015127DF3BB4250224B6 /* AnonymousDisposable.swift in Sources */, - E3DABA64A7C8FAD96B6F7234A72AB0A0 /* AnonymousObserver.swift in Sources */, - 2791CB26164B91B7664162831D49093E /* AnyObserver.swift in Sources */, - E31A3CC87FF9AF95D70499E0431FDB14 /* AsMaybe.swift in Sources */, - D3FE01922F55858A586B21D6967AC1D6 /* AsSingle.swift in Sources */, - 43E71598645E37195AADBED93A41337F /* AsyncLock.swift in Sources */, - F18A92EC2E55462C6EBA05ADF6D8D1F6 /* AsyncSubject.swift in Sources */, - 5EEE9470AAC63C5E5255F3A577F903A3 /* AtomicInt.swift in Sources */, - BC8BE6AAA7987E8961C0B1FBF6A174A9 /* Bag+Rx.swift in Sources */, - 0BFD8E1BFB6D87D13DB1EF30AB5378C0 /* Bag.swift in Sources */, - 16C989EF6AE4B379BA629A1A22CF2694 /* BehaviorSubject.swift in Sources */, - 62377A173C53B53C5F4B76C651F51AED /* BinaryDisposable.swift in Sources */, - 1F975F6DA732FDFC9E7E41EE72939650 /* BooleanDisposable.swift in Sources */, - 9942DC764F580CD1F991D176BB01CDD5 /* Buffer.swift in Sources */, - 730FB12C3EA5A617D3265FBE275E7E3A /* Cancelable.swift in Sources */, - 337DE6552D289713BE006EB645251944 /* Catch.swift in Sources */, - D4A3046559B51318AA40D658B4F5B8FF /* CombineLatest+arity.swift in Sources */, - 8B4530ED16F8FCB26FF52029E38B09D2 /* CombineLatest+Collection.swift in Sources */, - CFDA57AB27E3E0109773CBD64E9CAC8E /* CombineLatest.swift in Sources */, - 6DCC73FBBEE4D783EAD2172908AA5EBD /* CompactMap.swift in Sources */, - 09A4AE78C2899A16B4DB8BA983EAA973 /* Completable+AndThen.swift in Sources */, - 70C5FD378538C3871C62065C2F49F94A /* Completable.swift in Sources */, - 35ABB7749DBDCCD41017FF001E61A151 /* CompositeDisposable.swift in Sources */, - CF5B0FF9D223C5A2C4FF109A7EB15220 /* Concat.swift in Sources */, - 8E86A8249244246AF1AEC5931BCB84E9 /* ConcurrentDispatchQueueScheduler.swift in Sources */, - 719748C5F2486AC754FD4337FA02E294 /* ConcurrentMainScheduler.swift in Sources */, - 19BAEC04FD72D8DCAD21288BC65BB65A /* ConnectableObservableType.swift in Sources */, - 865CDE4E8A819DA78D4916091868F86E /* Create.swift in Sources */, - 48C05EDDE78E16073DE5370C325E0C84 /* CurrentThreadScheduler.swift in Sources */, - 5A9630982F71E4587F98FB1E3E49B9EB /* Date+Dispatch.swift in Sources */, - 2D736F351B23B38B20834FA451B3A53A /* Debounce.swift in Sources */, - EB9BE2C335235BE47AA627BF567A365A /* Debug.swift in Sources */, - 70DE171B773F51597A90956D8B10AAB7 /* DefaultIfEmpty.swift in Sources */, - 1A13DD3FA71C9418F5FAB2E8C0657D95 /* Deferred.swift in Sources */, - 2CE2973D9738952207E45E18B6BA4D88 /* Delay.swift in Sources */, - E04EFEEAEF6AFAA1D988CF2C237018A1 /* DelaySubscription.swift in Sources */, - 62B796A4BFB7869CF7C0BA5E1527F20D /* Dematerialize.swift in Sources */, - 2F0EF87A019B19DD28C57742DA47B8EC /* Deprecated.swift in Sources */, - A024C89B15A4BF7631686F526CD1CA53 /* DispatchQueue+Extensions.swift in Sources */, - 213932C0F8C0E74B88FFA88E4883F263 /* DispatchQueueConfiguration.swift in Sources */, - FCBAE53F839A7F728A9C4DEF966DDB3F /* Disposable.swift in Sources */, - 5A4B48E22D2D0FD3145D8298F6DFC02C /* Disposables.swift in Sources */, - B99ECC46BBF6E56801F7B93466CC0FB7 /* DisposeBag.swift in Sources */, - 814568412B575F21702E37BF00D71916 /* DisposeBase.swift in Sources */, - 26C4F6EB13FA9DCCE53573DE3C8079A4 /* DistinctUntilChanged.swift in Sources */, - 4B50F23522122126609B394D30F92406 /* Do.swift in Sources */, - 0B2BF7556395180AC0AD8634E7529870 /* ElementAt.swift in Sources */, - ADBA177B4874038FCE159C211BC6FAF9 /* Empty.swift in Sources */, - 55BFCDDB21CC743FACCD0C9511A0872F /* Enumerated.swift in Sources */, - 64D8637513DBAD343A343739C25F7937 /* Error.swift in Sources */, - DBAF9AA1184598C014E733C648AC90E9 /* Errors.swift in Sources */, - 7C8D1E2396072F32471413E38EC86939 /* Event.swift in Sources */, - B7CD7BFA384624FFAE3B2BDD59BA53D1 /* Filter.swift in Sources */, - CDA937481BD42B7D996B3060FD00F10F /* First.swift in Sources */, - B9088020D1F8B4236755F2E1699D760D /* Generate.swift in Sources */, - C1E632C4990E19B8795DC697081D78A1 /* GroupBy.swift in Sources */, - 6DB152002B875AC6D3C39B52E36B25E9 /* GroupedObservable.swift in Sources */, - C4F2A127B586164C9C33B09271CC54E2 /* HistoricalScheduler.swift in Sources */, - C3B48959D0922D2414C5417104736E6E /* HistoricalSchedulerTimeConverter.swift in Sources */, - 9C04E23367532FF10D6D6E48A2E599CC /* ImmediateSchedulerType.swift in Sources */, - 9EA9BC5652F703011810E295ACB9A50B /* InfiniteSequence.swift in Sources */, - AF24D133DECD77F269E7977E3F2AD315 /* InvocableScheduledItem.swift in Sources */, - B49BC835D3E492C4B21ED71F13477D5D /* InvocableType.swift in Sources */, - 72847C4AC831BFB91B51991196626D5A /* Just.swift in Sources */, - F8288C110798436DBF4DD10513976AC3 /* Lock.swift in Sources */, - 432DF494BFC5A493F2E5DB275904AD9F /* LockOwnerType.swift in Sources */, - 5DAEA150DEB1AA23703B146B7386457E /* MainScheduler.swift in Sources */, - 2C91D5210B8791C1610C3329A473AD4D /* Map.swift in Sources */, - F63DF3404C15E8690622A510170A9AC1 /* Materialize.swift in Sources */, - 8D7D4CEE43E104CC6365CE30DCCB72CD /* Maybe.swift in Sources */, - E2A183DF1AB8B1D4F9270BD844900F19 /* Merge.swift in Sources */, - FA883119A3267FD7559C2A1D7CE7A3CF /* Multicast.swift in Sources */, - 809BC8E784A197919474C1C3EE0EC96B /* Never.swift in Sources */, - 185A90450B46684E6614548598EBFFC3 /* NopDisposable.swift in Sources */, - F1BBB0E2E94C471B1DB7897053B4D522 /* Observable.swift in Sources */, - F057B0B5A21F053B344FD2CE6B7031C5 /* ObservableConvertibleType.swift in Sources */, - B5FC8C15EDF2EA1B3CCCFDC98C7B61F7 /* ObservableType+Extensions.swift in Sources */, - DD391609FCC7913EF98C53E634713EE5 /* ObservableType+PrimitiveSequence.swift in Sources */, - C3A312461F1E4CF3D4BBA84B0F0AC40F /* ObservableType.swift in Sources */, - F185DD177F74554EBA88078B6E9135FA /* ObserveOn.swift in Sources */, - 138B504E9722FDA9AE1959CFBEE4B019 /* ObserverBase.swift in Sources */, - 82309B96437E0CE941081EF871144115 /* ObserverType.swift in Sources */, - 536F5DD4F006338E0591CDBDBBA79123 /* OperationQueueScheduler.swift in Sources */, - 14B66B11A0E3B8D3B64A19A3919E6FB9 /* Optional.swift in Sources */, - 19F501020A5EBB613BFCA66B06922901 /* Platform.Darwin.swift in Sources */, - CD2E23AD197BC0E08EBAF7B7E1A7B04C /* Platform.Linux.swift in Sources */, - 96A9D2B59C27325800051D4E4A0034E8 /* PrimitiveSequence+Zip+arity.swift in Sources */, - 971D32B76CC67F800CEBD49C2889C98E /* PrimitiveSequence.swift in Sources */, - 4B383D94AFF853D779B2AD84092B3006 /* PriorityQueue.swift in Sources */, - 2FD86CB8F363BB93876FE06CFBA7F081 /* Producer.swift in Sources */, - ED3E709ABD60330B9E8DDCE53BBF67B5 /* PublishSubject.swift in Sources */, - BBEA31617537DDB119670F63194AB440 /* Queue.swift in Sources */, - C9233D1C51F3DE21246E54CC1768DBD6 /* Range.swift in Sources */, - DA3A0C0176F0825E6CE95021620DA84D /* Reactive.swift in Sources */, - 3EE0FE394C3304DCB4C49DCFE071C788 /* RecursiveLock.swift in Sources */, - F6C7AE2241991BCFAC8DC2ECEFD2FA21 /* RecursiveScheduler.swift in Sources */, - 4031587954D664CF4AB63BB5A7807226 /* Reduce.swift in Sources */, - C7FA5672022A0D0675E2F61E01A79277 /* RefCountDisposable.swift in Sources */, - 56562B9AD541A8FC6BB0AF0EB7FE9127 /* Repeat.swift in Sources */, - A49166B9899FB8D9EA2EE261EB7ACA48 /* ReplaySubject.swift in Sources */, - 40FAC27B3A3F6C018FA5889D6F31AA62 /* RetryWhen.swift in Sources */, - 346259BFD748AA38ACD34074B5FFA518 /* Rx.swift in Sources */, - 3DAEAFB7BB868F963FC5DC823927CA4E /* RxMutableBox.swift in Sources */, - CEB97DF581095CC132B2F66E4AC4D82E /* RxSwift-dummy.m in Sources */, - D8E24B7B38824ACB3B7F50D1E17849F6 /* Sample.swift in Sources */, - 1C670BC5B1E056D55E49DBA11CE87707 /* Scan.swift in Sources */, - 1D7E5329DBA0CA57BDC240F2E1B0C770 /* ScheduledDisposable.swift in Sources */, - AECE4C75909A2BE8E124BAE6DA90E9E1 /* ScheduledItem.swift in Sources */, - BC51FFBE1CEEFBB157B8DA358C7FFA23 /* ScheduledItemType.swift in Sources */, - 3F01DB6C2BD33AD837903127BBCB0B89 /* SchedulerServices+Emulation.swift in Sources */, - 01C6031BE8305D58AA30A76BACF00063 /* SchedulerType.swift in Sources */, - B96FD45AF33789C853F5A4FB615287AD /* Sequence.swift in Sources */, - 7FF71826A43E10CE1670A03BA7F791BD /* SerialDispatchQueueScheduler.swift in Sources */, - E04DE7D4CC34E8D0E57C9A5E90957BD9 /* SerialDisposable.swift in Sources */, - 3BB096D58E2607F299636ADCD88F7EFB /* ShareReplayScope.swift in Sources */, - ACD34B5677A4CE058773F3C8362ACD63 /* Single.swift in Sources */, - 4ABA0BAAAF71D9E310C724707340E658 /* SingleAssignmentDisposable.swift in Sources */, - B42F12890A2DCE31CA121F14408782DD /* SingleAsync.swift in Sources */, - 26D0536BE29C6E97D8BBCA2F4CBF0479 /* Sink.swift in Sources */, - EAD1A83D5D4A662426C3E8898F358C40 /* Skip.swift in Sources */, - 30384A41C21C621B3FF52074D33FCDDF /* SkipUntil.swift in Sources */, - D179E9340A43289F77DD4FB946403249 /* SkipWhile.swift in Sources */, - A2E6E82D31B0AEC354FC06E89B378328 /* StartWith.swift in Sources */, - A26B5473D153E59B947B18DC60F13C87 /* String+Rx.swift in Sources */, - CB7529E05315B2C9B27A2C55A48E27E4 /* SubjectType.swift in Sources */, - 361C428836410F865BF9F0173BAE931A /* SubscribeOn.swift in Sources */, - C38D67EFE019F0EE4BD6A4423A00C7B5 /* SubscriptionDisposable.swift in Sources */, - 9A7521D410822D28E1B6B4269D07007E /* SwiftSupport.swift in Sources */, - F8C158113817C97929BF5EE06E1CA03B /* Switch.swift in Sources */, - 2602C690AD53B8F1081A2668C13CB8A7 /* SwitchIfEmpty.swift in Sources */, - 532183A9E6EC34E4C731DA3125B9E0CD /* SynchronizedDisposeType.swift in Sources */, - 5F65D045836DDF358C8EA4A6C656CD4E /* SynchronizedOnType.swift in Sources */, - FF77FBA774CA40E2DE50C7937D85769A /* SynchronizedUnsubscribeType.swift in Sources */, - 3E8598936463F9359E7B8BF4B0407D42 /* TailRecursiveSink.swift in Sources */, - 95F0814C79EE87496EAA19FE88221DF4 /* Take.swift in Sources */, - C7DE901D1FB7AB3EAD19AEA6B41C8A48 /* TakeLast.swift in Sources */, - 69F8672DBE7447F0A38C5ADE007CD2E0 /* TakeUntil.swift in Sources */, - BA6F467D77F5B693B44971F76580D507 /* TakeWhile.swift in Sources */, - 36986C451FF340C0CF8E2E32F872781A /* Throttle.swift in Sources */, - DFAE635C5E8AFE5B690A1818E00CE1B2 /* Timeout.swift in Sources */, - 507E6364730FA80DC27F1D604F4E0A06 /* Timer.swift in Sources */, - EB68AB47285200287AF1BAA726101A97 /* ToArray.swift in Sources */, - 7A659EE3B9EC629FB0499870C933B5AE /* Using.swift in Sources */, - 7E26957AFF4A2D1563E817E8EF8FEB69 /* VirtualTimeConverterType.swift in Sources */, - 8F723175D0894EC0B87F3DD8A8BBCAFF /* VirtualTimeScheduler.swift in Sources */, - 00E1B59A422C81EB501062FC75ABB89C /* Window.swift in Sources */, - D3EC987B4B3FE156D2E0DD65E332C776 /* WithLatestFrom.swift in Sources */, - 3974CDEF031F83A455C33C0381A7CE63 /* Zip+arity.swift in Sources */, - 07DB3A3042A521B95F40F5523B579139 /* Zip+Collection.swift in Sources */, - B59269BDD5B3326B34F57EEAC19DA43C /* Zip.swift in Sources */, + B4058A2AA8486E9879F113E6F67B9679 /* AdapterProtocols.swift in Sources */, + 4203EF96811AE514D64AE069311B1575 /* AllPass.swift in Sources */, + C99BBC3F70E056CB6A3CC0516318939D /* AssertionDispatcher.swift in Sources */, + F310B21703A7BC438A09DDB96670583F /* AssertionRecorder.swift in Sources */, + DCD198D49C0A198A09525B7688EE3BC9 /* Async.swift in Sources */, + 330E8E4A6596ED625E9B34C94CC4136E /* Await.swift in Sources */, + 94DA3131D64B3D904BE28E72F1871065 /* BeAKindOf.swift in Sources */, + 9C460BA614D4B1D314A252C4C5CE1D87 /* BeAnInstanceOf.swift in Sources */, + F4877B3857C780DCDB7F413A03F95600 /* BeCloseTo.swift in Sources */, + C903AEFEEB4E73644A03FB8285543107 /* BeEmpty.swift in Sources */, + 78A51B7FCC1DFB888AAA254529013C12 /* BeginWith.swift in Sources */, + 42F76698690916E0407F51610D829412 /* BeGreaterThan.swift in Sources */, + 2391FFD3230B40E2348B5257D6296BBB /* BeGreaterThanOrEqualTo.swift in Sources */, + 52AB6461CAA9481D24835F3E48301FC6 /* BeIdenticalTo.swift in Sources */, + 9B9714C476F416AD7FD803EA1184D113 /* BeLessThan.swift in Sources */, + 46BDEBF35D99D2CC53EF72DFC5BDCDCC /* BeLessThanOrEqual.swift in Sources */, + 8D75EC8969EA46FBD6E1BED7791A3C37 /* BeLogical.swift in Sources */, + EC7EF3D5778783BD93EBC6F82016ADA9 /* BeNil.swift in Sources */, + C979EEB0159A65246F6BD2C906A8ADB7 /* BeVoid.swift in Sources */, + D34D0540ADCBF163575B6B5444B1AAF6 /* Contain.swift in Sources */, + 5B6F70DDD4C63CF6ED95291BCB633494 /* ContainElementSatisfying.swift in Sources */, + FF920E965F1CA016FF302DE8C92C5122 /* CwlBadInstructionException.swift in Sources */, + 89EE4D6DBDB79963D65AA1E67B543B6D /* CwlCatchBadInstruction.swift in Sources */, + 02A1AAA49758A955770775CD409D8635 /* CwlCatchException.m in Sources */, + CAACEBB97A7D23E6782B47A805DFED81 /* CwlCatchException.swift in Sources */, + 39133A7716CEDEB690A7DA9D12C45C4D /* CwlDarwinDefinitions.swift in Sources */, + 8A0EF19254BAC5DF0885D1FBA345E016 /* CwlMachBadInstructionHandler.m in Sources */, + 234849AD309265FD107C74357FC8C0CF /* DSL+Wait.swift in Sources */, + 7AC93EB6DCDA9226165D5BC354FE7BC6 /* DSL.m in Sources */, + A9996A6303084D17B9C439CB132A1F69 /* DSL.swift in Sources */, + 3460FEA0CEADB05D3B56C2E1CAF9590C /* ElementsEqual.swift in Sources */, + 3262B230B938C8D6522790093FEAF69D /* EndWith.swift in Sources */, + D9CFB8E5E354D7BE61D092259779F437 /* Equal.swift in Sources */, + B7662703AF8D3FFFCB0070C50FEDCC58 /* Errors.swift in Sources */, + 602E3758C0EF64AF6B7FCEA05BF5B9B9 /* Expectation.swift in Sources */, + AD69407E2FA1D39A9E09248052F2D81B /* ExpectationMessage.swift in Sources */, + E458AAE1AE9E2250F29806E5633B1860 /* Expression.swift in Sources */, + 192A3F8BEC1A99FD8712D3E09724D72C /* FailureMessage.swift in Sources */, + 7DAC86DCBC36C10F43FA5FEB819B7BF1 /* Functional.swift in Sources */, + 64E26D7D025AC4462DFA8BA66B38C9D8 /* HaveCount.swift in Sources */, + 13D2A4D59DD9612E1AA7F3182A342162 /* mach_excServer.c in Sources */, + 5578F928AEFA8B2B7CC542033590DFD6 /* Match.swift in Sources */, + 26B9FEAB3DE0C8B91709D53571752A3B /* MatcherFunc.swift in Sources */, + 44C9470137EF941955A1FDCE71D68C26 /* MatcherProtocols.swift in Sources */, + 0892D14FE7A3452423E9129D7917664B /* MatchError.swift in Sources */, + B71070160CF07EFA99ED0445B0D191E7 /* Nimble-dummy.m in Sources */, + ECCA1FA570A912E8CDB54EB843F1D030 /* NimbleEnvironment.swift in Sources */, + 2B350015B9F7546D0769649EE12D7D1A /* NimbleXCTestHandler.swift in Sources */, + CEE8D31A4E76BB7B350BF2A7175D4BC2 /* NMBExceptionCapture.m in Sources */, + C0C98C8C7D07E1598F20EE2F0539197D /* NMBExpectation.swift in Sources */, + 99E8019F4689A514DAC6AA40AFF7352E /* NMBObjCMatcher.swift in Sources */, + F78E35D04F09485FA5DFA72FE1AD5AB2 /* NMBStringify.m in Sources */, + 46B90B2CF2EB97B38C43A31E9A5478C2 /* PostNotification.swift in Sources */, + B6CC23C6C288F4EB9EDD3A06F1F5F094 /* Predicate.swift in Sources */, + F9E85548BF1EF8C5035BAF92233C34B6 /* RaisesException.swift in Sources */, + B79FC6E46F642C3FC74B3E6D9175B1AB /* SatisfyAllOf.swift in Sources */, + 8D543DAD9A6C0B8BF8A5DB38AD876677 /* SatisfyAnyOf.swift in Sources */, + D9D6150D329A87CBB415FD349F0C50FD /* SourceLocation.swift in Sources */, + 806B9040D79A3DC58FB56EAC16FE19BF /* Stringers.swift in Sources */, + 72FB8CEABF346A37D54CC08647489A98 /* ThrowAssertion.swift in Sources */, + B2A65EEDB5D5EC246EA68E10964FF7B3 /* ThrowError.swift in Sources */, + CF9218FF56D8EE43681150A3E1635C9A /* ToSucceed.swift in Sources */, + DB84342A0C0DEABBF7F729DE55225D82 /* XCTestObservationCenter+Register.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ - 0956A104330D0BA9194E750D3DA2CF77 /* PBXTargetDependency */ = { + 01FD97D679B5DF0DD20729B39BA4376F /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = Japx; + target = 8D5C454863D7AE3089967443AEF1672F /* Japx */; + targetProxy = 125DC525FFAC18E307AF345EE520E50D /* PBXContainerItemProxy */; + }; + 02111FF85682FEF2D6CC3106967D8FD3 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = Quick; + target = C82891EAB7293DBEE916B21F57E8474D /* Quick */; + targetProxy = 014A3C333FAD0AACEB866143266D7388 /* PBXContainerItemProxy */; + }; + 0B44B37FA8D5A45346C6301BB33026C9 /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = RxSwift; target = EA9EA43B3B503823EE36C60D9C8A865F /* RxSwift */; - targetProxy = 76CCA5290B680FD925002E250500CC12 /* PBXContainerItemProxy */; + targetProxy = CA97229B31FF6FA282B5304B5D9FBF3C /* PBXContainerItemProxy */; }; - 35EC8BFB5B1317A920CCB8A5DC051258 /* PBXTargetDependency */ = { + 1D4B482C504790C2F683FB3A7A22BDF7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = Nimble; target = 6F13695E06195A78EA8A95F8C7ED0D2F /* Nimble */; - targetProxy = 3CD077F1C0974E37E5CC2230EF470D76 /* PBXContainerItemProxy */; + targetProxy = C7DCF2E85E3CA59B13087A474A280D8D /* PBXContainerItemProxy */; }; - 62D8BE105F3504E2C517A79856F533DE /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = Japx; - target = 8D5C454863D7AE3089967443AEF1672F /* Japx */; - targetProxy = 90612CAC4DF45E84AA3B91F8686AB6A0 /* PBXContainerItemProxy */; - }; - 633BDCBC91ABC54AC75EAA5F040C41BA /* PBXTargetDependency */ = { + 7D34A805C6A99D41CCCD3D69A3D8415B /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = Alamofire; target = EAAA1AD3A8A1B59AB91319EE40752C6D /* Alamofire */; - targetProxy = B0A174678C37770D0B3184915458BBCC /* PBXContainerItemProxy */; + targetProxy = 3EE832353C0D3BBA1FD4B2470F713D40 /* PBXContainerItemProxy */; }; - 9E87E67A75B7FCD6C9D356E438A97999 /* PBXTargetDependency */ = { + 9D4230867E01DE56A13592EE3282973A /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = "Pods-Japx_Example"; - target = DBF638E41A88B506C17D9D5F9F411553 /* Pods-Japx_Example */; - targetProxy = 260CF153572452B005EFFB1EDF16258D /* PBXContainerItemProxy */; + name = RxSwift; + target = EA9EA43B3B503823EE36C60D9C8A865F /* RxSwift */; + targetProxy = E80F404584698D89F469B7615B318635 /* PBXContainerItemProxy */; }; - AAB781A69E4756C88E99483445C223EF /* PBXTargetDependency */ = { + E6F50C7984BB575A1D8AA4E273507BFA /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = Quick; - target = C82891EAB7293DBEE916B21F57E8474D /* Quick */; - targetProxy = 33D52945A5F354CB3E26728E3655A597 /* PBXContainerItemProxy */; + name = "Pods-Japx_Example"; + target = DBF638E41A88B506C17D9D5F9F411553 /* Pods-Japx_Example */; + targetProxy = 00325B369B009C86EF81A0815F4C70E0 /* PBXContainerItemProxy */; }; - AAC9D6AD942328C01F0D3288820E583B /* PBXTargetDependency */ = { + FED1B9F054FFE063E1F54B6C20B6C07A /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = Alamofire; target = EAAA1AD3A8A1B59AB91319EE40752C6D /* Alamofire */; - targetProxy = D0B9CCA393A07BD3BE154D5687D3A332 /* PBXContainerItemProxy */; - }; - D734F73DE8B63F258B7B94DC372AF733 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = RxSwift; - target = EA9EA43B3B503823EE36C60D9C8A865F /* RxSwift */; - targetProxy = D673E6040EA08C2222BA73A785806C79 /* PBXContainerItemProxy */; + targetProxy = B8A2D151B3097DB97B67974609D25B23 /* PBXContainerItemProxy */; }; /* End PBXTargetDependency section */ /* Begin XCBuildConfiguration section */ - 07488D4657FB0A78086563621D425F8A /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = dwarf; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "POD_CONFIGURATION_DEBUG=1", - "DEBUG=1", - "$(inherited)", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; - MTL_FAST_MATH = YES; - ONLY_ACTIVE_ARCH = YES; - PRODUCT_NAME = "$(TARGET_NAME)"; - STRIP_INSTALLED_PRODUCT = NO; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 4.2; - SYMROOT = "${SRCROOT}/../build"; - }; - name = Debug; - }; - 11B6A26F9D1F4D789849C67074B39C0F /* Release */ = { + 301FE9FE0194BECAB407F02A00B1D130 /* Release */ = { isa = XCBuildConfiguration; baseConfigurationReference = 00EFD03AF54B1963F7605634CC3C87C3 /* Quick.xcconfig */; buildSettings = { @@ -2107,9 +2037,9 @@ }; name = Release; }; - 18BB51171133C57922AE8A842E25ADE3 /* Debug */ = { + 4E0C664B6E3299B48C14F9CE5ABEDE34 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 00EFD03AF54B1963F7605634CC3C87C3 /* Quick.xcconfig */; + baseConfigurationReference = ABE0CBAA1EDAF1FEF6D373728E732380 /* Nimble.xcconfig */; buildSettings = { CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -2120,27 +2050,60 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/Quick/Quick-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/Quick/Quick-Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/Nimble/Nimble-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/Nimble/Nimble-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/Quick/Quick.modulemap"; - PRODUCT_MODULE_NAME = Quick; - PRODUCT_NAME = Quick; + MODULEMAP_FILE = "Target Support Files/Nimble/Nimble.modulemap"; + PRODUCT_MODULE_NAME = Nimble; + PRODUCT_NAME = Nimble; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; SWIFT_VERSION = 4.2; TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Debug; + name = Release; }; - 1A732B2194D6999E122662B777CD7B3D /* Debug */ = { + 60CE911424A6F4006929F4AB087E5077 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 2F4D6B63768CD3125BC409B59B6B2887 /* Pods-Japx_Example.debug.xcconfig */; + baseConfigurationReference = BB561E88B9E2BBC62569733E9A57EF96 /* Japx.xcconfig */; + buildSettings = { + CODE_SIGN_IDENTITY = ""; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + GCC_PREFIX_HEADER = "Target Support Files/Japx/Japx-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/Japx/Japx-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = "Target Support Files/Japx/Japx.modulemap"; + PRODUCT_MODULE_NAME = Japx; + PRODUCT_NAME = Japx; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_VERSION = 5.1; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; + 72CA3288983FBB62CEA0B4B9E74408C3 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = E97F50E655FEABF150F986EB47B4DD6D /* Pods-Japx_Tests.debug.xcconfig */; buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; CODE_SIGN_IDENTITY = ""; @@ -2152,12 +2115,12 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = "Target Support Files/Pods-Japx_Example/Pods-Japx_Example-Info.plist"; + INFOPLIST_FILE = "Target Support Files/Pods-Japx_Tests/Pods-Japx_Tests-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 9.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/Pods-Japx_Example/Pods-Japx_Example.modulemap"; + MODULEMAP_FILE = "Target Support Files/Pods-Japx_Tests/Pods-Japx_Tests.modulemap"; OTHER_LDFLAGS = ""; OTHER_LIBTOOLFLAGS = ""; PODS_ROOT = "$(SRCROOT)"; @@ -2171,9 +2134,9 @@ }; name = Debug; }; - 208B3AED07A8FF183E0BEEAA9CBEC3B3 /* Release */ = { + 75BBB760DFD877E344322B54D29DFE64 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = BB561E88B9E2BBC62569733E9A57EF96 /* Japx.xcconfig */; + baseConfigurationReference = B61B8A464B0BCE320FD5AF3E2AA07851 /* Alamofire.xcconfig */; buildSettings = { CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -2184,30 +2147,28 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/Japx/Japx-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/Japx/Japx-Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/Alamofire/Alamofire-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/Alamofire/Alamofire-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/Japx/Japx.modulemap"; - PRODUCT_MODULE_NAME = Japx; - PRODUCT_NAME = Japx; + MODULEMAP_FILE = "Target Support Files/Alamofire/Alamofire.modulemap"; + PRODUCT_MODULE_NAME = Alamofire; + PRODUCT_NAME = Alamofire; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; + SWIFT_VERSION = 5.1; TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Release; + name = Debug; }; - 2A661462440BE268654D27137F7FEB02 /* Debug */ = { + 79250BA165394D8BB97D00EB8FA399F4 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = E97F50E655FEABF150F986EB47B4DD6D /* Pods-Japx_Tests.debug.xcconfig */; + baseConfigurationReference = 00EFD03AF54B1963F7605634CC3C87C3 /* Quick.xcconfig */; buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -2217,26 +2178,25 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = "Target Support Files/Pods-Japx_Tests/Pods-Japx_Tests-Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/Quick/Quick-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/Quick/Quick-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/Pods-Japx_Tests/Pods-Japx_Tests.modulemap"; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PODS_ROOT = "$(SRCROOT)"; - PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + MODULEMAP_FILE = "Target Support Files/Quick/Quick.modulemap"; + PRODUCT_MODULE_NAME = Quick; + PRODUCT_NAME = Quick; SDKROOT = iphoneos; SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_VERSION = 4.2; TARGETED_DEVICE_FAMILY = "1,2"; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; name = Debug; }; - 2D6A65327F1FC565E63668AE8D630ECC /* Release */ = { + 7A5BBEC942ED293BAB33D11D49E5F4DB /* Debug */ = { isa = XCBuildConfiguration; baseConfigurationReference = ABE0CBAA1EDAF1FEF6D373728E732380 /* Nimble.xcconfig */; buildSettings = { @@ -2262,13 +2222,136 @@ SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; SWIFT_VERSION = 4.2; TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; + name = Debug; + }; + 8F17DC3A99F99FBAD606CE6963886315 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_PREPROCESSOR_DEFINITIONS = ( + "POD_CONFIGURATION_RELEASE=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + PRODUCT_NAME = "$(TARGET_NAME)"; + STRIP_INSTALLED_PRODUCT = NO; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + SWIFT_VERSION = 5.0; + SYMROOT = "${SRCROOT}/../build"; + }; name = Release; }; - 42D82533C8DDC8A142F96D7B5643B30B /* Release */ = { + 916E0404255105F480DC4950B7625F7A /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "POD_CONFIGURATION_DEBUG=1", + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + PRODUCT_NAME = "$(TARGET_NAME)"; + STRIP_INSTALLED_PRODUCT = NO; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + SYMROOT = "${SRCROOT}/../build"; + }; + name = Debug; + }; + 9D99FD966AADEADDCA4D1EE47779A6F7 /* Release */ = { isa = XCBuildConfiguration; baseConfigurationReference = 7CC4788145FD0E5F0AE94314EDB2252A /* Pods-Japx_Tests.release.xcconfig */; buildSettings = { @@ -2302,38 +2385,7 @@ }; name = Release; }; - 533220A7363132F85843031FA4F2AAAB /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = B61B8A464B0BCE320FD5AF3E2AA07851 /* Alamofire.xcconfig */; - buildSettings = { - CODE_SIGN_IDENTITY = ""; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/Alamofire/Alamofire-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/Alamofire/Alamofire-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/Alamofire/Alamofire.modulemap"; - PRODUCT_MODULE_NAME = Alamofire; - PRODUCT_NAME = Alamofire; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; - 925E8C00F66016BC2835CA9204233710 /* Debug */ = { + C0A3EBB2679C1BBF10479FE2BDF93BF2 /* Debug */ = { isa = XCBuildConfiguration; baseConfigurationReference = 615D39680B1BDC82A9C3D296BB9FAC14 /* RxSwift.xcconfig */; buildSettings = { @@ -2364,9 +2416,9 @@ }; name = Debug; }; - 92A61078957CBCE468280787BDBF3AFC /* Release */ = { + CD787A34FC855C3254FBD86888FBA64C /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 615D39680B1BDC82A9C3D296BB9FAC14 /* RxSwift.xcconfig */; + baseConfigurationReference = BB561E88B9E2BBC62569733E9A57EF96 /* Japx.xcconfig */; buildSettings = { CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -2377,29 +2429,29 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/RxSwift/RxSwift-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/RxSwift/RxSwift-Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/Japx/Japx-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/Japx/Japx-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/RxSwift/RxSwift.modulemap"; - PRODUCT_MODULE_NAME = RxSwift; - PRODUCT_NAME = RxSwift; + MODULEMAP_FILE = "Target Support Files/Japx/Japx.modulemap"; + PRODUCT_MODULE_NAME = Japx; + PRODUCT_NAME = Japx; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; + SWIFT_VERSION = 5.1; TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Release; + name = Debug; }; - 9838C58BD1AA67DBD29475983CB12D4A /* Release */ = { + ED3C23C276117813C8C744FFC578DFDE /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = B61B8A464B0BCE320FD5AF3E2AA07851 /* Alamofire.xcconfig */; + baseConfigurationReference = 2F4D6B63768CD3125BC409B59B6B2887 /* Pods-Japx_Example.debug.xcconfig */; buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -2409,88 +2461,28 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/Alamofire/Alamofire-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/Alamofire/Alamofire-Info.plist"; + INFOPLIST_FILE = "Target Support Files/Pods-Japx_Example/Pods-Japx_Example-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/Alamofire/Alamofire.modulemap"; - PRODUCT_MODULE_NAME = Alamofire; - PRODUCT_NAME = Alamofire; + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-Japx_Example/Pods-Japx_Example.modulemap"; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; SDKROOT = iphoneos; SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Release; - }; - A1962E6FF39BBAC201A2E5DDF99557DF /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_NO_COMMON_BLOCKS = YES; - GCC_PREPROCESSOR_DEFINITIONS = ( - "POD_CONFIGURATION_RELEASE=1", - "$(inherited)", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - MTL_ENABLE_DEBUG_INFO = NO; - MTL_FAST_MATH = YES; - PRODUCT_NAME = "$(TARGET_NAME)"; - STRIP_INSTALLED_PRODUCT = NO; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - SWIFT_VERSION = 4.2; - SYMROOT = "${SRCROOT}/../build"; - }; - name = Release; + name = Debug; }; - CF389F750F700469742970304E1E1BC5 /* Debug */ = { + F6DF55C973B02676E366EDCD5AD650F0 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = ABE0CBAA1EDAF1FEF6D373728E732380 /* Nimble.xcconfig */; + baseConfigurationReference = 615D39680B1BDC82A9C3D296BB9FAC14 /* RxSwift.xcconfig */; buildSettings = { CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -2501,27 +2493,28 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/Nimble/Nimble-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/Nimble/Nimble-Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/RxSwift/RxSwift-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/RxSwift/RxSwift-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/Nimble/Nimble.modulemap"; - PRODUCT_MODULE_NAME = Nimble; - PRODUCT_NAME = Nimble; + MODULEMAP_FILE = "Target Support Files/RxSwift/RxSwift.modulemap"; + PRODUCT_MODULE_NAME = RxSwift; + PRODUCT_NAME = RxSwift; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 4.2; + SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Debug; + name = Release; }; - E912297C4F6DEC3BBD85A1B2E30108B6 /* Debug */ = { + F94FD07C591B17B7E61A1528AB9BCB3B /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = BB561E88B9E2BBC62569733E9A57EF96 /* Japx.xcconfig */; + baseConfigurationReference = B61B8A464B0BCE320FD5AF3E2AA07851 /* Alamofire.xcconfig */; buildSettings = { CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -2532,25 +2525,26 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/Japx/Japx-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/Japx/Japx-Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/Alamofire/Alamofire-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/Alamofire/Alamofire-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/Japx/Japx.modulemap"; - PRODUCT_MODULE_NAME = Japx; - PRODUCT_NAME = Japx; + MODULEMAP_FILE = "Target Support Files/Alamofire/Alamofire.modulemap"; + PRODUCT_MODULE_NAME = Alamofire; + PRODUCT_NAME = Alamofire; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; + SWIFT_VERSION = 5.1; TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Debug; + name = Release; }; - FC92DE867610AA580C009478F57C7526 /* Release */ = { + FCF08DA481AA45211D12BBCE96E7B93D /* Release */ = { isa = XCBuildConfiguration; baseConfigurationReference = 603FFBA34D80D04030D59EA09AAC865F /* Pods-Japx_Example.release.xcconfig */; buildSettings = { @@ -2587,11 +2581,11 @@ /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ - 0E20BBA58157205BEC002EF4C5479247 /* Build configuration list for PBXNativeTarget "Quick" */ = { + 47B2ED1DB2551CC08020A3160EED216D /* Build configuration list for PBXNativeTarget "RxSwift" */ = { isa = XCConfigurationList; buildConfigurations = ( - 18BB51171133C57922AE8A842E25ADE3 /* Debug */, - 11B6A26F9D1F4D789849C67074B39C0F /* Release */, + C0A3EBB2679C1BBF10479FE2BDF93BF2 /* Debug */, + F6DF55C973B02676E366EDCD5AD650F0 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; @@ -2599,62 +2593,62 @@ 4821239608C13582E20E6DA73FD5F1F9 /* Build configuration list for PBXProject "Pods" */ = { isa = XCConfigurationList; buildConfigurations = ( - 07488D4657FB0A78086563621D425F8A /* Debug */, - A1962E6FF39BBAC201A2E5DDF99557DF /* Release */, + 916E0404255105F480DC4950B7625F7A /* Debug */, + 8F17DC3A99F99FBAD606CE6963886315 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 71610ECE2186E5279B934AB97D1DFD11 /* Build configuration list for PBXNativeTarget "Pods-Japx_Tests" */ = { + 7BA2871073BADA98924CEA9411E2DD6E /* Build configuration list for PBXNativeTarget "Japx" */ = { isa = XCConfigurationList; buildConfigurations = ( - 2A661462440BE268654D27137F7FEB02 /* Debug */, - 42D82533C8DDC8A142F96D7B5643B30B /* Release */, + CD787A34FC855C3254FBD86888FBA64C /* Debug */, + 60CE911424A6F4006929F4AB087E5077 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 88C6F3479A4EFBB6783ED53DAC76705C /* Build configuration list for PBXNativeTarget "Pods-Japx_Example" */ = { + 9AC65E53333ACA93EEB1D8EBAB58CBB6 /* Build configuration list for PBXNativeTarget "Nimble" */ = { isa = XCConfigurationList; buildConfigurations = ( - 1A732B2194D6999E122662B777CD7B3D /* Debug */, - FC92DE867610AA580C009478F57C7526 /* Release */, + 7A5BBEC942ED293BAB33D11D49E5F4DB /* Debug */, + 4E0C664B6E3299B48C14F9CE5ABEDE34 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - C7CBB43CC8359CCD0A90464B83ECD474 /* Build configuration list for PBXNativeTarget "Japx" */ = { + A482E8F0F5BEDCE177543007D23A5736 /* Build configuration list for PBXNativeTarget "Quick" */ = { isa = XCConfigurationList; buildConfigurations = ( - E912297C4F6DEC3BBD85A1B2E30108B6 /* Debug */, - 208B3AED07A8FF183E0BEEAA9CBEC3B3 /* Release */, + 79250BA165394D8BB97D00EB8FA399F4 /* Debug */, + 301FE9FE0194BECAB407F02A00B1D130 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - E3A98634DB5DA9D006BDFE48B5C34CB5 /* Build configuration list for PBXNativeTarget "Nimble" */ = { + B6B87F13804ABF0E3AD9FCD5147EED8E /* Build configuration list for PBXNativeTarget "Pods-Japx_Example" */ = { isa = XCConfigurationList; buildConfigurations = ( - CF389F750F700469742970304E1E1BC5 /* Debug */, - 2D6A65327F1FC565E63668AE8D630ECC /* Release */, + ED3C23C276117813C8C744FFC578DFDE /* Debug */, + FCF08DA481AA45211D12BBCE96E7B93D /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - E87124444A44B7DB55208E7FEC21D331 /* Build configuration list for PBXNativeTarget "Alamofire" */ = { + E4A5194ABAF7A4780609E0E581DA6B54 /* Build configuration list for PBXNativeTarget "Alamofire" */ = { isa = XCConfigurationList; buildConfigurations = ( - 533220A7363132F85843031FA4F2AAAB /* Debug */, - 9838C58BD1AA67DBD29475983CB12D4A /* Release */, + 75BBB760DFD877E344322B54D29DFE64 /* Debug */, + F94FD07C591B17B7E61A1528AB9BCB3B /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - E8949A8D9034B0752237CB279E4B4A5C /* Build configuration list for PBXNativeTarget "RxSwift" */ = { + FA1DBD84C09A94FD8323F49EC88B5D8A /* Build configuration list for PBXNativeTarget "Pods-Japx_Tests" */ = { isa = XCConfigurationList; buildConfigurations = ( - 925E8C00F66016BC2835CA9204233710 /* Debug */, - 92A61078957CBCE468280787BDBF3AFC /* Release */, + 72CA3288983FBB62CEA0B4B9E74408C3 /* Debug */, + 9D99FD966AADEADDCA4D1EE47779A6F7 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; diff --git a/Example/Pods/RxSwift/README.md b/Example/Pods/RxSwift/README.md index 83d2f6c..82f754b 100644 --- a/Example/Pods/RxSwift/README.md +++ b/Example/Pods/RxSwift/README.md @@ -177,6 +177,18 @@ github "ReactiveX/RxSwift" ~> 5.0 $ carthage update ``` +#### Carthage as a Static Library + +Carthage defaults to building RxSwift as a Dynamic Library. + +If you wish to build RxSwift as a Static Library using Carthage you may use the script below to manually modify the framework type before building with Carthage: + +```bash +carthage update RxSwift --platform iOS --no-build +sed -i -e 's/MACH_O_TYPE = mh_dylib/MACH_O_TYPE = staticlib/g' Carthage/Checkouts/RxSwift/Rx.xcodeproj/project.pbxproj +carthage build RxAlamofire --platform iOS +``` + ### [Swift Package Manager](https://github.com/apple/swift-package-manager) Create a `Package.swift` file. diff --git a/Example/Pods/Target Support Files/Alamofire/Alamofire-Info.plist b/Example/Pods/Target Support Files/Alamofire/Alamofire-Info.plist index b287f84..0dbae30 100644 --- a/Example/Pods/Target Support Files/Alamofire/Alamofire-Info.plist +++ b/Example/Pods/Target Support Files/Alamofire/Alamofire-Info.plist @@ -15,7 +15,7 @@ CFBundlePackageType FMWK CFBundleShortVersionString - 4.8.2 + 4.9.1 CFBundleSignature ???? CFBundleVersion diff --git a/Example/Pods/Target Support Files/Alamofire/Alamofire.xcconfig b/Example/Pods/Target Support Files/Alamofire/Alamofire.xcconfig index 12a1450..243af4f 100644 --- a/Example/Pods/Target Support Files/Alamofire/Alamofire.xcconfig +++ b/Example/Pods/Target Support Files/Alamofire/Alamofire.xcconfig @@ -7,3 +7,4 @@ PODS_ROOT = ${SRCROOT} PODS_TARGET_SRCROOT = ${PODS_ROOT}/Alamofire PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} SKIP_INSTALL = YES +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/Example/Pods/Target Support Files/Japx/Japx-Info.plist b/Example/Pods/Target Support Files/Japx/Japx-Info.plist index 7f71fff..c054f9c 100644 --- a/Example/Pods/Target Support Files/Japx/Japx-Info.plist +++ b/Example/Pods/Target Support Files/Japx/Japx-Info.plist @@ -15,7 +15,7 @@ CFBundlePackageType FMWK CFBundleShortVersionString - 2.1.0 + 2.2.0 CFBundleSignature ???? CFBundleVersion diff --git a/Example/Pods/Target Support Files/Japx/Japx.xcconfig b/Example/Pods/Target Support Files/Japx/Japx.xcconfig index dcf5ba4..8c782aa 100644 --- a/Example/Pods/Target Support Files/Japx/Japx.xcconfig +++ b/Example/Pods/Target Support Files/Japx/Japx.xcconfig @@ -9,3 +9,4 @@ PODS_ROOT = ${SRCROOT} PODS_TARGET_SRCROOT = ${PODS_ROOT}/../.. PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} SKIP_INSTALL = YES +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/Example/Pods/Target Support Files/Nimble/Nimble.xcconfig b/Example/Pods/Target Support Files/Nimble/Nimble.xcconfig index 51f805f..f80709a 100644 --- a/Example/Pods/Target Support Files/Nimble/Nimble.xcconfig +++ b/Example/Pods/Target Support Files/Nimble/Nimble.xcconfig @@ -11,3 +11,4 @@ PODS_ROOT = ${SRCROOT} PODS_TARGET_SRCROOT = ${PODS_ROOT}/Nimble PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} SKIP_INSTALL = YES +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/Example/Pods/Target Support Files/Pods-Japx_Example/Pods-Japx_Example-frameworks.sh b/Example/Pods/Target Support Files/Pods-Japx_Example/Pods-Japx_Example-frameworks.sh index cbc60e2..2ce7be1 100755 --- a/Example/Pods/Target Support Files/Pods-Japx_Example/Pods-Japx_Example-frameworks.sh +++ b/Example/Pods/Target Support Files/Pods-Japx_Example/Pods-Japx_Example-frameworks.sh @@ -94,7 +94,7 @@ install_dsym() { binary="${DERIVED_FILES_DIR}/${basename}.framework.dSYM/Contents/Resources/DWARF/${basename}" # Strip invalid architectures so "fat" simulator / device frameworks work on device - if [[ "$(file "$binary")" == *"Mach-O dSYM companion"* ]]; then + if [[ "$(file "$binary")" == *"Mach-O "*"dSYM companion"* ]]; then strip_invalid_archs "$binary" fi diff --git a/Example/Pods/Target Support Files/Pods-Japx_Example/Pods-Japx_Example.debug.xcconfig b/Example/Pods/Target Support Files/Pods-Japx_Example/Pods-Japx_Example.debug.xcconfig index 2234637..2750054 100644 --- a/Example/Pods/Target Support Files/Pods-Japx_Example/Pods-Japx_Example.debug.xcconfig +++ b/Example/Pods/Target Support Files/Pods-Japx_Example/Pods-Japx_Example.debug.xcconfig @@ -9,3 +9,4 @@ PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_PODFILE_DIR_PATH = ${SRCROOT}/. PODS_ROOT = ${SRCROOT}/Pods +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/Example/Pods/Target Support Files/Pods-Japx_Example/Pods-Japx_Example.release.xcconfig b/Example/Pods/Target Support Files/Pods-Japx_Example/Pods-Japx_Example.release.xcconfig index 2234637..2750054 100644 --- a/Example/Pods/Target Support Files/Pods-Japx_Example/Pods-Japx_Example.release.xcconfig +++ b/Example/Pods/Target Support Files/Pods-Japx_Example/Pods-Japx_Example.release.xcconfig @@ -9,3 +9,4 @@ PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_PODFILE_DIR_PATH = ${SRCROOT}/. PODS_ROOT = ${SRCROOT}/Pods +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/Example/Pods/Target Support Files/Pods-Japx_Tests/Pods-Japx_Tests-frameworks.sh b/Example/Pods/Target Support Files/Pods-Japx_Tests/Pods-Japx_Tests-frameworks.sh index c38336a..d373737 100755 --- a/Example/Pods/Target Support Files/Pods-Japx_Tests/Pods-Japx_Tests-frameworks.sh +++ b/Example/Pods/Target Support Files/Pods-Japx_Tests/Pods-Japx_Tests-frameworks.sh @@ -94,7 +94,7 @@ install_dsym() { binary="${DERIVED_FILES_DIR}/${basename}.framework.dSYM/Contents/Resources/DWARF/${basename}" # Strip invalid architectures so "fat" simulator / device frameworks work on device - if [[ "$(file "$binary")" == *"Mach-O dSYM companion"* ]]; then + if [[ "$(file "$binary")" == *"Mach-O "*"dSYM companion"* ]]; then strip_invalid_archs "$binary" fi diff --git a/Example/Pods/Target Support Files/Pods-Japx_Tests/Pods-Japx_Tests.debug.xcconfig b/Example/Pods/Target Support Files/Pods-Japx_Tests/Pods-Japx_Tests.debug.xcconfig index f45eea8..ca40385 100644 --- a/Example/Pods/Target Support Files/Pods-Japx_Tests/Pods-Japx_Tests.debug.xcconfig +++ b/Example/Pods/Target Support Files/Pods-Japx_Tests/Pods-Japx_Tests.debug.xcconfig @@ -9,3 +9,4 @@ PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_PODFILE_DIR_PATH = ${SRCROOT}/. PODS_ROOT = ${SRCROOT}/Pods +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/Example/Pods/Target Support Files/Pods-Japx_Tests/Pods-Japx_Tests.release.xcconfig b/Example/Pods/Target Support Files/Pods-Japx_Tests/Pods-Japx_Tests.release.xcconfig index f45eea8..ca40385 100644 --- a/Example/Pods/Target Support Files/Pods-Japx_Tests/Pods-Japx_Tests.release.xcconfig +++ b/Example/Pods/Target Support Files/Pods-Japx_Tests/Pods-Japx_Tests.release.xcconfig @@ -9,3 +9,4 @@ PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_PODFILE_DIR_PATH = ${SRCROOT}/. PODS_ROOT = ${SRCROOT}/Pods +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/Example/Pods/Target Support Files/Quick/Quick.xcconfig b/Example/Pods/Target Support Files/Quick/Quick.xcconfig index f0639f1..92de8dc 100644 --- a/Example/Pods/Target Support Files/Quick/Quick.xcconfig +++ b/Example/Pods/Target Support Files/Quick/Quick.xcconfig @@ -11,3 +11,4 @@ PODS_ROOT = ${SRCROOT} PODS_TARGET_SRCROOT = ${PODS_ROOT}/Quick PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} SKIP_INSTALL = YES +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/Example/Pods/Target Support Files/RxSwift/Info.plist b/Example/Pods/Target Support Files/RxSwift/Info.plist deleted file mode 100644 index df27649..0000000 --- a/Example/Pods/Target Support Files/RxSwift/Info.plist +++ /dev/null @@ -1,26 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIdentifier - ${PRODUCT_BUNDLE_IDENTIFIER} - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - FMWK - CFBundleShortVersionString - 4.4.0 - CFBundleSignature - ???? - CFBundleVersion - ${CURRENT_PROJECT_VERSION} - NSPrincipalClass - - - diff --git a/Example/Pods/Target Support Files/RxSwift/RxSwift-Info.plist b/Example/Pods/Target Support Files/RxSwift/RxSwift-Info.plist index e2771ff..8d87a1a 100644 --- a/Example/Pods/Target Support Files/RxSwift/RxSwift-Info.plist +++ b/Example/Pods/Target Support Files/RxSwift/RxSwift-Info.plist @@ -15,7 +15,7 @@ CFBundlePackageType FMWK CFBundleShortVersionString - 5.0.0 + 5.0.1 CFBundleSignature ???? CFBundleVersion diff --git a/Example/Pods/Target Support Files/RxSwift/RxSwift.xcconfig b/Example/Pods/Target Support Files/RxSwift/RxSwift.xcconfig index 840598c..fc2aab5 100644 --- a/Example/Pods/Target Support Files/RxSwift/RxSwift.xcconfig +++ b/Example/Pods/Target Support Files/RxSwift/RxSwift.xcconfig @@ -7,3 +7,4 @@ PODS_ROOT = ${SRCROOT} PODS_TARGET_SRCROOT = ${PODS_ROOT}/RxSwift PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} SKIP_INSTALL = YES +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/Example/Tests/Objc/DecoderTester.m b/Example/Tests/Objc/DecoderTester.m index bbc7460..0e8652b 100644 --- a/Example/Tests/Objc/DecoderTester.m +++ b/Example/Tests/Objc/DecoderTester.m @@ -21,7 +21,7 @@ - (void)testArticlePerson BOOL correctlyParsed = [AdditionalFunctions doesWithJsonFromFileNamed:@"ArticlePerson-JsonApi" containsEverethingFrom:@"ArticlePerson-Json" afterParsingBlock:^id _Nonnull(NSData * _Nonnull data) { - return [JAPXDecoder jsonObjectWithData:data includeList:nil error:nil]; + return [JAPXDecoder jsonObjectWithData:data includeList:nil options:[JAPXDecodingOptions new] error:nil]; }]; XCTAssertTrue(correctlyParsed); } @@ -31,7 +31,7 @@ - (void)testMissingRelationship BOOL correctlyParsed = [AdditionalFunctions doesWithJsonFromFileNamed:@"MissingRelationship-JsonApi" containsEverethingFrom:@"MissingRelationship-Json" afterParsingBlock:^id _Nonnull(NSData * _Nonnull data) { - return [JAPXDecoder jsonObjectWithData:data includeList:nil error:nil]; + return [JAPXDecoder jsonObjectWithData:data includeList:nil options:[JAPXDecodingOptions new] error:nil]; }]; XCTAssertTrue(correctlyParsed); } @@ -41,7 +41,7 @@ - (void)testArticleExample BOOL correctlyParsed = [AdditionalFunctions doesWithJsonFromFileNamed:@"ArticleExample-JsonApi" containsEverethingFrom:@"ArticleExample-Json" afterParsingBlock:^id _Nonnull(NSData * _Nonnull data) { - return [JAPXDecoder jsonObjectWithData:data includeList:nil error:nil]; + return [JAPXDecoder jsonObjectWithData:data includeList:nil options:[JAPXDecodingOptions new] error:nil]; }]; XCTAssertTrue(correctlyParsed); } @@ -52,7 +52,7 @@ - (void)testRecursiveSampleWithIncludeList BOOL correctlyParsed = [AdditionalFunctions doesWithJsonFromFileNamed:@"RecursivSample-JsonApi" containsEverethingFrom:@"RecursivSample-Json" afterParsingBlock:^id _Nonnull(NSData * _Nonnull data) { - return [JAPXDecoder jsonObjectWithData:data includeList:includeList error:nil]; + return [JAPXDecoder jsonObjectWithData:data includeList:includeList options:[JAPXDecodingOptions new] error:nil]; }]; XCTAssertTrue(correctlyParsed); } @@ -63,7 +63,7 @@ - (void)testRecursiveSampleWithEmptyRelationshipList BOOL correctlyParsed = [AdditionalFunctions doesWithJsonFromFileNamed:@"EmptyRelationship-JsonApi" containsEverethingFrom:@"EmptyRelationship-Json" afterParsingBlock:^id _Nonnull(NSData * _Nonnull data) { - return [JAPXDecoder jsonObjectWithData:data includeList:includeList error:nil]; + return [JAPXDecoder jsonObjectWithData:data includeList:includeList options:[JAPXDecodingOptions new] error:nil]; }]; XCTAssertTrue(correctlyParsed); } @@ -74,7 +74,7 @@ - (void)testRecursiveSampleWithEmptyRelationshipListDeep BOOL correctlyParsed = [AdditionalFunctions doesWithJsonFromFileNamed:@"EmptyRelationship-JsonApi" containsEverethingFrom:@"EmptyRelationshipDeep-Json" afterParsingBlock:^id _Nonnull(NSData * _Nonnull data) { - return [JAPXDecoder jsonObjectWithData:data includeList:includeList error:nil]; + return [JAPXDecoder jsonObjectWithData:data includeList:includeList options:[JAPXDecodingOptions new] error:nil]; }]; XCTAssertTrue(correctlyParsed); } @@ -85,7 +85,7 @@ - (void)testRecursiveSampleWithMissinRelationshipIcludeObject BOOL correctlyParsed = [AdditionalFunctions doesWithJsonFromFileNamed:@"RelationshipNoInclude-JsonApi" containsEverethingFrom:@"RelationshipNoInclude-Json" afterParsingBlock:^id _Nonnull(NSData * _Nonnull data) { - return [JAPXDecoder jsonObjectWithData:data includeList:includeList error:nil]; + return [JAPXDecoder jsonObjectWithData:data includeList:includeList options:[JAPXDecodingOptions new] error:nil]; }]; XCTAssertTrue(correctlyParsed); } diff --git a/Example/Tests/Swift/DecoderTester.swift b/Example/Tests/Swift/DecoderTester.swift index fd3ee07..e7d44ff 100644 --- a/Example/Tests/Swift/DecoderTester.swift +++ b/Example/Tests/Swift/DecoderTester.swift @@ -75,35 +75,46 @@ class DecoderTesterSpec: QuickSpec { } expect(correctlyParsed) == true } - - it("Should parse missing relationship object as type-id pair if parseMissingRelationships is set to true") { + } + + describe("Testing json api `parseNotIncludedRelationships` property") { + + it("Should parse missing relationship object as type-id pair") { let correctlyParsed = AdditionalFunctions.does(jsonFromFileNamed: "MissingRelationshipObject-JsonApi", containsEverethingFrom: "MissingRelationshipObject-Json") { - return try! Japx.Decoder.jsonObject(with: $0, parseMissingRelationships: true) + return try! Japx.Decoder.jsonObject(with: $0, options: .notIncludedRelationships) } expect(correctlyParsed) == true } - it("Should parse missing relationship array of object as array of type-id pairs if parseMissingRelationships is set to true") { + it("Should parse missing relationship with include list as array of type-id pairs") { + let includeList = "user" let correctlyParsed = AdditionalFunctions.does(jsonFromFileNamed: "MissingRelationshipObjects-JsonApi", containsEverethingFrom: "MissingRelationshipObjects-Json") { - return try! Japx.Decoder.jsonObject(with: $0, parseMissingRelationships: true) + return try! Japx.Decoder.jsonObject(with: $0, includeList: includeList, options: .notIncludedRelationships) } expect(correctlyParsed) == true } - it("Should skip missing relationship object if parseMissingRelationships is set to false") { + it("Should parse missing relationship object as nil") { let correctlyParsed = AdditionalFunctions.does(jsonFromFileNamed: "MissingRelationshipObject-JsonApi", containsEverethingFrom: "MissingRelationshipObjectNull-Json") { - return try! Japx.Decoder.jsonObject(with: $0, parseMissingRelationships: false) + return try! Japx.Decoder.jsonObject(with: $0) } expect(correctlyParsed) == true } - it("Should skip missing relationship array if parseMissingRelationships is set to false") { + it("Should parse missing relationship with include list as empty array") { + let includeList = "user,policy" let correctlyParsed = AdditionalFunctions.does(jsonFromFileNamed: "MissingRelationshipObjects-JsonApi", containsEverethingFrom: "MissingRelationshipObjectsEmpty-Json") { - return try! Japx.Decoder.jsonObject(with: $0, parseMissingRelationships: false) + return try! Japx.Decoder.jsonObject(with: $0, includeList: includeList) } expect(correctlyParsed) == true } } - } } + + +extension JapxDecodingOptions { + + static var notIncludedRelationships: JapxDecodingOptions { .init(parseNotIncludedRelationships: true) } + +} diff --git a/Example/Tests/Utilities/AdditionalFunctions.swift b/Example/Tests/Utilities/AdditionalFunctions.swift index 5ea55a0..bb93a20 100644 --- a/Example/Tests/Utilities/AdditionalFunctions.swift +++ b/Example/Tests/Utilities/AdditionalFunctions.swift @@ -73,8 +73,8 @@ public typealias ParsingPipelineCallback = (_ json: Data) -> (Any) return number == numberOther } - if entry.value is NSNull && (jsonParameter[entry.key] == nil || jsonParameter[entry.key] is NSNull) { - return true + if entry.value is NSNull { + return (jsonParameter[entry.key] == nil || jsonParameter[entry.key] is NSNull) } assert(false, "You should not end up here") diff --git a/Japx.podspec b/Japx.podspec index 58ac03c..545b7c0 100644 --- a/Japx.podspec +++ b/Japx.podspec @@ -1,7 +1,7 @@ Pod::Spec.new do |s| s.name = 'Japx' - s.version = '2.1.0' + s.version = '2.2.0' s.summary = 'Lightweight JSON:API parser.' # This description is used to generate tags and improve search results. @@ -24,7 +24,7 @@ It works by transfering Dictionary to Dictionary, so you can use Codable, Unbox, s.platform = :ios, :osx s.ios.deployment_target = '9.0' s.osx.deployment_target = '10.10' - s.swift_version = '5.0' + s.swift_version = '5.1' s.default_subspec = 'Core' @@ -41,7 +41,7 @@ It works by transfering Dictionary to Dictionary, so you can use Codable, Unbox, s.subspec 'Alamofire' do |sp| sp.source_files = 'Japx/Classes/Alamofire/**/*' sp.dependency 'Japx/Core' - sp.dependency 'Alamofire', '~> 4.8' + sp.dependency 'Alamofire', '~> 4.9' end s.subspec 'RxAlamofire' do |sp| @@ -65,12 +65,13 @@ It works by transfering Dictionary to Dictionary, so you can use Codable, Unbox, s.subspec 'Moya' do |sp| sp.source_files = 'Japx/Classes/Moya/**/*' sp.dependency 'Japx/Core' - sp.dependency 'Moya/RxSwift', '~> 13.0' + sp.dependency 'Moya/Core', '~> 13.0' end s.subspec 'RxMoya' do |sp| sp.source_files = 'Japx/Classes/RxMoya/**/*' sp.dependency 'Japx/Moya' + sp.dependency 'Moya/RxSwift', '~> 13.0' end s.subspec 'CodableMoya' do |sp| diff --git a/Japx/Classes/Alamofire/JapxAlamofire.swift b/Japx/Classes/Alamofire/JapxAlamofire.swift index 50243dc..d9e2256 100644 --- a/Japx/Classes/Alamofire/JapxAlamofire.swift +++ b/Japx/Classes/Alamofire/JapxAlamofire.swift @@ -32,9 +32,10 @@ extension Request { /// - parameter data: The data returned from the server. /// - parameter error: The error already encountered if it exists. /// - parameter includeList: The include list for deserializing JSON:API relationships. + /// - parameter options: The options specifying how `Japx.Decoder` should decode JSON:API into JSON. /// /// - returns: The result data type. - public static func serializeResponseJSONAPI(response: HTTPURLResponse?, data: Data?, error: Error?, includeList: String?) -> Result { + public static func serializeResponseJSONAPI(response: HTTPURLResponse?, data: Data?, error: Error?, includeList: String?, options: JapxDecodingOptions) -> Result { guard error == nil else { return .failure(error!) } if let response = response, emptyDataStatusCodes.contains(response.statusCode) { return .success([:]) } @@ -44,7 +45,7 @@ extension Request { } do { - let json = try Japx.Decoder.jsonObject(with: validData, includeList: includeList) + let json = try Japx.Decoder.jsonObject(with: validData, includeList: includeList, options: options) return .success(json) } catch { return .failure(AFError.responseSerializationFailed(reason: .jsonSerializationFailed(error: error))) @@ -57,11 +58,12 @@ extension DataRequest { /// Creates a response serializer that returns a parsed JSON:API object contained in result type. /// /// - parameter includeList: The include list for deserializing JSON:API relationships. + /// - parameter options: The options specifying how `Japx.Decoder` should decode JSON:API into JSON. /// /// - returns: A JSON:API object response serializer. - public static func jsonApiResponseSerializer(includeList: String?) -> DataResponseSerializer { + public static func jsonApiResponseSerializer(includeList: String?, options: JapxDecodingOptions) -> DataResponseSerializer { return DataResponseSerializer { _, response, data, error in - return Request.serializeResponseJSONAPI(response: response, data: data, error: error, includeList: includeList) + return Request.serializeResponseJSONAPI(response: response, data: data, error: error, includeList: includeList, options: options) } } @@ -69,14 +71,15 @@ extension DataRequest { /// /// - parameter queue: The queue on which the completion handler is dispatched. /// - parameter includeList: The include list for deserializing JSON:API relationships. + /// - parameter options: The options specifying how `Japx.Decoder` should decode JSON:API into JSON. /// - parameter completionHandler: A closure to be executed once the request has finished. /// /// - returns: The request. @discardableResult - public func responseJSONAPI(queue: DispatchQueue? = nil, includeList: String? = nil, completionHandler: @escaping (DataResponse) -> Void) -> Self { + public func responseJSONAPI(queue: DispatchQueue? = nil, includeList: String? = nil, options: JapxDecodingOptions = .default, completionHandler: @escaping (DataResponse) -> Void) -> Self { return response( queue: queue, - responseSerializer: DataRequest.jsonApiResponseSerializer(includeList: includeList), + responseSerializer: DataRequest.jsonApiResponseSerializer(includeList: includeList, options: options), completionHandler: completionHandler ) } @@ -86,10 +89,11 @@ extension DownloadRequest { /// Creates a response serializer that returns a parsed JSON:API object contained in result type. /// - /// - parameter includeList: The include list for deserializing JSON:API relationships. + /// - parameter includeList: The include list for deserializing JSON:API relationships. + /// - parameter options: The options specifying how `Japx.Decoder` should decode JSON:API into JSON. /// /// - returns: A JSON object response serializer. - public static func jsonApiResponseSerializer(includeList: String?) -> DownloadResponseSerializer + public static func jsonApiResponseSerializer(includeList: String?, options: JapxDecodingOptions) -> DownloadResponseSerializer { return DownloadResponseSerializer { _, response, fileURL, error in guard error == nil else { return .failure(error!) } @@ -100,7 +104,7 @@ extension DownloadRequest { do { let data = try Data(contentsOf: fileURL) - return Request.serializeResponseJSONAPI(response: response, data: data, error: error, includeList: includeList) + return Request.serializeResponseJSONAPI(response: response, data: data, error: error, includeList: includeList, options: options) } catch { return .failure(AFError.responseSerializationFailed(reason: .inputFileReadFailed(at: fileURL))) } @@ -111,14 +115,15 @@ extension DownloadRequest { /// /// - parameter queue: The queue on which the completion handler is dispatched. /// - parameter includeList: The include list for deserializing JSON:API relationships. + /// - parameter options: The options specifying how `Japx.Decoder` should decode JSON:API into JSON. /// - parameter completionHandler: A closure to be executed once the request has finished. /// /// - returns: The request. @discardableResult - public func responseJSONAPI(queue: DispatchQueue? = nil, includeList: String? = nil, completionHandler: @escaping (DownloadResponse) -> Void) -> Self { + public func responseJSONAPI(queue: DispatchQueue? = nil, includeList: String? = nil, options: JapxDecodingOptions = .default, completionHandler: @escaping (DownloadResponse) -> Void) -> Self { return response( queue: queue, - responseSerializer: DownloadRequest.jsonApiResponseSerializer(includeList: includeList), + responseSerializer: DownloadRequest.jsonApiResponseSerializer(includeList: includeList, options: options), completionHandler: completionHandler ) } diff --git a/Japx/Classes/Codable/JapxCodable.swift b/Japx/Classes/Codable/JapxCodable.swift index 2c3ddab..5d99b89 100644 --- a/Japx/Classes/Codable/JapxCodable.swift +++ b/Japx/Classes/Codable/JapxCodable.swift @@ -48,9 +48,13 @@ public final class JapxDecoder { /// Underlying JSONDecoder, can be used to add date formats, ... public let jsonDecoder: JSONDecoder + /// Options specifying how `Japx.Decoder` should decode JSON:API into JSON. + public let options: JapxDecodingOptions + /// Initializes `self` with underlying `JSONDecoder` instance - public init(jsonDecoder: JSONDecoder = JSONDecoder()) { + public init(jsonDecoder: JSONDecoder = JSONDecoder(), options: JapxDecodingOptions = .default) { self.jsonDecoder = jsonDecoder + self.options = options } /// Decodes a top-level value of the given type from the given JSON:API representation. @@ -60,7 +64,7 @@ public final class JapxDecoder { /// - returns: A value of the requested type. /// - throws: An error if any value throws an error during decoding. public func decode(_ type: T.Type, from json: Parameters, includeList: String? = nil) throws -> T where T : Decodable { - let data = try Japx.Decoder.data(withJSONAPIObject: json, includeList: includeList) + let data = try Japx.Decoder.data(withJSONAPIObject: json, includeList: includeList, options: options) return try jsonDecoder.decode(type, from: data) } @@ -71,7 +75,7 @@ public final class JapxDecoder { /// - returns: A value of the requested type. /// - throws: An error if any value throws an error during decoding. public func decode(_ type: T.Type, from data: Data, includeList: String? = nil) throws -> T where T : Decodable { - let data = try Japx.Decoder.data(with: data, includeList: includeList) + let data = try Japx.Decoder.data(with: data, includeList: includeList, options: options) return try jsonDecoder.decode(type, from: data) } } diff --git a/Japx/Classes/CodableAlamofire/JapxCodableAlamofire.swift b/Japx/Classes/CodableAlamofire/JapxCodableAlamofire.swift index c3e78ec..fa5dcd6 100644 --- a/Japx/Classes/CodableAlamofire/JapxCodableAlamofire.swift +++ b/Japx/Classes/CodableAlamofire/JapxCodableAlamofire.swift @@ -33,7 +33,7 @@ extension Request { return .success(decodable) } - let json = try Japx.Decoder.jsonObject(with: validData, includeList: includeList) + let json = try Japx.Decoder.jsonObject(with: validData, includeList: includeList, options: decoder.options) guard let jsonForKeyPath = (json as AnyObject).value(forKeyPath: keyPath) else { return .failure(JapxAlamofireError.invalidKeyPath(keyPath: keyPath)) } diff --git a/Japx/Classes/CodableMoya/JapxCodableMoya.swift b/Japx/Classes/CodableMoya/JapxCodableMoya.swift index 97ea202..87f5b00 100644 --- a/Japx/Classes/CodableMoya/JapxCodableMoya.swift +++ b/Japx/Classes/CodableMoya/JapxCodableMoya.swift @@ -29,7 +29,7 @@ extension Response { return decodable } - let json = try Japx.Decoder.jsonObject(with: data, includeList: includeList) + let json = try Japx.Decoder.jsonObject(with: data, includeList: includeList, options: decoder.options) guard let jsonForKeyPath = (json as AnyObject).value(forKeyPath: keyPath) else { throw JapxMoyaError.invalidKeyPath(keyPath: keyPath) } diff --git a/Japx/Classes/Core/Japx.swift b/Japx/Classes/Core/Japx.swift index 3633b7a..b4d2d00 100644 --- a/Japx/Classes/Core/Japx.swift +++ b/Japx/Classes/Core/Japx.swift @@ -27,6 +27,34 @@ public enum JapxError: Error { case unableToConvertDataToJson(data: Any) } +/// `JapxDecodingOptions` is a set of options affecting the decoding of JSON:API into JSON you requested from `Japx.Decoder`. +public struct JapxDecodingOptions { + + /// Defines if a relationship that doesn't heve related object stored in `included` + /// shoud be parsed as a dictionary of only `type` and `id`. + /// If `false` ti will be parsed as `nil`. + /// + /// Defaults to false. + /// + /// - Tag: parseNotIncludedRelationships + public var parseNotIncludedRelationships: Bool = false + + /// Creates an instance with the specified properties. + /// + /// - parameter parseNotIncludedRelationships: Read more [here]MissingRelationshipObjects-JsonApi + /// + /// - returns: The new `JapxDecodingOptions` instance. + public init(parseNotIncludedRelationships: Bool = false) { + self.parseNotIncludedRelationships = parseNotIncludedRelationships + } +} + +public extension JapxDecodingOptions { + + /// Default JSON:API to JSON decoding options for `Japx.Decoder` + static var `default`: JapxDecodingOptions { .init() } +} + private struct Consts { struct APIKeys { @@ -48,17 +76,6 @@ private struct TypeIdPair { let id: String } -extension TypeIdPair { - - var asDictionary: NSDictionary { - return [ - Consts.APIKeys.type: type, - Consts.APIKeys.id: id - ] - } - -} - /// A class for converting (parsing) JSON:API object to simple JSON object and vice versa. public struct Japx { @@ -79,17 +96,18 @@ public extension Japx.Decoder { /// /// - parameter object: JSON:API object. /// - parameter includeList: The include list for deserializing JSON:API relationships. + /// - parameter options: Options specifying how `Japx.Decoder` should decode JSON:API into JSON. /// /// - returns: JSON object. - static func jsonObject(withJSONAPIObject object: Parameters, includeList: String? = nil, parseMissingRelationships: Bool = false) throws -> Parameters { + static func jsonObject(withJSONAPIObject object: Parameters, includeList: String? = nil, options: JapxDecodingOptions = .default) throws -> Parameters { // First check if JSON API object has `include` list since // parsing objects with include list is done using native // Swift dictionary, while objects without it use `NSDictionary` let decoded: Any if let includeList = includeList { - decoded = try decode(jsonApiInput: object, include: includeList) + decoded = try decode(jsonApiInput: object, include: includeList, options: options) } else { - decoded = try decode(jsonApiInput: object as NSDictionary, parseMissingRelationships: parseMissingRelationships) + decoded = try decode(jsonApiInput: object as NSDictionary, options: options) } if let decodedProperties = decoded as? Parameters { return decodedProperties @@ -101,10 +119,11 @@ public extension Japx.Decoder { /// /// - parameter object: JSON:API object. /// - parameter includeList: The include list for deserializing JSON:API relationships. + /// - parameter options: Options specifying how `Japx.Decoder` should decode JSON:API into JSON. /// /// - returns: JSON object as Data. - static func data(withJSONAPIObject object: Parameters, includeList: String? = nil, parseMissingRelationships: Bool = false) throws -> Data { - let decoded = try jsonObject(withJSONAPIObject: object, includeList: includeList, parseMissingRelationships: parseMissingRelationships) + static func data(withJSONAPIObject object: Parameters, includeList: String? = nil, options: JapxDecodingOptions = .default) throws -> Data { + let decoded = try jsonObject(withJSONAPIObject: object, includeList: includeList, options: options) return try JSONSerialization.data(withJSONObject: decoded) } @@ -112,9 +131,10 @@ public extension Japx.Decoder { /// /// - parameter data: JSON:API object as Data. /// - parameter includeList: The include list for deserializing JSON:API relationships. + /// - parameter options: Options specifying how `Japx.Decoder` should decode JSON:API into JSON. /// /// - returns: JSON object. - static func jsonObject(with data: Data, includeList: String? = nil, parseMissingRelationships: Bool = true) throws -> Parameters { + static func jsonObject(with data: Data, includeList: String? = nil, options: JapxDecodingOptions = .default) throws -> Parameters { let jsonApiObject = try JSONSerialization.jsonObject(with: data) // With include list @@ -122,14 +142,14 @@ public extension Japx.Decoder { guard let json = jsonApiObject as? Parameters else { throw JapxError.unableToConvertDataToJson(data: data) } - return try decode(jsonApiInput: json, include: includeList) + return try decode(jsonApiInput: json, include: includeList, options: options) } // Without include list guard let json = jsonApiObject as? NSDictionary else { throw JapxError.unableToConvertDataToJson(data: data) } - let decoded = try decode(jsonApiInput: json as NSDictionary, parseMissingRelationships: parseMissingRelationships) + let decoded = try decode(jsonApiInput: json as NSDictionary, options: options) if let decodedProperties = decoded as? Parameters { return decodedProperties @@ -141,10 +161,11 @@ public extension Japx.Decoder { /// /// - parameter data: JSON:API object as Data. /// - parameter includeList: The include list for deserializing JSON:API relationships. + /// - parameter options: Options specifying how `Japx.Decoder` should decode JSON:API into JSON. /// /// - returns: JSON object as Data. - static func data(with data: Data, includeList: String? = nil) throws -> Data { - let decoded = try jsonObject(with: data, includeList: includeList) + static func data(with data: Data, includeList: String? = nil, options: JapxDecodingOptions = .default) throws -> Data { + let decoded = try jsonObject(with: data, includeList: includeList, options: options) return try JSONSerialization.data(withJSONObject: decoded) } } @@ -201,7 +222,7 @@ public extension Japx.Encoder { private extension Japx.Decoder { - static func decode(jsonApiInput: Parameters, include: String) throws -> Parameters { + static func decode(jsonApiInput: Parameters, include: String, options: JapxDecodingOptions) throws -> Parameters { let params = include .split(separator: ",") .map { $0.split(separator: ".") } @@ -228,7 +249,7 @@ private extension Japx.Decoder { } let objects = try dataObjectsArray.map { (dataObject) -> Parameters in - return try resolve(object: dataObject, allObjects: allObjects, paramsDict: paramsDict) + return try resolve(object: dataObject, allObjects: allObjects, paramsDict: paramsDict, options: options) } var jsonApi = jsonApiInput @@ -238,7 +259,7 @@ private extension Japx.Decoder { return jsonApi } - static func decode(jsonApiInput: NSDictionary, parseMissingRelationships: Bool) throws -> NSDictionary { + static func decode(jsonApiInput: NSDictionary, options: JapxDecodingOptions) throws -> NSDictionary { let jsonApi = jsonApiInput.mutable let dataObjectsArray = try jsonApi.array(from: Consts.APIKeys.data) ?? [] @@ -260,7 +281,7 @@ private extension Japx.Decoder { } try resolveAttributes(from: objects) - try resolveRelationships(from: objects, parseMissingRelationships: parseMissingRelationships) + try resolveRelationships(from: objects, options: options) let isObject = jsonApiInput.object(forKey: Consts.APIKeys.data) is NSDictionary if isObject && dataObjects.count == 1 { @@ -277,13 +298,20 @@ private extension Japx.Decoder { private extension Japx.Decoder { - static func resolve(object: Parameters, allObjects: [TypeIdPair: Parameters], paramsDict: NSDictionary) throws -> Parameters { + static func resolve(object: Parameters, allObjects: [TypeIdPair: Parameters], paramsDict: NSDictionary, options: JapxDecodingOptions) throws -> Parameters { var attributes = (try? object.dictionary(for: Consts.APIKeys.attributes)) ?? Parameters() attributes[Consts.APIKeys.type] = object[Consts.APIKeys.type] attributes[Consts.APIKeys.id] = object[Consts.APIKeys.id] let relationshipsReferences = object.asDictionary(from: Consts.APIKeys.relationships) ?? Parameters() + //Force cast here is ok since it is taken from include list string + + let extractRelationship = resolveRelationship( + from: allObjects, + parseNotIncludedRelationships: options.parseNotIncludedRelationships + ) + let relationships = try paramsDict.allKeys.map({ $0 as! String }).reduce(into: Parameters(), { (result, relationshipsKey) in guard let relationship = relationshipsReferences.asDictionary(from: relationshipsKey) else { return } guard let otherObjectsData = try relationship.array(from: Consts.APIKeys.data) else { @@ -292,10 +320,13 @@ private extension Japx.Decoder { } let otherObjects = try otherObjectsData .map { try $0.extractTypeIdPair() } - .compactMap { allObjects[$0] } - .map { try resolve(object: $0, - allObjects: allObjects, - paramsDict: try paramsDict.dictionary(for: relationshipsKey)) + .compactMap(extractRelationship) + .map { try resolve( + object: $0, + allObjects: allObjects, + paramsDict: try paramsDict.dictionary(for: relationshipsKey), + options: options + ) } let isObject = relationship[Consts.APIKeys.data].map { $0 is Parameters } ?? false @@ -306,7 +337,21 @@ private extension Japx.Decoder { } }) - return attributes.merging(relationships) { $1 } + if options.parseNotIncludedRelationships { + return try attributes.merging(appendAdditionalReferences(from: relationshipsReferences, to: relationships)) { $1 } + } else { + return attributes.merging(relationships) { $1 } + } + } + + static func appendAdditionalReferences(from relationshipsReferences: Parameters, to relationships: Parameters) throws -> Parameters { + let additionlReferences = try relationshipsReferences.reduce(into: Parameters()) { (result, relationship) in + guard let relationshipParams = relationship.value as? Parameters else { + throw JapxError.relationshipNotFound(data: relationship) + } + result[relationship.key] = relationshipParams[Consts.APIKeys.data] + } + return additionlReferences.merging(relationships) { $1 } } static func resolveAttributes(from objects: [TypeIdPair: NSMutableDictionary]) throws { @@ -317,7 +362,13 @@ private extension Japx.Decoder { } } - static func resolveRelationships(from objects: [TypeIdPair: NSMutableDictionary], parseMissingRelationships: Bool) throws { + static func resolveRelationships(from objects: [TypeIdPair: NSMutableDictionary], options: JapxDecodingOptions) throws { + + let extractRelationship = resolveRelationship( + from: objects, + parseNotIncludedRelationships: options.parseNotIncludedRelationships + ) + try objects.values.forEach { (object) in try object.dictionary(for: Consts.APIKeys.relationships, defaultDict: NSDictionary()).forEach { (relationship) in @@ -331,12 +382,11 @@ private extension Japx.Decoder { object.setObject(NSNull(), forKey: relationship.key as! NSCopying) return } - - let extractRelationship = resloveRelationship(from: objects, parseMissingRelationship: parseMissingRelationships) + // Fetch those object from `objects` let othersObjects = try others .map { try $0.extractTypeIdPair() } - .compactMap { extractRelationship($0) } + .compactMap(extractRelationship) // Store relationships let isObject = relationshipParams @@ -353,17 +403,28 @@ private extension Japx.Decoder { } } - static func resloveRelationship( + // In case that relationship object is not in objects list, then check should + // we fallback to relationship key itself + + static func resolveRelationship( + from objects: [TypeIdPair: Parameters], + parseNotIncludedRelationships: Bool + ) -> ((TypeIdPair) -> Parameters?) { + if parseNotIncludedRelationships { + return { objects[$0] ?? $0.asDictionary } + } else { + return { objects[$0] } + } + } + + static func resolveRelationship( from objects: [TypeIdPair: NSMutableDictionary], - parseMissingRelationship: Bool + parseNotIncludedRelationships: Bool ) -> ((TypeIdPair) -> NSMutableDictionary?) { - // In case that relationship object is not in objects list, then check should - // we fallback to relationship key itself - return { - guard let resolvedObject = objects[$0] else { - return parseMissingRelationship ? $0.asDictionary.mutable : nil - } - return resolvedObject + if parseNotIncludedRelationships { + return { objects[$0] ?? $0.asNSDictionary.mutable } + } else { + return { objects[$0] } } } @@ -430,6 +491,21 @@ extension TypeIdPair: Hashable, Equatable { } } +extension TypeIdPair { + + var asNSDictionary: NSDictionary { + return asDictionary as NSDictionary + } + + var asDictionary: Parameters { + return [ + Consts.APIKeys.type: type, + Consts.APIKeys.id: id + ] + } + +} + private extension Dictionary where Key == String { func containsTypeAndId() -> Bool { diff --git a/Japx/Classes/Moya/JapxMoya.swift b/Japx/Classes/Moya/JapxMoya.swift index c9f4dfa..35a147f 100644 --- a/Japx/Classes/Moya/JapxMoya.swift +++ b/Japx/Classes/Moya/JapxMoya.swift @@ -29,12 +29,13 @@ extension Response { /// Maps data received from the signal into a JSON:API object. /// /// - parameter includeList: The include list for deserializing JSON:API relationships. + /// - parameter options: The options specifying how `Japx.Decoder` should decode JSON:API into JSON. /// - parameter failsOnEmptyData: A boolean value determining whether the mapping should fail if the data is empty. /// /// - returns: JSON:API object. - public func mapJSONAPI(failsOnEmptyData: Bool = true, includeList: String? = nil) throws -> Any { + public func mapJSONAPI(failsOnEmptyData: Bool = true, includeList: String? = nil, options: JapxDecodingOptions = .default) throws -> Any { do { - return try Japx.Decoder.jsonObject(with: data, includeList: includeList) + return try Japx.Decoder.jsonObject(with: data, includeList: includeList, options: options) } catch { if data.count < 1 && !failsOnEmptyData { return NSNull() diff --git a/Japx/Classes/ObjC/JapxObjC.swift b/Japx/Classes/ObjC/JapxObjC.swift index 9214214..5101edc 100644 --- a/Japx/Classes/ObjC/JapxObjC.swift +++ b/Japx/Classes/ObjC/JapxObjC.swift @@ -7,7 +7,27 @@ import Foundation -@objc public class JAPXDecoder: NSObject { +/// Objc bride for `JapxDecodingOptions` +@objc +public class JAPXDecodingOptions: NSObject { + + // MARK: - Private options reference + + fileprivate var options: JapxDecodingOptions = .default + + // MARK: - Propery forwarding + + /// Objc bridge for [`JAPXDecodingOptions.parseNotIncludedRelationships`](x-source-tag://parseNotIncludedRelationships) + @objc + public var parseNotIncludedRelationships: Bool { + get { options.parseNotIncludedRelationships } + set { options.parseNotIncludedRelationships = newValue } + } +} + +@objc +@available(swift, obsoleted: 1.0) +public class JAPXDecoder: NSObject { // MARK: - Lifecycle @@ -21,11 +41,13 @@ import Foundation /// /// - parameter object: JSON:API object. /// - parameter includeList: The include list for deserializing JSON:API relationships. + /// - parameter options: The options specifying how `JAPXDecoder` should decode JSON:API into JSON. /// /// - returns: JSON object. - @objc public static func jsonObject(withJSONAPIObject object: Parameters, includeList: String? = nil) throws -> Parameters { + @objc + public static func jsonObject(withJSONAPIObject object: Parameters, includeList: String?, options: JAPXDecodingOptions) throws -> Parameters { do { - return try Japx.Decoder.jsonObject(withJSONAPIObject: object, includeList: includeList) + return try Japx.Decoder.jsonObject(withJSONAPIObject: object, includeList: includeList, options: options.options) } catch { throw NSError(error: error) } @@ -35,11 +57,13 @@ import Foundation /// /// - parameter object: JSON:API object. /// - parameter includeList: The include list for deserializing JSON:API relationships. + /// - parameter options: The options specifying how `JAPXDecoder` should decode JSON:API into JSON. /// /// - returns: JSON object as Data. - @objc public static func data(withJSONAPIObject object: Parameters, includeList: String? = nil) throws -> Data { + @objc + public static func data(withJSONAPIObject object: Parameters, includeList: String?, options: JAPXDecodingOptions) throws -> Data { do { - return try Japx.Decoder.data(withJSONAPIObject: object, includeList: includeList) + return try Japx.Decoder.data(withJSONAPIObject: object, includeList: includeList, options: options.options) } catch { throw NSError(error: error) } @@ -49,11 +73,13 @@ import Foundation /// /// - parameter data: JSON:API object as Data. /// - parameter includeList: The include list for deserializing JSON:API relationships. + /// - parameter options: The options specifying how `JAPXDecoder` should decode JSON:API into JSON. /// /// - returns: JSON object. - @objc public static func jsonObject(withData data: Data, includeList: String? = nil) throws -> Parameters { + @objc + public static func jsonObject(withData data: Data, includeList: String?, options: JAPXDecodingOptions) throws -> Parameters { do { - return try Japx.Decoder.jsonObject(with: data, includeList: includeList) + return try Japx.Decoder.jsonObject(with: data, includeList: includeList, options: options.options) } catch { throw NSError(error: error) } @@ -63,11 +89,13 @@ import Foundation /// /// - parameter data: JSON:API object as Data. /// - parameter includeList: The include list for deserializing JSON:API relationships. + /// - parameter options: The options specifying how `JAPXDecoder` should decode JSON:API into JSON. /// /// - returns: JSON object as Data. - @objc public static func data(withData data: Data, includeList: String? = nil) throws -> Data { + @objc + public static func data(withData data: Data, includeList: String?, options: JAPXDecodingOptions) throws -> Data { do { - return try Japx.Decoder.data(with: data, includeList: includeList) + return try Japx.Decoder.data(with: data, includeList: includeList, options: options.options) } catch { throw NSError(error: error) } @@ -77,7 +105,9 @@ import Foundation // MARK: - Encoder /// Defines a list of methods for converting simple JSON objects to JSON:API object. -@objc public class JAPXEncoder: NSObject { +@objc +@available(swift, obsoleted: 1.0) +public class JAPXEncoder: NSObject { // MARK: - Lifecycle @@ -93,7 +123,8 @@ import Foundation /// - parameter additionalParams: Additional [String: Any] to add with `data` to JSON:API object. /// /// - returns: JSON:API object. - @objc public static func encode(data: Data, additionalParams: Parameters? = nil) throws -> Parameters { + @objc + public static func encode(data: Data, additionalParams: Parameters?) throws -> Parameters { do { return try Japx.Encoder.encode(data: data, additionalParams: additionalParams) } catch { @@ -107,7 +138,8 @@ import Foundation /// - parameter additionalParams: Additional [String: Any] to add with `data` to JSON:API object. /// /// - returns: JSON:API object. - @objc public static func encode(jsonParameter: Parameters, additionalParams: Parameters? = nil) throws -> Parameters { + @objc + public static func encode(jsonParameter: Parameters, additionalParams: Parameters?) throws -> Parameters { do { return try Japx.Encoder.encode(json: jsonParameter, additionalParams: additionalParams) } catch { @@ -121,7 +153,8 @@ import Foundation /// - parameter additionalParams: Additional [String: Any] to add with `data` to JSON:API object. /// /// - returns: JSON:API object. - @objc public static func encode(jsonParameters: [Parameters], additionalParams: Parameters? = nil) throws -> Parameters { + @objc + public static func encode(jsonParameters: [Parameters], additionalParams: Parameters?) throws -> Parameters { do { return try Japx.Encoder.encode(json: jsonParameters, additionalParams: additionalParams) } catch { diff --git a/Japx/Classes/RxAlamofire/JapxRxAlamofire.swift b/Japx/Classes/RxAlamofire/JapxRxAlamofire.swift index e33db5d..72e3eaf 100644 --- a/Japx/Classes/RxAlamofire/JapxRxAlamofire.swift +++ b/Japx/Classes/RxAlamofire/JapxRxAlamofire.swift @@ -21,12 +21,13 @@ extension Reactive where Base: DataRequest { /// /// - parameter queue: The queue on which the completion handler is dispatched. /// - parameter includeList: The include list for deserializing JSON:API relationships. + /// - parameter options: The options specifying how `Japx.Decoder` should decode JSON:API into JSON. /// /// - returns: `Single` of parsed JSON:API object. - public func responseJSONAPI(queue: DispatchQueue? = nil, includeList: String? = nil) -> Single { + public func responseJSONAPI(queue: DispatchQueue? = nil, includeList: String? = nil, options: JapxDecodingOptions = .default) -> Single { return Single.create { [weak base] (single) -> Disposable in - let request = base?.responseJSONAPI(queue: queue, includeList: includeList) { (response) in + let request = base?.responseJSONAPI(queue: queue, includeList: includeList, options: options) { (response) in switch response.result { case .success(let value): single(.success(value)) case .failure(let error): single(.error(error)) @@ -43,12 +44,13 @@ extension Reactive where Base: DownloadRequest { /// /// - parameter queue: The queue on which the completion handler is dispatched. /// - parameter includeList: The include list for deserializing JSON:API relationships. + /// - parameter options: The options specifying how `Japx.Decoder` should decode JSON:API into JSON. /// /// - returns: `Single` of parsed JSON:API object. - public func responseJSONAPI(queue: DispatchQueue? = nil, includeList: String? = nil) -> Single { + public func responseJSONAPI(queue: DispatchQueue? = nil, includeList: String? = nil, options: JapxDecodingOptions = .default) -> Single { return Single.create { [weak base] (single) -> Disposable in - let request = base?.responseJSONAPI(queue: queue, includeList: includeList) { (response) in + let request = base?.responseJSONAPI(queue: queue, includeList: includeList, options: options) { (response) in switch response.result { case .success(let value): single(.success(value)) case .failure(let error): single(.error(error)) diff --git a/Japx/Classes/RxMoya/JapxRxMoya.swift b/Japx/Classes/RxMoya/JapxRxMoya.swift index b810c2c..ba73430 100644 --- a/Japx/Classes/RxMoya/JapxRxMoya.swift +++ b/Japx/Classes/RxMoya/JapxRxMoya.swift @@ -15,10 +15,11 @@ extension ObservableType where E == Response { /// /// - parameter failsOnEmptyData: A boolean value determining whether the mapping should fail if the data is empty. /// - parameter includeList: The include list for deserializing JSON:API relationships. + /// - parameter options: The options specifying how `Japx.Decoder` should decode JSON:API into JSON. /// /// /// - returns: `Observable` of JSON:API object. - public func mapJSONAPI(failsOnEmptyData: Bool = true, includeList: String? = nil) -> Observable { + public func mapJSONAPI(failsOnEmptyData: Bool = true, includeList: String? = nil, options: JapxDecodingOptions = .default) -> Observable { return map { try $0.mapJSONAPI(failsOnEmptyData: failsOnEmptyData, includeList: includeList) } } } @@ -29,10 +30,11 @@ extension PrimitiveSequence where TraitType == SingleTrait, ElementType == Respo /// /// - parameter failsOnEmptyData: A boolean value determining whether the mapping should fail if the data is empty. /// - parameter includeList: The include list for deserializing JSON:API relationships. + /// - parameter options: The options specifying how `Japx.Decoder` should decode JSON:API into JSON. /// /// /// - returns: `Single` of JSON:API object. - public func mapJSONAPI(failsOnEmptyData: Bool = true, includeList: String? = nil) -> Single { + public func mapJSONAPI(failsOnEmptyData: Bool = true, includeList: String? = nil, options: JapxDecodingOptions = .default) -> Single { return map { try $0.mapJSONAPI(failsOnEmptyData: failsOnEmptyData, includeList: includeList) } } } From 6725368fce09b6d1fb7577bff92aad1d47a9e492 Mon Sep 17 00:00:00 2001 From: Vlaho Date: Thu, 14 Nov 2019 15:17:01 +0100 Subject: [PATCH 04/13] Meta in encoding solving issue #27 --- Japx/Classes/Codable/JapxCodable.swift | 13 +++-- Japx/Classes/Core/Japx.swift | 77 ++++++++++++++++++++++---- 2 files changed, 75 insertions(+), 15 deletions(-) diff --git a/Japx/Classes/Codable/JapxCodable.swift b/Japx/Classes/Codable/JapxCodable.swift index 5d99b89..fb8a4ac 100644 --- a/Japx/Classes/Codable/JapxCodable.swift +++ b/Japx/Classes/Codable/JapxCodable.swift @@ -26,19 +26,24 @@ public final class JapxEncoder { // Underlying JSONEncoder, can be used to add date formats, ... public let jsonEncoder: JSONEncoder + /// Options specifying how `Japx.Encoder` should encode JSON into JSON:API. + public let options: JapxEncodingOptions + /// Initializes `self` with underlying `JSONEncoder` instance - public init(jsonEncoder: JSONEncoder = JSONEncoder()) { + public init(jsonEncoder: JSONEncoder = JSONEncoder(), options: JapxEncodingOptions = .default) { self.jsonEncoder = jsonEncoder + self.options = options } /// Encodes the given top-level value and returns its JSON:API representation. /// /// - parameter value: The value to encode. + /// - parameter additionalParams: Additional [String: Any] to add with `data` to JSON:API object. /// - returns: A new `[String: Any]` value containing the encoded JSON:API data. /// - throws: An error if any value throws an error during encoding. - public func encode(_ value: T) throws -> Parameters where T : Encodable { + public func encode(_ value: T, additionalParams: Parameters? = nil) throws -> Parameters where T : Encodable { let data = try jsonEncoder.encode(value) - return try Japx.Encoder.encode(data: data) + return try Japx.Encoder.encode(data: data, additionalParams: additionalParams, options: options) } } @@ -51,7 +56,7 @@ public final class JapxDecoder { /// Options specifying how `Japx.Decoder` should decode JSON:API into JSON. public let options: JapxDecodingOptions - /// Initializes `self` with underlying `JSONDecoder` instance + /// Initializes `self` with underlying `JSONDecoder` instance and `JapxDecodingOptions` public init(jsonDecoder: JSONDecoder = JSONDecoder(), options: JapxDecodingOptions = .default) { self.jsonDecoder = jsonDecoder self.options = options diff --git a/Japx/Classes/Core/Japx.swift b/Japx/Classes/Core/Japx.swift index b4d2d00..bc7a0b4 100644 --- a/Japx/Classes/Core/Japx.swift +++ b/Japx/Classes/Core/Japx.swift @@ -41,7 +41,7 @@ public struct JapxDecodingOptions { /// Creates an instance with the specified properties. /// - /// - parameter parseNotIncludedRelationships: Read more [here]MissingRelationshipObjects-JsonApi + /// - parameter parseNotIncludedRelationships: Read more [here](parseNotIncludedRelationships) /// /// - returns: The new `JapxDecodingOptions` instance. public init(parseNotIncludedRelationships: Bool = false) { @@ -55,6 +55,35 @@ public extension JapxDecodingOptions { static var `default`: JapxDecodingOptions { .init() } } +/// `JapxEncodingOptions` is a set of options affecting the encoding of JSON into JSON:API you requested from `Japx.Encoder`. +public struct JapxEncodingOptions { + + /// Common namespace inclued all attribute names, relationship names, `type` and `id`. + /// If enabled it will include keyword `meta` into common namepace, expecit the not to + /// have `mata` as an attribute or renationship name. + /// It will then encode meta on the same level as `attributes` and `relationships` + /// + /// Defaults to false. + /// + /// - Tag: includeMetaToCommonNamespce + public var includeMetaToCommonNamespce: Bool = false + + /// Creates an instance with the specified properties. + /// + /// - parameter includeMetaToCommonNamespce: Read more [here](includeMetaToCommonNamespce) + /// + /// - returns: The new `JapxDecodingOptions` instance. + public init(includeMetaToCommonNamespce: Bool = false) { + self.includeMetaToCommonNamespce = includeMetaToCommonNamespce + } +} + +public extension JapxEncodingOptions { + + /// Default JSON to JSON:API decoding options for `Japx.Encoder` + static var `default`: JapxEncodingOptions { .init() } +} + private struct Consts { struct APIKeys { @@ -64,6 +93,7 @@ private struct Consts { static let included = "included" static let relationships = "relationships" static let attributes = "attributes" + static let meta = "meta" } struct General { @@ -178,15 +208,16 @@ public extension Japx.Encoder { /// /// - parameter data: JSON object as Data. /// - parameter additionalParams: Additional [String: Any] to add with `data` to JSON:API object. + /// - parameter options: Options specifying how `Japx.Encoder` should encode JSON into JSON:API. /// /// - returns: JSON:API object. - static func encode(data: Data, additionalParams: Parameters? = nil) throws -> Parameters { + static func encode(data: Data, additionalParams: Parameters? = nil, options: JapxEncodingOptions = .default) throws -> Parameters { let json = try JSONSerialization.jsonObject(with: data) if let jsonObject = json as? Parameters { - return try encode(json: jsonObject, additionalParams: additionalParams) + return try encode(json: jsonObject, additionalParams: additionalParams, options: options) } if let jsonArray = json as? [Parameters] { - return try encode(json: jsonArray, additionalParams: additionalParams) + return try encode(json: jsonArray, additionalParams: additionalParams, options: options) } throw JapxError.unableToConvertDataToJson(data: json) } @@ -195,11 +226,12 @@ public extension Japx.Encoder { /// /// - parameter json: JSON object. /// - parameter additionalParams: Additional [String: Any] to add with `data` to JSON:API object. + /// - parameter options: Options specifying how `Japx.Encoder` should encode JSON into JSON:API. /// /// - returns: JSON:API object. - static func encode(json: Parameters, additionalParams: Parameters? = nil) throws -> Parameters { + static func encode(json: Parameters, additionalParams: Parameters? = nil, options: JapxEncodingOptions = .default) throws -> Parameters { var params = additionalParams ?? [:] - params[Consts.APIKeys.data] = try encodeAttributesAndRelationships(on: json) + params[Consts.APIKeys.data] = try encodeAttributesAndRelationships(on: json, options: options) return params } @@ -207,11 +239,12 @@ public extension Japx.Encoder { /// /// - parameter json: JSON objects represented as Array. /// - parameter additionalParams: Additional [String: Any] to add with `data` to JSON:API object. + /// - parameter options: Options specifying how `Japx.Encoder` should encode JSON into JSON:API. /// /// - returns: JSON:API object. - static func encode(json: [Parameters], additionalParams: Parameters? = nil) throws -> Parameters { + static func encode(json: [Parameters], additionalParams: Parameters? = nil, options: JapxEncodingOptions = .default) throws -> Parameters { var params = additionalParams ?? [:] - params[Consts.APIKeys.data] = try json.compactMap { try encodeAttributesAndRelationships(on: $0) as AnyObject } + params[Consts.APIKeys.data] = try json.compactMap { try encodeAttributesAndRelationships(on: $0, options: options) as AnyObject } return params } } @@ -434,13 +467,22 @@ private extension Japx.Decoder { private extension Japx.Encoder { - static func encodeAttributesAndRelationships(on jsonObject: Parameters) throws -> Parameters { + static func encodeAttributesAndRelationships(on jsonObject: Parameters, options: JapxEncodingOptions) throws -> Parameters { var object = jsonObject var attributes = Parameters() var relationships = Parameters() let objectKeys = object.keys + let relationshipExtractor = extractRelationshipData( + includeMetaToCommonNamespce: options.includeMetaToCommonNamespce + ) + for key in objectKeys where key != Consts.APIKeys.type && key != Consts.APIKeys.id { + + if options.includeMetaToCommonNamespce && key == Consts.APIKeys.meta { + continue + } + if let array = object.asArray(from: key) { let isArrayOfRelationships = array.first?.containsTypeAndId() ?? false if !isArrayOfRelationships { @@ -449,7 +491,7 @@ private extension Japx.Encoder { object.removeValue(forKey: key) continue } - let dataArray = try array.map { try $0.asDataWithTypeAndId() } + let dataArray = try array.map(relationshipExtractor) // Handle relationships array relationships[key] = [Consts.APIKeys.data: dataArray] object.removeValue(forKey: key) @@ -462,7 +504,7 @@ private extension Japx.Encoder { object.removeValue(forKey: key) continue } - let dataObj = try obj.asDataWithTypeAndId() + let dataObj = try relationshipExtractor(obj) // Handle relationship object relationships[key] = [Consts.APIKeys.data: dataObj] object.removeValue(forKey: key) @@ -475,6 +517,19 @@ private extension Japx.Encoder { object[Consts.APIKeys.relationships] = relationships return object } + + static func extractRelationshipData(includeMetaToCommonNamespce: Bool) -> (Parameters) throws -> (Any) { + if !includeMetaToCommonNamespce { + return { try $0.asDataWithTypeAndId() } + } + return { object in + var params = try object.asDataWithTypeAndId() + if let meta = object[Consts.APIKeys.meta] { + params[Consts.APIKeys.meta] = meta + } + return params + } + } } // MARK: - General helper extensions - From 9e061bf9ecc2f1a43ea2769c41b1c92eb0ed8701 Mon Sep 17 00:00:00 2001 From: Vlaho Date: Thu, 14 Nov 2019 15:36:17 +0100 Subject: [PATCH 05/13] Tests --- Example/Japx.xcodeproj/project.pbxproj | 20 +++++++++ .../MetaParams/Meta-Added-JsonApi.json | 43 +++++++++++++++++++ .../Encoding/MetaParams/Meta-Json.json | 26 +++++++++++ .../MetaParams/Meta-NotAdded-JsonApi.json | 33 ++++++++++++++ Example/Tests/Swift/EncoderTester.swift | 18 ++++++++ 5 files changed, 140 insertions(+) create mode 100644 Example/Tests/Resources/Encoding/MetaParams/Meta-Added-JsonApi.json create mode 100644 Example/Tests/Resources/Encoding/MetaParams/Meta-Json.json create mode 100644 Example/Tests/Resources/Encoding/MetaParams/Meta-NotAdded-JsonApi.json diff --git a/Example/Japx.xcodeproj/project.pbxproj b/Example/Japx.xcodeproj/project.pbxproj index 68d9842..9492792 100644 --- a/Example/Japx.xcodeproj/project.pbxproj +++ b/Example/Japx.xcodeproj/project.pbxproj @@ -48,6 +48,9 @@ E18795132018D76300E472C4 /* SimpleEncoding-Json.json in Resources */ = {isa = PBXBuildFile; fileRef = E187950C2018D76300E472C4 /* SimpleEncoding-Json.json */; }; E18795142018D76300E472C4 /* ExtraParams-Json.json in Resources */ = {isa = PBXBuildFile; fileRef = E187950E2018D76300E472C4 /* ExtraParams-Json.json */; }; E18795152018D76300E472C4 /* ExtraParams-JsonApi.json in Resources */ = {isa = PBXBuildFile; fileRef = E187950F2018D76300E472C4 /* ExtraParams-JsonApi.json */; }; + E1F83D0D237D9A8C009F91CA /* Meta-NotAdded-JsonApi.json in Resources */ = {isa = PBXBuildFile; fileRef = E1F83D0A237D9A8B009F91CA /* Meta-NotAdded-JsonApi.json */; }; + E1F83D0E237D9A8C009F91CA /* Meta-Added-JsonApi.json in Resources */ = {isa = PBXBuildFile; fileRef = E1F83D0B237D9A8C009F91CA /* Meta-Added-JsonApi.json */; }; + E1F83D0F237D9A8C009F91CA /* Meta-Json.json in Resources */ = {isa = PBXBuildFile; fileRef = E1F83D0C237D9A8C009F91CA /* Meta-Json.json */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -120,6 +123,9 @@ E187950C2018D76300E472C4 /* SimpleEncoding-Json.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = "SimpleEncoding-Json.json"; sourceTree = ""; }; E187950E2018D76300E472C4 /* ExtraParams-Json.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = "ExtraParams-Json.json"; sourceTree = ""; }; E187950F2018D76300E472C4 /* ExtraParams-JsonApi.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = "ExtraParams-JsonApi.json"; sourceTree = ""; }; + E1F83D0A237D9A8B009F91CA /* Meta-NotAdded-JsonApi.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = "Meta-NotAdded-JsonApi.json"; sourceTree = ""; }; + E1F83D0B237D9A8C009F91CA /* Meta-Added-JsonApi.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = "Meta-Added-JsonApi.json"; sourceTree = ""; }; + E1F83D0C237D9A8C009F91CA /* Meta-Json.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = "Meta-Json.json"; sourceTree = ""; }; E817D346E8E2BDDF0DC5F3F3 /* Pods_Japx_Tests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Japx_Tests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ @@ -325,6 +331,7 @@ E18794EE2018ABA000E472C4 /* Encoding */ = { isa = PBXGroup; children = ( + E1F83D09237D99A9009F91CA /* MetaParams */, E187950D2018D76300E472C4 /* ExtraParams */, E18795072018D76300E472C4 /* RecursivRelationships */, E187950A2018D76300E472C4 /* SimpleEncoding */, @@ -409,6 +416,16 @@ path = ExtraParams; sourceTree = ""; }; + E1F83D09237D99A9009F91CA /* MetaParams */ = { + isa = PBXGroup; + children = ( + E1F83D0C237D9A8C009F91CA /* Meta-Json.json */, + E1F83D0B237D9A8C009F91CA /* Meta-Added-JsonApi.json */, + E1F83D0A237D9A8B009F91CA /* Meta-NotAdded-JsonApi.json */, + ); + path = MetaParams; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -502,6 +519,7 @@ E18794FB2018AEC900E472C4 /* RecursivSample-Json.json in Resources */, 2C5FA429202CA35D00399CC7 /* Images.xcassets in Resources */, 0A4CEF7721FF560400D3F0B8 /* RelationshipNoInclude-JsonApi.json in Resources */, + E1F83D0D237D9A8C009F91CA /* Meta-NotAdded-JsonApi.json in Resources */, E18794FC2018AEC900E472C4 /* RecursivSample-JsonApi.json in Resources */, 0A57D7FD231119AC0009FBEB /* MissingRelationshipObjectNull-Json.json in Resources */, E18795042018CA7100E472C4 /* MissingRelationship-JsonApi.json in Resources */, @@ -510,6 +528,8 @@ E18794F32018ABA000E472C4 /* ArticlePerson-Json.json in Resources */, 2C5FA42C202CA39500399CC7 /* Main.storyboard in Resources */, E18795132018D76300E472C4 /* SimpleEncoding-Json.json in Resources */, + E1F83D0E237D9A8C009F91CA /* Meta-Added-JsonApi.json in Resources */, + E1F83D0F237D9A8C009F91CA /* Meta-Json.json in Resources */, E18795102018D76300E472C4 /* RecursivRelationships-Json.json in Resources */, 0A6C2FF121FB3BD000D16186 /* EmptyRelationship-Json.json in Resources */, 0A57D7FF231119C10009FBEB /* MissingRelationshipObjectsEmpty-Json.json in Resources */, diff --git a/Example/Tests/Resources/Encoding/MetaParams/Meta-Added-JsonApi.json b/Example/Tests/Resources/Encoding/MetaParams/Meta-Added-JsonApi.json new file mode 100644 index 0000000..b810d17 --- /dev/null +++ b/Example/Tests/Resources/Encoding/MetaParams/Meta-Added-JsonApi.json @@ -0,0 +1,43 @@ +{ + "data": { + "id": "33", + "type": "time_off_request", + "attributes": { + "status": "approved", + "start_date": "2019-01-14", + "end_date": "2019-01-31" + }, + "relationships": { + "user": { + "data": { + "id": "25", + "type": "user", + "meta": { + "meta_user": "meta1", + "meta_user2": "meta2" + } + } + }, + "policy": { + "data": [ + { + "id": "24", + "type": "time_off_policy", + "meta": "TOP24" + + }, + { + "id": "25", + "type": "time_off_policy", + "meta": "TOP25" + + } + ] + } + }, + "meta": [ + { "page": 24 }, + { "offset": 24 } + ] + } +} diff --git a/Example/Tests/Resources/Encoding/MetaParams/Meta-Json.json b/Example/Tests/Resources/Encoding/MetaParams/Meta-Json.json new file mode 100644 index 0000000..a4f8c2e --- /dev/null +++ b/Example/Tests/Resources/Encoding/MetaParams/Meta-Json.json @@ -0,0 +1,26 @@ +{ + "id" : "33", + "type" : "time_off_request", + "status" : "approved", + "start_date" : "2019-01-14", + "end_date" : "2019-01-31", + "policy" : [ + { "id": "24", "type": "time_off_policy", "meta": "TOP24" }, + { "id": "25", "type": "time_off_policy", "meta": "TOP25" } + ], + "user" : { + "id" : "25", + "type" : "user", + "avatar" : "", + "email" : "user@email.com", + "name" : "user name", + "meta": { + "meta_user": "meta1", + "meta_user2": "meta2" + } + }, + "meta": [ + { "page": 24 }, + { "offset": 24 } + ] +} diff --git a/Example/Tests/Resources/Encoding/MetaParams/Meta-NotAdded-JsonApi.json b/Example/Tests/Resources/Encoding/MetaParams/Meta-NotAdded-JsonApi.json new file mode 100644 index 0000000..5873b83 --- /dev/null +++ b/Example/Tests/Resources/Encoding/MetaParams/Meta-NotAdded-JsonApi.json @@ -0,0 +1,33 @@ +{ + "data": { + "id": "33", + "type": "time_off_request", + "attributes": { + "status": "approved", + "start_date": "2019-01-14", + "end_date": "2019-01-31" + }, + "relationships": { + "user": { + "data": { + "id": "25", + "type": "user" + } + }, + "policy": { + "data": [ + { + "id": "24", + "type": "time_off_policy" + + }, + { + "id": "25", + "type": "time_off_policy" + + } + ] + } + } + } +} diff --git a/Example/Tests/Swift/EncoderTester.swift b/Example/Tests/Swift/EncoderTester.swift index 541119b..a6cf80f 100644 --- a/Example/Tests/Swift/EncoderTester.swift +++ b/Example/Tests/Swift/EncoderTester.swift @@ -38,5 +38,23 @@ class EncoderTesterSpec: QuickSpec { expect(correctlyParsed) == true } } + + describe("Testing inclusion of meta") { + + it("Transforms json to json:api with while including meta") { + let correctlyParsed = AdditionalFunctions.does(jsonFromFileNamed: "Meta-Json", containsEverethingFrom: "Meta-Added-JsonApi") { + return try! Japx.Encoder.encode(data: $0, options: .init(includeMetaToCommonNamespce: true)) + } + expect(correctlyParsed) == true + } + + it("Transforms json to json:api while not including meta") { + let correctlyParsed = AdditionalFunctions.does(jsonFromFileNamed: "Meta-Json", containsEverethingFrom: "Meta-NotAdded-JsonApi") { + return try! Japx.Encoder.encode(data: $0) + } + expect(correctlyParsed) == true + } + + } } } From 563c6c71f709c3a544d4e3b7f86eecb13f6ad2c7 Mon Sep 17 00:00:00 2001 From: Vlaho Date: Thu, 14 Nov 2019 15:42:53 +0100 Subject: [PATCH 06/13] Update encoding test --- .../Encoding/MetaParams/Meta-NotAdded-JsonApi.json | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/Example/Tests/Resources/Encoding/MetaParams/Meta-NotAdded-JsonApi.json b/Example/Tests/Resources/Encoding/MetaParams/Meta-NotAdded-JsonApi.json index 5873b83..37cbff6 100644 --- a/Example/Tests/Resources/Encoding/MetaParams/Meta-NotAdded-JsonApi.json +++ b/Example/Tests/Resources/Encoding/MetaParams/Meta-NotAdded-JsonApi.json @@ -5,7 +5,11 @@ "attributes": { "status": "approved", "start_date": "2019-01-14", - "end_date": "2019-01-31" + "end_date": "2019-01-31", + "meta": [ + { "page": 24 }, + { "offset": 24 } + ] }, "relationships": { "user": { From eed6996a3315bd3f9211cd3a3ee01607d64f7acb Mon Sep 17 00:00:00 2001 From: Vlaho Date: Fri, 15 Nov 2019 10:36:50 +0100 Subject: [PATCH 07/13] PR naming fixes --- Example/Japx/Base.lproj/Main.storyboard | 81 +++++++++---------------- Japx.podspec | 2 +- Japx/Classes/Core/Japx.swift | 9 ++- Japx/Classes/ObjC/JapxObjC.swift | 18 ++---- 4 files changed, 40 insertions(+), 70 deletions(-) diff --git a/Example/Japx/Base.lproj/Main.storyboard b/Example/Japx/Base.lproj/Main.storyboard index eb59872..01dfabe 100644 --- a/Example/Japx/Base.lproj/Main.storyboard +++ b/Example/Japx/Base.lproj/Main.storyboard @@ -1,11 +1,12 @@ - + - + + @@ -194,56 +195,34 @@ - { - "data": [ - { - "id": "33", - "type": "time_off_request", - "attributes": { - "status": "approved", - "start_date": "2019-01-14", - "end_date": "2019-01-31" - }, - "relationships": { - "user": { - "data": { - "id": "25", - "type": "user" - } - }, - "policy": { - "data": [{ - "id": "24", - "type": "time_off_policy" - }, { - "id": "25", - "type": "time_off_policy" - }] - } - } - } - ], - "included": [ - { - "id": "25", - "type": "user", - "attributes": { - "id": 20550, - "name": "user name", - "email": "user@email.com", - "avatar": "", - "avatar_url": null - } - } - ], - "meta": { - "total_pages": 1, - "total_count": 1 + { + "data": [{ + "type": "articles", + "id": "1", + "attributes": { + "title": "JSON API paints my bikeshed!", + "body": "The shortest article. Ever.", + "created": "2015-05-22T14:56:29.000Z", + "updated": "2015-05-22T14:56:28.000Z" }, - "links": { - "self": "url link" + "relationships": { + "author": { + "data": {"id": "42", "type": "people"} + } + } + }], + "included": [ + { + "type": "people", + "id": "42", + "attributes": { + "name": "John", + "age": 80, + "gender": "male" + } } -} + ] +} @@ -286,6 +265,6 @@ - + diff --git a/Japx.podspec b/Japx.podspec index 545b7c0..f7c8741 100644 --- a/Japx.podspec +++ b/Japx.podspec @@ -24,7 +24,7 @@ It works by transfering Dictionary to Dictionary, so you can use Codable, Unbox, s.platform = :ios, :osx s.ios.deployment_target = '9.0' s.osx.deployment_target = '10.10' - s.swift_version = '5.1' + s.swift_version = '5.0' s.default_subspec = 'Core' diff --git a/Japx/Classes/Core/Japx.swift b/Japx/Classes/Core/Japx.swift index bc7a0b4..b8832e3 100644 --- a/Japx/Classes/Core/Japx.swift +++ b/Japx/Classes/Core/Japx.swift @@ -27,12 +27,12 @@ public enum JapxError: Error { case unableToConvertDataToJson(data: Any) } -/// `JapxDecodingOptions` is a set of options affecting the decoding of JSON:API into JSON you requested from `Japx.Decoder`. +/// `JapxDecodingOptions` is a set of options affecting the decoding of JSON:API into JSON you request from `Japx.Decoder`. public struct JapxDecodingOptions { /// Defines if a relationship that doesn't heve related object stored in `included` /// shoud be parsed as a dictionary of only `type` and `id`. - /// If `false` ti will be parsed as `nil`. + /// If `false` it will be parsed as `nil`. /// /// Defaults to false. /// @@ -58,7 +58,7 @@ public extension JapxDecodingOptions { /// `JapxEncodingOptions` is a set of options affecting the encoding of JSON into JSON:API you requested from `Japx.Encoder`. public struct JapxEncodingOptions { - /// Common namespace inclued all attribute names, relationship names, `type` and `id`. + /// Common namespace includes all attribute names, relationship names, `type` and `id`. /// If enabled it will include keyword `meta` into common namepace, expecit the not to /// have `mata` as an attribute or renationship name. /// It will then encode meta on the same level as `attributes` and `relationships` @@ -338,13 +338,13 @@ private extension Japx.Decoder { let relationshipsReferences = object.asDictionary(from: Consts.APIKeys.relationships) ?? Parameters() - //Force cast here is ok since it is taken from include list string let extractRelationship = resolveRelationship( from: allObjects, parseNotIncludedRelationships: options.parseNotIncludedRelationships ) + //Force cast here is ok since it is taken from include list string let relationships = try paramsDict.allKeys.map({ $0 as! String }).reduce(into: Parameters(), { (result, relationshipsKey) in guard let relationship = relationshipsReferences.asDictionary(from: relationshipsKey) else { return } guard let otherObjectsData = try relationship.array(from: Consts.APIKeys.data) else { @@ -438,7 +438,6 @@ private extension Japx.Decoder { // In case that relationship object is not in objects list, then check should // we fallback to relationship key itself - static func resolveRelationship( from objects: [TypeIdPair: Parameters], parseNotIncludedRelationships: Bool diff --git a/Japx/Classes/ObjC/JapxObjC.swift b/Japx/Classes/ObjC/JapxObjC.swift index 5101edc..2eef583 100644 --- a/Japx/Classes/ObjC/JapxObjC.swift +++ b/Japx/Classes/ObjC/JapxObjC.swift @@ -7,8 +7,8 @@ import Foundation -/// Objc bride for `JapxDecodingOptions` -@objc +/// ObjC bride for `JapxDecodingOptions` +@objcMembers public class JAPXDecodingOptions: NSObject { // MARK: - Private options reference @@ -17,15 +17,14 @@ public class JAPXDecodingOptions: NSObject { // MARK: - Propery forwarding - /// Objc bridge for [`JAPXDecodingOptions.parseNotIncludedRelationships`](x-source-tag://parseNotIncludedRelationships) - @objc + /// ObjC bridge for [`JAPXDecodingOptions.parseNotIncludedRelationships`](x-source-tag://parseNotIncludedRelationships) public var parseNotIncludedRelationships: Bool { get { options.parseNotIncludedRelationships } set { options.parseNotIncludedRelationships = newValue } } } -@objc +@objcMembers @available(swift, obsoleted: 1.0) public class JAPXDecoder: NSObject { @@ -44,7 +43,6 @@ public class JAPXDecoder: NSObject { /// - parameter options: The options specifying how `JAPXDecoder` should decode JSON:API into JSON. /// /// - returns: JSON object. - @objc public static func jsonObject(withJSONAPIObject object: Parameters, includeList: String?, options: JAPXDecodingOptions) throws -> Parameters { do { return try Japx.Decoder.jsonObject(withJSONAPIObject: object, includeList: includeList, options: options.options) @@ -60,7 +58,6 @@ public class JAPXDecoder: NSObject { /// - parameter options: The options specifying how `JAPXDecoder` should decode JSON:API into JSON. /// /// - returns: JSON object as Data. - @objc public static func data(withJSONAPIObject object: Parameters, includeList: String?, options: JAPXDecodingOptions) throws -> Data { do { return try Japx.Decoder.data(withJSONAPIObject: object, includeList: includeList, options: options.options) @@ -76,7 +73,6 @@ public class JAPXDecoder: NSObject { /// - parameter options: The options specifying how `JAPXDecoder` should decode JSON:API into JSON. /// /// - returns: JSON object. - @objc public static func jsonObject(withData data: Data, includeList: String?, options: JAPXDecodingOptions) throws -> Parameters { do { return try Japx.Decoder.jsonObject(with: data, includeList: includeList, options: options.options) @@ -92,7 +88,6 @@ public class JAPXDecoder: NSObject { /// - parameter options: The options specifying how `JAPXDecoder` should decode JSON:API into JSON. /// /// - returns: JSON object as Data. - @objc public static func data(withData data: Data, includeList: String?, options: JAPXDecodingOptions) throws -> Data { do { return try Japx.Decoder.data(with: data, includeList: includeList, options: options.options) @@ -105,7 +100,7 @@ public class JAPXDecoder: NSObject { // MARK: - Encoder /// Defines a list of methods for converting simple JSON objects to JSON:API object. -@objc +@objcMembers @available(swift, obsoleted: 1.0) public class JAPXEncoder: NSObject { @@ -123,7 +118,6 @@ public class JAPXEncoder: NSObject { /// - parameter additionalParams: Additional [String: Any] to add with `data` to JSON:API object. /// /// - returns: JSON:API object. - @objc public static func encode(data: Data, additionalParams: Parameters?) throws -> Parameters { do { return try Japx.Encoder.encode(data: data, additionalParams: additionalParams) @@ -138,7 +132,6 @@ public class JAPXEncoder: NSObject { /// - parameter additionalParams: Additional [String: Any] to add with `data` to JSON:API object. /// /// - returns: JSON:API object. - @objc public static func encode(jsonParameter: Parameters, additionalParams: Parameters?) throws -> Parameters { do { return try Japx.Encoder.encode(json: jsonParameter, additionalParams: additionalParams) @@ -153,7 +146,6 @@ public class JAPXEncoder: NSObject { /// - parameter additionalParams: Additional [String: Any] to add with `data` to JSON:API object. /// /// - returns: JSON:API object. - @objc public static func encode(jsonParameters: [Parameters], additionalParams: Parameters?) throws -> Parameters { do { return try Japx.Encoder.encode(json: jsonParameters, additionalParams: additionalParams) From 9e947580b03f87505a5470504d881ab3062fb843 Mon Sep 17 00:00:00 2001 From: Vlaho Date: Fri, 15 Nov 2019 11:10:43 +0100 Subject: [PATCH 08/13] Naming updated and Japx.Decoder.Options setup for objc --- Example/Tests/Objc/EncoderTester.m | 8 +- Example/Tests/Swift/DecoderTester.swift | 4 +- Japx/Classes/Alamofire/JapxAlamofire.swift | 10 +- Japx/Classes/Codable/JapxCodable.swift | 10 +- Japx/Classes/Core/Japx.swift | 144 +++++++++--------- Japx/Classes/Moya/JapxMoya.swift | 2 +- Japx/Classes/ObjC/JapxObjC.swift | 50 ++++-- .../Classes/RxAlamofire/JapxRxAlamofire.swift | 4 +- Japx/Classes/RxMoya/JapxRxMoya.swift | 4 +- 9 files changed, 132 insertions(+), 104 deletions(-) diff --git a/Example/Tests/Objc/EncoderTester.m b/Example/Tests/Objc/EncoderTester.m index bc0e3c1..4106ddb 100644 --- a/Example/Tests/Objc/EncoderTester.m +++ b/Example/Tests/Objc/EncoderTester.m @@ -21,8 +21,8 @@ - (void)testJsonToJsonAPITransformationWithSimpleEncoding BOOL correctlyParsed = [AdditionalFunctions doesWithJsonFromFileNamed:@"SimpleEncoding-Json" containsEverethingFrom:@"SimpleEncoding-JsonApi" afterParsingBlock:^id _Nonnull(NSData * _Nonnull data) { - return [JAPXEncoder encodeWithData:data additionalParams:nil error:nil]; - }]; + return [JAPXEncoder encodeWithData:data additionalParams:nil options:[JAPXEncodingOptions new] error:nil]; + }]; XCTAssertTrue(correctlyParsed); } @@ -31,7 +31,7 @@ - (void)testJsonToJsonAPITransformationWithRecursiveRelationships BOOL correctlyParsed = [AdditionalFunctions doesWithJsonFromFileNamed:@"RecursivRelationships-Json" containsEverethingFrom:@"RecursivRelationships-JsonApi" afterParsingBlock:^id _Nonnull(NSData * _Nonnull data) { - return [JAPXEncoder encodeWithData:data additionalParams:nil error:nil]; + return [JAPXEncoder encodeWithData:data additionalParams:nil options:[JAPXEncodingOptions new] error:nil]; }]; XCTAssertTrue(correctlyParsed); } @@ -44,7 +44,7 @@ - (void)testJsonToJsonAPITransformationWithExtraParams BOOL correctlyParsed = [AdditionalFunctions doesWithJsonFromFileNamed:@"ExtraParams-Json" containsEverethingFrom:@"ExtraParams-JsonApi" afterParsingBlock:^id _Nonnull(NSData * _Nonnull data) { - return [JAPXEncoder encodeWithData:data additionalParams:extraParams error:nil]; + return [JAPXEncoder encodeWithData:data additionalParams:extraParams options:[JAPXEncodingOptions new] error:nil]; }]; XCTAssertTrue(correctlyParsed); } diff --git a/Example/Tests/Swift/DecoderTester.swift b/Example/Tests/Swift/DecoderTester.swift index e7d44ff..1a01eb1 100644 --- a/Example/Tests/Swift/DecoderTester.swift +++ b/Example/Tests/Swift/DecoderTester.swift @@ -113,8 +113,8 @@ class DecoderTesterSpec: QuickSpec { } -extension JapxDecodingOptions { +extension Japx.Decoder.Options { - static var notIncludedRelationships: JapxDecodingOptions { .init(parseNotIncludedRelationships: true) } + static var notIncludedRelationships: Self { .init(parseNotIncludedRelationships: true) } } diff --git a/Japx/Classes/Alamofire/JapxAlamofire.swift b/Japx/Classes/Alamofire/JapxAlamofire.swift index d9e2256..ac075bf 100644 --- a/Japx/Classes/Alamofire/JapxAlamofire.swift +++ b/Japx/Classes/Alamofire/JapxAlamofire.swift @@ -35,7 +35,7 @@ extension Request { /// - parameter options: The options specifying how `Japx.Decoder` should decode JSON:API into JSON. /// /// - returns: The result data type. - public static func serializeResponseJSONAPI(response: HTTPURLResponse?, data: Data?, error: Error?, includeList: String?, options: JapxDecodingOptions) -> Result { + public static func serializeResponseJSONAPI(response: HTTPURLResponse?, data: Data?, error: Error?, includeList: String?, options: Japx.Decoder.Options) -> Result { guard error == nil else { return .failure(error!) } if let response = response, emptyDataStatusCodes.contains(response.statusCode) { return .success([:]) } @@ -61,7 +61,7 @@ extension DataRequest { /// - parameter options: The options specifying how `Japx.Decoder` should decode JSON:API into JSON. /// /// - returns: A JSON:API object response serializer. - public static func jsonApiResponseSerializer(includeList: String?, options: JapxDecodingOptions) -> DataResponseSerializer { + public static func jsonApiResponseSerializer(includeList: String?, options: Japx.Decoder.Options) -> DataResponseSerializer { return DataResponseSerializer { _, response, data, error in return Request.serializeResponseJSONAPI(response: response, data: data, error: error, includeList: includeList, options: options) } @@ -76,7 +76,7 @@ extension DataRequest { /// /// - returns: The request. @discardableResult - public func responseJSONAPI(queue: DispatchQueue? = nil, includeList: String? = nil, options: JapxDecodingOptions = .default, completionHandler: @escaping (DataResponse) -> Void) -> Self { + public func responseJSONAPI(queue: DispatchQueue? = nil, includeList: String? = nil, options: Japx.Decoder.Options = .default, completionHandler: @escaping (DataResponse) -> Void) -> Self { return response( queue: queue, responseSerializer: DataRequest.jsonApiResponseSerializer(includeList: includeList, options: options), @@ -93,7 +93,7 @@ extension DownloadRequest { /// - parameter options: The options specifying how `Japx.Decoder` should decode JSON:API into JSON. /// /// - returns: A JSON object response serializer. - public static func jsonApiResponseSerializer(includeList: String?, options: JapxDecodingOptions) -> DownloadResponseSerializer + public static func jsonApiResponseSerializer(includeList: String?, options: Japx.Decoder.Options) -> DownloadResponseSerializer { return DownloadResponseSerializer { _, response, fileURL, error in guard error == nil else { return .failure(error!) } @@ -120,7 +120,7 @@ extension DownloadRequest { /// /// - returns: The request. @discardableResult - public func responseJSONAPI(queue: DispatchQueue? = nil, includeList: String? = nil, options: JapxDecodingOptions = .default, completionHandler: @escaping (DownloadResponse) -> Void) -> Self { + public func responseJSONAPI(queue: DispatchQueue? = nil, includeList: String? = nil, options: Japx.Decoder.Options = .default, completionHandler: @escaping (DownloadResponse) -> Void) -> Self { return response( queue: queue, responseSerializer: DownloadRequest.jsonApiResponseSerializer(includeList: includeList, options: options), diff --git a/Japx/Classes/Codable/JapxCodable.swift b/Japx/Classes/Codable/JapxCodable.swift index fb8a4ac..d99e199 100644 --- a/Japx/Classes/Codable/JapxCodable.swift +++ b/Japx/Classes/Codable/JapxCodable.swift @@ -27,10 +27,10 @@ public final class JapxEncoder { public let jsonEncoder: JSONEncoder /// Options specifying how `Japx.Encoder` should encode JSON into JSON:API. - public let options: JapxEncodingOptions + public let options: Japx.Encoder.Options /// Initializes `self` with underlying `JSONEncoder` instance - public init(jsonEncoder: JSONEncoder = JSONEncoder(), options: JapxEncodingOptions = .default) { + public init(jsonEncoder: JSONEncoder = JSONEncoder(), options: Japx.Encoder.Options = .default) { self.jsonEncoder = jsonEncoder self.options = options } @@ -54,10 +54,10 @@ public final class JapxDecoder { public let jsonDecoder: JSONDecoder /// Options specifying how `Japx.Decoder` should decode JSON:API into JSON. - public let options: JapxDecodingOptions + public let options: Japx.Decoder.Options - /// Initializes `self` with underlying `JSONDecoder` instance and `JapxDecodingOptions` - public init(jsonDecoder: JSONDecoder = JSONDecoder(), options: JapxDecodingOptions = .default) { + /// Initializes `self` with underlying `JSONDecoder` instance and `Japx.Decoder.Options` + public init(jsonDecoder: JSONDecoder = JSONDecoder(), options: Japx.Decoder.Options = .default) { self.jsonDecoder = jsonDecoder self.options = options } diff --git a/Japx/Classes/Core/Japx.swift b/Japx/Classes/Core/Japx.swift index b8832e3..bb2e502 100644 --- a/Japx/Classes/Core/Japx.swift +++ b/Japx/Classes/Core/Japx.swift @@ -27,63 +27,6 @@ public enum JapxError: Error { case unableToConvertDataToJson(data: Any) } -/// `JapxDecodingOptions` is a set of options affecting the decoding of JSON:API into JSON you request from `Japx.Decoder`. -public struct JapxDecodingOptions { - - /// Defines if a relationship that doesn't heve related object stored in `included` - /// shoud be parsed as a dictionary of only `type` and `id`. - /// If `false` it will be parsed as `nil`. - /// - /// Defaults to false. - /// - /// - Tag: parseNotIncludedRelationships - public var parseNotIncludedRelationships: Bool = false - - /// Creates an instance with the specified properties. - /// - /// - parameter parseNotIncludedRelationships: Read more [here](parseNotIncludedRelationships) - /// - /// - returns: The new `JapxDecodingOptions` instance. - public init(parseNotIncludedRelationships: Bool = false) { - self.parseNotIncludedRelationships = parseNotIncludedRelationships - } -} - -public extension JapxDecodingOptions { - - /// Default JSON:API to JSON decoding options for `Japx.Decoder` - static var `default`: JapxDecodingOptions { .init() } -} - -/// `JapxEncodingOptions` is a set of options affecting the encoding of JSON into JSON:API you requested from `Japx.Encoder`. -public struct JapxEncodingOptions { - - /// Common namespace includes all attribute names, relationship names, `type` and `id`. - /// If enabled it will include keyword `meta` into common namepace, expecit the not to - /// have `mata` as an attribute or renationship name. - /// It will then encode meta on the same level as `attributes` and `relationships` - /// - /// Defaults to false. - /// - /// - Tag: includeMetaToCommonNamespce - public var includeMetaToCommonNamespce: Bool = false - - /// Creates an instance with the specified properties. - /// - /// - parameter includeMetaToCommonNamespce: Read more [here](includeMetaToCommonNamespce) - /// - /// - returns: The new `JapxDecodingOptions` instance. - public init(includeMetaToCommonNamespce: Bool = false) { - self.includeMetaToCommonNamespce = includeMetaToCommonNamespce - } -} - -public extension JapxEncodingOptions { - - /// Default JSON to JSON:API decoding options for `Japx.Encoder` - static var `default`: JapxEncodingOptions { .init() } -} - private struct Consts { struct APIKeys { @@ -116,6 +59,69 @@ public struct Japx { public enum Encoder {} } +public extension Japx.Decoder { + + /// `Japx.Decoder.Options` is a set of options affecting the decoding of JSON:API into JSON you request from `Japx.Decoder`. + struct Options { + + /// Defines if a relationship that doesn't heve related object stored in `included` + /// shoud be parsed as a dictionary of only `type` and `id`. + /// If `false` it will be parsed as `nil`. + /// + /// Defaults to false. + /// + /// - Tag: parseNotIncludedRelationships + public var parseNotIncludedRelationships: Bool = false + + /// Creates an instance with the specified properties. + /// + /// - parameter parseNotIncludedRelationships: Read more [here](parseNotIncludedRelationships) + /// + /// - returns: The new `Japx.Decoder.Options` instance. + public init(parseNotIncludedRelationships: Bool = false) { + self.parseNotIncludedRelationships = parseNotIncludedRelationships + } + } +} + +public extension Japx.Decoder.Options { + + /// Default JSON:API to JSON decoding options for `Japx.Decoder` + static var `default`: Japx.Decoder.Options { .init() } +} + +public extension Japx.Encoder { + + /// `Japx.Encoder.Options` is a set of options affecting the encoding of JSON into JSON:API you requested from `Japx.Encoder`. + struct Options { + + /// Common namespace includes all attribute names, relationship names, `type` and `id`. + /// If enabled it will include keyword `meta` into common namepace, expecit the not to + /// have `mata` as an attribute or renationship name. + /// It will then encode meta on the same level as `attributes` and `relationships` + /// + /// Defaults to false. + /// + /// - Tag: includeMetaToCommonNamespce + public var includeMetaToCommonNamespce: Bool = false + + /// Creates an instance with the specified properties. + /// + /// - parameter includeMetaToCommonNamespce: Read more [here](includeMetaToCommonNamespce) + /// + /// - returns: The new `Japx.Decoder.Options` instance. + public init(includeMetaToCommonNamespce: Bool = false) { + self.includeMetaToCommonNamespce = includeMetaToCommonNamespce + } + } +} + +public extension Japx.Encoder.Options { + + /// Default JSON to JSON:API decoding options for `Japx.Encoder` + static var `default`: Japx.Encoder.Options { .init() } +} + // MARK: - Public interface - // MARK: - Decoding @@ -129,7 +135,7 @@ public extension Japx.Decoder { /// - parameter options: Options specifying how `Japx.Decoder` should decode JSON:API into JSON. /// /// - returns: JSON object. - static func jsonObject(withJSONAPIObject object: Parameters, includeList: String? = nil, options: JapxDecodingOptions = .default) throws -> Parameters { + static func jsonObject(withJSONAPIObject object: Parameters, includeList: String? = nil, options: Japx.Decoder.Options = .default) throws -> Parameters { // First check if JSON API object has `include` list since // parsing objects with include list is done using native // Swift dictionary, while objects without it use `NSDictionary` @@ -152,7 +158,7 @@ public extension Japx.Decoder { /// - parameter options: Options specifying how `Japx.Decoder` should decode JSON:API into JSON. /// /// - returns: JSON object as Data. - static func data(withJSONAPIObject object: Parameters, includeList: String? = nil, options: JapxDecodingOptions = .default) throws -> Data { + static func data(withJSONAPIObject object: Parameters, includeList: String? = nil, options: Japx.Decoder.Options = .default) throws -> Data { let decoded = try jsonObject(withJSONAPIObject: object, includeList: includeList, options: options) return try JSONSerialization.data(withJSONObject: decoded) } @@ -164,7 +170,7 @@ public extension Japx.Decoder { /// - parameter options: Options specifying how `Japx.Decoder` should decode JSON:API into JSON. /// /// - returns: JSON object. - static func jsonObject(with data: Data, includeList: String? = nil, options: JapxDecodingOptions = .default) throws -> Parameters { + static func jsonObject(with data: Data, includeList: String? = nil, options: Japx.Decoder.Options = .default) throws -> Parameters { let jsonApiObject = try JSONSerialization.jsonObject(with: data) // With include list @@ -194,7 +200,7 @@ public extension Japx.Decoder { /// - parameter options: Options specifying how `Japx.Decoder` should decode JSON:API into JSON. /// /// - returns: JSON object as Data. - static func data(with data: Data, includeList: String? = nil, options: JapxDecodingOptions = .default) throws -> Data { + static func data(with data: Data, includeList: String? = nil, options: Japx.Decoder.Options = .default) throws -> Data { let decoded = try jsonObject(with: data, includeList: includeList, options: options) return try JSONSerialization.data(withJSONObject: decoded) } @@ -211,7 +217,7 @@ public extension Japx.Encoder { /// - parameter options: Options specifying how `Japx.Encoder` should encode JSON into JSON:API. /// /// - returns: JSON:API object. - static func encode(data: Data, additionalParams: Parameters? = nil, options: JapxEncodingOptions = .default) throws -> Parameters { + static func encode(data: Data, additionalParams: Parameters? = nil, options: Japx.Encoder.Options = .default) throws -> Parameters { let json = try JSONSerialization.jsonObject(with: data) if let jsonObject = json as? Parameters { return try encode(json: jsonObject, additionalParams: additionalParams, options: options) @@ -229,7 +235,7 @@ public extension Japx.Encoder { /// - parameter options: Options specifying how `Japx.Encoder` should encode JSON into JSON:API. /// /// - returns: JSON:API object. - static func encode(json: Parameters, additionalParams: Parameters? = nil, options: JapxEncodingOptions = .default) throws -> Parameters { + static func encode(json: Parameters, additionalParams: Parameters? = nil, options: Japx.Encoder.Options = .default) throws -> Parameters { var params = additionalParams ?? [:] params[Consts.APIKeys.data] = try encodeAttributesAndRelationships(on: json, options: options) return params @@ -242,7 +248,7 @@ public extension Japx.Encoder { /// - parameter options: Options specifying how `Japx.Encoder` should encode JSON into JSON:API. /// /// - returns: JSON:API object. - static func encode(json: [Parameters], additionalParams: Parameters? = nil, options: JapxEncodingOptions = .default) throws -> Parameters { + static func encode(json: [Parameters], additionalParams: Parameters? = nil, options: Japx.Encoder.Options = .default) throws -> Parameters { var params = additionalParams ?? [:] params[Consts.APIKeys.data] = try json.compactMap { try encodeAttributesAndRelationships(on: $0, options: options) as AnyObject } return params @@ -255,7 +261,7 @@ public extension Japx.Encoder { private extension Japx.Decoder { - static func decode(jsonApiInput: Parameters, include: String, options: JapxDecodingOptions) throws -> Parameters { + static func decode(jsonApiInput: Parameters, include: String, options: Japx.Decoder.Options) throws -> Parameters { let params = include .split(separator: ",") .map { $0.split(separator: ".") } @@ -292,7 +298,7 @@ private extension Japx.Decoder { return jsonApi } - static func decode(jsonApiInput: NSDictionary, options: JapxDecodingOptions) throws -> NSDictionary { + static func decode(jsonApiInput: NSDictionary, options: Japx.Decoder.Options) throws -> NSDictionary { let jsonApi = jsonApiInput.mutable let dataObjectsArray = try jsonApi.array(from: Consts.APIKeys.data) ?? [] @@ -331,7 +337,7 @@ private extension Japx.Decoder { private extension Japx.Decoder { - static func resolve(object: Parameters, allObjects: [TypeIdPair: Parameters], paramsDict: NSDictionary, options: JapxDecodingOptions) throws -> Parameters { + static func resolve(object: Parameters, allObjects: [TypeIdPair: Parameters], paramsDict: NSDictionary, options: Japx.Decoder.Options) throws -> Parameters { var attributes = (try? object.dictionary(for: Consts.APIKeys.attributes)) ?? Parameters() attributes[Consts.APIKeys.type] = object[Consts.APIKeys.type] attributes[Consts.APIKeys.id] = object[Consts.APIKeys.id] @@ -395,7 +401,7 @@ private extension Japx.Decoder { } } - static func resolveRelationships(from objects: [TypeIdPair: NSMutableDictionary], options: JapxDecodingOptions) throws { + static func resolveRelationships(from objects: [TypeIdPair: NSMutableDictionary], options: Japx.Decoder.Options) throws { let extractRelationship = resolveRelationship( from: objects, @@ -466,7 +472,7 @@ private extension Japx.Decoder { private extension Japx.Encoder { - static func encodeAttributesAndRelationships(on jsonObject: Parameters, options: JapxEncodingOptions) throws -> Parameters { + static func encodeAttributesAndRelationships(on jsonObject: Parameters, options: Japx.Encoder.Options) throws -> Parameters { var object = jsonObject var attributes = Parameters() var relationships = Parameters() diff --git a/Japx/Classes/Moya/JapxMoya.swift b/Japx/Classes/Moya/JapxMoya.swift index 35a147f..6815435 100644 --- a/Japx/Classes/Moya/JapxMoya.swift +++ b/Japx/Classes/Moya/JapxMoya.swift @@ -33,7 +33,7 @@ extension Response { /// - parameter failsOnEmptyData: A boolean value determining whether the mapping should fail if the data is empty. /// /// - returns: JSON:API object. - public func mapJSONAPI(failsOnEmptyData: Bool = true, includeList: String? = nil, options: JapxDecodingOptions = .default) throws -> Any { + public func mapJSONAPI(failsOnEmptyData: Bool = true, includeList: String? = nil, options: Japx.Decoder.Options = .default) throws -> Any { do { return try Japx.Decoder.jsonObject(with: data, includeList: includeList, options: options) } catch { diff --git a/Japx/Classes/ObjC/JapxObjC.swift b/Japx/Classes/ObjC/JapxObjC.swift index 2eef583..edddd0c 100644 --- a/Japx/Classes/ObjC/JapxObjC.swift +++ b/Japx/Classes/ObjC/JapxObjC.swift @@ -7,23 +7,42 @@ import Foundation -/// ObjC bride for `JapxDecodingOptions` +/// ObjC bride for `Japx.Decoder.Options` @objcMembers -public class JAPXDecodingOptions: NSObject { +@objc(JAPXDecodingOptions) +public class _JAPXOBjCDecodingOptions: NSObject { // MARK: - Private options reference - fileprivate var options: JapxDecodingOptions = .default + fileprivate var options: Japx.Decoder.Options = .default // MARK: - Propery forwarding - /// ObjC bridge for [`JAPXDecodingOptions.parseNotIncludedRelationships`](x-source-tag://parseNotIncludedRelationships) + /// ObjC bridge for [`Japx.Decoder.Options.parseNotIncludedRelationships`](x-source-tag://parseNotIncludedRelationships) public var parseNotIncludedRelationships: Bool { get { options.parseNotIncludedRelationships } set { options.parseNotIncludedRelationships = newValue } } } +/// ObjC bride for `Japx.Encoder.Options` +@objcMembers +@objc(JAPXEncodingOptions) +public class _JAPXOBjCEncodingOptions: NSObject { + + // MARK: - Private options reference + + fileprivate var options: Japx.Encoder.Options = .default + + // MARK: - Propery forwarding + + /// ObjC bridge for [`Japx.Encoder.Options.includeMetaToCommonNamespce`](x-source-tag://includeMetaToCommonNamespce) + public var includeMetaToCommonNamespce: Bool { + get { options.includeMetaToCommonNamespce } + set { options.includeMetaToCommonNamespce = newValue } + } +} + @objcMembers @available(swift, obsoleted: 1.0) public class JAPXDecoder: NSObject { @@ -43,7 +62,7 @@ public class JAPXDecoder: NSObject { /// - parameter options: The options specifying how `JAPXDecoder` should decode JSON:API into JSON. /// /// - returns: JSON object. - public static func jsonObject(withJSONAPIObject object: Parameters, includeList: String?, options: JAPXDecodingOptions) throws -> Parameters { + public static func jsonObject(withJSONAPIObject object: Parameters, includeList: String?, options: _JAPXOBjCDecodingOptions) throws -> Parameters { do { return try Japx.Decoder.jsonObject(withJSONAPIObject: object, includeList: includeList, options: options.options) } catch { @@ -58,7 +77,7 @@ public class JAPXDecoder: NSObject { /// - parameter options: The options specifying how `JAPXDecoder` should decode JSON:API into JSON. /// /// - returns: JSON object as Data. - public static func data(withJSONAPIObject object: Parameters, includeList: String?, options: JAPXDecodingOptions) throws -> Data { + public static func data(withJSONAPIObject object: Parameters, includeList: String?, options: _JAPXOBjCDecodingOptions) throws -> Data { do { return try Japx.Decoder.data(withJSONAPIObject: object, includeList: includeList, options: options.options) } catch { @@ -73,7 +92,7 @@ public class JAPXDecoder: NSObject { /// - parameter options: The options specifying how `JAPXDecoder` should decode JSON:API into JSON. /// /// - returns: JSON object. - public static func jsonObject(withData data: Data, includeList: String?, options: JAPXDecodingOptions) throws -> Parameters { + public static func jsonObject(withData data: Data, includeList: String?, options: _JAPXOBjCDecodingOptions) throws -> Parameters { do { return try Japx.Decoder.jsonObject(with: data, includeList: includeList, options: options.options) } catch { @@ -88,7 +107,7 @@ public class JAPXDecoder: NSObject { /// - parameter options: The options specifying how `JAPXDecoder` should decode JSON:API into JSON. /// /// - returns: JSON object as Data. - public static func data(withData data: Data, includeList: String?, options: JAPXDecodingOptions) throws -> Data { + public static func data(withData data: Data, includeList: String?, options: _JAPXOBjCDecodingOptions) throws -> Data { do { return try Japx.Decoder.data(with: data, includeList: includeList, options: options.options) } catch { @@ -116,11 +135,12 @@ public class JAPXEncoder: NSObject { /// /// - parameter data: JSON object as Data. /// - parameter additionalParams: Additional [String: Any] to add with `data` to JSON:API object. + /// - parameter options: The options specifying how `JAPXEncoder` should encode JSON into JSON:API. /// /// - returns: JSON:API object. - public static func encode(data: Data, additionalParams: Parameters?) throws -> Parameters { + public static func encode(data: Data, additionalParams: Parameters?, options: _JAPXOBjCEncodingOptions) throws -> Parameters { do { - return try Japx.Encoder.encode(data: data, additionalParams: additionalParams) + return try Japx.Encoder.encode(data: data, additionalParams: additionalParams, options: options.options) } catch { throw NSError(error: error) } @@ -130,11 +150,12 @@ public class JAPXEncoder: NSObject { /// /// - parameter json: JSON object. /// - parameter additionalParams: Additional [String: Any] to add with `data` to JSON:API object. + /// - parameter options: The options specifying how `JAPXEncoder` should encode JSON into JSON:API. /// /// - returns: JSON:API object. - public static func encode(jsonParameter: Parameters, additionalParams: Parameters?) throws -> Parameters { + public static func encode(jsonParameter: Parameters, additionalParams: Parameters?, options: _JAPXOBjCEncodingOptions) throws -> Parameters { do { - return try Japx.Encoder.encode(json: jsonParameter, additionalParams: additionalParams) + return try Japx.Encoder.encode(json: jsonParameter, additionalParams: additionalParams, options: options.options) } catch { throw NSError(error: error) } @@ -144,11 +165,12 @@ public class JAPXEncoder: NSObject { /// /// - parameter json: JSON objects represented as Array. /// - parameter additionalParams: Additional [String: Any] to add with `data` to JSON:API object. + /// - parameter options: The options specifying how `JAPXEncoder` should encode JSON into JSON:API. /// /// - returns: JSON:API object. - public static func encode(jsonParameters: [Parameters], additionalParams: Parameters?) throws -> Parameters { + public static func encode(jsonParameters: [Parameters], additionalParams: Parameters?, options: _JAPXOBjCEncodingOptions) throws -> Parameters { do { - return try Japx.Encoder.encode(json: jsonParameters, additionalParams: additionalParams) + return try Japx.Encoder.encode(json: jsonParameters, additionalParams: additionalParams, options: options.options) } catch { throw NSError(error: error) } diff --git a/Japx/Classes/RxAlamofire/JapxRxAlamofire.swift b/Japx/Classes/RxAlamofire/JapxRxAlamofire.swift index 72e3eaf..48ae2bd 100644 --- a/Japx/Classes/RxAlamofire/JapxRxAlamofire.swift +++ b/Japx/Classes/RxAlamofire/JapxRxAlamofire.swift @@ -24,7 +24,7 @@ extension Reactive where Base: DataRequest { /// - parameter options: The options specifying how `Japx.Decoder` should decode JSON:API into JSON. /// /// - returns: `Single` of parsed JSON:API object. - public func responseJSONAPI(queue: DispatchQueue? = nil, includeList: String? = nil, options: JapxDecodingOptions = .default) -> Single { + public func responseJSONAPI(queue: DispatchQueue? = nil, includeList: String? = nil, options: Japx.Decoder.Options = .default) -> Single { return Single.create { [weak base] (single) -> Disposable in let request = base?.responseJSONAPI(queue: queue, includeList: includeList, options: options) { (response) in @@ -47,7 +47,7 @@ extension Reactive where Base: DownloadRequest { /// - parameter options: The options specifying how `Japx.Decoder` should decode JSON:API into JSON. /// /// - returns: `Single` of parsed JSON:API object. - public func responseJSONAPI(queue: DispatchQueue? = nil, includeList: String? = nil, options: JapxDecodingOptions = .default) -> Single { + public func responseJSONAPI(queue: DispatchQueue? = nil, includeList: String? = nil, options: Japx.Decoder.Options = .default) -> Single { return Single.create { [weak base] (single) -> Disposable in let request = base?.responseJSONAPI(queue: queue, includeList: includeList, options: options) { (response) in diff --git a/Japx/Classes/RxMoya/JapxRxMoya.swift b/Japx/Classes/RxMoya/JapxRxMoya.swift index ba73430..9119a1a 100644 --- a/Japx/Classes/RxMoya/JapxRxMoya.swift +++ b/Japx/Classes/RxMoya/JapxRxMoya.swift @@ -19,7 +19,7 @@ extension ObservableType where E == Response { /// /// /// - returns: `Observable` of JSON:API object. - public func mapJSONAPI(failsOnEmptyData: Bool = true, includeList: String? = nil, options: JapxDecodingOptions = .default) -> Observable { + public func mapJSONAPI(failsOnEmptyData: Bool = true, includeList: String? = nil, options: Japx.Decoder.Options = .default) -> Observable { return map { try $0.mapJSONAPI(failsOnEmptyData: failsOnEmptyData, includeList: includeList) } } } @@ -34,7 +34,7 @@ extension PrimitiveSequence where TraitType == SingleTrait, ElementType == Respo /// /// /// - returns: `Single` of JSON:API object. - public func mapJSONAPI(failsOnEmptyData: Bool = true, includeList: String? = nil, options: JapxDecodingOptions = .default) -> Single { + public func mapJSONAPI(failsOnEmptyData: Bool = true, includeList: String? = nil, options: Japx.Decoder.Options = .default) -> Single { return map { try $0.mapJSONAPI(failsOnEmptyData: failsOnEmptyData, includeList: includeList) } } } From 5e77e159128a9391a3826a5dcbb474231dc2c8fe Mon Sep 17 00:00:00 2001 From: Vlaho Date: Fri, 15 Nov 2019 11:30:44 +0100 Subject: [PATCH 09/13] Better definition of includeMetaToCommonNamespce --- Japx/Classes/Core/Japx.swift | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/Japx/Classes/Core/Japx.swift b/Japx/Classes/Core/Japx.swift index bb2e502..e31c610 100644 --- a/Japx/Classes/Core/Japx.swift +++ b/Japx/Classes/Core/Japx.swift @@ -95,10 +95,12 @@ public extension Japx.Encoder { /// `Japx.Encoder.Options` is a set of options affecting the encoding of JSON into JSON:API you requested from `Japx.Encoder`. struct Options { - /// Common namespace includes all attribute names, relationship names, `type` and `id`. - /// If enabled it will include keyword `meta` into common namepace, expecit the not to - /// have `mata` as an attribute or renationship name. - /// It will then encode meta on the same level as `attributes` and `relationships` + /// Common namespace is a set of all attribute names, relationship names, keyword `type` and keyword `id`. + /// If enabled it will include keyword `meta` into that common namespace, making it a part of JSON:API. + /// i.e. meta will be encoded on the same level as `attributes` and `relationships`. + /// You should note that by including meta in the common namespace you are prhibited from using keyword `meta` as a name + /// of an attribute or relationship, since it will leed to unwanted results be encodin in the wrong place. + /// /// /// Defaults to false. /// From bfab815a3a64c91978680757007ab8fc6784cf1d Mon Sep 17 00:00:00 2001 From: Vlaho Date: Fri, 15 Nov 2019 12:02:22 +0100 Subject: [PATCH 10/13] Update map and ! to compact map and ? --- Japx/Classes/Core/Japx.swift | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Japx/Classes/Core/Japx.swift b/Japx/Classes/Core/Japx.swift index e31c610..226db7f 100644 --- a/Japx/Classes/Core/Japx.swift +++ b/Japx/Classes/Core/Japx.swift @@ -352,8 +352,7 @@ private extension Japx.Decoder { parseNotIncludedRelationships: options.parseNotIncludedRelationships ) - //Force cast here is ok since it is taken from include list string - let relationships = try paramsDict.allKeys.map({ $0 as! String }).reduce(into: Parameters(), { (result, relationshipsKey) in + let relationships = try paramsDict.allKeys.compactMap({ $0 as? String }).reduce(into: Parameters(), { (result, relationshipsKey) in guard let relationship = relationshipsReferences.asDictionary(from: relationshipsKey) else { return } guard let otherObjectsData = try relationship.array(from: Consts.APIKeys.data) else { result[relationshipsKey] = NSNull() From fde2b432c2856f850b733ca737308ebe6eda07db Mon Sep 17 00:00:00 2001 From: Filip Gulan Date: Fri, 15 Nov 2019 12:03:54 +0100 Subject: [PATCH 11/13] Update Japx/Classes/Core/Japx.swift --- Japx/Classes/Core/Japx.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Japx/Classes/Core/Japx.swift b/Japx/Classes/Core/Japx.swift index 226db7f..f9ddc68 100644 --- a/Japx/Classes/Core/Japx.swift +++ b/Japx/Classes/Core/Japx.swift @@ -64,7 +64,7 @@ public extension Japx.Decoder { /// `Japx.Decoder.Options` is a set of options affecting the decoding of JSON:API into JSON you request from `Japx.Decoder`. struct Options { - /// Defines if a relationship that doesn't heve related object stored in `included` + /// Defines if a relationship that doesn't have related object stored in `included` /// shoud be parsed as a dictionary of only `type` and `id`. /// If `false` it will be parsed as `nil`. /// From 2349aafd244577ce93a42d5f5e069a4a9f2c8d09 Mon Sep 17 00:00:00 2001 From: Filip Gulan Date: Fri, 15 Nov 2019 12:04:02 +0100 Subject: [PATCH 12/13] Update Japx/Classes/Core/Japx.swift --- Japx/Classes/Core/Japx.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Japx/Classes/Core/Japx.swift b/Japx/Classes/Core/Japx.swift index f9ddc68..425dfe3 100644 --- a/Japx/Classes/Core/Japx.swift +++ b/Japx/Classes/Core/Japx.swift @@ -98,7 +98,7 @@ public extension Japx.Encoder { /// Common namespace is a set of all attribute names, relationship names, keyword `type` and keyword `id`. /// If enabled it will include keyword `meta` into that common namespace, making it a part of JSON:API. /// i.e. meta will be encoded on the same level as `attributes` and `relationships`. - /// You should note that by including meta in the common namespace you are prhibited from using keyword `meta` as a name + /// You should note that by including meta in the common namespace you are prohibited from using keyword `meta` as a name /// of an attribute or relationship, since it will leed to unwanted results be encodin in the wrong place. /// /// From 75bf598a9769719eeca4788a5a85c990c6659cc2 Mon Sep 17 00:00:00 2001 From: Filip Gulan Date: Fri, 15 Nov 2019 12:04:10 +0100 Subject: [PATCH 13/13] Update Japx/Classes/Core/Japx.swift --- Japx/Classes/Core/Japx.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Japx/Classes/Core/Japx.swift b/Japx/Classes/Core/Japx.swift index 425dfe3..97ab798 100644 --- a/Japx/Classes/Core/Japx.swift +++ b/Japx/Classes/Core/Japx.swift @@ -99,7 +99,7 @@ public extension Japx.Encoder { /// If enabled it will include keyword `meta` into that common namespace, making it a part of JSON:API. /// i.e. meta will be encoded on the same level as `attributes` and `relationships`. /// You should note that by including meta in the common namespace you are prohibited from using keyword `meta` as a name - /// of an attribute or relationship, since it will leed to unwanted results be encodin in the wrong place. + /// of an attribute or relationship, since it will lead to unwanted results - encoding in the wrong place. /// /// /// Defaults to false.