From b9ee888d31fb3f2a05982c5c853a88c9f5988121 Mon Sep 17 00:00:00 2001 From: Pavlos Simas Date: Fri, 11 Dec 2020 02:23:22 +0200 Subject: [PATCH 1/4] swiftyJson and strascream update --- FayeSwift.podspec | 4 +- Package.swift | 4 +- Sources/FayeClient+Bayuex.swift | 4 +- Sources/FayeClient+Helper.swift | 4 +- Sources/FayeClient+Subscriptions.swift | 17 +++-- Sources/FayeSubscriptionModel.swift | 6 +- Sources/StringExtensions.swift | 2 +- Sources/WebsocketTransport.swift | 89 ++++++++++++++------------ package.json | 8 +-- 9 files changed, 73 insertions(+), 65 deletions(-) diff --git a/FayeSwift.podspec b/FayeSwift.podspec index b17d555..670e7d3 100644 --- a/FayeSwift.podspec +++ b/FayeSwift.podspec @@ -17,6 +17,6 @@ Pod::Spec.new do |s| s.ios.deployment_target = "8.0" s.tvos.deployment_target = "9.0" s.source_files = "Sources/*.swift" - s.dependency "Starscream", '~> 2.0' - s.dependency "SwiftyJSON", '~> 3.1' + s.dependency "Starscream", '~> 4.0' + s.dependency "SwiftyJSON", '~> 4.0' end diff --git a/Package.swift b/Package.swift index a9712d5..ef55152 100644 --- a/Package.swift +++ b/Package.swift @@ -4,7 +4,7 @@ let package = Package( name: "FayeSwift", targets: [], dependencies: [ - .Package(url: "https://github.com/SwiftyJSON/SwiftyJSON.git", versions: "2.3.3" ..< Version.max), - .Package(url: "https://github.com/daltoniam/Starscream.git", versions: "1.1.3" ..< Version.max) + .package(url: "https://github.com/daltoniam/Starscream.git", majorVersion: 4), + .package(url: "https://github.com/SwiftyJSON/SwiftyJSON.git", from: "4.0.0"), ] ) diff --git a/Sources/FayeClient+Bayuex.swift b/Sources/FayeClient+Bayuex.swift index 5480f1d..86a37a2 100644 --- a/Sources/FayeClient+Bayuex.swift +++ b/Sources/FayeClient+Bayuex.swift @@ -139,8 +139,8 @@ extension FayeClient { } catch FayeSubscriptionModelError.conversationError { } catch FayeSubscriptionModelError.clientIdNotValid - where self.fayeClientId?.characters.count > 0 { - var model = model + where self.fayeClientId?.count > 0 { + let model = model model.clientId = self.fayeClientId self.subscribe(model) } catch { diff --git a/Sources/FayeClient+Helper.swift b/Sources/FayeClient+Helper.swift index f17049c..0a1f49d 100644 --- a/Sources/FayeClient+Helper.swift +++ b/Sources/FayeClient+Helper.swift @@ -13,12 +13,12 @@ public extension FayeClient { // MARK: Helper /// Validate whatever a subscription has been subscribed correctly - public func isSubscribedToChannel(_ channel:String) -> Bool { + func isSubscribedToChannel(_ channel:String) -> Bool { return self.openSubscriptions.contains { $0.subscription == channel } } /// Validate faye transport is connected - public func isTransportConnected() -> Bool { + func isTransportConnected() -> Bool { return self.transport!.isConnected() } } diff --git a/Sources/FayeClient+Subscriptions.swift b/Sources/FayeClient+Subscriptions.swift index 38b43f6..e49399e 100644 --- a/Sources/FayeClient+Subscriptions.swift +++ b/Sources/FayeClient+Subscriptions.swift @@ -51,13 +51,16 @@ extension FayeClient { func receive(_ message: String) { readOperationQueue.sync { [unowned self] in if let jsonData = message.data(using: String.Encoding.utf8, allowLossyConversion: false) { - let json = JSON(data: jsonData) - - self.parseFayeMessage(json) + do { + let json = try JSON(data: jsonData) + self.parseFayeMessage(json) + } catch { + print(error) + } } } } - + func nextMessageId() -> String { self.messageNumber += 1 @@ -74,7 +77,7 @@ extension FayeClient { func removeChannelFromQueuedSubscriptions(_ channel: String) -> Bool { var result = false queuedSubsLockQueue.sync { - let index = self.queuedSubscriptions.index { $0.subscription == channel } + let index = self.queuedSubscriptions.firstIndex { $0.subscription == channel } if let index = index { self.queuedSubscriptions.remove(at: index) @@ -89,7 +92,7 @@ extension FayeClient { func removeChannelFromPendingSubscriptions(_ channel: String) -> Bool { var result = false pendingSubsLockQueue.sync { - let index = self.pendingSubscriptions.index { $0.subscription == channel } + let index = self.pendingSubscriptions.firstIndex { $0.subscription == channel } if let index = index { self.pendingSubscriptions.remove(at: index) @@ -104,7 +107,7 @@ extension FayeClient { func removeChannelFromOpenSubscriptions(_ channel: String) -> Bool { var result = false openSubsLockQueue.sync { - let index = self.openSubscriptions.index { $0.subscription == channel } + let index = self.openSubscriptions.firstIndex { $0.subscription == channel } if let index = index { self.openSubscriptions.remove(at: index) diff --git a/Sources/FayeSubscriptionModel.swift b/Sources/FayeSubscriptionModel.swift index 5856b40..9ee3f52 100644 --- a/Sources/FayeSubscriptionModel.swift +++ b/Sources/FayeSubscriptionModel.swift @@ -21,10 +21,10 @@ public enum FayeSubscriptionModelError: Error { open class FayeSubscriptionModel { /// Subscription URL - open let subscription: String + public let subscription: String /// Channel type for request - open let channel: BayeuxChannel + public let channel: BayeuxChannel /// Uniqle client id for socket open var clientId: String? @@ -80,7 +80,7 @@ open class FayeSubscriptionModel { extension FayeSubscriptionModel: CustomStringConvertible { public var description: String { - return "FayeSubscriptionModel: \(try? self.toDictionary())" + return "FayeSubscriptionModel: \(String(describing: try? self.toDictionary()))" } } diff --git a/Sources/StringExtensions.swift b/Sources/StringExtensions.swift index 9b9f5ae..7390074 100644 --- a/Sources/StringExtensions.swift +++ b/Sources/StringExtensions.swift @@ -9,7 +9,7 @@ // MARK: Custom Extensions extension String { subscript (i: Int) -> String { - return String(Array(self.characters)[i]) + return String(Array(self)[i]) } // http://iosdevelopertips.com/swift-code/base64-encode-decode-swift.html diff --git a/Sources/WebsocketTransport.swift b/Sources/WebsocketTransport.swift index dfc7e67..837fa8d 100644 --- a/Sources/WebsocketTransport.swift +++ b/Sources/WebsocketTransport.swift @@ -9,11 +9,13 @@ import Foundation import Starscream -internal class WebsocketTransport: Transport, WebSocketDelegate, WebSocketPongDelegate { +internal class WebsocketTransport: Transport, WebSocketDelegate { + var urlString:String? var webSocket:WebSocket? var headers: [String: String]? = nil internal weak var delegate:TransportDelegate? + private var socketConnected: Bool = false convenience required internal init(url: String) { self.init() @@ -23,19 +25,22 @@ internal class WebsocketTransport: Transport, WebSocketDelegate, WebSocketPongDe func openConnection() { self.closeConnection() - self.webSocket = WebSocket(url: URL(string:self.urlString!)!) + guard let urlString = urlString, + let url = URL(string: urlString) else { + print("Faye: Invalid url") + return + } + var urlRequest = URLRequest(url: url) + if let headers = self.headers { + urlRequest.allHTTPHeaderFields = headers + } + self.webSocket = WebSocket(request: urlRequest) if let webSocket = self.webSocket { webSocket.delegate = self - webSocket.pongDelegate = self - if let headers = self.headers { - for (key, value) in headers { - webSocket.headers[key] = headers[value] - } - } webSocket.connect() - print("Faye: Opening connection with \(self.urlString)") + print("Faye: Opening connection with \(String(describing: self.urlString))") } } @@ -44,7 +49,7 @@ internal class WebsocketTransport: Transport, WebSocketDelegate, WebSocketPongDe print("Faye: Closing connection") webSocket.delegate = nil - webSocket.disconnect(forceTimeout: 0) + webSocket.disconnect() self.webSocket = nil } @@ -59,38 +64,38 @@ internal class WebsocketTransport: Transport, WebSocketDelegate, WebSocketPongDe } func isConnected() -> (Bool) { - return self.webSocket?.isConnected ?? false - } - - // MARK: Websocket Delegate - internal func websocketDidConnect(socket: WebSocket) { - self.delegate?.didConnect() - } - - internal func websocketDidDisconnect(socket: WebSocket, error: NSError?) { - if error == nil { - self.delegate?.didDisconnect(NSError(error: .lostConnection)) - } else { - self.delegate?.didFailConnection(error) - } - } - - internal func websocketDidReceiveMessage(socket: WebSocket, text: String) { - self.delegate?.didReceiveMessage(text) - } - - // MARK: TODO - internal func websocketDidReceiveData(socket: WebSocket, data: Data) { - print("Faye: Received data: \(data.count)") - //self.socket.writeData(data) + return self.socketConnected } - // MARK: WebSocket Pong Delegate - internal func websocketDidReceivePong(_ socket: WebSocket) { - self.delegate?.didReceivePong() - } - - func websocketDidReceivePong(socket: WebSocket, data: Data?) { - self.delegate?.didReceivePong() - } + func didReceive(event: WebSocketEvent, client: WebSocket) { + switch event { + case .connected(let headers): + print("websocket is connected: \(headers)") + socketConnected = true + self.delegate?.didConnect() + case .disconnected(let reason, let code): + socketConnected = false + print("websocket is disconnected for reason: \(reason) /n with code: \(code)") + //TODO: FIX CODES + self.delegate?.didDisconnect(NSError(error: .lostConnection)) + case .text(let text): + self.delegate?.didReceiveMessage(text) + case .pong(_): + self.delegate?.didReceivePong() + case .binary(_): + //TODO: ADD THIS + break + case .error(_): + break + case .viabilityChanged(_): + break + case .reconnectSuggested(_): + break + case .cancelled: + break + case .ping(_): + //TODO: ADD THIS + break + } + } } diff --git a/package.json b/package.json index 76aaf25..7d3e6bf 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { - "name" : "fayeswift-demo", - "version" : "1.0.0", - "dependencies" : { - "faye" : "1.0.3" + "name": "fayeswift-demo", + "version": "1.0.0", + "dependencies": { + "faye": "1.0.3" } } From 3f12b0d6b00e0133b8524b627e72d2cb768c0d92 Mon Sep 17 00:00:00 2001 From: Pavlos Simas Date: Thu, 4 Feb 2021 23:49:49 +0200 Subject: [PATCH 2/4] update delegate to swift5 --- Example/FayeSwift.xcodeproj/project.pbxproj | 9 +++++---- Example/FayeSwift/AppDelegate.swift | 2 +- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/Example/FayeSwift.xcodeproj/project.pbxproj b/Example/FayeSwift.xcodeproj/project.pbxproj index d0cfc75..0482780 100644 --- a/Example/FayeSwift.xcodeproj/project.pbxproj +++ b/Example/FayeSwift.xcodeproj/project.pbxproj @@ -229,6 +229,7 @@ developmentRegion = English; hasScannedForEncodings = 0; knownRegions = ( + English, en, Base, ); @@ -496,7 +497,7 @@ MODULE_NAME = ExampleApp; PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.demo.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_VERSION = 3.0; + SWIFT_VERSION = 5.0; }; name = Debug; }; @@ -510,7 +511,7 @@ MODULE_NAME = ExampleApp; PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.demo.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_VERSION = 3.0; + SWIFT_VERSION = 5.0; }; name = Release; }; @@ -528,7 +529,7 @@ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_VERSION = 3.0; + SWIFT_VERSION = 5.0; TEST_HOST = "$(BUILT_PRODUCTS_DIR)/FayeSwift_Example.app/FayeSwift_Example"; }; name = Debug; @@ -543,7 +544,7 @@ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_VERSION = 3.0; + SWIFT_VERSION = 5.0; TEST_HOST = "$(BUILT_PRODUCTS_DIR)/FayeSwift_Example.app/FayeSwift_Example"; }; name = Release; diff --git a/Example/FayeSwift/AppDelegate.swift b/Example/FayeSwift/AppDelegate.swift index 0347d3b..55ac64d 100644 --- a/Example/FayeSwift/AppDelegate.swift +++ b/Example/FayeSwift/AppDelegate.swift @@ -14,7 +14,7 @@ class AppDelegate: UIResponder, UIApplicationDelegate { var window: UIWindow? - func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { + func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { // Override point for customization after application launch. return true } From 1efe4998aef544e100ea72b180be43a4741dddcf Mon Sep 17 00:00:00 2001 From: Pavlos Simas Date: Thu, 4 Feb 2021 23:53:52 +0200 Subject: [PATCH 3/4] update libraries --- Example/FayeSwift.xcodeproj/project.pbxproj | 60 +- Example/Podfile.lock | 23 +- .../Local Podspecs/FayeSwift.podspec.json | 10 +- Example/Pods/Manifest.lock | 23 +- Example/Pods/Pods.xcodeproj/project.pbxproj | 1299 +++++++++------- Example/Pods/Starscream/README.md | 247 +-- .../Pods/Starscream/Source/SSLSecurity.swift | 260 ---- .../Pods/Starscream/Source/WebSocket.swift | 942 ------------ Example/Pods/SwiftyJSON/LICENSE | 2 +- Example/Pods/SwiftyJSON/README.md | 279 ++-- .../Pods/SwiftyJSON/Source/SwiftyJSON.swift | 1344 ----------------- .../FayeSwift/FayeSwift-prefix.pch | 8 + .../FayeSwift/FayeSwift-umbrella.h | 8 + ...ayeSwift_Example-acknowledgements.markdown | 2 +- ...s-FayeSwift_Example-acknowledgements.plist | 2 +- .../Pods-FayeSwift_Example-frameworks.sh | 142 +- .../Pods-FayeSwift_Example-umbrella.h | 8 + .../Pods-FayeSwift_Example.debug.xcconfig | 16 +- .../Pods-FayeSwift_Example.release.xcconfig | 16 +- ...-FayeSwift_Tests-acknowledgements.markdown | 2 +- ...ods-FayeSwift_Tests-acknowledgements.plist | 2 +- .../Pods-FayeSwift_Tests-frameworks.sh | 142 +- .../Pods-FayeSwift_Tests-umbrella.h | 8 + .../Pods-FayeSwift_Tests.debug.xcconfig | 16 +- .../Pods-FayeSwift_Tests.release.xcconfig | 16 +- .../Starscream/Starscream-prefix.pch | 8 + .../Starscream/Starscream-umbrella.h | 8 + .../SwiftyJSON/SwiftyJSON-prefix.pch | 8 + .../SwiftyJSON/SwiftyJSON-umbrella.h | 8 + 29 files changed, 1441 insertions(+), 3468 deletions(-) delete mode 100644 Example/Pods/Starscream/Source/SSLSecurity.swift delete mode 100644 Example/Pods/Starscream/Source/WebSocket.swift delete mode 100644 Example/Pods/SwiftyJSON/Source/SwiftyJSON.swift diff --git a/Example/FayeSwift.xcodeproj/project.pbxproj b/Example/FayeSwift.xcodeproj/project.pbxproj index 0482780..69341a3 100644 --- a/Example/FayeSwift.xcodeproj/project.pbxproj +++ b/Example/FayeSwift.xcodeproj/project.pbxproj @@ -171,7 +171,6 @@ 607FACCD1AFB9204008FA782 /* Frameworks */, 607FACCE1AFB9204008FA782 /* Resources */, 21F82E0E26ACF051FC7532F7 /* [CP] Embed Pods Frameworks */, - 59B2329E5037A036C89F0500 /* [CP] Copy Pods Resources */, ); buildRules = ( ); @@ -191,7 +190,6 @@ 607FACE21AFB9204008FA782 /* Frameworks */, 607FACE31AFB9204008FA782 /* Resources */, 9E2A77B21E9E7A5C4BE35879 /* [CP] Embed Pods Frameworks */, - A81BF78875162EB729A72AA7 /* [CP] Copy Pods Resources */, ); buildRules = ( ); @@ -271,13 +269,16 @@ files = ( ); inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", ); name = "[CP] Check Pods Manifest.lock"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-FayeSwift_Tests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; 21F82E0E26ACF051FC7532F7 /* [CP] Embed Pods Frameworks */ = { @@ -286,28 +287,20 @@ files = ( ); inputPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-FayeSwift_Example/Pods-FayeSwift_Example-frameworks.sh", + "${BUILT_PRODUCTS_DIR}/FayeSwift/FayeSwift.framework", + "${BUILT_PRODUCTS_DIR}/Starscream/Starscream.framework", + "${BUILT_PRODUCTS_DIR}/SwiftyJSON/SwiftyJSON.framework", ); name = "[CP] Embed Pods Frameworks"; outputPaths = ( + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FayeSwift.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Starscream.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SwiftyJSON.framework", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-FayeSwift_Example/Pods-FayeSwift_Example-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; - 59B2329E5037A036C89F0500 /* [CP] Copy Pods Resources */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = "[CP] Copy Pods Resources"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-FayeSwift_Example/Pods-FayeSwift_Example-resources.sh\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-FayeSwift_Example/Pods-FayeSwift_Example-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; 9E2A77B21E9E7A5C4BE35879 /* [CP] Embed Pods Frameworks */ = { @@ -316,28 +309,20 @@ files = ( ); inputPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-FayeSwift_Tests/Pods-FayeSwift_Tests-frameworks.sh", + "${BUILT_PRODUCTS_DIR}/FayeSwift/FayeSwift.framework", + "${BUILT_PRODUCTS_DIR}/Starscream/Starscream.framework", + "${BUILT_PRODUCTS_DIR}/SwiftyJSON/SwiftyJSON.framework", ); name = "[CP] Embed Pods Frameworks"; outputPaths = ( + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FayeSwift.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Starscream.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SwiftyJSON.framework", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-FayeSwift_Tests/Pods-FayeSwift_Tests-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; - A81BF78875162EB729A72AA7 /* [CP] Copy Pods Resources */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = "[CP] Copy Pods Resources"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-FayeSwift_Tests/Pods-FayeSwift_Tests-resources.sh\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-FayeSwift_Tests/Pods-FayeSwift_Tests-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; D398F2E44EC65E8B01959DBC /* [CP] Check Pods Manifest.lock */ = { @@ -346,13 +331,16 @@ files = ( ); inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", ); name = "[CP] Check Pods Manifest.lock"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-FayeSwift_Example-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ diff --git a/Example/Podfile.lock b/Example/Podfile.lock index cdd5614..296dec2 100644 --- a/Example/Podfile.lock +++ b/Example/Podfile.lock @@ -1,22 +1,27 @@ PODS: - - FayeSwift (0.2.0): - - Starscream (~> 2.0) - - SwiftyJSON (~> 3.1) - - Starscream (2.0.2) - - SwiftyJSON (3.1.3) + - FayeSwift (0.3.0): + - Starscream (~> 4.0) + - SwiftyJSON (~> 4.0) + - Starscream (4.0.4) + - SwiftyJSON (4.3.0) DEPENDENCIES: - FayeSwift (from `../`) +SPEC REPOS: + https://github.com/CocoaPods/Specs.git: + - Starscream + - SwiftyJSON + EXTERNAL SOURCES: FayeSwift: :path: "../" SPEC CHECKSUMS: - FayeSwift: b7889c3df7d9b37fa88253a4c9fbb6fcb4404993 - Starscream: 6c135a34e0a6e60cedaa0b30db67a4c05cf7cd38 - SwiftyJSON: 38a8ea2006779c0fc4c310cb2ee8195327740faf + FayeSwift: 958b14d0e4abcdd081dd35779b842bf072e4a3dc + Starscream: 5178aed56b316f13fa3bc55694e583d35dd414d9 + SwiftyJSON: 6faa0040f8b59dead0ee07436cbf76b73c08fd08 PODFILE CHECKSUM: cda739a33c3a43c81b405d9eee2a84c5b9d19f1b -COCOAPODS: 1.1.1 +COCOAPODS: 1.10.0 diff --git a/Example/Pods/Local Podspecs/FayeSwift.podspec.json b/Example/Pods/Local Podspecs/FayeSwift.podspec.json index 5836156..194cdd4 100644 --- a/Example/Pods/Local Podspecs/FayeSwift.podspec.json +++ b/Example/Pods/Local Podspecs/FayeSwift.podspec.json @@ -1,6 +1,6 @@ { "name": "FayeSwift", - "version": "0.2.0", + "version": "0.3.0", "summary": "A pure Swift Faye (Bayeux) Client", "description": "A Pure Swift Client Library for the Faye (Bayeux/Comet) Pub-Sub messaging server.\nThis client has been tested with the Faye (http://faye.jcoglan.com) implementation of the\nBayeux protocol. Currently only supports Websocket transport.", "homepage": "https://github.com/hamin/FayeSwift", @@ -10,22 +10,22 @@ }, "source": { "git": "https://github.com/hamin/FayeSwift.git", - "tag": "0.2.0" + "tag": "0.3.0" }, "social_media_url": "https://twitter.com/harisamin", "requires_arc": true, "platforms": { - "osx": "10.9", + "osx": "10.10", "ios": "8.0", "tvos": "9.0" }, "source_files": "Sources/*.swift", "dependencies": { "Starscream": [ - "~> 2.0" + "~> 4.0" ], "SwiftyJSON": [ - "~> 3.1" + "~> 4.0" ] } } diff --git a/Example/Pods/Manifest.lock b/Example/Pods/Manifest.lock index cdd5614..296dec2 100644 --- a/Example/Pods/Manifest.lock +++ b/Example/Pods/Manifest.lock @@ -1,22 +1,27 @@ PODS: - - FayeSwift (0.2.0): - - Starscream (~> 2.0) - - SwiftyJSON (~> 3.1) - - Starscream (2.0.2) - - SwiftyJSON (3.1.3) + - FayeSwift (0.3.0): + - Starscream (~> 4.0) + - SwiftyJSON (~> 4.0) + - Starscream (4.0.4) + - SwiftyJSON (4.3.0) DEPENDENCIES: - FayeSwift (from `../`) +SPEC REPOS: + https://github.com/CocoaPods/Specs.git: + - Starscream + - SwiftyJSON + EXTERNAL SOURCES: FayeSwift: :path: "../" SPEC CHECKSUMS: - FayeSwift: b7889c3df7d9b37fa88253a4c9fbb6fcb4404993 - Starscream: 6c135a34e0a6e60cedaa0b30db67a4c05cf7cd38 - SwiftyJSON: 38a8ea2006779c0fc4c310cb2ee8195327740faf + FayeSwift: 958b14d0e4abcdd081dd35779b842bf072e4a3dc + Starscream: 5178aed56b316f13fa3bc55694e583d35dd414d9 + SwiftyJSON: 6faa0040f8b59dead0ee07436cbf76b73c08fd08 PODFILE CHECKSUM: cda739a33c3a43c81b405d9eee2a84c5b9d19f1b -COCOAPODS: 1.1.1 +COCOAPODS: 1.10.0 diff --git a/Example/Pods/Pods.xcodeproj/project.pbxproj b/Example/Pods/Pods.xcodeproj/project.pbxproj index 7db9e25..f96892a 100644 --- a/Example/Pods/Pods.xcodeproj/project.pbxproj +++ b/Example/Pods/Pods.xcodeproj/project.pbxproj @@ -7,1105 +7,1248 @@ objects = { /* Begin PBXBuildFile section */ - 01491BBA557B2F18B2A77192743E3E55 /* SwiftyJSON-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 6DCD25231745CBB7A0DE8AE144F32C35 /* SwiftyJSON-dummy.m */; }; - 026017E12DAB48A922244C71A63253D0 /* Starscream-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = D47E6B74B427A4904D75990D1C34E829 /* Starscream-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 12A2D6DEF558554F285FBB6A2196E202 /* Pods-FayeSwift_Example-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 06B16C30B7CF62C246F4DD2B6BA325D2 /* Pods-FayeSwift_Example-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 16C3627510AB6B698291B30407553A5D /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF83ABEF1A458CAE5372C3E2E46D918F /* Foundation.framework */; }; - 1AF8A2644E64066D72B7AE1ED35E042E /* FayeClient+Parsing.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD6E1ADC55716BEA0CA275460382B07D /* FayeClient+Parsing.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 2140E1D04E961AF703FD04D54FF8C740 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF83ABEF1A458CAE5372C3E2E46D918F /* Foundation.framework */; }; - 2641943D2AB25D845A907E751D0D4A0E /* FayeClient+Transport.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDECAEB5EE9FA1ABB438BF7BFA54A873 /* FayeClient+Transport.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 372A1E8811704945874EB18F7BD1309F /* FayeClientDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C951632446E53D8608098AA9AE5EDEA /* FayeClientDelegate.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 4395CC6B51E36E7FA9DF24986CB85D58 /* StringExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6DA424137F7F26626CB88BD77A99423B /* StringExtensions.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 53956DED61FE62732C9218A7A387BC00 /* SwiftyJSON.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9A1314F41D4AF302873CCAE4DF95096E /* SwiftyJSON.framework */; }; - 5C79AABB8B872CDFC3596A03DA50F50F /* FayeSwift-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = D3A7795CDA243AB07B1664FEE1544038 /* FayeSwift-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 603A236E27FDBCDDDC245C7949FAC4AB /* Pods-FayeSwift_Tests-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 1DCE2224000629085D044E4A5FDB2710 /* Pods-FayeSwift_Tests-dummy.m */; }; - 630775D47B4762F060BF09A7AD3AD9F2 /* SwiftyJSON-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 6B923F40E09322629BC57536AFBDAB00 /* SwiftyJSON-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 66F8B4E224873FB0B03A14FF6D5055DA /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF83ABEF1A458CAE5372C3E2E46D918F /* Foundation.framework */; }; - 819CD987E43CF9B00A0BE165B3144C21 /* Pods-FayeSwift_Example-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 2FE9E957D59ADA0A662E4B8C1A7BD7E2 /* Pods-FayeSwift_Example-dummy.m */; }; - 888BD35738BB6F56062233497B82CEA4 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF83ABEF1A458CAE5372C3E2E46D918F /* Foundation.framework */; }; - 8F7F7274F17B1CF2A00BED441F5CFD67 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF83ABEF1A458CAE5372C3E2E46D918F /* Foundation.framework */; }; - 9590095A7427348F72D50958E6DF569D /* FayeClient.swift in Sources */ = {isa = PBXBuildFile; fileRef = B3144C4726BB0EB476A794EEFC0B2F26 /* FayeClient.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 97E28C082763F8A1B9DF116332FE45A5 /* FayeSwift-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 6F23ED994CFBB0F9B07BF334EA7FF240 /* FayeSwift-dummy.m */; }; - A3F622749F008AB61E99EF439E3B7551 /* WebSocket.swift in Sources */ = {isa = PBXBuildFile; fileRef = 87D64F48FA18233694918281C87E0266 /* WebSocket.swift */; settings = {COMPILER_FLAGS = "-fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; - AC29BC38767C449B4173F44C53632135 /* Pods-FayeSwift_Tests-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 10E4A21EDDC41F94B30C17F38403E413 /* Pods-FayeSwift_Tests-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B4F045C4EB5BA94B75966419EB72662A /* SSLSecurity.swift in Sources */ = {isa = PBXBuildFile; fileRef = 38A444149F18F886FD0A1E23B45D6671 /* SSLSecurity.swift */; settings = {COMPILER_FLAGS = "-fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; - B715F8A02147DC9AF882D4E8B8CA03A5 /* WebsocketTransport.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0DA092BAC435FAC54B26652A4967BBC2 /* WebsocketTransport.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - BD0EEEBB061534E4B0AA21C29937F7E9 /* FayeClient+Helper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 040DEA860EC7FF25C6B8F9F0C5AE8073 /* FayeClient+Helper.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - C96024BA34EFE5DFB81CAA301E6CBF9D /* SwiftyJSON.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0813DA1F91E6465D940389B245DB41E4 /* SwiftyJSON.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - D7C3BD0F56BE895E0425738268F11494 /* NSError+Helper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 24295EB91477AACF5542D54C350C5715 /* NSError+Helper.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - D82013AA00D169E2324113D1EA177494 /* FayeClient+Bayuex.swift in Sources */ = {isa = PBXBuildFile; fileRef = 00691AB4D533EDE30C5370EEE0AE7074 /* FayeClient+Bayuex.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - DB619B3DA5D1A31A839B17491D9AB6CF /* Starscream.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3E94F4BAAE418F28A0730CC56D7FACFF /* Starscream.framework */; }; - DF00F790990FE2A87CACDD519DA5FAA2 /* FayeSubscriptionModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4E2414E53B957CFF4E6F6E82CECEFA47 /* FayeSubscriptionModel.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - EA58C7FB9E131FA20044D726C8634078 /* FayeClient+Action.swift in Sources */ = {isa = PBXBuildFile; fileRef = C0DE0C357228154269715152013E357E /* FayeClient+Action.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - F13620786093149885BC1C94F8AE9FB9 /* Transport.swift in Sources */ = {isa = PBXBuildFile; fileRef = C0700FD7F6575455C46E83723884C015 /* Transport.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - F9073136443690E223D545CD2FF138B0 /* FayeClient+Subscriptions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0AC895133B34E9D0675395BA526347A6 /* FayeClient+Subscriptions.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - FED7F96749B4ACB6DAF206513C945CA9 /* Starscream-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 18C6718FA411202146721CBD6539BA6A /* Starscream-dummy.m */; }; + 009E9783076B45DB25F06E7081D65A9A /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 44AC46EA3118F253596F717AABF48C0C /* Foundation.framework */; }; + 01EA556326073C330397B6C62D210BC0 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 44AC46EA3118F253596F717AABF48C0C /* Foundation.framework */; }; + 02514C6327E028E8A5E7FC6D88519C2E /* FayeSubscriptionModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = FC7BCDC5A259F089269FB2797F886682 /* FayeSubscriptionModel.swift */; }; + 03F42EF060F918FCB94034BADD207192 /* Security.swift in Sources */ = {isa = PBXBuildFile; fileRef = F6AE787BA5174738451381D7B2D38DCD /* Security.swift */; }; + 080028A714D2CDE95F5658A8AA7F7DC7 /* Data+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0C869DFA23F3157ABEC1E94CCEB1B333 /* Data+Extensions.swift */; }; + 082C2D0BA21EF7CC8C8F961BF3A978BE /* TCPTransport.swift in Sources */ = {isa = PBXBuildFile; fileRef = BE7000740CE54BF2F6FAD931EBFC616D /* TCPTransport.swift */; }; + 183E3C0989284E087C58AF08B59FB147 /* SwiftyJSON-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 04532DE27BA396351B6DCDB94E171811 /* SwiftyJSON-dummy.m */; }; + 1976FF2342D8EA97D0E4E94B113F1B79 /* FayeClient.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30B2C35CE9935D738FA0F6FA4D148220 /* FayeClient.swift */; }; + 1AEA0CAF757D62F53A4D2A29522F177D /* NSError+Helper.swift in Sources */ = {isa = PBXBuildFile; fileRef = D842A857F41FDF80ACE6B157AE60EF53 /* NSError+Helper.swift */; }; + 1CD5C3696621E22314BB43ACF73861BB /* WSEngine.swift in Sources */ = {isa = PBXBuildFile; fileRef = 600191F25E748158E05A2F620875B93E /* WSEngine.swift */; }; + 2022CD318ED0FDC1B813886990347B3C /* WebsocketTransport.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A9C00FCC9EEF5D83954DA189DEA6995 /* WebsocketTransport.swift */; }; + 20757732DA726B83C7B97D8B0C4444A2 /* WSCompression.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9C5CD1482926BE8EE9AEC2EF35AE5A7F /* WSCompression.swift */; }; + 289BAECC2E9D9A40FD8A03D9F7ABC067 /* FayeSwift-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = E21A1ED0C2BFE2AB32926D11D459D04A /* FayeSwift-dummy.m */; }; + 389C55DF07F35EB9E1DA5BF3BFB889D1 /* FayeClient+Transport.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47F80C1678F45D0CE29D69C1A582B8D4 /* FayeClient+Transport.swift */; }; + 3A5EB45BA416AEF9887CED858AD0BCDA /* FayeClient+Subscriptions.swift in Sources */ = {isa = PBXBuildFile; fileRef = A3504982FE06306ACF2E9A55C0B7E3A0 /* FayeClient+Subscriptions.swift */; }; + 41ED8DB2172A22F2553A96F0FE8927DC /* FayeClient+Helper.swift in Sources */ = {isa = PBXBuildFile; fileRef = CAB96E548A303AD4C40C454D2501D45A /* FayeClient+Helper.swift */; }; + 4DC1F83B33550C0500BADE2AEEE7689E /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 44AC46EA3118F253596F717AABF48C0C /* Foundation.framework */; }; + 4E612D19378DFD596A70336B4397E010 /* Framer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 019192A4BF917B47CA91E6930950082E /* Framer.swift */; }; + 5385B10EE2EEC0A7E4C96284EE22B0DA /* FayeClient+Action.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A38DC86753BF5F9DDD7D7BFE8EC7658 /* FayeClient+Action.swift */; }; + 5A3945D46F24BE999EA51C46B688994E /* NativeEngine.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9383A4F4CBFA8063A5CF3799DCACFE47 /* NativeEngine.swift */; }; + 5D83EA1444DCE149D2D575387952896D /* WebSocket.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6395C74C842303EBD4A26F9D356B5D7B /* WebSocket.swift */; }; + 6678943E1A14084391B9C88F48C353E9 /* Pods-FayeSwift_Example-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 702ED4E00C35B47376D617A4E4BF3CE9 /* Pods-FayeSwift_Example-dummy.m */; }; + 695657D5F174F97B705F0EFEE8E9BD5C /* Pods-FayeSwift_Tests-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 5408A92C70DD1D719AD288C51BA3EDE7 /* Pods-FayeSwift_Tests-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6AA3A6CE085E09B1DBA0F77F52ABA1ED /* Engine.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0EFF9FBB3646355CE4F57C9A3039887A /* Engine.swift */; }; + 7229F1B70D621FCC743E6A63FBA2F954 /* HTTPHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4DDF4120CCE8B6ACE603D0A5E431A763 /* HTTPHandler.swift */; }; + 74D6A74DDE912D4B4A3BDC5792E7DA6E /* Transport.swift in Sources */ = {isa = PBXBuildFile; fileRef = 83925A48F20DFBE66AD641E181FB9671 /* Transport.swift */; }; + 79B477590AFD970A22C8D056748C2CCF /* FoundationHTTPHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = D9DE942C5983E2349DAB99FF8C9249C6 /* FoundationHTTPHandler.swift */; }; + 8FEC5AB670F8966A9950F06C4F4C078E /* Pods-FayeSwift_Tests-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 74CF4E2A192377428C5F06ECC9E8FA6C /* Pods-FayeSwift_Tests-dummy.m */; }; + 90EC03D0AE262EE98B24DD0C8EC53272 /* FayeClient+Parsing.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1D228A0E6A8D9F1FD2AD7FFCBBF979D9 /* FayeClient+Parsing.swift */; }; + 9310E593ACB62FCFDCE002B104CA34EC /* FoundationTransport.swift in Sources */ = {isa = PBXBuildFile; fileRef = 03864077A97CA4187D6428FEF1405985 /* FoundationTransport.swift */; }; + 9D07AC04CABB352B36E4C248B6B93F79 /* FayeSwift-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F27CD801D80B8C9087525A8F7B0E46E /* FayeSwift-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9D893832B5737682B3C0E7A54DAD798A /* FayeClientDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA6D231DF0A9508AA71751FFA6FCFB2F /* FayeClientDelegate.swift */; }; + 9F08FE9ABF5122760533C5E2D8054609 /* WebSocketServer.swift in Sources */ = {isa = PBXBuildFile; fileRef = A6F8EB3BF49A702FD77A58D2178BA13C /* WebSocketServer.swift */; }; + 9FA02AAE4D90A63F9852DC236B007597 /* StringExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 12F5D82B2DDC4C84869D0F957426AAF7 /* StringExtensions.swift */; }; + A26B83A8CC6254A8532A17DFE85E54C6 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 44AC46EA3118F253596F717AABF48C0C /* Foundation.framework */; }; + A62E0964A806CCD8795EB1DA20A35286 /* SwiftyJSON-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 137E4B54C6806C4B2F4D5109EC4C037A /* SwiftyJSON-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B3E80CC4B52925DD09FDEA47FD911957 /* Transport.swift in Sources */ = {isa = PBXBuildFile; fileRef = 182B122F42CD449E39CA2A655E05FC3C /* Transport.swift */; }; + B5BAA43A606FC74B91583F9E548EA7ED /* Starscream.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ABDA9325CBAA97E4B84F8490D5ECA6C8 /* Starscream.framework */; }; + BBDBCE87171A3C7C809D5C7399AB77D6 /* Pods-FayeSwift_Example-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = B0D1A2F55D87666017D56F16D5671E34 /* Pods-FayeSwift_Example-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C1A11516171E502D8CC8E1E009538E53 /* FoundationSecurity.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3B00987B3590A2F8F4F41412B0AAD63A /* FoundationSecurity.swift */; }; + C49B1CE5BF7611E757276B11D5770895 /* StringHTTPHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = E756CFC117B5D0C9810E89C8D6666AD2 /* StringHTTPHandler.swift */; }; + CA1E2D0CA27C9FF9009C8F01396170BC /* SwiftyJSON.swift in Sources */ = {isa = PBXBuildFile; fileRef = 969901E6DAA82EC64E551DE321F7AB81 /* SwiftyJSON.swift */; }; + CF42503F5B2608FF87F1ACB6B5F349E3 /* Starscream-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 1D15F8E0825622464E00D22213ADB131 /* Starscream-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D0E0BF424B38492B6C4F19A406DE491C /* Server.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7B69CD1B259E6B597B85E91AC78B4B30 /* Server.swift */; }; + D2FD54AE92438F42D59125653F45F683 /* Compression.swift in Sources */ = {isa = PBXBuildFile; fileRef = A0660AB0B39F07845A99E6707C2A048E /* Compression.swift */; }; + D334BE9FC73A3960F06B7F4EB30774E7 /* Starscream-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 00CC273B6530A631AF478E5C55EE9E92 /* Starscream-dummy.m */; }; + D48C15229208E7A55F58EF68842C284E /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 44AC46EA3118F253596F717AABF48C0C /* Foundation.framework */; }; + D4BCE04E78142E46E30BE217A893E70C /* FrameCollector.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4DB214B6DB4196EC68225559F14EFA7A /* FrameCollector.swift */; }; + DBE3BE1CDDB1C2B8C9F130B9B63EA7E1 /* FoundationHTTPServerHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 96EA9E707D038BBA844D68DC0550FCAD /* FoundationHTTPServerHandler.swift */; }; + E69AF92DD250A379875D37AF97E5644C /* SwiftyJSON.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C711AEE2DA04D0B11F5F008AD6A452CD /* SwiftyJSON.framework */; }; + EE60013A9B66611BB1E1AAF7F5D547AD /* FayeClient+Bayuex.swift in Sources */ = {isa = PBXBuildFile; fileRef = 62BA77D66B363C17314F569C916C3629 /* FayeClient+Bayuex.swift */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ - 0E2E944578DFD11725AE03E57A2F5E40 /* PBXContainerItemProxy */ = { + 08301F9D839053FA1B9FD7EC6CD8F122 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = 5C1F57BFFCD92868AF3442E38186A537; - remoteInfo = SwiftyJSON; - }; - 27129EF77D9CAC29F1151EC75DB48940 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; - proxyType = 1; - remoteGlobalIDString = BCC8AE0600D381881B2B45F29D3A3294; - remoteInfo = Starscream; + remoteGlobalIDString = 5E551DD8B190AB276724C510971C365C; + remoteInfo = FayeSwift; }; - 42672EE0E914C25799C038C3FFE417CC /* PBXContainerItemProxy */ = { + 58948A50C0CC5966A0B7C9D6B20DEE96 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = BCC8AE0600D381881B2B45F29D3A3294; - remoteInfo = Starscream; + remoteGlobalIDString = 5E551DD8B190AB276724C510971C365C; + remoteInfo = FayeSwift; }; - 5C2824D1A9A59FC7E0807982E563883C /* PBXContainerItemProxy */ = { + 6B6369347FF768B84505B632EC15441C /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = 5C48D6CAB4FBFA5BB8EFCD0C0947DF9D; - remoteInfo = FayeSwift; + remoteGlobalIDString = D118A6A04828FD3CDA8640CD2B6796D2; + remoteInfo = SwiftyJSON; }; - 663722FA80FCCEA51B761DBCF6962820 /* PBXContainerItemProxy */ = { + 6E3956540AF1825F3ECB7292B7C462D9 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = 5C48D6CAB4FBFA5BB8EFCD0C0947DF9D; - remoteInfo = FayeSwift; + remoteGlobalIDString = 9B78EE4AF6AE03E79D88886319853FF7; + remoteInfo = Starscream; }; - 906B0FC7D35C414F5BBE0F7DB11C519B /* PBXContainerItemProxy */ = { + 7A6E7FF2D328D5DE6D7FA83BC54C033E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = 5C1F57BFFCD92868AF3442E38186A537; + remoteGlobalIDString = D118A6A04828FD3CDA8640CD2B6796D2; remoteInfo = SwiftyJSON; }; - B4F58B425B8A192B0B43228D5BBD2FEF /* PBXContainerItemProxy */ = { + AFB403010A0D8CFF5B07C72D1C86F1E8 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = BCC8AE0600D381881B2B45F29D3A3294; + remoteGlobalIDString = 9B78EE4AF6AE03E79D88886319853FF7; remoteInfo = Starscream; }; - EF2196CF5D21430C9E4A6BAD3F790A0F /* PBXContainerItemProxy */ = { + BB38398073CCCCCF52D648918FA619FA /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = 5C1F57BFFCD92868AF3442E38186A537; + remoteGlobalIDString = D118A6A04828FD3CDA8640CD2B6796D2; remoteInfo = SwiftyJSON; }; + C42A85962569DA611B640CBC50B75C36 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 9B78EE4AF6AE03E79D88886319853FF7; + remoteInfo = Starscream; + }; /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ - 00691AB4D533EDE30C5370EEE0AE7074 /* FayeClient+Bayuex.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "FayeClient+Bayuex.swift"; sourceTree = ""; }; - 01718434A0A3E9C872093B738FC33F54 /* FayeSwift-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "FayeSwift-prefix.pch"; sourceTree = ""; }; - 040DEA860EC7FF25C6B8F9F0C5AE8073 /* FayeClient+Helper.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "FayeClient+Helper.swift"; sourceTree = ""; }; - 06B16C30B7CF62C246F4DD2B6BA325D2 /* Pods-FayeSwift_Example-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-FayeSwift_Example-umbrella.h"; sourceTree = ""; }; - 0813DA1F91E6465D940389B245DB41E4 /* SwiftyJSON.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SwiftyJSON.swift; path = Source/SwiftyJSON.swift; sourceTree = ""; }; - 0AC895133B34E9D0675395BA526347A6 /* FayeClient+Subscriptions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "FayeClient+Subscriptions.swift"; sourceTree = ""; }; - 0DA092BAC435FAC54B26652A4967BBC2 /* WebsocketTransport.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = WebsocketTransport.swift; sourceTree = ""; }; - 0F0AD0445D068E37E1C8498A3BF6150D /* SwiftyJSON-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SwiftyJSON-prefix.pch"; sourceTree = ""; }; - 10E4A21EDDC41F94B30C17F38403E413 /* Pods-FayeSwift_Tests-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-FayeSwift_Tests-umbrella.h"; sourceTree = ""; }; - 14B7C4FE824293ABEEF592A7E71C4AFC /* Pods-FayeSwift_Example-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-FayeSwift_Example-frameworks.sh"; sourceTree = ""; }; - 154C747E02B1DCBD4885645B5878477F /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 15765D47A6F3AC9E1A1D641D8B2ADB93 /* Pods-FayeSwift_Tests-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-FayeSwift_Tests-acknowledgements.plist"; sourceTree = ""; }; - 18C6718FA411202146721CBD6539BA6A /* Starscream-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Starscream-dummy.m"; sourceTree = ""; }; - 1DCE2224000629085D044E4A5FDB2710 /* Pods-FayeSwift_Tests-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-FayeSwift_Tests-dummy.m"; sourceTree = ""; }; - 1EC0280E5CCCCD96F81E63B562E157DD /* SwiftyJSON.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SwiftyJSON.xcconfig; sourceTree = ""; }; - 24295EB91477AACF5542D54C350C5715 /* NSError+Helper.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "NSError+Helper.swift"; sourceTree = ""; }; - 2692C5A026D6876DF0B8ED238232F2E6 /* Pods-FayeSwift_Example.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-FayeSwift_Example.release.xcconfig"; sourceTree = ""; }; - 2A14E4E75C0921B8190FF7805BDB1994 /* SwiftyJSON.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; path = SwiftyJSON.modulemap; sourceTree = ""; }; - 2D4EF06156597B9C0C9800347C3343FC /* Pods-FayeSwift_Tests-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-FayeSwift_Tests-acknowledgements.markdown"; sourceTree = ""; }; - 2FE9E957D59ADA0A662E4B8C1A7BD7E2 /* Pods-FayeSwift_Example-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-FayeSwift_Example-dummy.m"; sourceTree = ""; }; - 37D9B4C012C932EED434E89C515FA960 /* Pods-FayeSwift_Example.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; path = "Pods-FayeSwift_Example.modulemap"; sourceTree = ""; }; - 38A444149F18F886FD0A1E23B45D6671 /* SSLSecurity.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SSLSecurity.swift; path = Source/SSLSecurity.swift; sourceTree = ""; }; - 3E94F4BAAE418F28A0730CC56D7FACFF /* Starscream.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Starscream.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 4471A15D81938B6C2CE6A161EC41FEED /* Pods-FayeSwift_Example-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-FayeSwift_Example-acknowledgements.markdown"; sourceTree = ""; }; - 47C7E36F0C36BF6A9B7F26250E6F35CA /* Starscream-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Starscream-prefix.pch"; sourceTree = ""; }; - 47C81FB96686C0BE581D0FC3090AFC0D /* Starscream.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Starscream.xcconfig; sourceTree = ""; }; - 4885D84AE492246F7B92A35D5F4C2787 /* Pods-FayeSwift_Example-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-FayeSwift_Example-resources.sh"; sourceTree = ""; }; - 4AB2D41C9043F185BD735AC2476F72C6 /* Pods-FayeSwift_Tests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-FayeSwift_Tests.release.xcconfig"; sourceTree = ""; }; - 4E2414E53B957CFF4E6F6E82CECEFA47 /* FayeSubscriptionModel.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = FayeSubscriptionModel.swift; sourceTree = ""; }; - 502DCC2B2A3C577BB0E225CE04E63571 /* Pods_FayeSwift_Tests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Pods_FayeSwift_Tests.framework; path = "Pods-FayeSwift_Tests.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; - 5927E4C39F2970C28F9060D5EDF137B9 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 6B923F40E09322629BC57536AFBDAB00 /* SwiftyJSON-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SwiftyJSON-umbrella.h"; sourceTree = ""; }; - 6DA424137F7F26626CB88BD77A99423B /* StringExtensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StringExtensions.swift; sourceTree = ""; }; - 6DCD25231745CBB7A0DE8AE144F32C35 /* SwiftyJSON-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SwiftyJSON-dummy.m"; sourceTree = ""; }; - 6E1FB52B709CB783F4109CA61174C28B /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 6F23ED994CFBB0F9B07BF334EA7FF240 /* FayeSwift-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "FayeSwift-dummy.m"; sourceTree = ""; }; - 6FA9ABBAFE65EA53C5AECD4FEF5902DE /* Pods_FayeSwift_Example.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Pods_FayeSwift_Example.framework; path = "Pods-FayeSwift_Example.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; - 7B3AAC1CAA0FD33A1665A6CF0609129E /* FayeSwift.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = FayeSwift.xcconfig; sourceTree = ""; }; - 7C951632446E53D8608098AA9AE5EDEA /* FayeClientDelegate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = FayeClientDelegate.swift; sourceTree = ""; }; - 8617DDEB1D97E8945A823BA19722DD99 /* Starscream.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Starscream.framework; path = Starscream.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 87D64F48FA18233694918281C87E0266 /* WebSocket.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = WebSocket.swift; path = Source/WebSocket.swift; sourceTree = ""; }; - 93A4A3777CF96A4AAC1D13BA6DCCEA73 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; lastKnownFileType = text; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; - 9A1314F41D4AF302873CCAE4DF95096E /* SwiftyJSON.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SwiftyJSON.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 9C1D30B972C48AC8BD0E88DA4DB9F743 /* FayeSwift.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; path = FayeSwift.modulemap; sourceTree = ""; }; - AF83ABEF1A458CAE5372C3E2E46D918F /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS10.0.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; - B29C7FFE8D08A56E77C644C03000FC94 /* Pods-FayeSwift_Example-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-FayeSwift_Example-acknowledgements.plist"; sourceTree = ""; }; - B3144C4726BB0EB476A794EEFC0B2F26 /* FayeClient.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = FayeClient.swift; sourceTree = ""; }; - B661AAF1FC01F5B9EB53567F4990C215 /* Pods-FayeSwift_Example.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-FayeSwift_Example.debug.xcconfig"; sourceTree = ""; }; - B9AF00E1C38081852D6E23B7C286C779 /* SwiftyJSON.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = SwiftyJSON.framework; path = SwiftyJSON.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - B9BD316B84610E564DEC11C4F736BD36 /* Pods-FayeSwift_Tests-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-FayeSwift_Tests-resources.sh"; sourceTree = ""; }; - BC51989923EA37E862F09C698F868947 /* FayeSwift.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = FayeSwift.framework; path = FayeSwift.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - C0700FD7F6575455C46E83723884C015 /* Transport.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Transport.swift; sourceTree = ""; }; - C0DE0C357228154269715152013E357E /* FayeClient+Action.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "FayeClient+Action.swift"; sourceTree = ""; }; - CFB3E404A66EE13E14582416D200A72C /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - D26B5E2282A330BE919FE4EFDFB738B3 /* Pods-FayeSwift_Tests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-FayeSwift_Tests.debug.xcconfig"; sourceTree = ""; }; - D3A7795CDA243AB07B1664FEE1544038 /* FayeSwift-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "FayeSwift-umbrella.h"; sourceTree = ""; }; - D47E6B74B427A4904D75990D1C34E829 /* Starscream-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Starscream-umbrella.h"; sourceTree = ""; }; - DD6E1ADC55716BEA0CA275460382B07D /* FayeClient+Parsing.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "FayeClient+Parsing.swift"; sourceTree = ""; }; - DDECAEB5EE9FA1ABB438BF7BFA54A873 /* FayeClient+Transport.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "FayeClient+Transport.swift"; sourceTree = ""; }; - E4E07C18061452192A8755C57422BE93 /* Pods-FayeSwift_Tests-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-FayeSwift_Tests-frameworks.sh"; sourceTree = ""; }; - E6671F9532A947F40918CF9A0D44F70F /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - ED0A84AABA966E6DE908E1D84ABB429E /* Starscream.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; path = Starscream.modulemap; sourceTree = ""; }; - F3FCAA0DF279AAE5F2E8878F0749DD44 /* Pods-FayeSwift_Tests.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; path = "Pods-FayeSwift_Tests.modulemap"; sourceTree = ""; }; + 005933143634C2B56E2ADFEC64E23683 /* Starscream-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Starscream-Info.plist"; sourceTree = ""; }; + 00CC273B6530A631AF478E5C55EE9E92 /* Starscream-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Starscream-dummy.m"; sourceTree = ""; }; + 019192A4BF917B47CA91E6930950082E /* Framer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Framer.swift; path = Sources/Framer/Framer.swift; sourceTree = ""; }; + 035F9304E0F2E1BC0C5490782536D4B7 /* Starscream.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Starscream.debug.xcconfig; sourceTree = ""; }; + 03627D272E2CBF934FDE7AA65DD8EEA8 /* SwiftyJSON.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SwiftyJSON.debug.xcconfig; sourceTree = ""; }; + 03864077A97CA4187D6428FEF1405985 /* FoundationTransport.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FoundationTransport.swift; path = Sources/Transport/FoundationTransport.swift; sourceTree = ""; }; + 04532DE27BA396351B6DCDB94E171811 /* SwiftyJSON-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SwiftyJSON-dummy.m"; sourceTree = ""; }; + 0C869DFA23F3157ABEC1E94CCEB1B333 /* Data+Extensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Data+Extensions.swift"; path = "Sources/DataBytes/Data+Extensions.swift"; sourceTree = ""; }; + 0EFF9FBB3646355CE4F57C9A3039887A /* Engine.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Engine.swift; path = Sources/Engine/Engine.swift; sourceTree = ""; }; + 0F27CD801D80B8C9087525A8F7B0E46E /* FayeSwift-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "FayeSwift-umbrella.h"; sourceTree = ""; }; + 12F5D82B2DDC4C84869D0F957426AAF7 /* StringExtensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = StringExtensions.swift; path = Sources/StringExtensions.swift; sourceTree = ""; }; + 137E4B54C6806C4B2F4D5109EC4C037A /* SwiftyJSON-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SwiftyJSON-umbrella.h"; sourceTree = ""; }; + 13F871721477871167420E510E6E3742 /* Pods_FayeSwift_Example.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Pods_FayeSwift_Example.framework; path = "Pods-FayeSwift_Example.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; + 182B122F42CD449E39CA2A655E05FC3C /* Transport.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Transport.swift; path = Sources/Transport/Transport.swift; sourceTree = ""; }; + 1CF7D0728FF7E66128C139B6DAB6A7BB /* FayeSwift-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "FayeSwift-Info.plist"; sourceTree = ""; }; + 1D15F8E0825622464E00D22213ADB131 /* Starscream-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Starscream-umbrella.h"; sourceTree = ""; }; + 1D228A0E6A8D9F1FD2AD7FFCBBF979D9 /* FayeClient+Parsing.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "FayeClient+Parsing.swift"; path = "Sources/FayeClient+Parsing.swift"; sourceTree = ""; }; + 30B2C35CE9935D738FA0F6FA4D148220 /* FayeClient.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FayeClient.swift; path = Sources/FayeClient.swift; sourceTree = ""; }; + 3B00987B3590A2F8F4F41412B0AAD63A /* FoundationSecurity.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FoundationSecurity.swift; path = Sources/Security/FoundationSecurity.swift; sourceTree = ""; }; + 3B401EB5C3B21A6A18448D666D6FFD60 /* Starscream-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Starscream-prefix.pch"; sourceTree = ""; }; + 3CE22B4AF326ED6FB752EC8D09312AED /* FayeSwift.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = FayeSwift.modulemap; sourceTree = ""; }; + 44AC46EA3118F253596F717AABF48C0C /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.0.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; + 47F80C1678F45D0CE29D69C1A582B8D4 /* FayeClient+Transport.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "FayeClient+Transport.swift"; path = "Sources/FayeClient+Transport.swift"; sourceTree = ""; }; + 4DB214B6DB4196EC68225559F14EFA7A /* FrameCollector.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FrameCollector.swift; path = Sources/Framer/FrameCollector.swift; sourceTree = ""; }; + 4DDF4120CCE8B6ACE603D0A5E431A763 /* HTTPHandler.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = HTTPHandler.swift; path = Sources/Framer/HTTPHandler.swift; sourceTree = ""; }; + 528FBBFFC84FFBEF0E7DDF0982562E0B /* Pods-FayeSwift_Tests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-FayeSwift_Tests.release.xcconfig"; sourceTree = ""; }; + 5408A92C70DD1D719AD288C51BA3EDE7 /* Pods-FayeSwift_Tests-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-FayeSwift_Tests-umbrella.h"; sourceTree = ""; }; + 5E6CC62AB0D140277E579CE5E18F1508 /* Pods-FayeSwift_Example-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-FayeSwift_Example-frameworks.sh"; sourceTree = ""; }; + 5F7F3D733E01300A4E277E94D7A39D09 /* Pods-FayeSwift_Tests-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-FayeSwift_Tests-frameworks.sh"; sourceTree = ""; }; + 600191F25E748158E05A2F620875B93E /* WSEngine.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = WSEngine.swift; path = Sources/Engine/WSEngine.swift; sourceTree = ""; }; + 627AB51B462563DCE5A8D8BA1FFDC869 /* License */ = {isa = PBXFileReference; includeInIndex = 1; path = License; sourceTree = ""; }; + 62BA77D66B363C17314F569C916C3629 /* FayeClient+Bayuex.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "FayeClient+Bayuex.swift"; path = "Sources/FayeClient+Bayuex.swift"; sourceTree = ""; }; + 6395C74C842303EBD4A26F9D356B5D7B /* WebSocket.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = WebSocket.swift; path = Sources/Starscream/WebSocket.swift; sourceTree = ""; }; + 6E810AE5C04F854E8DFC92ACC290FA50 /* Pods-FayeSwift_Example-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-FayeSwift_Example-acknowledgements.markdown"; sourceTree = ""; }; + 702ED4E00C35B47376D617A4E4BF3CE9 /* Pods-FayeSwift_Example-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-FayeSwift_Example-dummy.m"; sourceTree = ""; }; + 70787FFE19ECF58ECBD3C87AF1EFA14F /* FayeSwift.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = FayeSwift.debug.xcconfig; sourceTree = ""; }; + 74CF4E2A192377428C5F06ECC9E8FA6C /* Pods-FayeSwift_Tests-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-FayeSwift_Tests-dummy.m"; sourceTree = ""; }; + 7B69CD1B259E6B597B85E91AC78B4B30 /* Server.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Server.swift; path = Sources/Server/Server.swift; sourceTree = ""; }; + 7DAD9B664EF4965431CCE924B1A86027 /* Pods-FayeSwift_Tests-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-FayeSwift_Tests-acknowledgements.plist"; sourceTree = ""; }; + 7DCFC525E0C4FB7B05B9DD90891FD2E9 /* Pods-FayeSwift_Tests-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-FayeSwift_Tests-acknowledgements.markdown"; sourceTree = ""; }; + 803B043628E27E9B05B3949999D24303 /* Pods_FayeSwift_Tests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Pods_FayeSwift_Tests.framework; path = "Pods-FayeSwift_Tests.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; + 83925A48F20DFBE66AD641E181FB9671 /* Transport.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Transport.swift; path = Sources/Transport.swift; sourceTree = ""; }; + 87D3D79C06A48AD16D3AA6A1E06BFA8A /* FayeSwift.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; path = FayeSwift.podspec; sourceTree = ""; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; + 88A91D0DE346AF2B5ED1D13CFCABC47A /* SwiftyJSON-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SwiftyJSON-prefix.pch"; sourceTree = ""; }; + 891B2270823847ED23F2ECFC28F935EC /* Starscream.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Starscream.framework; path = Starscream.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 8A66E4783B11BC4EC73ADED26BA2F585 /* Readme.md */ = {isa = PBXFileReference; includeInIndex = 1; path = Readme.md; sourceTree = ""; }; + 8DBA75325A45FA4137A83B047AEF58FF /* FayeSwift.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = FayeSwift.release.xcconfig; sourceTree = ""; }; + 92B45F50B2100AC6E199BE823EB478C5 /* Pods-FayeSwift_Tests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-FayeSwift_Tests.debug.xcconfig"; sourceTree = ""; }; + 9383A4F4CBFA8063A5CF3799DCACFE47 /* NativeEngine.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NativeEngine.swift; path = Sources/Engine/NativeEngine.swift; sourceTree = ""; }; + 969901E6DAA82EC64E551DE321F7AB81 /* SwiftyJSON.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SwiftyJSON.swift; path = Source/SwiftyJSON/SwiftyJSON.swift; sourceTree = ""; }; + 96EA9E707D038BBA844D68DC0550FCAD /* FoundationHTTPServerHandler.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FoundationHTTPServerHandler.swift; path = Sources/Framer/FoundationHTTPServerHandler.swift; sourceTree = ""; }; + 9A38DC86753BF5F9DDD7D7BFE8EC7658 /* FayeClient+Action.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "FayeClient+Action.swift"; path = "Sources/FayeClient+Action.swift"; sourceTree = ""; }; + 9A9C00FCC9EEF5D83954DA189DEA6995 /* WebsocketTransport.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = WebsocketTransport.swift; path = Sources/WebsocketTransport.swift; sourceTree = ""; }; + 9C5CD1482926BE8EE9AEC2EF35AE5A7F /* WSCompression.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = WSCompression.swift; path = Sources/Compression/WSCompression.swift; sourceTree = ""; }; + 9CBA41A2E26564B60DA46B68C45D21B6 /* Starscream.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Starscream.release.xcconfig; sourceTree = ""; }; + 9CDA2A0B34EDB5063A8EBF3868D88867 /* FayeSwift.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = FayeSwift.framework; path = FayeSwift.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 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; }; + A0660AB0B39F07845A99E6707C2A048E /* Compression.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Compression.swift; path = Sources/Compression/Compression.swift; sourceTree = ""; }; + A334613D59552A1553E912C4E2814646 /* Pods-FayeSwift_Tests-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-FayeSwift_Tests-Info.plist"; sourceTree = ""; }; + A3504982FE06306ACF2E9A55C0B7E3A0 /* FayeClient+Subscriptions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "FayeClient+Subscriptions.swift"; path = "Sources/FayeClient+Subscriptions.swift"; sourceTree = ""; }; + A35C786F187E0EDCF9002FFF106F6C57 /* Pods-FayeSwift_Example.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-FayeSwift_Example.debug.xcconfig"; sourceTree = ""; }; + A4C7045C4870952847E837EFE78B3C9C /* SwiftyJSON-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "SwiftyJSON-Info.plist"; sourceTree = ""; }; + A6F8EB3BF49A702FD77A58D2178BA13C /* WebSocketServer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = WebSocketServer.swift; path = Sources/Server/WebSocketServer.swift; sourceTree = ""; }; + A7619E8DC7E2EDC39E19C3D22F298A83 /* Pods-FayeSwift_Example-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-FayeSwift_Example-acknowledgements.plist"; sourceTree = ""; }; + ABDA9325CBAA97E4B84F8490D5ECA6C8 /* Starscream.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Starscream.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + B0D1A2F55D87666017D56F16D5671E34 /* Pods-FayeSwift_Example-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-FayeSwift_Example-umbrella.h"; sourceTree = ""; }; + B46A5A95935228E00C289D459B6A52CB /* Pods-FayeSwift_Tests.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-FayeSwift_Tests.modulemap"; sourceTree = ""; }; + BE7000740CE54BF2F6FAD931EBFC616D /* TCPTransport.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TCPTransport.swift; path = Sources/Transport/TCPTransport.swift; sourceTree = ""; }; + BEC86F6E4914D08D02F45B8563B29D66 /* Pods-FayeSwift_Example-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-FayeSwift_Example-Info.plist"; sourceTree = ""; }; + C57FB2FDD32037F0419D6F1713FDC524 /* FayeSwift-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "FayeSwift-prefix.pch"; sourceTree = ""; }; + C711AEE2DA04D0B11F5F008AD6A452CD /* SwiftyJSON.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SwiftyJSON.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + CAB96E548A303AD4C40C454D2501D45A /* FayeClient+Helper.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "FayeClient+Helper.swift"; path = "Sources/FayeClient+Helper.swift"; sourceTree = ""; }; + CC09C6A1CD1691C8FE27E54FC92DC1A1 /* Pods-FayeSwift_Example.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-FayeSwift_Example.release.xcconfig"; sourceTree = ""; }; + D1581252C29CCD72B66765837C3CB8F5 /* Starscream.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = Starscream.modulemap; sourceTree = ""; }; + D842A857F41FDF80ACE6B157AE60EF53 /* NSError+Helper.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "NSError+Helper.swift"; path = "Sources/NSError+Helper.swift"; sourceTree = ""; }; + D9DE942C5983E2349DAB99FF8C9249C6 /* FoundationHTTPHandler.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FoundationHTTPHandler.swift; path = Sources/Framer/FoundationHTTPHandler.swift; sourceTree = ""; }; + DA6D231DF0A9508AA71751FFA6FCFB2F /* FayeClientDelegate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FayeClientDelegate.swift; path = Sources/FayeClientDelegate.swift; sourceTree = ""; }; + E21A1ED0C2BFE2AB32926D11D459D04A /* FayeSwift-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "FayeSwift-dummy.m"; sourceTree = ""; }; + E23C076BA70925415F490FEDB215DA92 /* SwiftyJSON.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = SwiftyJSON.framework; path = SwiftyJSON.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + E4BEE8E935FF157A26EB05E830900319 /* SwiftyJSON.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = SwiftyJSON.modulemap; sourceTree = ""; }; + E756CFC117B5D0C9810E89C8D6666AD2 /* StringHTTPHandler.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = StringHTTPHandler.swift; path = Sources/Framer/StringHTTPHandler.swift; sourceTree = ""; }; + F6AE787BA5174738451381D7B2D38DCD /* Security.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Security.swift; path = Sources/Security/Security.swift; sourceTree = ""; }; + F7E10C05BA4050009900CF7E9BF64C8B /* SwiftyJSON.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SwiftyJSON.release.xcconfig; sourceTree = ""; }; + FC7BCDC5A259F089269FB2797F886682 /* FayeSubscriptionModel.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FayeSubscriptionModel.swift; path = Sources/FayeSubscriptionModel.swift; sourceTree = ""; }; + FE0C7154FB2910C429E0C8C92035FE9F /* Pods-FayeSwift_Example.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-FayeSwift_Example.modulemap"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 4EDDF933F2400C2E4D59159875DE4F19 /* Frameworks */ = { + 0C5CFA1B8EDA4E2408E489873900F2E3 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 888BD35738BB6F56062233497B82CEA4 /* Foundation.framework in Frameworks */, + A26B83A8CC6254A8532A17DFE85E54C6 /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 55482E57D69A6BEE3AB08D61E8D44F5A /* Frameworks */ = { + 2A2443D6D1AE485F3A505C6AD5710843 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 16C3627510AB6B698291B30407553A5D /* Foundation.framework in Frameworks */, + 01EA556326073C330397B6C62D210BC0 /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 9AE92D03ECEE8678AEF5195F0D5F65A7 /* Frameworks */ = { + 46FC9EE4AFF0B469DED017E4C535618A /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 8F7F7274F17B1CF2A00BED441F5CFD67 /* Foundation.framework in Frameworks */, + 4DC1F83B33550C0500BADE2AEEE7689E /* Foundation.framework in Frameworks */, + B5BAA43A606FC74B91583F9E548EA7ED /* Starscream.framework in Frameworks */, + E69AF92DD250A379875D37AF97E5644C /* SwiftyJSON.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - AC8BC9D4F3FD3DEC442EFCF527C2C4B2 /* Frameworks */ = { + EA81AAD06934C8707EDBB35BAB5D3A92 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 66F8B4E224873FB0B03A14FF6D5055DA /* Foundation.framework in Frameworks */, - DB619B3DA5D1A31A839B17491D9AB6CF /* Starscream.framework in Frameworks */, - 53956DED61FE62732C9218A7A387BC00 /* SwiftyJSON.framework in Frameworks */, + 009E9783076B45DB25F06E7081D65A9A /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - C6EA43D132CFBD43EBC704B9E9E413DF /* Frameworks */ = { + FDFE8A95FD356B3AF372387CBB7630E0 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 2140E1D04E961AF703FD04D54FF8C740 /* Foundation.framework in Frameworks */, + D48C15229208E7A55F58EF68842C284E /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 000A61D7F0D0221F20F470656F297E70 /* Targets Support Files */ = { + 0A65714386486893D8914810627CE3A3 /* Starscream */ = { isa = PBXGroup; children = ( - AEC58E9B2FE610C5D55CBB2FA4D34F2A /* Pods-FayeSwift_Example */, - 0A3C1A1DE210D08A1510BD9669BDF551 /* Pods-FayeSwift_Tests */, + A0660AB0B39F07845A99E6707C2A048E /* Compression.swift */, + 0C869DFA23F3157ABEC1E94CCEB1B333 /* Data+Extensions.swift */, + 0EFF9FBB3646355CE4F57C9A3039887A /* Engine.swift */, + D9DE942C5983E2349DAB99FF8C9249C6 /* FoundationHTTPHandler.swift */, + 96EA9E707D038BBA844D68DC0550FCAD /* FoundationHTTPServerHandler.swift */, + 3B00987B3590A2F8F4F41412B0AAD63A /* FoundationSecurity.swift */, + 03864077A97CA4187D6428FEF1405985 /* FoundationTransport.swift */, + 4DB214B6DB4196EC68225559F14EFA7A /* FrameCollector.swift */, + 019192A4BF917B47CA91E6930950082E /* Framer.swift */, + 4DDF4120CCE8B6ACE603D0A5E431A763 /* HTTPHandler.swift */, + 9383A4F4CBFA8063A5CF3799DCACFE47 /* NativeEngine.swift */, + F6AE787BA5174738451381D7B2D38DCD /* Security.swift */, + 7B69CD1B259E6B597B85E91AC78B4B30 /* Server.swift */, + E756CFC117B5D0C9810E89C8D6666AD2 /* StringHTTPHandler.swift */, + BE7000740CE54BF2F6FAD931EBFC616D /* TCPTransport.swift */, + 182B122F42CD449E39CA2A655E05FC3C /* Transport.swift */, + 6395C74C842303EBD4A26F9D356B5D7B /* WebSocket.swift */, + A6F8EB3BF49A702FD77A58D2178BA13C /* WebSocketServer.swift */, + 9C5CD1482926BE8EE9AEC2EF35AE5A7F /* WSCompression.swift */, + 600191F25E748158E05A2F620875B93E /* WSEngine.swift */, + EEBA030A415C4F1CD2E875F148A3AC38 /* Support Files */, ); - name = "Targets Support Files"; + name = Starscream; + path = Starscream; sourceTree = ""; }; - 0A3C1A1DE210D08A1510BD9669BDF551 /* Pods-FayeSwift_Tests */ = { + 54DC3F87B51235AEFC1260290499871B /* Pod */ = { isa = PBXGroup; children = ( - 154C747E02B1DCBD4885645B5878477F /* Info.plist */, - F3FCAA0DF279AAE5F2E8878F0749DD44 /* Pods-FayeSwift_Tests.modulemap */, - 2D4EF06156597B9C0C9800347C3343FC /* Pods-FayeSwift_Tests-acknowledgements.markdown */, - 15765D47A6F3AC9E1A1D641D8B2ADB93 /* Pods-FayeSwift_Tests-acknowledgements.plist */, - 1DCE2224000629085D044E4A5FDB2710 /* Pods-FayeSwift_Tests-dummy.m */, - E4E07C18061452192A8755C57422BE93 /* Pods-FayeSwift_Tests-frameworks.sh */, - B9BD316B84610E564DEC11C4F736BD36 /* Pods-FayeSwift_Tests-resources.sh */, - 10E4A21EDDC41F94B30C17F38403E413 /* Pods-FayeSwift_Tests-umbrella.h */, - D26B5E2282A330BE919FE4EFDFB738B3 /* Pods-FayeSwift_Tests.debug.xcconfig */, - 4AB2D41C9043F185BD735AC2476F72C6 /* Pods-FayeSwift_Tests.release.xcconfig */, + 87D3D79C06A48AD16D3AA6A1E06BFA8A /* FayeSwift.podspec */, + 627AB51B462563DCE5A8D8BA1FFDC869 /* License */, + 8A66E4783B11BC4EC73ADED26BA2F585 /* Readme.md */, ); - name = "Pods-FayeSwift_Tests"; - path = "Target Support Files/Pods-FayeSwift_Tests"; + name = Pod; sourceTree = ""; }; - 0C03422930E80D7BB92C5C859589F09F /* Pods */ = { + 6563A60F5A5BF11CB0170B4878038DFF /* Pods-FayeSwift_Example */ = { isa = PBXGroup; children = ( - B60722EF6A0F9DCD2D7C6D03F8B362CD /* Starscream */, - 48BC61B70DBB2FA057A57FF358488F76 /* SwiftyJSON */, + FE0C7154FB2910C429E0C8C92035FE9F /* Pods-FayeSwift_Example.modulemap */, + 6E810AE5C04F854E8DFC92ACC290FA50 /* Pods-FayeSwift_Example-acknowledgements.markdown */, + A7619E8DC7E2EDC39E19C3D22F298A83 /* Pods-FayeSwift_Example-acknowledgements.plist */, + 702ED4E00C35B47376D617A4E4BF3CE9 /* Pods-FayeSwift_Example-dummy.m */, + 5E6CC62AB0D140277E579CE5E18F1508 /* Pods-FayeSwift_Example-frameworks.sh */, + BEC86F6E4914D08D02F45B8563B29D66 /* Pods-FayeSwift_Example-Info.plist */, + B0D1A2F55D87666017D56F16D5671E34 /* Pods-FayeSwift_Example-umbrella.h */, + A35C786F187E0EDCF9002FFF106F6C57 /* Pods-FayeSwift_Example.debug.xcconfig */, + CC09C6A1CD1691C8FE27E54FC92DC1A1 /* Pods-FayeSwift_Example.release.xcconfig */, ); - name = Pods; + name = "Pods-FayeSwift_Example"; + path = "Target Support Files/Pods-FayeSwift_Example"; sourceTree = ""; }; - 0DB5BD81DCAEB161F8916282ABFD3340 /* Frameworks */ = { + 6A8594B36C3CDAD207769405697637CF /* iOS */ = { isa = PBXGroup; children = ( - 3E94F4BAAE418F28A0730CC56D7FACFF /* Starscream.framework */, - 9A1314F41D4AF302873CCAE4DF95096E /* SwiftyJSON.framework */, - FD9348BF3D0247517870C91A35D015B9 /* iOS */, + 44AC46EA3118F253596F717AABF48C0C /* Foundation.framework */, ); - name = Frameworks; + name = iOS; sourceTree = ""; }; - 142346D50CBE4F37FCCAE9D64C36FDC1 /* Products */ = { + 84263BD137D3BB681B677A08B3FA1D4C /* FayeSwift */ = { isa = PBXGroup; children = ( - BC51989923EA37E862F09C698F868947 /* FayeSwift.framework */, - 6FA9ABBAFE65EA53C5AECD4FEF5902DE /* Pods_FayeSwift_Example.framework */, - 502DCC2B2A3C577BB0E225CE04E63571 /* Pods_FayeSwift_Tests.framework */, - 8617DDEB1D97E8945A823BA19722DD99 /* Starscream.framework */, - B9AF00E1C38081852D6E23B7C286C779 /* SwiftyJSON.framework */, + 30B2C35CE9935D738FA0F6FA4D148220 /* FayeClient.swift */, + 9A38DC86753BF5F9DDD7D7BFE8EC7658 /* FayeClient+Action.swift */, + 62BA77D66B363C17314F569C916C3629 /* FayeClient+Bayuex.swift */, + CAB96E548A303AD4C40C454D2501D45A /* FayeClient+Helper.swift */, + 1D228A0E6A8D9F1FD2AD7FFCBBF979D9 /* FayeClient+Parsing.swift */, + A3504982FE06306ACF2E9A55C0B7E3A0 /* FayeClient+Subscriptions.swift */, + 47F80C1678F45D0CE29D69C1A582B8D4 /* FayeClient+Transport.swift */, + DA6D231DF0A9508AA71751FFA6FCFB2F /* FayeClientDelegate.swift */, + FC7BCDC5A259F089269FB2797F886682 /* FayeSubscriptionModel.swift */, + D842A857F41FDF80ACE6B157AE60EF53 /* NSError+Helper.swift */, + 12F5D82B2DDC4C84869D0F957426AAF7 /* StringExtensions.swift */, + 83925A48F20DFBE66AD641E181FB9671 /* Transport.swift */, + 9A9C00FCC9EEF5D83954DA189DEA6995 /* WebsocketTransport.swift */, + 54DC3F87B51235AEFC1260290499871B /* Pod */, + 90BC262D359FF7C1413BBF15206259AF /* Support Files */, ); - name = Products; + name = FayeSwift; + path = ../..; sourceTree = ""; }; - 1F6C69005CE5773E87D416DED050CEA8 /* Development Pods */ = { + 85422BCB99D41B108592CBC36D07C319 /* Pods-FayeSwift_Tests */ = { isa = PBXGroup; children = ( - 7BECE1B843E487DAEB4272B5E771533E /* FayeSwift */, + B46A5A95935228E00C289D459B6A52CB /* Pods-FayeSwift_Tests.modulemap */, + 7DCFC525E0C4FB7B05B9DD90891FD2E9 /* Pods-FayeSwift_Tests-acknowledgements.markdown */, + 7DAD9B664EF4965431CCE924B1A86027 /* Pods-FayeSwift_Tests-acknowledgements.plist */, + 74CF4E2A192377428C5F06ECC9E8FA6C /* Pods-FayeSwift_Tests-dummy.m */, + 5F7F3D733E01300A4E277E94D7A39D09 /* Pods-FayeSwift_Tests-frameworks.sh */, + A334613D59552A1553E912C4E2814646 /* Pods-FayeSwift_Tests-Info.plist */, + 5408A92C70DD1D719AD288C51BA3EDE7 /* Pods-FayeSwift_Tests-umbrella.h */, + 92B45F50B2100AC6E199BE823EB478C5 /* Pods-FayeSwift_Tests.debug.xcconfig */, + 528FBBFFC84FFBEF0E7DDF0982562E0B /* Pods-FayeSwift_Tests.release.xcconfig */, ); - name = "Development Pods"; + name = "Pods-FayeSwift_Tests"; + path = "Target Support Files/Pods-FayeSwift_Tests"; sourceTree = ""; }; - 48BC61B70DBB2FA057A57FF358488F76 /* SwiftyJSON */ = { + 90BC262D359FF7C1413BBF15206259AF /* Support Files */ = { isa = PBXGroup; children = ( - 0813DA1F91E6465D940389B245DB41E4 /* SwiftyJSON.swift */, - 9BE8F84C840D474BB60E62D4A8259C63 /* Support Files */, + 3CE22B4AF326ED6FB752EC8D09312AED /* FayeSwift.modulemap */, + E21A1ED0C2BFE2AB32926D11D459D04A /* FayeSwift-dummy.m */, + 1CF7D0728FF7E66128C139B6DAB6A7BB /* FayeSwift-Info.plist */, + C57FB2FDD32037F0419D6F1713FDC524 /* FayeSwift-prefix.pch */, + 0F27CD801D80B8C9087525A8F7B0E46E /* FayeSwift-umbrella.h */, + 70787FFE19ECF58ECBD3C87AF1EFA14F /* FayeSwift.debug.xcconfig */, + 8DBA75325A45FA4137A83B047AEF58FF /* FayeSwift.release.xcconfig */, ); - name = SwiftyJSON; - path = SwiftyJSON; + name = "Support Files"; + path = "Example/Pods/Target Support Files/FayeSwift"; sourceTree = ""; }; - 57072CFE2F97B4E7645A18D9267BA425 /* Support Files */ = { + A3762543793836511D559E05A4FF4E9F /* Development Pods */ = { isa = PBXGroup; children = ( - CFB3E404A66EE13E14582416D200A72C /* Info.plist */, - ED0A84AABA966E6DE908E1D84ABB429E /* Starscream.modulemap */, - 47C81FB96686C0BE581D0FC3090AFC0D /* Starscream.xcconfig */, - 18C6718FA411202146721CBD6539BA6A /* Starscream-dummy.m */, - 47C7E36F0C36BF6A9B7F26250E6F35CA /* Starscream-prefix.pch */, - D47E6B74B427A4904D75990D1C34E829 /* Starscream-umbrella.h */, + 84263BD137D3BB681B677A08B3FA1D4C /* FayeSwift */, ); - name = "Support Files"; - path = "../Target Support Files/Starscream"; + name = "Development Pods"; sourceTree = ""; }; - 7BECE1B843E487DAEB4272B5E771533E /* FayeSwift */ = { + AADEC59BC2C46A2EB4239F071A12322F /* Targets Support Files */ = { isa = PBXGroup; children = ( - 8036FC47B43C006D2E5847AA468D6316 /* Sources */, - 9ACEECA4EA200705374D27971C0A3EAE /* Support Files */, + 6563A60F5A5BF11CB0170B4878038DFF /* Pods-FayeSwift_Example */, + 85422BCB99D41B108592CBC36D07C319 /* Pods-FayeSwift_Tests */, ); - name = FayeSwift; - path = ../..; + name = "Targets Support Files"; sourceTree = ""; }; - 7DB346D0F39D3F0E887471402A8071AB = { + B0EEE520F5C783F884EF287BEADC7484 /* SwiftyJSON */ = { isa = PBXGroup; children = ( - 93A4A3777CF96A4AAC1D13BA6DCCEA73 /* Podfile */, - 1F6C69005CE5773E87D416DED050CEA8 /* Development Pods */, - 0DB5BD81DCAEB161F8916282ABFD3340 /* Frameworks */, - 0C03422930E80D7BB92C5C859589F09F /* Pods */, - 142346D50CBE4F37FCCAE9D64C36FDC1 /* Products */, - 000A61D7F0D0221F20F470656F297E70 /* Targets Support Files */, + 969901E6DAA82EC64E551DE321F7AB81 /* SwiftyJSON.swift */, + D3FA26D6466D9631BFA9EB9A4AAA42DC /* Support Files */, ); + name = SwiftyJSON; + path = SwiftyJSON; sourceTree = ""; }; - 8036FC47B43C006D2E5847AA468D6316 /* Sources */ = { + CB1BBFCAB1161547233ABDD1062A1F53 /* Products */ = { isa = PBXGroup; children = ( - B3144C4726BB0EB476A794EEFC0B2F26 /* FayeClient.swift */, - C0DE0C357228154269715152013E357E /* FayeClient+Action.swift */, - 00691AB4D533EDE30C5370EEE0AE7074 /* FayeClient+Bayuex.swift */, - 040DEA860EC7FF25C6B8F9F0C5AE8073 /* FayeClient+Helper.swift */, - DD6E1ADC55716BEA0CA275460382B07D /* FayeClient+Parsing.swift */, - 0AC895133B34E9D0675395BA526347A6 /* FayeClient+Subscriptions.swift */, - DDECAEB5EE9FA1ABB438BF7BFA54A873 /* FayeClient+Transport.swift */, - 7C951632446E53D8608098AA9AE5EDEA /* FayeClientDelegate.swift */, - 4E2414E53B957CFF4E6F6E82CECEFA47 /* FayeSubscriptionModel.swift */, - 24295EB91477AACF5542D54C350C5715 /* NSError+Helper.swift */, - 6DA424137F7F26626CB88BD77A99423B /* StringExtensions.swift */, - C0700FD7F6575455C46E83723884C015 /* Transport.swift */, - 0DA092BAC435FAC54B26652A4967BBC2 /* WebsocketTransport.swift */, + 9CDA2A0B34EDB5063A8EBF3868D88867 /* FayeSwift.framework */, + 13F871721477871167420E510E6E3742 /* Pods_FayeSwift_Example.framework */, + 803B043628E27E9B05B3949999D24303 /* Pods_FayeSwift_Tests.framework */, + 891B2270823847ED23F2ECFC28F935EC /* Starscream.framework */, + E23C076BA70925415F490FEDB215DA92 /* SwiftyJSON.framework */, ); - name = Sources; - path = Sources; + name = Products; sourceTree = ""; }; - 9ACEECA4EA200705374D27971C0A3EAE /* Support Files */ = { + CF1408CF629C7361332E53B88F7BD30C = { isa = PBXGroup; children = ( - 9C1D30B972C48AC8BD0E88DA4DB9F743 /* FayeSwift.modulemap */, - 7B3AAC1CAA0FD33A1665A6CF0609129E /* FayeSwift.xcconfig */, - 6F23ED994CFBB0F9B07BF334EA7FF240 /* FayeSwift-dummy.m */, - 01718434A0A3E9C872093B738FC33F54 /* FayeSwift-prefix.pch */, - D3A7795CDA243AB07B1664FEE1544038 /* FayeSwift-umbrella.h */, - 5927E4C39F2970C28F9060D5EDF137B9 /* Info.plist */, + 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */, + A3762543793836511D559E05A4FF4E9F /* Development Pods */, + E3E72319A78626B3AF9B593F1E512E66 /* Frameworks */, + EAC52A2681AD500197BE49D61C92AC0D /* Pods */, + CB1BBFCAB1161547233ABDD1062A1F53 /* Products */, + AADEC59BC2C46A2EB4239F071A12322F /* Targets Support Files */, ); - name = "Support Files"; - path = "Example/Pods/Target Support Files/FayeSwift"; sourceTree = ""; }; - 9BE8F84C840D474BB60E62D4A8259C63 /* Support Files */ = { + D3FA26D6466D9631BFA9EB9A4AAA42DC /* Support Files */ = { isa = PBXGroup; children = ( - E6671F9532A947F40918CF9A0D44F70F /* Info.plist */, - 2A14E4E75C0921B8190FF7805BDB1994 /* SwiftyJSON.modulemap */, - 1EC0280E5CCCCD96F81E63B562E157DD /* SwiftyJSON.xcconfig */, - 6DCD25231745CBB7A0DE8AE144F32C35 /* SwiftyJSON-dummy.m */, - 0F0AD0445D068E37E1C8498A3BF6150D /* SwiftyJSON-prefix.pch */, - 6B923F40E09322629BC57536AFBDAB00 /* SwiftyJSON-umbrella.h */, + E4BEE8E935FF157A26EB05E830900319 /* SwiftyJSON.modulemap */, + 04532DE27BA396351B6DCDB94E171811 /* SwiftyJSON-dummy.m */, + A4C7045C4870952847E837EFE78B3C9C /* SwiftyJSON-Info.plist */, + 88A91D0DE346AF2B5ED1D13CFCABC47A /* SwiftyJSON-prefix.pch */, + 137E4B54C6806C4B2F4D5109EC4C037A /* SwiftyJSON-umbrella.h */, + 03627D272E2CBF934FDE7AA65DD8EEA8 /* SwiftyJSON.debug.xcconfig */, + F7E10C05BA4050009900CF7E9BF64C8B /* SwiftyJSON.release.xcconfig */, ); name = "Support Files"; path = "../Target Support Files/SwiftyJSON"; sourceTree = ""; }; - AEC58E9B2FE610C5D55CBB2FA4D34F2A /* Pods-FayeSwift_Example */ = { + E3E72319A78626B3AF9B593F1E512E66 /* Frameworks */ = { isa = PBXGroup; children = ( - 6E1FB52B709CB783F4109CA61174C28B /* Info.plist */, - 37D9B4C012C932EED434E89C515FA960 /* Pods-FayeSwift_Example.modulemap */, - 4471A15D81938B6C2CE6A161EC41FEED /* Pods-FayeSwift_Example-acknowledgements.markdown */, - B29C7FFE8D08A56E77C644C03000FC94 /* Pods-FayeSwift_Example-acknowledgements.plist */, - 2FE9E957D59ADA0A662E4B8C1A7BD7E2 /* Pods-FayeSwift_Example-dummy.m */, - 14B7C4FE824293ABEEF592A7E71C4AFC /* Pods-FayeSwift_Example-frameworks.sh */, - 4885D84AE492246F7B92A35D5F4C2787 /* Pods-FayeSwift_Example-resources.sh */, - 06B16C30B7CF62C246F4DD2B6BA325D2 /* Pods-FayeSwift_Example-umbrella.h */, - B661AAF1FC01F5B9EB53567F4990C215 /* Pods-FayeSwift_Example.debug.xcconfig */, - 2692C5A026D6876DF0B8ED238232F2E6 /* Pods-FayeSwift_Example.release.xcconfig */, + ABDA9325CBAA97E4B84F8490D5ECA6C8 /* Starscream.framework */, + C711AEE2DA04D0B11F5F008AD6A452CD /* SwiftyJSON.framework */, + 6A8594B36C3CDAD207769405697637CF /* iOS */, ); - name = "Pods-FayeSwift_Example"; - path = "Target Support Files/Pods-FayeSwift_Example"; + name = Frameworks; sourceTree = ""; }; - B60722EF6A0F9DCD2D7C6D03F8B362CD /* Starscream */ = { + EAC52A2681AD500197BE49D61C92AC0D /* Pods */ = { isa = PBXGroup; children = ( - 38A444149F18F886FD0A1E23B45D6671 /* SSLSecurity.swift */, - 87D64F48FA18233694918281C87E0266 /* WebSocket.swift */, - 57072CFE2F97B4E7645A18D9267BA425 /* Support Files */, + 0A65714386486893D8914810627CE3A3 /* Starscream */, + B0EEE520F5C783F884EF287BEADC7484 /* SwiftyJSON */, ); - name = Starscream; - path = Starscream; + name = Pods; sourceTree = ""; }; - FD9348BF3D0247517870C91A35D015B9 /* iOS */ = { + EEBA030A415C4F1CD2E875F148A3AC38 /* Support Files */ = { isa = PBXGroup; children = ( - AF83ABEF1A458CAE5372C3E2E46D918F /* Foundation.framework */, + D1581252C29CCD72B66765837C3CB8F5 /* Starscream.modulemap */, + 00CC273B6530A631AF478E5C55EE9E92 /* Starscream-dummy.m */, + 005933143634C2B56E2ADFEC64E23683 /* Starscream-Info.plist */, + 3B401EB5C3B21A6A18448D666D6FFD60 /* Starscream-prefix.pch */, + 1D15F8E0825622464E00D22213ADB131 /* Starscream-umbrella.h */, + 035F9304E0F2E1BC0C5490782536D4B7 /* Starscream.debug.xcconfig */, + 9CBA41A2E26564B60DA46B68C45D21B6 /* Starscream.release.xcconfig */, ); - name = iOS; + name = "Support Files"; + path = "../Target Support Files/Starscream"; sourceTree = ""; }; /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */ - 2FC285EE7B23BCF4838AE10E22CF15F1 /* Headers */ = { + 181959A1B181329ACDC8EE4645BCA672 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 026017E12DAB48A922244C71A63253D0 /* Starscream-umbrella.h in Headers */, + 9D07AC04CABB352B36E4C248B6B93F79 /* FayeSwift-umbrella.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - 5699FAC57A3070BF159F2901B70EBFDA /* Headers */ = { + 371AB5AFCFC6017846DA2380809B030E /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - AC29BC38767C449B4173F44C53632135 /* Pods-FayeSwift_Tests-umbrella.h in Headers */, + CF42503F5B2608FF87F1ACB6B5F349E3 /* Starscream-umbrella.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - 5A448ADB59E0771F30851C17B3AC70A9 /* Headers */ = { + 858E743E96FBE80D9CFC28E3F51BCF58 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 12A2D6DEF558554F285FBB6A2196E202 /* Pods-FayeSwift_Example-umbrella.h in Headers */, + 695657D5F174F97B705F0EFEE8E9BD5C /* Pods-FayeSwift_Tests-umbrella.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - BD236EDC7B51F8AE166BA91FADC49449 /* Headers */ = { + DC903DFCDC13136960F21BE3385F8F51 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 630775D47B4762F060BF09A7AD3AD9F2 /* SwiftyJSON-umbrella.h in Headers */, + BBDBCE87171A3C7C809D5C7399AB77D6 /* Pods-FayeSwift_Example-umbrella.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - D21C478503F6EB3CC30702FFC62C1545 /* Headers */ = { + EBD4995BDB97B710CD96A34E0956EA2B /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 5C79AABB8B872CDFC3596A03DA50F50F /* FayeSwift-umbrella.h in Headers */, + A62E0964A806CCD8795EB1DA20A35286 /* SwiftyJSON-umbrella.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXHeadersBuildPhase section */ /* Begin PBXNativeTarget section */ - 5C1F57BFFCD92868AF3442E38186A537 /* SwiftyJSON */ = { + 46036F5F450724505F8F5A3535561A93 /* Pods-FayeSwift_Example */ = { isa = PBXNativeTarget; - buildConfigurationList = D7B51E188C37F41CEC46650465F4DA2E /* Build configuration list for PBXNativeTarget "SwiftyJSON" */; + buildConfigurationList = 72118532D87DC10860598583D6B0EEB9 /* Build configuration list for PBXNativeTarget "Pods-FayeSwift_Example" */; buildPhases = ( - 14562C9FE587649D1E1A8ECCC1121CB6 /* Sources */, - 9AE92D03ECEE8678AEF5195F0D5F65A7 /* Frameworks */, - BD236EDC7B51F8AE166BA91FADC49449 /* Headers */, + DC903DFCDC13136960F21BE3385F8F51 /* Headers */, + 34CF64179D8BD96B41C336E720635428 /* Sources */, + 2A2443D6D1AE485F3A505C6AD5710843 /* Frameworks */, + 018E2A7E88CF644C881B7D03BF5667EE /* Resources */, ); buildRules = ( ); dependencies = ( + 5FD2721C523EC5421E06FB275E7E89F5 /* PBXTargetDependency */, + 702A26955F955B2806F733ECAB9E71C3 /* PBXTargetDependency */, + 2575CB50B119A7CF22ED8E07520B16ED /* PBXTargetDependency */, ); - name = SwiftyJSON; - productName = SwiftyJSON; - productReference = B9AF00E1C38081852D6E23B7C286C779 /* SwiftyJSON.framework */; + name = "Pods-FayeSwift_Example"; + productName = "Pods-FayeSwift_Example"; + productReference = 13F871721477871167420E510E6E3742 /* Pods_FayeSwift_Example.framework */; productType = "com.apple.product-type.framework"; }; - 5C48D6CAB4FBFA5BB8EFCD0C0947DF9D /* FayeSwift */ = { + 5E551DD8B190AB276724C510971C365C /* FayeSwift */ = { isa = PBXNativeTarget; - buildConfigurationList = 3BC677F1AB4B06206649C8ADA8DD1440 /* Build configuration list for PBXNativeTarget "FayeSwift" */; + buildConfigurationList = B2F32DB15AADFA4E8AEAA40B556CC8A3 /* Build configuration list for PBXNativeTarget "FayeSwift" */; buildPhases = ( - 3DE001A80C8B89B645180EEA8628E7AC /* Sources */, - AC8BC9D4F3FD3DEC442EFCF527C2C4B2 /* Frameworks */, - D21C478503F6EB3CC30702FFC62C1545 /* Headers */, + 181959A1B181329ACDC8EE4645BCA672 /* Headers */, + 0DE85D55D41BFB56904D70F158966276 /* Sources */, + 46FC9EE4AFF0B469DED017E4C535618A /* Frameworks */, + C53A9020C17D8E49644C12808A786855 /* Resources */, ); buildRules = ( ); dependencies = ( - 1C30892F0FF517727036E27CDF81C663 /* PBXTargetDependency */, - 0B624098DDC63EDF2E66E333C47201F1 /* PBXTargetDependency */, + E7C8584293C467F6B23AF287CF1053AF /* PBXTargetDependency */, + 30DFE909D94C86C2F97A56CBFA1D9276 /* PBXTargetDependency */, ); name = FayeSwift; productName = FayeSwift; - productReference = BC51989923EA37E862F09C698F868947 /* FayeSwift.framework */; + productReference = 9CDA2A0B34EDB5063A8EBF3868D88867 /* FayeSwift.framework */; productType = "com.apple.product-type.framework"; }; - 90E7E0DDBF3230E4EE01FAA926FC8C1C /* Pods-FayeSwift_Example */ = { + 9B78EE4AF6AE03E79D88886319853FF7 /* Starscream */ = { isa = PBXNativeTarget; - buildConfigurationList = 2C37015467BCB2CAD2C5683C1D3C7897 /* Build configuration list for PBXNativeTarget "Pods-FayeSwift_Example" */; + buildConfigurationList = D5EE61BE99B869106D7842D7149639DC /* Build configuration list for PBXNativeTarget "Starscream" */; buildPhases = ( - A2EEF6DF48EB857F89E15025ADB08D0C /* Sources */, - 55482E57D69A6BEE3AB08D61E8D44F5A /* Frameworks */, - 5A448ADB59E0771F30851C17B3AC70A9 /* Headers */, + 371AB5AFCFC6017846DA2380809B030E /* Headers */, + 0CE9D2F05758188D8C6DF079BE96FFAF /* Sources */, + EA81AAD06934C8707EDBB35BAB5D3A92 /* Frameworks */, + 4E46EFBBF88EBB1D7F2494071AF8431A /* Resources */, ); buildRules = ( ); dependencies = ( - 513B4CE355F9033A8A9BBC57A2C7FFD1 /* PBXTargetDependency */, - 543AAD42A1D98CF875D74C50362FEC99 /* PBXTargetDependency */, - 2434201F5B0A7997E2922AE89413EEE1 /* PBXTargetDependency */, ); - name = "Pods-FayeSwift_Example"; - productName = "Pods-FayeSwift_Example"; - productReference = 6FA9ABBAFE65EA53C5AECD4FEF5902DE /* Pods_FayeSwift_Example.framework */; + name = Starscream; + productName = Starscream; + productReference = 891B2270823847ED23F2ECFC28F935EC /* Starscream.framework */; productType = "com.apple.product-type.framework"; }; - BC253BAFB43EC448547D4A2394ACD810 /* Pods-FayeSwift_Tests */ = { + D118A6A04828FD3CDA8640CD2B6796D2 /* SwiftyJSON */ = { isa = PBXNativeTarget; - buildConfigurationList = 81D03CD0D35971BA49F91CC378F0381D /* Build configuration list for PBXNativeTarget "Pods-FayeSwift_Tests" */; + buildConfigurationList = A99AA930B1558CB59BA0F32C03E502CF /* Build configuration list for PBXNativeTarget "SwiftyJSON" */; buildPhases = ( - 64B715524D7BA41EE9474DB446B5E935 /* Sources */, - C6EA43D132CFBD43EBC704B9E9E413DF /* Frameworks */, - 5699FAC57A3070BF159F2901B70EBFDA /* Headers */, + EBD4995BDB97B710CD96A34E0956EA2B /* Headers */, + 8ED9C7849DE30FF1ED4D1559F08AF8A1 /* Sources */, + 0C5CFA1B8EDA4E2408E489873900F2E3 /* Frameworks */, + 785CE8C4E9E8D301F3AFB942288027C2 /* Resources */, ); buildRules = ( ); dependencies = ( - 37304380EF1AE699643886697C6B633D /* PBXTargetDependency */, - E42065487BF3D5CC9F09CB18C7F14F01 /* PBXTargetDependency */, - 57B2902E0642C8E5BA1F9DADFE441377 /* PBXTargetDependency */, ); - name = "Pods-FayeSwift_Tests"; - productName = "Pods-FayeSwift_Tests"; - productReference = 502DCC2B2A3C577BB0E225CE04E63571 /* Pods_FayeSwift_Tests.framework */; + name = SwiftyJSON; + productName = SwiftyJSON; + productReference = E23C076BA70925415F490FEDB215DA92 /* SwiftyJSON.framework */; productType = "com.apple.product-type.framework"; }; - BCC8AE0600D381881B2B45F29D3A3294 /* Starscream */ = { + D363A9BDF4C1ECA78CDF5B83FC9C13F0 /* Pods-FayeSwift_Tests */ = { isa = PBXNativeTarget; - buildConfigurationList = E86FDF27E9DCFAAFE67D7E62F35E9AB0 /* Build configuration list for PBXNativeTarget "Starscream" */; + buildConfigurationList = ABF6521C988FBC6FB04DAFA17E08E8F3 /* Build configuration list for PBXNativeTarget "Pods-FayeSwift_Tests" */; buildPhases = ( - E9E1339796C8B15F79531589B9E53575 /* Sources */, - 4EDDF933F2400C2E4D59159875DE4F19 /* Frameworks */, - 2FC285EE7B23BCF4838AE10E22CF15F1 /* Headers */, + 858E743E96FBE80D9CFC28E3F51BCF58 /* Headers */, + D1BEB6EA7AFD987F2B3097633136071D /* Sources */, + FDFE8A95FD356B3AF372387CBB7630E0 /* Frameworks */, + 622322816688B5C341F5DD013092C37E /* Resources */, ); buildRules = ( ); dependencies = ( + F108FAF45FCAE6C75850FD11B9270F8C /* PBXTargetDependency */, + 7EC38374C57623F45B226A338E13A014 /* PBXTargetDependency */, + 6079A0C9A5E65C4A3C06D7FB9615446C /* PBXTargetDependency */, ); - name = Starscream; - productName = Starscream; - productReference = 8617DDEB1D97E8945A823BA19722DD99 /* Starscream.framework */; + name = "Pods-FayeSwift_Tests"; + productName = "Pods-FayeSwift_Tests"; + productReference = 803B043628E27E9B05B3949999D24303 /* Pods_FayeSwift_Tests.framework */; productType = "com.apple.product-type.framework"; }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ - D41D8CD98F00B204E9800998ECF8427E /* Project object */ = { + BFDFE7DC352907FC980B868725387E98 /* Project object */ = { isa = PBXProject; attributes = { - LastSwiftUpdateCheck = 0730; - LastUpgradeCheck = 0700; + LastSwiftUpdateCheck = 1100; + LastUpgradeCheck = 1100; }; - buildConfigurationList = 2D8E8EC45A3A1A1D94AE762CB5028504 /* Build configuration list for PBXProject "Pods" */; + buildConfigurationList = 4821239608C13582E20E6DA73FD5F1F9 /* Build configuration list for PBXProject "Pods" */; compatibilityVersion = "Xcode 3.2"; - developmentRegion = English; + developmentRegion = en; hasScannedForEncodings = 0; knownRegions = ( en, + Base, ); - mainGroup = 7DB346D0F39D3F0E887471402A8071AB; - productRefGroup = 142346D50CBE4F37FCCAE9D64C36FDC1 /* Products */; + mainGroup = CF1408CF629C7361332E53B88F7BD30C; + productRefGroup = CB1BBFCAB1161547233ABDD1062A1F53 /* Products */; projectDirPath = ""; projectRoot = ""; targets = ( - 5C48D6CAB4FBFA5BB8EFCD0C0947DF9D /* FayeSwift */, - 90E7E0DDBF3230E4EE01FAA926FC8C1C /* Pods-FayeSwift_Example */, - BC253BAFB43EC448547D4A2394ACD810 /* Pods-FayeSwift_Tests */, - BCC8AE0600D381881B2B45F29D3A3294 /* Starscream */, - 5C1F57BFFCD92868AF3442E38186A537 /* SwiftyJSON */, + 5E551DD8B190AB276724C510971C365C /* FayeSwift */, + 46036F5F450724505F8F5A3535561A93 /* Pods-FayeSwift_Example */, + D363A9BDF4C1ECA78CDF5B83FC9C13F0 /* Pods-FayeSwift_Tests */, + 9B78EE4AF6AE03E79D88886319853FF7 /* Starscream */, + D118A6A04828FD3CDA8640CD2B6796D2 /* SwiftyJSON */, ); }; /* End PBXProject section */ +/* Begin PBXResourcesBuildPhase section */ + 018E2A7E88CF644C881B7D03BF5667EE /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 4E46EFBBF88EBB1D7F2494071AF8431A /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 622322816688B5C341F5DD013092C37E /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 785CE8C4E9E8D301F3AFB942288027C2 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + C53A9020C17D8E49644C12808A786855 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + /* Begin PBXSourcesBuildPhase section */ - 14562C9FE587649D1E1A8ECCC1121CB6 /* Sources */ = { + 0CE9D2F05758188D8C6DF079BE96FFAF /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 01491BBA557B2F18B2A77192743E3E55 /* SwiftyJSON-dummy.m in Sources */, - C96024BA34EFE5DFB81CAA301E6CBF9D /* SwiftyJSON.swift in Sources */, + D2FD54AE92438F42D59125653F45F683 /* Compression.swift in Sources */, + 080028A714D2CDE95F5658A8AA7F7DC7 /* Data+Extensions.swift in Sources */, + 6AA3A6CE085E09B1DBA0F77F52ABA1ED /* Engine.swift in Sources */, + 79B477590AFD970A22C8D056748C2CCF /* FoundationHTTPHandler.swift in Sources */, + DBE3BE1CDDB1C2B8C9F130B9B63EA7E1 /* FoundationHTTPServerHandler.swift in Sources */, + C1A11516171E502D8CC8E1E009538E53 /* FoundationSecurity.swift in Sources */, + 9310E593ACB62FCFDCE002B104CA34EC /* FoundationTransport.swift in Sources */, + D4BCE04E78142E46E30BE217A893E70C /* FrameCollector.swift in Sources */, + 4E612D19378DFD596A70336B4397E010 /* Framer.swift in Sources */, + 7229F1B70D621FCC743E6A63FBA2F954 /* HTTPHandler.swift in Sources */, + 5A3945D46F24BE999EA51C46B688994E /* NativeEngine.swift in Sources */, + 03F42EF060F918FCB94034BADD207192 /* Security.swift in Sources */, + D0E0BF424B38492B6C4F19A406DE491C /* Server.swift in Sources */, + D334BE9FC73A3960F06B7F4EB30774E7 /* Starscream-dummy.m in Sources */, + C49B1CE5BF7611E757276B11D5770895 /* StringHTTPHandler.swift in Sources */, + 082C2D0BA21EF7CC8C8F961BF3A978BE /* TCPTransport.swift in Sources */, + B3E80CC4B52925DD09FDEA47FD911957 /* Transport.swift in Sources */, + 5D83EA1444DCE149D2D575387952896D /* WebSocket.swift in Sources */, + 9F08FE9ABF5122760533C5E2D8054609 /* WebSocketServer.swift in Sources */, + 20757732DA726B83C7B97D8B0C4444A2 /* WSCompression.swift in Sources */, + 1CD5C3696621E22314BB43ACF73861BB /* WSEngine.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 3DE001A80C8B89B645180EEA8628E7AC /* Sources */ = { + 0DE85D55D41BFB56904D70F158966276 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - EA58C7FB9E131FA20044D726C8634078 /* FayeClient+Action.swift in Sources */, - D82013AA00D169E2324113D1EA177494 /* FayeClient+Bayuex.swift in Sources */, - BD0EEEBB061534E4B0AA21C29937F7E9 /* FayeClient+Helper.swift in Sources */, - 1AF8A2644E64066D72B7AE1ED35E042E /* FayeClient+Parsing.swift in Sources */, - F9073136443690E223D545CD2FF138B0 /* FayeClient+Subscriptions.swift in Sources */, - 2641943D2AB25D845A907E751D0D4A0E /* FayeClient+Transport.swift in Sources */, - 9590095A7427348F72D50958E6DF569D /* FayeClient.swift in Sources */, - 372A1E8811704945874EB18F7BD1309F /* FayeClientDelegate.swift in Sources */, - DF00F790990FE2A87CACDD519DA5FAA2 /* FayeSubscriptionModel.swift in Sources */, - 97E28C082763F8A1B9DF116332FE45A5 /* FayeSwift-dummy.m in Sources */, - D7C3BD0F56BE895E0425738268F11494 /* NSError+Helper.swift in Sources */, - 4395CC6B51E36E7FA9DF24986CB85D58 /* StringExtensions.swift in Sources */, - F13620786093149885BC1C94F8AE9FB9 /* Transport.swift in Sources */, - B715F8A02147DC9AF882D4E8B8CA03A5 /* WebsocketTransport.swift in Sources */, + 5385B10EE2EEC0A7E4C96284EE22B0DA /* FayeClient+Action.swift in Sources */, + EE60013A9B66611BB1E1AAF7F5D547AD /* FayeClient+Bayuex.swift in Sources */, + 41ED8DB2172A22F2553A96F0FE8927DC /* FayeClient+Helper.swift in Sources */, + 90EC03D0AE262EE98B24DD0C8EC53272 /* FayeClient+Parsing.swift in Sources */, + 3A5EB45BA416AEF9887CED858AD0BCDA /* FayeClient+Subscriptions.swift in Sources */, + 389C55DF07F35EB9E1DA5BF3BFB889D1 /* FayeClient+Transport.swift in Sources */, + 1976FF2342D8EA97D0E4E94B113F1B79 /* FayeClient.swift in Sources */, + 9D893832B5737682B3C0E7A54DAD798A /* FayeClientDelegate.swift in Sources */, + 02514C6327E028E8A5E7FC6D88519C2E /* FayeSubscriptionModel.swift in Sources */, + 289BAECC2E9D9A40FD8A03D9F7ABC067 /* FayeSwift-dummy.m in Sources */, + 1AEA0CAF757D62F53A4D2A29522F177D /* NSError+Helper.swift in Sources */, + 9FA02AAE4D90A63F9852DC236B007597 /* StringExtensions.swift in Sources */, + 74D6A74DDE912D4B4A3BDC5792E7DA6E /* Transport.swift in Sources */, + 2022CD318ED0FDC1B813886990347B3C /* WebsocketTransport.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 64B715524D7BA41EE9474DB446B5E935 /* Sources */ = { + 34CF64179D8BD96B41C336E720635428 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 603A236E27FDBCDDDC245C7949FAC4AB /* Pods-FayeSwift_Tests-dummy.m in Sources */, + 6678943E1A14084391B9C88F48C353E9 /* Pods-FayeSwift_Example-dummy.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - A2EEF6DF48EB857F89E15025ADB08D0C /* Sources */ = { + 8ED9C7849DE30FF1ED4D1559F08AF8A1 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 819CD987E43CF9B00A0BE165B3144C21 /* Pods-FayeSwift_Example-dummy.m in Sources */, + 183E3C0989284E087C58AF08B59FB147 /* SwiftyJSON-dummy.m in Sources */, + CA1E2D0CA27C9FF9009C8F01396170BC /* SwiftyJSON.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - E9E1339796C8B15F79531589B9E53575 /* Sources */ = { + D1BEB6EA7AFD987F2B3097633136071D /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - B4F045C4EB5BA94B75966419EB72662A /* SSLSecurity.swift in Sources */, - FED7F96749B4ACB6DAF206513C945CA9 /* Starscream-dummy.m in Sources */, - A3F622749F008AB61E99EF439E3B7551 /* WebSocket.swift in Sources */, + 8FEC5AB670F8966A9950F06C4F4C078E /* Pods-FayeSwift_Tests-dummy.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ - 0B624098DDC63EDF2E66E333C47201F1 /* PBXTargetDependency */ = { + 2575CB50B119A7CF22ED8E07520B16ED /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = SwiftyJSON; - target = 5C1F57BFFCD92868AF3442E38186A537 /* SwiftyJSON */; - targetProxy = 0E2E944578DFD11725AE03E57A2F5E40 /* PBXContainerItemProxy */; + target = D118A6A04828FD3CDA8640CD2B6796D2 /* SwiftyJSON */; + targetProxy = 6B6369347FF768B84505B632EC15441C /* PBXContainerItemProxy */; }; - 1C30892F0FF517727036E27CDF81C663 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = Starscream; - target = BCC8AE0600D381881B2B45F29D3A3294 /* Starscream */; - targetProxy = 27129EF77D9CAC29F1151EC75DB48940 /* PBXContainerItemProxy */; - }; - 2434201F5B0A7997E2922AE89413EEE1 /* PBXTargetDependency */ = { + 30DFE909D94C86C2F97A56CBFA1D9276 /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = SwiftyJSON; - target = 5C1F57BFFCD92868AF3442E38186A537 /* SwiftyJSON */; - targetProxy = EF2196CF5D21430C9E4A6BAD3F790A0F /* PBXContainerItemProxy */; + target = D118A6A04828FD3CDA8640CD2B6796D2 /* SwiftyJSON */; + targetProxy = BB38398073CCCCCF52D648918FA619FA /* PBXContainerItemProxy */; }; - 37304380EF1AE699643886697C6B633D /* PBXTargetDependency */ = { + 5FD2721C523EC5421E06FB275E7E89F5 /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = FayeSwift; - target = 5C48D6CAB4FBFA5BB8EFCD0C0947DF9D /* FayeSwift */; - targetProxy = 663722FA80FCCEA51B761DBCF6962820 /* PBXContainerItemProxy */; + target = 5E551DD8B190AB276724C510971C365C /* FayeSwift */; + targetProxy = 08301F9D839053FA1B9FD7EC6CD8F122 /* PBXContainerItemProxy */; }; - 513B4CE355F9033A8A9BBC57A2C7FFD1 /* PBXTargetDependency */ = { + 6079A0C9A5E65C4A3C06D7FB9615446C /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = FayeSwift; - target = 5C48D6CAB4FBFA5BB8EFCD0C0947DF9D /* FayeSwift */; - targetProxy = 5C2824D1A9A59FC7E0807982E563883C /* PBXContainerItemProxy */; + name = SwiftyJSON; + target = D118A6A04828FD3CDA8640CD2B6796D2 /* SwiftyJSON */; + targetProxy = 7A6E7FF2D328D5DE6D7FA83BC54C033E /* PBXContainerItemProxy */; }; - 543AAD42A1D98CF875D74C50362FEC99 /* PBXTargetDependency */ = { + 702A26955F955B2806F733ECAB9E71C3 /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = Starscream; - target = BCC8AE0600D381881B2B45F29D3A3294 /* Starscream */; - targetProxy = B4F58B425B8A192B0B43228D5BBD2FEF /* PBXContainerItemProxy */; + target = 9B78EE4AF6AE03E79D88886319853FF7 /* Starscream */; + targetProxy = AFB403010A0D8CFF5B07C72D1C86F1E8 /* PBXContainerItemProxy */; }; - 57B2902E0642C8E5BA1F9DADFE441377 /* PBXTargetDependency */ = { + 7EC38374C57623F45B226A338E13A014 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = SwiftyJSON; - target = 5C1F57BFFCD92868AF3442E38186A537 /* SwiftyJSON */; - targetProxy = 906B0FC7D35C414F5BBE0F7DB11C519B /* PBXContainerItemProxy */; + name = Starscream; + target = 9B78EE4AF6AE03E79D88886319853FF7 /* Starscream */; + targetProxy = C42A85962569DA611B640CBC50B75C36 /* PBXContainerItemProxy */; }; - E42065487BF3D5CC9F09CB18C7F14F01 /* PBXTargetDependency */ = { + E7C8584293C467F6B23AF287CF1053AF /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = Starscream; - target = BCC8AE0600D381881B2B45F29D3A3294 /* Starscream */; - targetProxy = 42672EE0E914C25799C038C3FFE417CC /* PBXContainerItemProxy */; + target = 9B78EE4AF6AE03E79D88886319853FF7 /* Starscream */; + targetProxy = 6E3956540AF1825F3ECB7292B7C462D9 /* PBXContainerItemProxy */; + }; + F108FAF45FCAE6C75850FD11B9270F8C /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = FayeSwift; + target = 5E551DD8B190AB276724C510971C365C /* FayeSwift */; + targetProxy = 58948A50C0CC5966A0B7C9D6B20DEE96 /* PBXContainerItemProxy */; }; /* End PBXTargetDependency section */ /* Begin XCBuildConfiguration section */ - 015A368F878AC3E2CEAE21DDE8026304 /* Debug */ = { + 162F3C181DC4760A477FB466A3384E68 /* Release */ = { isa = XCBuildConfiguration; + baseConfigurationReference = F7E10C05BA4050009900CF7E9BF64C8B /* SwiftyJSON.release.xcconfig */; buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGNING_REQUIRED = NO; - COPY_PHASE_STRIP = NO; - ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_DYNAMIC_NO_PIC = NO; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "POD_CONFIGURATION_DEBUG=1", - "DEBUG=1", - "$(inherited)", - ); - GCC_SYMBOLS_PRIVATE_EXTERN = NO; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; + "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/SwiftyJSON/SwiftyJSON-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/SwiftyJSON/SwiftyJSON-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 8.0; - ONLY_ACTIVE_ARCH = YES; - PROVISIONING_PROFILE_SPECIFIER = NO_SIGNING/; - STRIP_INSTALLED_PRODUCT = NO; - SYMROOT = "${SRCROOT}/../build"; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = "Target Support Files/SwiftyJSON/SwiftyJSON.modulemap"; + PRODUCT_MODULE_NAME = SwiftyJSON; + PRODUCT_NAME = SwiftyJSON; + 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 = Debug; + name = Release; }; - 1EAF7F917199C4FBC38B65DAB4BC2900 /* Release */ = { + 2182C4F6A287C3C28623C4F96984EC43 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 7B3AAC1CAA0FD33A1665A6CF0609129E /* FayeSwift.xcconfig */; + baseConfigurationReference = 035F9304E0F2E1BC0C5490782536D4B7 /* Starscream.debug.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_NO_COMMON_BLOCKS = YES; - GCC_PREFIX_HEADER = "Target Support Files/FayeSwift/FayeSwift-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/FayeSwift/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/Starscream/Starscream-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/Starscream/Starscream-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/FayeSwift/FayeSwift.modulemap"; - MTL_ENABLE_DEBUG_INFO = NO; - PRODUCT_NAME = FayeSwift; + MODULEMAP_FILE = "Target Support Files/Starscream/Starscream.modulemap"; + PRODUCT_MODULE_NAME = Starscream; + PRODUCT_NAME = Starscream; SDKROOT = iphoneos; SKIP_INSTALL = YES; - SWIFT_VERSION = 3.0; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Release; + name = Debug; }; - 1FB72A1CE25626A8C0F847E37D5CAEA1 /* Release */ = { + 3AF84FD299D2254FA43F253DA466A257 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 4AB2D41C9043F185BD735AC2476F72C6 /* Pods-FayeSwift_Tests.release.xcconfig */; + baseConfigurationReference = 92B45F50B2100AC6E199BE823EB478C5 /* Pods-FayeSwift_Tests.debug.xcconfig */; buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_NO_COMMON_BLOCKS = YES; - INFOPLIST_FILE = "Target Support Files/Pods-FayeSwift_Tests/Info.plist"; + INFOPLIST_FILE = "Target Support Files/Pods-FayeSwift_Tests/Pods-FayeSwift_Tests-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 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-FayeSwift_Tests/Pods-FayeSwift_Tests.modulemap"; - MTL_ENABLE_DEBUG_INFO = NO; OTHER_LDFLAGS = ""; OTHER_LIBTOOLFLAGS = ""; PODS_ROOT = "$(SRCROOT)"; PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = Pods_FayeSwift_Tests; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; SDKROOT = iphoneos; SKIP_INSTALL = YES; TARGETED_DEVICE_FAMILY = "1,2"; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Release; + name = Debug; }; - 2F218157924BD15F7EDCAD60E257E3F3 /* Release */ = { + 4AD7314E5408B5B5595998A8C29724E6 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 2692C5A026D6876DF0B8ED238232F2E6 /* Pods-FayeSwift_Example.release.xcconfig */; + baseConfigurationReference = 528FBBFFC84FFBEF0E7DDF0982562E0B /* Pods-FayeSwift_Tests.release.xcconfig */; buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_NO_COMMON_BLOCKS = YES; - INFOPLIST_FILE = "Target Support Files/Pods-FayeSwift_Example/Info.plist"; + INFOPLIST_FILE = "Target Support Files/Pods-FayeSwift_Tests/Pods-FayeSwift_Tests-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 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-FayeSwift_Example/Pods-FayeSwift_Example.modulemap"; - MTL_ENABLE_DEBUG_INFO = NO; + MODULEMAP_FILE = "Target Support Files/Pods-FayeSwift_Tests/Pods-FayeSwift_Tests.modulemap"; OTHER_LDFLAGS = ""; OTHER_LIBTOOLFLAGS = ""; PODS_ROOT = "$(SRCROOT)"; PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = Pods_FayeSwift_Example; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; SDKROOT = iphoneos; SKIP_INSTALL = YES; TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; name = Release; }; - 35CC6BCA2C91027EB00E1B38C61BE55A /* Release */ = { + 4E384E426AA13074CE9AD4381718E0FB /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 47C81FB96686C0BE581D0FC3090AFC0D /* Starscream.xcconfig */; + baseConfigurationReference = 70787FFE19ECF58ECBD3C87AF1EFA14F /* FayeSwift.debug.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_NO_COMMON_BLOCKS = YES; - GCC_PREFIX_HEADER = "Target Support Files/Starscream/Starscream-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/Starscream/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/FayeSwift/FayeSwift-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/FayeSwift/FayeSwift-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/Starscream/Starscream.modulemap"; - MTL_ENABLE_DEBUG_INFO = NO; - PRODUCT_NAME = Starscream; + MODULEMAP_FILE = "Target Support Files/FayeSwift/FayeSwift.modulemap"; + PRODUCT_MODULE_NAME = FayeSwift; + PRODUCT_NAME = FayeSwift; SDKROOT = iphoneos; SKIP_INSTALL = YES; - SWIFT_VERSION = 3.0; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Release; + name = Debug; }; - 44CDBB6D11DE06DB64D6268622BDC47E /* Release */ = { + 6D42DC62C4F2E194221DF89C48496C98 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_ANALYZER_NONNULL = YES; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + 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_DIRECT_OBJC_ISA_USAGE = 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_OBJC_ROOT_CLASS = 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_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGNING_REQUIRED = NO; - COPY_PHASE_STRIP = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; ENABLE_NS_ASSERTIONS = NO; - GCC_C_LANGUAGE_STANDARD = gnu99; + 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; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; IPHONEOS_DEPLOYMENT_TARGET = 8.0; - PROVISIONING_PROFILE_SPECIFIER = NO_SIGNING/; + 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"; - VALIDATE_PRODUCT = YES; }; name = Release; }; - 51444351DF47F3A9B3368A0D010596D9 /* Debug */ = { + 853BEF5D8F475210BB6D95F4366D8C4B /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 1EC0280E5CCCCD96F81E63B562E157DD /* SwiftyJSON.xcconfig */; + baseConfigurationReference = 9CBA41A2E26564B60DA46B68C45D21B6 /* Starscream.release.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = dwarf; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_NO_COMMON_BLOCKS = YES; - GCC_PREFIX_HEADER = "Target Support Files/SwiftyJSON/SwiftyJSON-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/SwiftyJSON/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/Starscream/Starscream-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/Starscream/Starscream-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/SwiftyJSON/SwiftyJSON.modulemap"; - MTL_ENABLE_DEBUG_INFO = YES; - PRODUCT_NAME = SwiftyJSON; + MODULEMAP_FILE = "Target Support Files/Starscream/Starscream.modulemap"; + PRODUCT_MODULE_NAME = Starscream; + PRODUCT_NAME = Starscream; SDKROOT = iphoneos; SKIP_INSTALL = YES; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 3.0; + 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 = Debug; + name = Release; }; - 731F8E987F620E8D5A676D57ECEEC97C /* Debug */ = { + C1FB083D209E5C2BDECC71F9BBF3CBC1 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = D26B5E2282A330BE919FE4EFDFB738B3 /* Pods-FayeSwift_Tests.debug.xcconfig */; + baseConfigurationReference = 8DBA75325A45FA4137A83B047AEF58FF /* FayeSwift.release.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = dwarf; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_NO_COMMON_BLOCKS = YES; - INFOPLIST_FILE = "Target Support Files/Pods-FayeSwift_Tests/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/FayeSwift/FayeSwift-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/FayeSwift/FayeSwift-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 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-FayeSwift_Tests/Pods-FayeSwift_Tests.modulemap"; - MTL_ENABLE_DEBUG_INFO = YES; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PODS_ROOT = "$(SRCROOT)"; - PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = Pods_FayeSwift_Tests; + MODULEMAP_FILE = "Target Support Files/FayeSwift/FayeSwift.modulemap"; + PRODUCT_MODULE_NAME = FayeSwift; + PRODUCT_NAME = FayeSwift; SDKROOT = iphoneos; SKIP_INSTALL = YES; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + 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 = Debug; + name = Release; }; - 8C427F0ABBE6E76366CAB4B4A39A33B9 /* Debug */ = { + D7DDE443B5A29D0B37CA8F29262C8D42 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = B661AAF1FC01F5B9EB53567F4990C215 /* Pods-FayeSwift_Example.debug.xcconfig */; + baseConfigurationReference = CC09C6A1CD1691C8FE27E54FC92DC1A1 /* Pods-FayeSwift_Example.release.xcconfig */; buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = dwarf; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_NO_COMMON_BLOCKS = YES; - INFOPLIST_FILE = "Target Support Files/Pods-FayeSwift_Example/Info.plist"; + INFOPLIST_FILE = "Target Support Files/Pods-FayeSwift_Example/Pods-FayeSwift_Example-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 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-FayeSwift_Example/Pods-FayeSwift_Example.modulemap"; - MTL_ENABLE_DEBUG_INFO = YES; OTHER_LDFLAGS = ""; OTHER_LIBTOOLFLAGS = ""; PODS_ROOT = "$(SRCROOT)"; PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = Pods_FayeSwift_Example; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; SDKROOT = iphoneos; SKIP_INSTALL = YES; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Debug; + name = Release; }; - AA7BBD4CAC0EB5774B764450AF1AC6D9 /* Debug */ = { + D8AA953849AD66074F28DA121256204B /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 7B3AAC1CAA0FD33A1665A6CF0609129E /* FayeSwift.xcconfig */; + baseConfigurationReference = 03627D272E2CBF934FDE7AA65DD8EEA8 /* SwiftyJSON.debug.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = dwarf; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_NO_COMMON_BLOCKS = YES; - GCC_PREFIX_HEADER = "Target Support Files/FayeSwift/FayeSwift-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/FayeSwift/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/SwiftyJSON/SwiftyJSON-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/SwiftyJSON/SwiftyJSON-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/FayeSwift/FayeSwift.modulemap"; - MTL_ENABLE_DEBUG_INFO = YES; - PRODUCT_NAME = FayeSwift; + MODULEMAP_FILE = "Target Support Files/SwiftyJSON/SwiftyJSON.modulemap"; + PRODUCT_MODULE_NAME = SwiftyJSON; + PRODUCT_NAME = SwiftyJSON; SDKROOT = iphoneos; SKIP_INSTALL = YES; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 3.0; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; name = Debug; }; - C822BE7915F9D2024FBC9D66464DC56B /* Release */ = { + E4D0D44B090D4284607EBBC4E71A96C1 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 1EC0280E5CCCCD96F81E63B562E157DD /* SwiftyJSON.xcconfig */; buildSettings = { - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; + 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_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + 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_PREFIX_HEADER = "Target Support Files/SwiftyJSON/SwiftyJSON-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/SwiftyJSON/Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + 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 = 8.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/SwiftyJSON/SwiftyJSON.modulemap"; - MTL_ENABLE_DEBUG_INFO = NO; - PRODUCT_NAME = SwiftyJSON; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_VERSION = 3.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; + 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 = Release; + name = Debug; }; - FD1B0D8FE2F7865658C8D3B65402A2D4 /* Debug */ = { + EDC5BAF89E88E52B0D9BE6116C031368 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 47C81FB96686C0BE581D0FC3090AFC0D /* Starscream.xcconfig */; + baseConfigurationReference = A35C786F187E0EDCF9002FFF106F6C57 /* Pods-FayeSwift_Example.debug.xcconfig */; buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = dwarf; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_NO_COMMON_BLOCKS = YES; - GCC_PREFIX_HEADER = "Target Support Files/Starscream/Starscream-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/Starscream/Info.plist"; + INFOPLIST_FILE = "Target Support Files/Pods-FayeSwift_Example/Pods-FayeSwift_Example-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/Starscream/Starscream.modulemap"; - MTL_ENABLE_DEBUG_INFO = YES; - PRODUCT_NAME = Starscream; + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-FayeSwift_Example/Pods-FayeSwift_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_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 3.0; TARGETED_DEVICE_FAMILY = "1,2"; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; @@ -1115,61 +1258,61 @@ /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ - 2C37015467BCB2CAD2C5683C1D3C7897 /* Build configuration list for PBXNativeTarget "Pods-FayeSwift_Example" */ = { + 4821239608C13582E20E6DA73FD5F1F9 /* Build configuration list for PBXProject "Pods" */ = { isa = XCConfigurationList; buildConfigurations = ( - 8C427F0ABBE6E76366CAB4B4A39A33B9 /* Debug */, - 2F218157924BD15F7EDCAD60E257E3F3 /* Release */, + E4D0D44B090D4284607EBBC4E71A96C1 /* Debug */, + 6D42DC62C4F2E194221DF89C48496C98 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 2D8E8EC45A3A1A1D94AE762CB5028504 /* Build configuration list for PBXProject "Pods" */ = { + 72118532D87DC10860598583D6B0EEB9 /* Build configuration list for PBXNativeTarget "Pods-FayeSwift_Example" */ = { isa = XCConfigurationList; buildConfigurations = ( - 015A368F878AC3E2CEAE21DDE8026304 /* Debug */, - 44CDBB6D11DE06DB64D6268622BDC47E /* Release */, + EDC5BAF89E88E52B0D9BE6116C031368 /* Debug */, + D7DDE443B5A29D0B37CA8F29262C8D42 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 3BC677F1AB4B06206649C8ADA8DD1440 /* Build configuration list for PBXNativeTarget "FayeSwift" */ = { + A99AA930B1558CB59BA0F32C03E502CF /* Build configuration list for PBXNativeTarget "SwiftyJSON" */ = { isa = XCConfigurationList; buildConfigurations = ( - AA7BBD4CAC0EB5774B764450AF1AC6D9 /* Debug */, - 1EAF7F917199C4FBC38B65DAB4BC2900 /* Release */, + D8AA953849AD66074F28DA121256204B /* Debug */, + 162F3C181DC4760A477FB466A3384E68 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 81D03CD0D35971BA49F91CC378F0381D /* Build configuration list for PBXNativeTarget "Pods-FayeSwift_Tests" */ = { + ABF6521C988FBC6FB04DAFA17E08E8F3 /* Build configuration list for PBXNativeTarget "Pods-FayeSwift_Tests" */ = { isa = XCConfigurationList; buildConfigurations = ( - 731F8E987F620E8D5A676D57ECEEC97C /* Debug */, - 1FB72A1CE25626A8C0F847E37D5CAEA1 /* Release */, + 3AF84FD299D2254FA43F253DA466A257 /* Debug */, + 4AD7314E5408B5B5595998A8C29724E6 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - D7B51E188C37F41CEC46650465F4DA2E /* Build configuration list for PBXNativeTarget "SwiftyJSON" */ = { + B2F32DB15AADFA4E8AEAA40B556CC8A3 /* Build configuration list for PBXNativeTarget "FayeSwift" */ = { isa = XCConfigurationList; buildConfigurations = ( - 51444351DF47F3A9B3368A0D010596D9 /* Debug */, - C822BE7915F9D2024FBC9D66464DC56B /* Release */, + 4E384E426AA13074CE9AD4381718E0FB /* Debug */, + C1FB083D209E5C2BDECC71F9BBF3CBC1 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - E86FDF27E9DCFAAFE67D7E62F35E9AB0 /* Build configuration list for PBXNativeTarget "Starscream" */ = { + D5EE61BE99B869106D7842D7149639DC /* Build configuration list for PBXNativeTarget "Starscream" */ = { isa = XCConfigurationList; buildConfigurations = ( - FD1B0D8FE2F7865658C8D3B65402A2D4 /* Debug */, - 35CC6BCA2C91027EB00E1B38C61BE55A /* Release */, + 2182C4F6A287C3C28623C4F96984EC43 /* Debug */, + 853BEF5D8F475210BB6D95F4366D8C4B /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; /* End XCConfigurationList section */ }; - rootObject = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + rootObject = BFDFE7DC352907FC980B868725387E98 /* Project object */; } diff --git a/Example/Pods/Starscream/README.md b/Example/Pods/Starscream/README.md index bda69c5..634723a 100644 --- a/Example/Pods/Starscream/README.md +++ b/Example/Pods/Starscream/README.md @@ -1,21 +1,15 @@ ![starscream](https://raw.githubusercontent.com/daltoniam/starscream/assets/starscream.jpg) -Starscream is a conforming WebSocket ([RFC 6455](http://tools.ietf.org/html/rfc6455)) client library in Swift for iOS and OSX. - -It's Objective-C counter part can be found here: [Jetfire](https://github.com/acmacalister/jetfire) +Starscream is a conforming WebSocket ([RFC 6455](http://tools.ietf.org/html/rfc6455)) library in Swift. ## Features -- Conforms to all of the base [Autobahn test suite](http://autobahn.ws/testsuite/). +- Conforms to all of the base [Autobahn test suite](https://crossbar.io/autobahn/). - Nonblocking. Everything happens in the background, thanks to GCD. - TLS/WSS support. -- Simple concise codebase at just a few hundred LOC. - -## Swift 2.3 - -See release/tag 1.1.4 for Swift 2.3 support. +- Compression Extensions support ([RFC 7692](https://tools.ietf.org/html/rfc7692)) -## Example +### Import the framework First thing is to import the framework. See the Installation instructions on how to add the framework to your project. @@ -23,94 +17,65 @@ First thing is to import the framework. See the Installation instructions on how import Starscream ``` +### Connect to the WebSocket Server + Once imported, you can open a connection to your WebSocket server. Note that `socket` is probably best as a property, so it doesn't get deallocated right after being setup. ```swift -socket = WebSocket(url: URL(string: "ws://localhost:8080/")!) +var request = URLRequest(url: URL(string: "http://localhost:8080")!) +request.timeoutInterval = 5 +socket = WebSocket(request: request) socket.delegate = self socket.connect() ``` -After you are connected, there are some delegate methods that we need to implement. - -### websocketDidConnect - -websocketDidConnect is called as soon as the client connects to the server. - -```swift -func websocketDidConnect(socket: WebSocket) { - print("websocket is connected") -} -``` - -### websocketDidDisconnect - -websocketDidDisconnect is called as soon as the client is disconnected from the server. - -```swift -func websocketDidDisconnect(socket: WebSocket, error: NSError?) { - print("websocket is disconnected: \(error?.localizedDescription)") -} -``` - -### websocketDidReceiveMessage - -websocketDidReceiveMessage is called when the client gets a text frame from the connection. - -```swift -func websocketDidReceiveMessage(socket: WebSocket, text: String) { - print("got some text: \(text)") -} -``` - -### websocketDidReceiveData - -websocketDidReceiveData is called when the client gets a binary frame from the connection. +After you are connected, there is either a delegate or closure you can use for process WebSocket events. -```swift -func websocketDidReceiveData(socket: WebSocket, data: Data) { - print("got some data: \(data.count)") -} -``` +### Receiving data from a WebSocket -### Optional: websocketDidReceivePong *(required protocol: WebSocketPongDelegate)* - -websocketDidReceivePong is called when the client gets a pong response from the connection. You need to implement the WebSocketPongDelegate protocol and set an additional delegate, eg: ` socket.pongDelegate = self` +`didReceive` receives all the WebSocket events in a single easy to handle enum. ```swift -func websocketDidReceivePong(socket: WebSocket, data: Data?) { - print("Got pong! Maybe some data: \(data?.count)") +func didReceive(event: WebSocketEvent, client: WebSocket) { + switch event { + case .connected(let headers): + isConnected = true + print("websocket is connected: \(headers)") + case .disconnected(let reason, let code): + isConnected = false + print("websocket is disconnected: \(reason) with code: \(code)") + case .text(let string): + print("Received text: \(string)") + case .binary(let data): + print("Received data: \(data.count)") + case .ping(_): + break + case .pong(_): + break + case .viabilityChanged(_): + break + case .reconnectSuggested(_): + break + case .cancelled: + isConnected = false + case .error(let error): + isConnected = false + handleError(error) + } } ``` -Or you can use closures. +The closure of this would be: ```swift -socket = WebSocket(url: URL(string: "ws://localhost:8080/")!) -//websocketDidConnect -socket.onConnect = { - print("websocket is connected") -} -//websocketDidDisconnect -socket.onDisconnect = { (error: NSError?) in - print("websocket is disconnected: \(error?.localizedDescription)") +socket.onEvent = { event in + switch event { + // handle events just like above... + } } -//websocketDidReceiveMessage -socket.onText = { (text: String) in - print("got some text: \(text)") -} -//websocketDidReceiveData -socket.onData = { (data: Data) in - print("got some data: \(data.count)") -} -//you could do onPong as well. -socket.connect() ``` -One more: you can listen to socket connection and disconnection via notifications. Starscream posts `WebsocketDidConnectNotification` and `WebsocketDidDisconnectNotification`. You can find an `NSError` that caused the disconection by accessing `WebsocketDisconnectionErrorKeyName` on notification `userInfo`. - - -## The delegate methods give you a simple way to handle data from the server, but how do you send data? +### Writing to a WebSocket ### write a binary frame @@ -136,70 +101,79 @@ The writePing method is the same as write, but sends a ping control frame. socket.write(ping: Data()) //example on how to write a ping control frame over the socket! ``` -### disconnect +### write a pong frame -The disconnect method does what you would expect and closes the socket. + +the writePong method is the same as writePing, but sends a pong control frame. ```swift -socket.disconnect() +socket.write(pong: Data()) //example on how to write a pong control frame over the socket! ``` -### isConnected +Starscream will automatically respond to incoming `ping` control frames so you do not need to manually send `pong`s. -Returns if the socket is connected or not. +However if for some reason you need to control this process you can turn off the automatic `ping` response by disabling `respondToPingWithPong`. ```swift -if socket.isConnected { - // do cool stuff. -} +socket.respondToPingWithPong = false //Do not automaticaly respond to incoming pings with pongs. ``` -### Custom Headers +In most cases you will not need to do this. -You can also override the default websocket headers with your own custom ones like so: +### disconnect + +The disconnect method does what you would expect and closes the socket. ```swift -socket.headers["Sec-WebSocket-Protocol"] = "someother protocols" -socket.headers["Sec-WebSocket-Version"] = "14" -socket.headers["My-Awesome-Header"] = "Everything is Awesome!" +socket.disconnect() ``` -### Protocols - -If you need to specify a protocol, simple add it to the init: +The disconnect method can also send a custom close code if desired. ```swift -//chat and superchat are the example protocols here -socket = WebSocket(url: URL(string: "ws://localhost:8080/")!, protocols: ["chat","superchat"]) -socket.delegate = self -socket.connect() +socket.disconnect(closeCode: CloseCode.normal.rawValue) ``` -### Self Signed SSL and VOIP +### Custom Headers, Protocols and Timeout -There are a couple of other properties that modify the stream: +You can override the default websocket headers, add your own custom ones and set a timeout: ```swift -socket = WebSocket(url: URL(string: "ws://localhost:8080/")!, protocols: ["chat","superchat"]) +var request = URLRequest(url: URL(string: "ws://localhost:8080/")!) +request.timeoutInterval = 5 // Sets the timeout for the connection +request.setValue("someother protocols", forHTTPHeaderField: "Sec-WebSocket-Protocol") +request.setValue("14", forHTTPHeaderField: "Sec-WebSocket-Version") +request.setValue("chat,superchat", forHTTPHeaderField: "Sec-WebSocket-Protocol") +request.setValue("Everything is Awesome!", forHTTPHeaderField: "My-Awesome-Header") +let socket = WebSocket(request: request) +``` + +### SSL Pinning + +SSL Pinning is also supported in Starscream. + -//set this if you are planning on using the socket in a VOIP background setting (using the background VOIP service). -socket.voipEnabled = true +Allow Self-signed certificates: -//set this you want to ignore SSL cert validation, so a self signed SSL certificate can be used. -socket.disableSSLCertValidation = true +```swift +var request = URLRequest(url: URL(string: "ws://localhost:8080/")!) +let pinner = FoundationSecurity(allowSelfSigned: true) // don't validate SSL certificates +let socket = WebSocket(request: request, certPinner: pinner) ``` -### SSL Pinning +TODO: Update docs on how to load certificates and public keys into an app bundle, use the builtin pinner and TrustKit. -SSL Pinning is also supported in Starscream. +### Compression Extensions + +Compression Extensions ([RFC 7692](https://tools.ietf.org/html/rfc7692)) is supported in Starscream. Compression is enabled by default, however compression will only be used if it is supported by the server as well. You may enable or disable compression via the `.enableCompression` property: ```swift -socket = WebSocket(url: URL(string: "ws://localhost:8080/")!, protocols: ["chat","superchat"]) -let data = ... //load your certificate from disk -socket.security = SSLSecurity(certs: [SSLCert(data: data)], usePublicKeys: true) -//socket.security = SSLSecurity() //uses the .cer files in your app's bundle +var request = URLRequest(url: URL(string: "ws://localhost:8080/")!) +let compression = WSCompression() +let socket = WebSocket(request: request, compressionHandler: compression) ``` -You load either a `Data` blob of your certificate or you can use a `SecKeyRef` if you have a public key you want to use. The `usePublicKeys` bool is whether to use the certificates for validation or the public keys. The public keys will be extracted from the certificates automatically if `usePublicKeys` is choosen. + +Compression should be disabled if your application is transmitting already-compressed, random, or other uncompressable data. ### Custom Queue @@ -217,7 +191,7 @@ Check out the SimpleTest project in the examples directory to see how to setup a ## Requirements -Starscream works with iOS 7/OSX 10.9 or above. It is recommended to use iOS 8/10.10 or above for CocoaPods/framework support. To use Starscream with a project targeting iOS 7, you must include all Swift files directly in your project. +Starscream works with iOS 8/10.10 or above for CocoaPods/framework support. To use Starscream with a project targeting iOS 7, you must include all Swift files directly in your project. ## Installation @@ -231,7 +205,7 @@ To use Starscream in your project add the following 'Podfile' to your project platform :ios, '9.0' use_frameworks! - pod 'Starscream', '~> 2.0.0' + pod 'Starscream', '~> 4.0.0' Then run: @@ -253,9 +227,32 @@ $ brew install carthage To integrate Starscream into your Xcode project using Carthage, specify it in your `Cartfile`: ``` -github "daltoniam/Starscream" >= 2.0.0 +github "daltoniam/Starscream" >= 4.0.0 +``` + +### Accio + +Check out the [Accio](https://github.com/JamitLabs/Accio) docs on how to add a install. + +Add the following to your Package.swift: + +```swift +.package(url: "https://github.com/daltoniam/Starscream.git", .upToNextMajor(from: "4.0.0")), +``` + +Next, add `Starscream` to your App targets dependencies like so: + +```swift +.target( + name: "App", + dependencies: [ + "Starscream", + ] +), ``` +Then run `accio update`. + ### Rogue First see the [installation docs](https://github.com/acmacalister/Rogue) for how to install Rogue. @@ -263,11 +260,23 @@ First see the [installation docs](https://github.com/acmacalister/Rogue) for how To install Starscream run the command below in the directory you created the rogue file. ``` -rogue add https://github.com/daltoniam/starscream +rogue add https://github.com/daltoniam/Starscream ``` Next open the `libs` folder and add the `Starscream.xcodeproj` to your Xcode project. Once that is complete, in your "Build Phases" add the `Starscream.framework` to your "Link Binary with Libraries" phase. Make sure to add the `libs` folder to your `.gitignore` file. +### Swift Package Manager + +The [Swift Package Manager](https://swift.org/package-manager/) is a tool for automating the distribution of Swift code and is integrated into the `swift` compiler. + +Once you have your Swift package set up, adding Starscream as a dependency is as easy as adding it to the `dependencies` value of your `Package.swift`. + +```swift +dependencies: [ + .Package(url: "https://github.com/daltoniam/Starscream.git", majorVersion: 4) +] +``` + ### Other Simply grab the framework (either via git submodule or another package manager). @@ -280,9 +289,7 @@ If you are running this in an OSX app or on a physical iOS device you will need ## TODOs -- [ ] WatchOS? -- [ ] Linux Support? -- [ ] Add Unit Tests - Local Swift websocket server +- [ ] Proxy support ## License diff --git a/Example/Pods/Starscream/Source/SSLSecurity.swift b/Example/Pods/Starscream/Source/SSLSecurity.swift deleted file mode 100644 index 4c7f1d2..0000000 --- a/Example/Pods/Starscream/Source/SSLSecurity.swift +++ /dev/null @@ -1,260 +0,0 @@ -////////////////////////////////////////////////////////////////////////////////////////////////// -// -// SSLSecurity.swift -// Starscream -// -// Created by Dalton Cherry on 5/16/15. -// Copyright (c) 2014-2016 Dalton Cherry. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -////////////////////////////////////////////////////////////////////////////////////////////////// - -import Foundation -import Security - -public protocol SSLTrustValidator { - func isValid(_ trust: SecTrust, domain: String?) -> Bool -} - -open class SSLCert { - var certData: Data? - var key: SecKey? - - /** - Designated init for certificates - - - parameter data: is the binary data of the certificate - - - returns: a representation security object to be used with - */ - public init(data: Data) { - self.certData = data - } - - /** - Designated init for public keys - - - parameter key: is the public key to be used - - - returns: a representation security object to be used with - */ - public init(key: SecKey) { - self.key = key - } -} - -open class SSLSecurity : SSLTrustValidator { - public var validatedDN = true //should the domain name be validated? - - var isReady = false //is the key processing done? - var certificates: [Data]? //the certificates - var pubKeys: [SecKey]? //the public keys - var usePublicKeys = false //use public keys or certificate validation? - - /** - Use certs from main app bundle - - - parameter usePublicKeys: is to specific if the publicKeys or certificates should be used for SSL pinning validation - - - returns: a representation security object to be used with - */ - public convenience init(usePublicKeys: Bool = false) { - let paths = Bundle.main.paths(forResourcesOfType: "cer", inDirectory: ".") - - let certs = paths.reduce([SSLCert]()) { (certs: [SSLCert], path: String) -> [SSLCert] in - var certs = certs - if let data = NSData(contentsOfFile: path) { - certs.append(SSLCert(data: data as Data)) - } - return certs - } - - self.init(certs: certs, usePublicKeys: usePublicKeys) - } - - /** - Designated init - - - parameter certs: is the certificates or public keys to use - - parameter usePublicKeys: is to specific if the publicKeys or certificates should be used for SSL pinning validation - - - returns: a representation security object to be used with - */ - public init(certs: [SSLCert], usePublicKeys: Bool) { - self.usePublicKeys = usePublicKeys - - if self.usePublicKeys { - DispatchQueue.global(qos: .default).async { - let pubKeys = certs.reduce([SecKey]()) { (pubKeys: [SecKey], cert: SSLCert) -> [SecKey] in - var pubKeys = pubKeys - if let data = cert.certData, cert.key == nil { - cert.key = self.extractPublicKey(data) - } - if let key = cert.key { - pubKeys.append(key) - } - return pubKeys - } - - self.pubKeys = pubKeys - self.isReady = true - } - } else { - let certificates = certs.reduce([Data]()) { (certificates: [Data], cert: SSLCert) -> [Data] in - var certificates = certificates - if let data = cert.certData { - certificates.append(data) - } - return certificates - } - self.certificates = certificates - self.isReady = true - } - } - - /** - Valid the trust and domain name. - - - parameter trust: is the serverTrust to validate - - parameter domain: is the CN domain to validate - - - returns: if the key was successfully validated - */ - public func isValid(_ trust: SecTrust, domain: String?) -> Bool { - - var tries = 0 - while !self.isReady { - usleep(1000) - tries += 1 - if tries > 5 { - return false //doesn't appear it is going to ever be ready... - } - } - var policy: SecPolicy - if self.validatedDN { - policy = SecPolicyCreateSSL(true, domain as NSString?) - } else { - policy = SecPolicyCreateBasicX509() - } - SecTrustSetPolicies(trust,policy) - if self.usePublicKeys { - if let keys = self.pubKeys { - let serverPubKeys = publicKeyChain(trust) - for serverKey in serverPubKeys as [AnyObject] { - for key in keys as [AnyObject] { - if serverKey.isEqual(key) { - return true - } - } - } - } - } else if let certs = self.certificates { - let serverCerts = certificateChain(trust) - var collect = [SecCertificate]() - for cert in certs { - collect.append(SecCertificateCreateWithData(nil,cert as CFData)!) - } - SecTrustSetAnchorCertificates(trust,collect as NSArray) - var result: SecTrustResultType = .unspecified - SecTrustEvaluate(trust,&result) - if result == .unspecified || result == .proceed { - var trustedCount = 0 - for serverCert in serverCerts { - for cert in certs { - if cert == serverCert { - trustedCount += 1 - break - } - } - } - if trustedCount == serverCerts.count { - return true - } - } - } - return false - } - - /** - Get the public key from a certificate data - - - parameter data: is the certificate to pull the public key from - - - returns: a public key - */ - func extractPublicKey(_ data: Data) -> SecKey? { - guard let cert = SecCertificateCreateWithData(nil, data as CFData) else { return nil } - - return extractPublicKey(cert, policy: SecPolicyCreateBasicX509()) - } - - /** - Get the public key from a certificate - - - parameter data: is the certificate to pull the public key from - - - returns: a public key - */ - func extractPublicKey(_ cert: SecCertificate, policy: SecPolicy) -> SecKey? { - var possibleTrust: SecTrust? - SecTrustCreateWithCertificates(cert, policy, &possibleTrust) - - guard let trust = possibleTrust else { return nil } - var result: SecTrustResultType = .unspecified - SecTrustEvaluate(trust, &result) - return SecTrustCopyPublicKey(trust) - } - - /** - Get the certificate chain for the trust - - - parameter trust: is the trust to lookup the certificate chain for - - - returns: the certificate chain for the trust - */ - func certificateChain(_ trust: SecTrust) -> [Data] { - let certificates = (0.. [Data] in - var certificates = certificates - let cert = SecTrustGetCertificateAtIndex(trust, index) - certificates.append(SecCertificateCopyData(cert!) as Data) - return certificates - } - - return certificates - } - - /** - Get the public key chain for the trust - - - parameter trust: is the trust to lookup the certificate chain and extract the public keys - - - returns: the public keys from the certifcate chain for the trust - */ - func publicKeyChain(_ trust: SecTrust) -> [SecKey] { - let policy = SecPolicyCreateBasicX509() - let keys = (0.. [SecKey] in - var keys = keys - let cert = SecTrustGetCertificateAtIndex(trust, index) - if let key = extractPublicKey(cert!, policy: policy) { - keys.append(key) - } - - return keys - } - - return keys - } - - -} diff --git a/Example/Pods/Starscream/Source/WebSocket.swift b/Example/Pods/Starscream/Source/WebSocket.swift deleted file mode 100644 index 3b85b50..0000000 --- a/Example/Pods/Starscream/Source/WebSocket.swift +++ /dev/null @@ -1,942 +0,0 @@ -////////////////////////////////////////////////////////////////////////////////////////////////// -// -// Websocket.swift -// -// Created by Dalton Cherry on 7/16/14. -// Copyright (c) 2014-2016 Dalton Cherry. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -////////////////////////////////////////////////////////////////////////////////////////////////// - -import Foundation -import CoreFoundation -import Security - -public let WebsocketDidConnectNotification = "WebsocketDidConnectNotification" -public let WebsocketDidDisconnectNotification = "WebsocketDidDisconnectNotification" -public let WebsocketDisconnectionErrorKeyName = "WebsocketDisconnectionErrorKeyName" - -public protocol WebSocketDelegate: class { - func websocketDidConnect(socket: WebSocket) - func websocketDidDisconnect(socket: WebSocket, error: NSError?) - func websocketDidReceiveMessage(socket: WebSocket, text: String) - func websocketDidReceiveData(socket: WebSocket, data: Data) -} - -public protocol WebSocketPongDelegate: class { - func websocketDidReceivePong(socket: WebSocket, data: Data?) -} - -open class WebSocket : NSObject, StreamDelegate { - - enum OpCode : UInt8 { - case continueFrame = 0x0 - case textFrame = 0x1 - case binaryFrame = 0x2 - // 3-7 are reserved. - case connectionClose = 0x8 - case ping = 0x9 - case pong = 0xA - // B-F reserved. - } - - public enum CloseCode : UInt16 { - case normal = 1000 - case goingAway = 1001 - case protocolError = 1002 - case protocolUnhandledType = 1003 - // 1004 reserved. - case noStatusReceived = 1005 - //1006 reserved. - case encoding = 1007 - case policyViolated = 1008 - case messageTooBig = 1009 - } - - public static let ErrorDomain = "WebSocket" - - enum InternalErrorCode: UInt16 { - // 0-999 WebSocket status codes not used - case outputStreamWriteError = 1 - } - - // Where the callback is executed. It defaults to the main UI thread queue. - public var callbackQueue = DispatchQueue.main - - var optionalProtocols: [String]? - - // MARK: - Constants - - let headerWSUpgradeName = "Upgrade" - let headerWSUpgradeValue = "websocket" - let headerWSHostName = "Host" - let headerWSConnectionName = "Connection" - let headerWSConnectionValue = "Upgrade" - let headerWSProtocolName = "Sec-WebSocket-Protocol" - let headerWSVersionName = "Sec-WebSocket-Version" - let headerWSVersionValue = "13" - let headerWSKeyName = "Sec-WebSocket-Key" - let headerOriginName = "Origin" - let headerWSAcceptName = "Sec-WebSocket-Accept" - let BUFFER_MAX = 4096 - let FinMask: UInt8 = 0x80 - let OpCodeMask: UInt8 = 0x0F - let RSVMask: UInt8 = 0x70 - let MaskMask: UInt8 = 0x80 - let PayloadLenMask: UInt8 = 0x7F - let MaxFrameSize: Int = 32 - let httpSwitchProtocolCode = 101 - let supportedSSLSchemes = ["wss", "https"] - - class WSResponse { - var isFin = false - var code: OpCode = .continueFrame - var bytesLeft = 0 - var frameCount = 0 - var buffer: NSMutableData? - } - - // MARK: - Delegates - - /// Responds to callback about new messages coming in over the WebSocket - /// and also connection/disconnect messages. - public weak var delegate: WebSocketDelegate? - - /// Receives a callback for each pong message recived. - public weak var pongDelegate: WebSocketPongDelegate? - - - // MARK: - Block based API. - - public var onConnect: ((Void) -> Void)? - public var onDisconnect: ((NSError?) -> Void)? - public var onText: ((String) -> Void)? - public var onData: ((Data) -> Void)? - public var onPong: ((Data?) -> Void)? - - public var headers = [String: String]() - public var voipEnabled = false - public var disableSSLCertValidation = false - public var security: SSLTrustValidator? - public var enabledSSLCipherSuites: [SSLCipherSuite]? - public var origin: String? - public var timeout = 5 - public var isConnected: Bool { - return connected - } - - public var currentURL: URL { return url } - - // MARK: - Private - - private var url: URL - private var inputStream: InputStream? - private var outputStream: OutputStream? - private var connected = false - private var isConnecting = false - private var writeQueue = OperationQueue() - private var readStack = [WSResponse]() - private var inputQueue = [Data]() - private var fragBuffer: Data? - private var certValidated = false - private var didDisconnect = false - private var readyToWrite = false - private let mutex = NSLock() - private let notificationCenter = NotificationCenter.default - private var canDispatch: Bool { - mutex.lock() - let canWork = readyToWrite - mutex.unlock() - return canWork - } - /// The shared processing queue used for all WebSocket. - private static let sharedWorkQueue = DispatchQueue(label: "com.vluxe.starscream.websocket", attributes: []) - - /// Used for setting protocols. - public init(url: URL, protocols: [String]? = nil) { - self.url = url - self.origin = url.absoluteString - writeQueue.maxConcurrentOperationCount = 1 - optionalProtocols = protocols - } - - // Used for specifically setting the QOS for the write queue. - public convenience init(url: URL, writeQueueQOS: QualityOfService, protocols: [String]? = nil) { - self.init(url: url, protocols: protocols) - writeQueue.qualityOfService = writeQueueQOS - } - - /** - Connect to the WebSocket server on a background thread. - */ - public func connect() { - guard !isConnecting else { return } - didDisconnect = false - isConnecting = true - createHTTPRequest() - isConnecting = false - } - - /** - Disconnect from the server. I send a Close control frame to the server, then expect the server to respond with a Close control frame and close the socket from its end. I notify my delegate once the socket has been closed. - - If you supply a non-nil `forceTimeout`, I wait at most that long (in seconds) for the server to close the socket. After the timeout expires, I close the socket and notify my delegate. - - If you supply a zero (or negative) `forceTimeout`, I immediately close the socket (without sending a Close control frame) and notify my delegate. - - - Parameter forceTimeout: Maximum time to wait for the server to close the socket. - - Parameter closeCode: The code to send on disconnect. The default is the normal close code for cleanly disconnecting a webSocket. - */ - public func disconnect(forceTimeout: TimeInterval? = nil, closeCode: UInt16 = CloseCode.normal.rawValue) { - switch forceTimeout { - case .some(let seconds) where seconds > 0: - let milliseconds = Int(seconds * 1_000) - callbackQueue.asyncAfter(deadline: .now() + .milliseconds(milliseconds)) { [weak self] in - self?.disconnectStream(nil) - } - fallthrough - case .none: - writeError(closeCode) - default: - disconnectStream(nil) - break - } - } - - /** - Write a string to the websocket. This sends it as a text frame. - - If you supply a non-nil completion block, I will perform it when the write completes. - - - parameter string: The string to write. - - parameter completion: The (optional) completion handler. - */ - public func write(string: String, completion: (() -> ())? = nil) { - guard isConnected else { return } - dequeueWrite(string.data(using: String.Encoding.utf8)!, code: .textFrame, writeCompletion: completion) - } - - /** - Write binary data to the websocket. This sends it as a binary frame. - - If you supply a non-nil completion block, I will perform it when the write completes. - - - parameter data: The data to write. - - parameter completion: The (optional) completion handler. - */ - public func write(data: Data, completion: (() -> ())? = nil) { - guard isConnected else { return } - dequeueWrite(data, code: .binaryFrame, writeCompletion: completion) - } - - /** - Write a ping to the websocket. This sends it as a control frame. - Yodel a sound to the planet. This sends it as an astroid. http://youtu.be/Eu5ZJELRiJ8?t=42s - */ - public func write(ping: Data, completion: (() -> ())? = nil) { - guard isConnected else { return } - dequeueWrite(ping, code: .ping, writeCompletion: completion) - } - - /** - Private method that starts the connection. - */ - private func createHTTPRequest() { - - let urlRequest = CFHTTPMessageCreateRequest(kCFAllocatorDefault, "GET" as CFString, - url as CFURL, kCFHTTPVersion1_1).takeRetainedValue() - - var port = url.port - if port == nil { - if supportedSSLSchemes.contains(url.scheme!) { - port = 443 - } else { - port = 80 - } - } - addHeader(urlRequest, key: headerWSUpgradeName, val: headerWSUpgradeValue) - addHeader(urlRequest, key: headerWSConnectionName, val: headerWSConnectionValue) - if let protocols = optionalProtocols { - addHeader(urlRequest, key: headerWSProtocolName, val: protocols.joined(separator: ",")) - } - addHeader(urlRequest, key: headerWSVersionName, val: headerWSVersionValue) - addHeader(urlRequest, key: headerWSKeyName, val: generateWebSocketKey()) - if let origin = origin { - addHeader(urlRequest, key: headerOriginName, val: origin) - } - addHeader(urlRequest, key: headerWSHostName, val: "\(url.host!):\(port!)") - for (key, value) in headers { - addHeader(urlRequest, key: key, val: value) - } - if let cfHTTPMessage = CFHTTPMessageCopySerializedMessage(urlRequest) { - let serializedRequest = cfHTTPMessage.takeRetainedValue() - initStreamsWithData(serializedRequest as Data, Int(port!)) - } - } - - /** - Add a header to the CFHTTPMessage by using the NSString bridges to CFString - */ - private func addHeader(_ urlRequest: CFHTTPMessage, key: String, val: String) { - CFHTTPMessageSetHeaderFieldValue(urlRequest, key as CFString, val as CFString) - } - - /** - Generate a WebSocket key as needed in RFC. - */ - private func generateWebSocketKey() -> String { - var key = "" - let seed = 16 - for _ in 0..? - var writeStream: Unmanaged? - let h = url.host! as NSString - CFStreamCreatePairWithSocketToHost(nil, h, UInt32(port), &readStream, &writeStream) - inputStream = readStream!.takeRetainedValue() - outputStream = writeStream!.takeRetainedValue() - guard let inStream = inputStream, let outStream = outputStream else { return } - inStream.delegate = self - outStream.delegate = self - if supportedSSLSchemes.contains(url.scheme!) { - inStream.setProperty(StreamSocketSecurityLevel.negotiatedSSL as AnyObject, forKey: Stream.PropertyKey.socketSecurityLevelKey) - outStream.setProperty(StreamSocketSecurityLevel.negotiatedSSL as AnyObject, forKey: Stream.PropertyKey.socketSecurityLevelKey) - if disableSSLCertValidation { - let settings: [NSObject: NSObject] = [kCFStreamSSLValidatesCertificateChain: NSNumber(value: false), kCFStreamSSLPeerName: kCFNull] - inStream.setProperty(settings, forKey: kCFStreamPropertySSLSettings as Stream.PropertyKey) - outStream.setProperty(settings, forKey: kCFStreamPropertySSLSettings as Stream.PropertyKey) - } - if let cipherSuites = self.enabledSSLCipherSuites { - if let sslContextIn = CFReadStreamCopyProperty(inputStream, CFStreamPropertyKey(rawValue: kCFStreamPropertySSLContext)) as! SSLContext?, - let sslContextOut = CFWriteStreamCopyProperty(outputStream, CFStreamPropertyKey(rawValue: kCFStreamPropertySSLContext)) as! SSLContext? { - let resIn = SSLSetEnabledCiphers(sslContextIn, cipherSuites, cipherSuites.count) - let resOut = SSLSetEnabledCiphers(sslContextOut, cipherSuites, cipherSuites.count) - if resIn != errSecSuccess { - let error = self.errorWithDetail("Error setting ingoing cypher suites", code: UInt16(resIn)) - disconnectStream(error) - return - } - if resOut != errSecSuccess { - let error = self.errorWithDetail("Error setting outgoing cypher suites", code: UInt16(resOut)) - disconnectStream(error) - return - } - } - } - } else { - certValidated = true //not a https session, so no need to check SSL pinning - } - if voipEnabled { - inStream.setProperty(StreamNetworkServiceTypeValue.voIP as AnyObject, forKey: Stream.PropertyKey.networkServiceType) - outStream.setProperty(StreamNetworkServiceTypeValue.voIP as AnyObject, forKey: Stream.PropertyKey.networkServiceType) - } - - CFReadStreamSetDispatchQueue(inStream, WebSocket.sharedWorkQueue) - CFWriteStreamSetDispatchQueue(outStream, WebSocket.sharedWorkQueue) - inStream.open() - outStream.open() - - self.mutex.lock() - self.readyToWrite = true - self.mutex.unlock() - - let bytes = UnsafeRawPointer((data as NSData).bytes).assumingMemoryBound(to: UInt8.self) - var out = timeout * 1_000_000 // wait 5 seconds before giving up - writeQueue.addOperation { [weak self] in - while !outStream.hasSpaceAvailable { - usleep(100) // wait until the socket is ready - out -= 100 - if out < 0 { - self?.cleanupStream() - self?.doDisconnect(self?.errorWithDetail("write wait timed out", code: 2)) - return - } else if outStream.streamError != nil { - return // disconnectStream will be called. - } - } - outStream.write(bytes, maxLength: data.count) - } - } - - /** - Delegate for the stream methods. Processes incoming bytes - */ - public func stream(_ aStream: Stream, handle eventCode: Stream.Event) { - if let sec = security, !certValidated && [.hasBytesAvailable, .hasSpaceAvailable].contains(eventCode) { - let trust = aStream.property(forKey: kCFStreamPropertySSLPeerTrust as Stream.PropertyKey) as! SecTrust - let domain = aStream.property(forKey: kCFStreamSSLPeerName as Stream.PropertyKey) as? String - if sec.isValid(trust, domain: domain) { - certValidated = true - } else { - let error = errorWithDetail("Invalid SSL certificate", code: 1) - disconnectStream(error) - return - } - } - if eventCode == .hasBytesAvailable { - if aStream == inputStream { - processInputStream() - } - } else if eventCode == .errorOccurred { - disconnectStream(aStream.streamError as NSError?) - } else if eventCode == .endEncountered { - disconnectStream(nil) - } - } - - /** - Disconnect the stream object and notifies the delegate. - */ - private func disconnectStream(_ error: NSError?) { - if error == nil { - writeQueue.waitUntilAllOperationsAreFinished() - } else { - writeQueue.cancelAllOperations() - } - cleanupStream() - doDisconnect(error) - } - - /** - cleanup the streams. - */ - private func cleanupStream() { - outputStream?.delegate = nil - inputStream?.delegate = nil - if let stream = inputStream { - CFReadStreamSetDispatchQueue(stream, nil) - stream.close() - } - if let stream = outputStream { - CFWriteStreamSetDispatchQueue(stream, nil) - stream.close() - } - outputStream = nil - inputStream = nil - } - - /** - Handles the incoming bytes and sending them to the proper processing method. - */ - private func processInputStream() { - let buf = NSMutableData(capacity: BUFFER_MAX) - let buffer = UnsafeMutableRawPointer(mutating: buf!.bytes).assumingMemoryBound(to: UInt8.self) - let length = inputStream!.read(buffer, maxLength: BUFFER_MAX) - guard length > 0 else { return } - var process = false - if inputQueue.count == 0 { - process = true - } - inputQueue.append(Data(bytes: buffer, count: length)) - if process { - dequeueInput() - } - } - - /** - Dequeue the incoming input so it is processed in order. - */ - private func dequeueInput() { - while !inputQueue.isEmpty { - let data = inputQueue[0] - var work = data - if let fragBuffer = fragBuffer { - var combine = NSData(data: fragBuffer) as Data - combine.append(data) - work = combine - self.fragBuffer = nil - } - let buffer = UnsafeRawPointer((work as NSData).bytes).assumingMemoryBound(to: UInt8.self) - let length = work.count - if !connected { - processTCPHandshake(buffer, bufferLen: length) - } else { - processRawMessagesInBuffer(buffer, bufferLen: length) - } - inputQueue = inputQueue.filter{ $0 != data } - } - } - - /** - Handle checking the inital connection status - */ - private func processTCPHandshake(_ buffer: UnsafePointer, bufferLen: Int) { - let code = processHTTP(buffer, bufferLen: bufferLen) - switch code { - case 0: - connected = true - guard canDispatch else {return} - callbackQueue.async { [weak self] in - guard let s = self else { return } - s.onConnect?() - s.delegate?.websocketDidConnect(socket: s) - s.notificationCenter.post(name: NSNotification.Name(WebsocketDidConnectNotification), object: self) - } - case -1: - fragBuffer = Data(bytes: buffer, count: bufferLen) - break // do nothing, we are going to collect more data - default: - doDisconnect(errorWithDetail("Invalid HTTP upgrade", code: UInt16(code))) - } - } - - /** - Finds the HTTP Packet in the TCP stream, by looking for the CRLF. - */ - private func processHTTP(_ buffer: UnsafePointer, bufferLen: Int) -> Int { - let CRLFBytes = [UInt8(ascii: "\r"), UInt8(ascii: "\n"), UInt8(ascii: "\r"), UInt8(ascii: "\n")] - var k = 0 - var totalSize = 0 - for i in 0.. 0 { - let code = validateResponse(buffer, bufferLen: totalSize) - if code != 0 { - return code - } - totalSize += 1 //skip the last \n - let restSize = bufferLen - totalSize - if restSize > 0 { - processRawMessagesInBuffer(buffer + totalSize, bufferLen: restSize) - } - return 0 //success - } - return -1 // Was unable to find the full TCP header. - } - - /** - Validates the HTTP is a 101 as per the RFC spec. - */ - private func validateResponse(_ buffer: UnsafePointer, bufferLen: Int) -> Int { - let response = CFHTTPMessageCreateEmpty(kCFAllocatorDefault, false).takeRetainedValue() - CFHTTPMessageAppendBytes(response, buffer, bufferLen) - let code = CFHTTPMessageGetResponseStatusCode(response) - if code != httpSwitchProtocolCode { - return code - } - if let cfHeaders = CFHTTPMessageCopyAllHeaderFields(response) { - let headers = cfHeaders.takeRetainedValue() as NSDictionary - if let acceptKey = headers[headerWSAcceptName as NSString] as? NSString { - if acceptKey.length > 0 { - return 0 - } - } - } - return -1 - } - - /** - Read a 16 bit big endian value from a buffer - */ - private static func readUint16(_ buffer: UnsafePointer, offset: Int) -> UInt16 { - return (UInt16(buffer[offset + 0]) << 8) | UInt16(buffer[offset + 1]) - } - - /** - Read a 64 bit big endian value from a buffer - */ - private static func readUint64(_ buffer: UnsafePointer, offset: Int) -> UInt64 { - var value = UInt64(0) - for i in 0...7 { - value = (value << 8) | UInt64(buffer[offset + i]) - } - return value - } - - /** - Write a 16-bit big endian value to a buffer. - */ - private static func writeUint16(_ buffer: UnsafeMutablePointer, offset: Int, value: UInt16) { - buffer[offset + 0] = UInt8(value >> 8) - buffer[offset + 1] = UInt8(value & 0xff) - } - - /** - Write a 64-bit big endian value to a buffer. - */ - private static func writeUint64(_ buffer: UnsafeMutablePointer, offset: Int, value: UInt64) { - for i in 0...7 { - buffer[offset + i] = UInt8((value >> (8*UInt64(7 - i))) & 0xff) - } - } - - /** - Process one message at the start of `buffer`. Return another buffer (sharing storage) that contains the leftover contents of `buffer` that I didn't process. - */ - private func processOneRawMessage(inBuffer buffer: UnsafeBufferPointer) -> UnsafeBufferPointer { - let response = readStack.last - guard let baseAddress = buffer.baseAddress else {return emptyBuffer} - let bufferLen = buffer.count - if response != nil && bufferLen < 2 { - fragBuffer = Data(buffer: buffer) - return emptyBuffer - } - if let response = response, response.bytesLeft > 0 { - var len = response.bytesLeft - var extra = bufferLen - response.bytesLeft - if response.bytesLeft > bufferLen { - len = bufferLen - extra = 0 - } - response.bytesLeft -= len - response.buffer?.append(Data(bytes: baseAddress, count: len)) - _ = processResponse(response) - return buffer.fromOffset(bufferLen - extra) - } else { - let isFin = (FinMask & baseAddress[0]) - let receivedOpcode = OpCode(rawValue: (OpCodeMask & baseAddress[0])) - let isMasked = (MaskMask & baseAddress[1]) - let payloadLen = (PayloadLenMask & baseAddress[1]) - var offset = 2 - if (isMasked > 0 || (RSVMask & baseAddress[0]) > 0) && receivedOpcode != .pong { - let errCode = CloseCode.protocolError.rawValue - doDisconnect(errorWithDetail("masked and rsv data is not currently supported", code: errCode)) - writeError(errCode) - return emptyBuffer - } - let isControlFrame = (receivedOpcode == .connectionClose || receivedOpcode == .ping) - if !isControlFrame && (receivedOpcode != .binaryFrame && receivedOpcode != .continueFrame && - receivedOpcode != .textFrame && receivedOpcode != .pong) { - let errCode = CloseCode.protocolError.rawValue - doDisconnect(errorWithDetail("unknown opcode: \(receivedOpcode)", code: errCode)) - writeError(errCode) - return emptyBuffer - } - if isControlFrame && isFin == 0 { - let errCode = CloseCode.protocolError.rawValue - doDisconnect(errorWithDetail("control frames can't be fragmented", code: errCode)) - writeError(errCode) - return emptyBuffer - } - var closeCode = CloseCode.normal.rawValue - if receivedOpcode == .connectionClose { - if payloadLen == 1 { - closeCode = CloseCode.protocolError.rawValue - } else if payloadLen > 1 { - closeCode = WebSocket.readUint16(baseAddress, offset: offset) - if closeCode < 1000 || (closeCode > 1003 && closeCode < 1007) || (closeCode > 1011 && closeCode < 3000) { - closeCode = CloseCode.protocolError.rawValue - } - } - if payloadLen < 2 { - doDisconnect(errorWithDetail("connection closed by server", code: closeCode)) - writeError(closeCode) - return emptyBuffer - } - } else if isControlFrame && payloadLen > 125 { - writeError(CloseCode.protocolError.rawValue) - return emptyBuffer - } - var dataLength = UInt64(payloadLen) - if dataLength == 127 { - dataLength = WebSocket.readUint64(baseAddress, offset: offset) - offset += MemoryLayout.size - } else if dataLength == 126 { - dataLength = UInt64(WebSocket.readUint16(baseAddress, offset: offset)) - offset += MemoryLayout.size - } - if bufferLen < offset || UInt64(bufferLen - offset) < dataLength { - fragBuffer = Data(bytes: baseAddress, count: bufferLen) - return emptyBuffer - } - var len = dataLength - if dataLength > UInt64(bufferLen) { - len = UInt64(bufferLen-offset) - } - let data: Data - if len < 0 { - len = 0 - data = Data() - } else { - if receivedOpcode == .connectionClose && len > 0 { - let size = MemoryLayout.size - offset += size - len -= UInt64(size) - } - data = Data(bytes: baseAddress+offset, count: Int(len)) - } - if receivedOpcode == .connectionClose { - var closeReason = "connection closed by server" - if let customCloseReason = String(data: data, encoding: .utf8) { - closeReason = customCloseReason - } else { - closeCode = CloseCode.protocolError.rawValue - } - doDisconnect(errorWithDetail(closeReason, code: closeCode)) - writeError(closeCode) - return emptyBuffer - } - if receivedOpcode == .pong { - if canDispatch { - callbackQueue.async { [weak self] in - guard let s = self else { return } - let pongData: Data? = data.count > 0 ? data : nil - s.onPong?(pongData) - s.pongDelegate?.websocketDidReceivePong(socket: s, data: pongData) - } - } - return buffer.fromOffset(offset + Int(len)) - } - var response = readStack.last - if isControlFrame { - response = nil // Don't append pings. - } - if isFin == 0 && receivedOpcode == .continueFrame && response == nil { - let errCode = CloseCode.protocolError.rawValue - doDisconnect(errorWithDetail("continue frame before a binary or text frame", code: errCode)) - writeError(errCode) - return emptyBuffer - } - var isNew = false - if response == nil { - if receivedOpcode == .continueFrame { - let errCode = CloseCode.protocolError.rawValue - doDisconnect(errorWithDetail("first frame can't be a continue frame", - code: errCode)) - writeError(errCode) - return emptyBuffer - } - isNew = true - response = WSResponse() - response!.code = receivedOpcode! - response!.bytesLeft = Int(dataLength) - response!.buffer = NSMutableData(data: data) - } else { - if receivedOpcode == .continueFrame { - response!.bytesLeft = Int(dataLength) - } else { - let errCode = CloseCode.protocolError.rawValue - doDisconnect(errorWithDetail("second and beyond of fragment message must be a continue frame", - code: errCode)) - writeError(errCode) - return emptyBuffer - } - response!.buffer!.append(data) - } - if let response = response { - response.bytesLeft -= Int(len) - response.frameCount += 1 - response.isFin = isFin > 0 ? true : false - if isNew { - readStack.append(response) - } - _ = processResponse(response) - } - - let step = Int(offset + numericCast(len)) - return buffer.fromOffset(step) - } - } - - /** - Process all messages in the buffer if possible. - */ - private func processRawMessagesInBuffer(_ pointer: UnsafePointer, bufferLen: Int) { - var buffer = UnsafeBufferPointer(start: pointer, count: bufferLen) - repeat { - buffer = processOneRawMessage(inBuffer: buffer) - } while buffer.count >= 2 - if buffer.count > 0 { - fragBuffer = Data(buffer: buffer) - } - } - - /** - Process the finished response of a buffer. - */ - private func processResponse(_ response: WSResponse) -> Bool { - if response.isFin && response.bytesLeft <= 0 { - if response.code == .ping { - let data = response.buffer! // local copy so it is perverse for writing - dequeueWrite(data as Data, code: .pong) - } else if response.code == .textFrame { - let str: NSString? = NSString(data: response.buffer! as Data, encoding: String.Encoding.utf8.rawValue) - if str == nil { - writeError(CloseCode.encoding.rawValue) - return false - } - if canDispatch { - callbackQueue.async { [weak self] in - guard let s = self else { return } - s.onText?(str! as String) - s.delegate?.websocketDidReceiveMessage(socket: s, text: str! as String) - } - } - } else if response.code == .binaryFrame { - if canDispatch { - let data = response.buffer! // local copy so it is perverse for writing - callbackQueue.async { [weak self] in - guard let s = self else { return } - s.onData?(data as Data) - s.delegate?.websocketDidReceiveData(socket: s, data: data as Data) - } - } - } - readStack.removeLast() - return true - } - return false - } - - /** - Create an error - */ - private func errorWithDetail(_ detail: String, code: UInt16) -> NSError { - var details = [String: String]() - details[NSLocalizedDescriptionKey] = detail - return NSError(domain: WebSocket.ErrorDomain, code: Int(code), userInfo: details) - } - - /** - Write an error to the socket - */ - private func writeError(_ code: UInt16) { - let buf = NSMutableData(capacity: MemoryLayout.size) - let buffer = UnsafeMutableRawPointer(mutating: buf!.bytes).assumingMemoryBound(to: UInt8.self) - WebSocket.writeUint16(buffer, offset: 0, value: code) - dequeueWrite(Data(bytes: buffer, count: MemoryLayout.size), code: .connectionClose) - } - - /** - Used to write things to the stream - */ - private func dequeueWrite(_ data: Data, code: OpCode, writeCompletion: (() -> ())? = nil) { - writeQueue.addOperation { [weak self] in - //stream isn't ready, let's wait - guard let s = self else { return } - var offset = 2 - let dataLength = data.count - let frame = NSMutableData(capacity: dataLength + s.MaxFrameSize) - let buffer = UnsafeMutableRawPointer(frame!.mutableBytes).assumingMemoryBound(to: UInt8.self) - buffer[0] = s.FinMask | code.rawValue - if dataLength < 126 { - buffer[1] = CUnsignedChar(dataLength) - } else if dataLength <= Int(UInt16.max) { - buffer[1] = 126 - WebSocket.writeUint16(buffer, offset: offset, value: UInt16(dataLength)) - offset += MemoryLayout.size - } else { - buffer[1] = 127 - WebSocket.writeUint64(buffer, offset: offset, value: UInt64(dataLength)) - offset += MemoryLayout.size - } - buffer[1] |= s.MaskMask - let maskKey = UnsafeMutablePointer(buffer + offset) - _ = SecRandomCopyBytes(kSecRandomDefault, Int(MemoryLayout.size), maskKey) - offset += MemoryLayout.size - - for i in 0...size] - offset += 1 - } - var total = 0 - while true { - guard let outStream = s.outputStream else { break } - let writeBuffer = UnsafeRawPointer(frame!.bytes+total).assumingMemoryBound(to: UInt8.self) - let len = outStream.write(writeBuffer, maxLength: offset-total) - if len < 0 { - var error: Error? - if let streamError = outStream.streamError { - error = streamError - } else { - let errCode = InternalErrorCode.outputStreamWriteError.rawValue - error = s.errorWithDetail("output stream error during write", code: errCode) - } - s.doDisconnect(error as NSError?) - break - } else { - total += len - } - if total >= offset { - if let queue = self?.callbackQueue, let callback = writeCompletion { - queue.async { - callback() - } - } - - break - } - } - - } - } - - /** - Used to preform the disconnect delegate - */ - private func doDisconnect(_ error: NSError?) { - guard !didDisconnect else { return } - didDisconnect = true - connected = false - guard canDispatch else {return} - callbackQueue.async { [weak self] in - guard let s = self else { return } - s.onDisconnect?(error) - s.delegate?.websocketDidDisconnect(socket: s, error: error) - let userInfo = error.map{ [WebsocketDisconnectionErrorKeyName: $0] } - s.notificationCenter.post(name: NSNotification.Name(WebsocketDidDisconnectNotification), object: self, userInfo: userInfo) - } - } - - // MARK: - Deinit - - deinit { - mutex.lock() - readyToWrite = false - mutex.unlock() - cleanupStream() - } - -} - -private extension Data { - - init(buffer: UnsafeBufferPointer) { - self.init(bytes: buffer.baseAddress!, count: buffer.count) - } - -} - -private extension UnsafeBufferPointer { - - func fromOffset(_ offset: Int) -> UnsafeBufferPointer { - return UnsafeBufferPointer(start: baseAddress?.advanced(by: offset), count: count - offset) - } - -} - -private let emptyBuffer = UnsafeBufferPointer(start: nil, count: 0) diff --git a/Example/Pods/SwiftyJSON/LICENSE b/Example/Pods/SwiftyJSON/LICENSE index 916a0ac..68e3fd7 100644 --- a/Example/Pods/SwiftyJSON/LICENSE +++ b/Example/Pods/SwiftyJSON/LICENSE @@ -1,6 +1,6 @@ The MIT License (MIT) -Copyright (c) 2016 Ruoyu Fu +Copyright (c) 2017 Ruoyu Fu Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/Example/Pods/SwiftyJSON/README.md b/Example/Pods/SwiftyJSON/README.md index 0f29db0..7a10e29 100644 --- a/Example/Pods/SwiftyJSON/README.md +++ b/Example/Pods/SwiftyJSON/README.md @@ -1,9 +1,15 @@ # SwiftyJSON -[![Travis CI](https://travis-ci.org/SwiftyJSON/SwiftyJSON.svg?branch=master)](https://travis-ci.org/SwiftyJSON/SwiftyJSON) [![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage) ![CocoaPods](https://img.shields.io/cocoapods/v/SwiftyJSON.svg) ![Platform](https://img.shields.io/badge/platforms-iOS%208.0+%20%7C%20macOS%2010.10+%20%7C%20tvOS%209.0+%20%7C%20watchOS%202.0+-333333.svg) +[![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage) ![CocoaPods](https://img.shields.io/cocoapods/v/SwiftyJSON.svg) ![Platform](https://img.shields.io/badge/platforms-iOS%208.0%20%7C%20macOS%2010.10%20%7C%20tvOS%209.0%20%7C%20watchOS%203.0-F28D00.svg) [![Reviewed by Hound](https://img.shields.io/badge/Reviewed_by-Hound-8E64B0.svg)](https://houndci.com) SwiftyJSON makes it easy to deal with JSON data in Swift. +Platform | Build Status +---------| --------------| +*OS | [![Travis CI](https://travis-ci.org/SwiftyJSON/SwiftyJSON.svg?branch=master)](https://travis-ci.org/SwiftyJSON/SwiftyJSON) | +[Linux](https://github.com/IBM-Swift/SwiftyJSON) | [![Build Status](https://travis-ci.org/IBM-Swift/SwiftyJSON.svg?branch=master)](https://travis-ci.org/IBM-Swift/SwiftyJSON) | + + 1. [Why is the typical JSON handling in Swift NOT good](#why-is-the-typical-json-handling-in-swift-not-good) 2. [Requirements](#requirements) 3. [Integration](#integration) @@ -17,9 +23,10 @@ SwiftyJSON makes it easy to deal with JSON data in Swift. - [Setter](#setter) - [Raw object](#raw-object) - [Literal convertibles](#literal-convertibles) + - [Merging](#merging) 5. [Work with Alamofire](#work-with-alamofire) - -> For Legacy Swift support, take a look at the [swift2 branch](https://github.com/SwiftyJSON/SwiftyJSON/tree/swift2) +6. [Work with Moya](#work-with-moya) +7. [SwiftyJSON Model Generator](#swiftyjson-model-generator) > [中文介绍](http://tangplin.github.io/swiftyjson/) @@ -28,7 +35,7 @@ SwiftyJSON makes it easy to deal with JSON data in Swift. Swift is very strict about types. But although explicit typing is good for saving us from mistakes, it becomes painful when dealing with JSON and other areas that are, by nature, implicit about types. -Take the Twitter API for example. Say we want to retrieve a user's "name" value of some tweet in Swift (according to Twitter's API https://dev.twitter.com/docs/api/1.1/get/statuses/home_timeline). +Take the Twitter API for example. Say we want to retrieve a user's "name" value of some tweet in Swift (according to [Twitter's API](https://developer.twitter.com/en/docs/tweets/timelines/api-reference/get-statuses-home_timeline)). The code would look like this: @@ -45,7 +52,7 @@ It's not good. Even if we use optional chaining, it would be messy: ```swift -if let JSONObject = try JSONSerialization.jsonObject(with: data,, options: .allowFragments) as? [[String: Any]], +if let JSONObject = try JSONSerialization.jsonObject(with: data, options: .allowFragments) as? [[String: Any]], let username = (JSONObject[0]["user"] as? [String: Any])?["name"] as? String { // There's our username } @@ -66,11 +73,12 @@ And don't worry about the Optional Wrapping thing. It's done for you automatical ```swift let json = JSON(data: dataFromNetworking) -if let userName = json[999999]["wrong_key"]["wrong_name"].string { +let result = json[999999]["wrong_key"]["wrong_name"] +if let userName = result.string { //Calm down, take it easy, the ".string" property still produces the correct Optional String type with safety } else { //Print the error - print(json[999999]["wrong_key"]["wrong_name"]) + print(result.error) } ``` @@ -83,45 +91,43 @@ if let userName = json[999999]["wrong_key"]["wrong_name"].string { #### CocoaPods (iOS 8+, OS X 10.9+) -You can use [CocoaPods](http://cocoapods.org/) to install `SwiftyJSON`by adding it to your `Podfile`: +You can use [CocoaPods](http://cocoapods.org/) to install `SwiftyJSON` by adding it to your `Podfile`: ```ruby platform :ios, '8.0' use_frameworks! target 'MyApp' do - pod 'SwiftyJSON' + pod 'SwiftyJSON', '~> 4.0' end ``` -Note that this requires CocoaPods version 36, and your iOS deployment target to be at least 8.0: - - #### Carthage (iOS 8+, OS X 10.9+) You can use [Carthage](https://github.com/Carthage/Carthage) to install `SwiftyJSON` by adding it to your `Cartfile`: ``` -github "SwiftyJSON/SwiftyJSON" +github "SwiftyJSON/SwiftyJSON" ~> 4.0 ``` +If you use Carthage to build your dependencies, make sure you have added `SwiftyJSON.framework` to the "Linked Frameworks and Libraries" section of your target, and have included them in your Carthage framework copying build phase. + #### Swift Package Manager You can use [The Swift Package Manager](https://swift.org/package-manager) to install `SwiftyJSON` by adding the proper description to your `Package.swift` file: ```swift +// swift-tools-version:4.0 import PackageDescription let package = Package( name: "YOUR_PROJECT_NAME", - targets: [], dependencies: [ - .Package(url: "https://github.com/SwiftyJSON/SwiftyJSON.git", versions: Version(1,0,0).. = json["list"].arrayValue ``` ```swift -//If not a Dictionary or nil, return [:] +// If not a Dictionary or nil, return [:] let user: Dictionary = json["user"].dictionaryValue ``` @@ -340,31 +355,36 @@ json.dictionaryObject = ["name":"Jack", "age":25] #### Raw object ```swift -let jsonObject: Any = json.object +let rawObject: Any = json.object ``` ```swift -if let jsonObject: Any = json.rawValue +let rawValue: Any = json.rawValue ``` ```swift //convert the JSON to raw NSData -if let data = json.rawData() { - //Do something you want +do { + let rawData = try json.rawData() + //Do something you want +} catch { + print("Error \(error)") } ``` ```swift //convert the JSON to a raw String -if let string = json.rawString() { - //Do something you want +if let rawString = json.rawString() { + //Do something you want +} else { + print("json.rawString is nil") } ``` #### Existence ```swift -//shows you whether value specified in JSON or not +// shows you whether value specified in JSON or not if json["name"].exists() ``` @@ -373,59 +393,54 @@ if json["name"].exists() For more info about literal convertibles: [Swift Literal Convertibles](http://nshipster.com/swift-literal-convertible/) ```swift -//StringLiteralConvertible +// StringLiteralConvertible let json: JSON = "I'm a json" ``` ```swift -//IntegerLiteralConvertible +/ /IntegerLiteralConvertible let json: JSON = 12345 ``` ```swift -//BooleanLiteralConvertible +// BooleanLiteralConvertible let json: JSON = true ``` ```swift -//FloatLiteralConvertible +// FloatLiteralConvertible let json: JSON = 2.8765 ``` ```swift -//DictionaryLiteralConvertible +// DictionaryLiteralConvertible let json: JSON = ["I":"am", "a":"json"] ``` ```swift -//ArrayLiteralConvertible +// ArrayLiteralConvertible let json: JSON = ["I", "am", "a", "json"] ``` ```swift -//NilLiteralConvertible -let json: JSON = nil -``` - -```swift -//With subscript in array +// With subscript in array var json: JSON = [1,2,3] json[0] = 100 json[1] = 200 json[2] = 300 -json[999] = 300 //Don't worry, nothing will happen +json[999] = 300 // Don't worry, nothing will happen ``` ```swift -//With subscript in dictionary +// With subscript in dictionary var json: JSON = ["name": "Jack", "age": 25] json["name"] = "Mike" -json["age"] = "25" //It's OK to set String +json["age"] = "25" // It's OK to set String json["address"] = "L.A." // Add the "address": "L.A." in json ``` ```swift -//Array & Dictionary +// Array & Dictionary var json: JSON = ["name": "Jack", "age": 25, "list": ["a", "b", "c", ["what": "this"]]] json["list"][3]["what"] = "that" json["list",3,"what"] = "that" @@ -434,20 +449,79 @@ json[path] = "that" ``` ```swift -//With other JSON objects +// With other JSON objects let user: JSON = ["username" : "Steve", "password": "supersecurepassword"] let auth: JSON = [ - "user": user.object //use user.object instead of just user + "user": user.object, // use user.object instead of just user "apikey": "supersecretapitoken" ] ``` -## Work with Alamofire +#### Merging + +It is possible to merge one JSON into another JSON. Merging a JSON into another JSON adds all non existing values to the original JSON which are only present in the `other` JSON. + +If both JSONs contain a value for the same key, _mostly_ this value gets overwritten in the original JSON, but there are two cases where it provides some special treatment: + +- In case of both values being a `JSON.Type.array` the values form the array found in the `other` JSON getting appended to the original JSON's array value. +- In case of both values being a `JSON.Type.dictionary` both JSON-values are getting merged the same way the encapsulating JSON is merged. + +In case, where two fields in a JSON have a different types, the value will get always overwritten. + +There are two different fashions for merging: `merge` modifies the original JSON, whereas `merged` works non-destructively on a copy. + +```swift +let original: JSON = [ + "first_name": "John", + "age": 20, + "skills": ["Coding", "Reading"], + "address": [ + "street": "Front St", + "zip": "12345", + ] +] + +let update: JSON = [ + "last_name": "Doe", + "age": 21, + "skills": ["Writing"], + "address": [ + "zip": "12342", + "city": "New York City" + ] +] + +let updated = original.merge(with: update) +// [ +// "first_name": "John", +// "last_name": "Doe", +// "age": 21, +// "skills": ["Coding", "Reading", "Writing"], +// "address": [ +// "street": "Front St", +// "zip": "12342", +// "city": "New York City" +// ] +// ] +``` + +## String representation +There are two options available: +- use the default Swift one +- use a custom one that will handle optionals well and represent `nil` as `"null"`: +```swift +let dict = ["1":2, "2":"two", "3": nil] as [String: Any?] +let json = JSON(dict) +let representation = json.rawString(options: [.castNilToNSNull: true]) +// representation is "{\"1\":2,\"2\":\"two\",\"3\":null}", which represents {"1":2,"2":"two","3":null} +``` + +## Work with [Alamofire](https://github.com/Alamofire/Alamofire) SwiftyJSON nicely wraps the result of the Alamofire JSON response handler: ```swift -Alamofire.request(.GET, url).validate().responseJSON { response in +Alamofire.request(url, method: .get).validate().responseJSON { response in switch response.result { case .success(let value): let json = JSON(value) @@ -457,3 +531,32 @@ Alamofire.request(.GET, url).validate().responseJSON { response in } } ``` + +We also provide an extension of Alamofire for serializing NSData to SwiftyJSON's JSON. + +See: [Alamofire-SwiftyJSON](https://github.com/SwiftyJSON/Alamofire-SwiftyJSON) + + +## Work with [Moya](https://github.com/Moya/Moya) + +SwiftyJSON parse data to JSON: + +```swift +let provider = MoyaProvider() +provider.request(.showProducts) { result in + switch result { + case let .success(moyaResponse): + let data = moyaResponse.data + let json = JSON(data: data) // convert network data to json + print(json) + case let .failure(error): + print("error: \(error)") + } +} + +``` + +## SwiftyJSON Model Generator +Tools to generate SwiftyJSON Models +* [JSON Cafe](http://www.jsoncafe.com/) +* [JSON Export](https://github.com/Ahmed-Ali/JSONExport) diff --git a/Example/Pods/SwiftyJSON/Source/SwiftyJSON.swift b/Example/Pods/SwiftyJSON/Source/SwiftyJSON.swift deleted file mode 100644 index 3cf9e00..0000000 --- a/Example/Pods/SwiftyJSON/Source/SwiftyJSON.swift +++ /dev/null @@ -1,1344 +0,0 @@ -// SwiftyJSON.swift -// -// Copyright (c) 2014 - 2016 Ruoyu Fu, Pinglin Tang -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -import Foundation - -// MARK: - Error - -///Error domain -public let ErrorDomain: String = "SwiftyJSONErrorDomain" - -///Error code -public let ErrorUnsupportedType: Int = 999 -public let ErrorIndexOutOfBounds: Int = 900 -public let ErrorWrongType: Int = 901 -public let ErrorNotExist: Int = 500 -public let ErrorInvalidJSON: Int = 490 - -// MARK: - JSON Type - -/** - JSON's type definitions. - - See http://www.json.org - */ -public enum Type :Int{ - - case number - case string - case bool - case array - case dictionary - case null - case unknown -} - -// MARK: - JSON Base -public struct JSON { - - /** - Creates a JSON using the data. - - - parameter data: The NSData used to convert to json.Top level object in data is an NSArray or NSDictionary - - parameter opt: The JSON serialization reading options. `.AllowFragments` by default. - - parameter error: The NSErrorPointer used to return the error. `nil` by default. - - - returns: The created JSON - */ - public init(data:Data, options opt: JSONSerialization.ReadingOptions = .allowFragments, error: NSErrorPointer = nil) { - do { - let object: Any = try JSONSerialization.jsonObject(with: data, options: opt) - self.init(object) - } catch let aError as NSError { - if error != nil { - error?.pointee = aError - } - self.init(NSNull()) - } - } - - /** - Creates a JSON from JSON string - - parameter string: Normal json string like '{"a":"b"}' - - - returns: The created JSON - */ - public static func parse(_ string:String) -> JSON { - return string.data(using: String.Encoding.utf8) - .flatMap{ JSON(data: $0) } ?? JSON(NSNull()) - } - - /** - Creates a JSON using the object. - - - parameter object: The object must have the following properties: All objects are NSString/String, NSNumber/Int/Float/Double/Bool, NSArray/Array, NSDictionary/Dictionary, or NSNull; All dictionary keys are NSStrings/String; NSNumbers are not NaN or infinity. - - - returns: The created JSON - */ - public init(_ object: Any) { - self.object = object - } - - /** - Creates a JSON from a [JSON] - - - parameter jsonArray: A Swift array of JSON objects - - - returns: The created JSON - */ - public init(_ jsonArray:[JSON]) { - self.init(jsonArray.map { $0.object }) - } - - /** - Creates a JSON from a [String: JSON] - - - parameter jsonDictionary: A Swift dictionary of JSON objects - - - returns: The created JSON - */ - public init(_ jsonDictionary:[String: JSON]) { - var dictionary = [String: Any](minimumCapacity: jsonDictionary.count) - for (key, json) in jsonDictionary { - dictionary[key] = json.object - } - self.init(dictionary) - } - - /// Private object - fileprivate var rawArray: [Any] = [] - fileprivate var rawDictionary: [String : Any] = [:] - fileprivate var rawString: String = "" - fileprivate var rawNumber: NSNumber = 0 - fileprivate var rawNull: NSNull = NSNull() - fileprivate var rawBool: Bool = false - /// Private type - fileprivate var _type: Type = .null - /// prviate error - fileprivate var _error: NSError? = nil - - /// Object in JSON - public var object: Any { - get { - switch self.type { - case .array: - return self.rawArray - case .dictionary: - return self.rawDictionary - case .string: - return self.rawString - case .number: - return self.rawNumber - case .bool: - return self.rawBool - default: - return self.rawNull - } - } - set { - _error = nil - switch newValue { - case let number as NSNumber: - if number.isBool { - _type = .bool - self.rawBool = number.boolValue - } else { - _type = .number - self.rawNumber = number - } - case let string as String: - _type = .string - self.rawString = string - case _ as NSNull: - _type = .null - case let array as [JSON]: - _type = .array - self.rawArray = array.map { $0.object } - case let array as [Any]: - _type = .array - self.rawArray = array - case let dictionary as [String : Any]: - _type = .dictionary - self.rawDictionary = dictionary - default: - _type = .unknown - _error = NSError(domain: ErrorDomain, code: ErrorUnsupportedType, userInfo: [NSLocalizedDescriptionKey: "It is a unsupported type"]) - } - } - } - - /// JSON type - public var type: Type { get { return _type } } - - /// Error in JSON - public var error: NSError? { get { return self._error } } - - /// The static null JSON - @available(*, unavailable, renamed:"null") - public static var nullJSON: JSON { get { return null } } - public static var null: JSON { get { return JSON(NSNull()) } } -} - -public enum JSONIndex:Comparable -{ - case array(Int) - case dictionary(DictionaryIndex) - case null - - static public func ==(lhs: JSONIndex, rhs: JSONIndex) -> Bool - { - switch (lhs, rhs) - { - case (.array(let left), .array(let right)): - return left == right - case (.dictionary(let left), .dictionary(let right)): - return left == right - case (.null, .null): return true - default: - return false - } - } - - static public func <(lhs: JSONIndex, rhs: JSONIndex) -> Bool - { - switch (lhs, rhs) - { - case (.array(let left), .array(let right)): - return left < right - case (.dictionary(let left), .dictionary(let right)): - return left < right - default: - return false - } - } - -} - -public enum JSONRawIndex: Comparable -{ - case array(Int) - case dictionary(DictionaryIndex) - case null - - static public func ==(lhs: JSONRawIndex, rhs: JSONRawIndex) -> Bool - { - switch (lhs, rhs) - { - case (.array(let left), .array(let right)): - return left == right - case (.dictionary(let left), .dictionary(let right)): - return left == right - case (.null, .null): return true - default: - return false - } - } - - static public func <(lhs: JSONRawIndex, rhs: JSONRawIndex) -> Bool - { - switch (lhs, rhs) - { - case (.array(let left), .array(let right)): - return left < right - case (.dictionary(let left), .dictionary(let right)): - return left < right - default: - return false - } - } - - -} - -extension JSON: Collection -{ - - public typealias Index = JSONRawIndex - - public var startIndex: Index - { - switch type - { - case .array: - return .array(rawArray.startIndex) - case .dictionary: - return .dictionary(rawDictionary.startIndex) - default: - return .null - } - } - - public var endIndex: Index - { - switch type - { - case .array: - return .array(rawArray.endIndex) - case .dictionary: - return .dictionary(rawDictionary.endIndex) - default: - return .null - } - } - - public func index(after i: Index) -> Index - { - switch i - { - case .array(let idx): - return .array(rawArray.index(after: idx)) - case .dictionary(let idx): - return .dictionary(rawDictionary.index(after: idx)) - default: - return .null - } - - } - - public subscript (position: Index) -> (String, JSON) - { - switch position - { - case .array(let idx): - return (String(idx), JSON(self.rawArray[idx])) - case .dictionary(let idx): - let (key, value) = self.rawDictionary[idx] - return (key, JSON(value)) - default: - return ("", JSON.null) - } - } - - -} - -// MARK: - Subscript - -/** - * To mark both String and Int can be used in subscript. - */ -public enum JSONKey -{ - case index(Int) - case key(String) -} - -public protocol JSONSubscriptType { - var jsonKey:JSONKey { get } -} - -extension Int: JSONSubscriptType { - public var jsonKey:JSONKey { - return JSONKey.index(self) - } -} - -extension String: JSONSubscriptType { - public var jsonKey:JSONKey { - return JSONKey.key(self) - } -} - -extension JSON { - - /// If `type` is `.Array`, return json whose object is `array[index]`, otherwise return null json with error. - fileprivate subscript(index index: Int) -> JSON { - get { - if self.type != .array { - var r = JSON.null - r._error = self._error ?? NSError(domain: ErrorDomain, code: ErrorWrongType, userInfo: [NSLocalizedDescriptionKey: "Array[\(index)] failure, It is not an array"]) - return r - } else if index >= 0 && index < self.rawArray.count { - return JSON(self.rawArray[index]) - } else { - var r = JSON.null - r._error = NSError(domain: ErrorDomain, code:ErrorIndexOutOfBounds , userInfo: [NSLocalizedDescriptionKey: "Array[\(index)] is out of bounds"]) - return r - } - } - set { - if self.type == .array { - if self.rawArray.count > index && newValue.error == nil { - self.rawArray[index] = newValue.object - } - } - } - } - - /// If `type` is `.Dictionary`, return json whose object is `dictionary[key]` , otherwise return null json with error. - fileprivate subscript(key key: String) -> JSON { - get { - var r = JSON.null - if self.type == .dictionary { - if let o = self.rawDictionary[key] { - r = JSON(o) - } else { - r._error = NSError(domain: ErrorDomain, code: ErrorNotExist, userInfo: [NSLocalizedDescriptionKey: "Dictionary[\"\(key)\"] does not exist"]) - } - } else { - r._error = self._error ?? NSError(domain: ErrorDomain, code: ErrorWrongType, userInfo: [NSLocalizedDescriptionKey: "Dictionary[\"\(key)\"] failure, It is not an dictionary"]) - } - return r - } - set { - if self.type == .dictionary && newValue.error == nil { - self.rawDictionary[key] = newValue.object - } - } - } - - /// If `sub` is `Int`, return `subscript(index:)`; If `sub` is `String`, return `subscript(key:)`. - fileprivate subscript(sub sub: JSONSubscriptType) -> JSON { - get { - switch sub.jsonKey { - case .index(let index): return self[index: index] - case .key(let key): return self[key: key] - } - } - set { - switch sub.jsonKey { - case .index(let index): self[index: index] = newValue - case .key(let key): self[key: key] = newValue - } - } - } - - /** - Find a json in the complex data structures by using array of Int and/or String as path. - - - parameter path: The target json's path. Example: - - let json = JSON[data] - let path = [9,"list","person","name"] - let name = json[path] - - The same as: let name = json[9]["list"]["person"]["name"] - - - returns: Return a json found by the path or a null json with error - */ - public subscript(path: [JSONSubscriptType]) -> JSON { - get { - return path.reduce(self) { $0[sub: $1] } - } - set { - switch path.count { - case 0: - return - case 1: - self[sub:path[0]].object = newValue.object - default: - var aPath = path; aPath.remove(at: 0) - var nextJSON = self[sub: path[0]] - nextJSON[aPath] = newValue - self[sub: path[0]] = nextJSON - } - } - } - - /** - Find a json in the complex data structures by using array of Int and/or String as path. - - - parameter path: The target json's path. Example: - - let name = json[9,"list","person","name"] - - The same as: let name = json[9]["list"]["person"]["name"] - - - returns: Return a json found by the path or a null json with error - */ - public subscript(path: JSONSubscriptType...) -> JSON { - get { - return self[path] - } - set { - self[path] = newValue - } - } -} - -// MARK: - LiteralConvertible - -extension JSON: Swift.ExpressibleByStringLiteral { - - public init(stringLiteral value: StringLiteralType) { - self.init(value as Any) - } - - public init(extendedGraphemeClusterLiteral value: StringLiteralType) { - self.init(value as Any) - } - - public init(unicodeScalarLiteral value: StringLiteralType) { - self.init(value as Any) - } -} - -extension JSON: Swift.ExpressibleByIntegerLiteral { - - public init(integerLiteral value: IntegerLiteralType) { - self.init(value as Any) - } -} - -extension JSON: Swift.ExpressibleByBooleanLiteral { - - public init(booleanLiteral value: BooleanLiteralType) { - self.init(value as Any) - } -} - -extension JSON: Swift.ExpressibleByFloatLiteral { - - public init(floatLiteral value: FloatLiteralType) { - self.init(value as Any) - } -} - -extension JSON: Swift.ExpressibleByDictionaryLiteral { - public init(dictionaryLiteral elements: (String, Any)...) { - let array = elements - self.init(dictionaryLiteral: array) - } - - public init(dictionaryLiteral elements: [(String, Any)]) { - let jsonFromDictionaryLiteral: ([String : Any]) -> JSON = { dictionary in - let initializeElement = Array(dictionary.keys).flatMap { key -> (String, Any)? in - if let value = dictionary[key] { - return (key, value) - } - return nil - } - return JSON(dictionaryLiteral: initializeElement) - } - - var dict = [String : Any](minimumCapacity: elements.count) - - for element in elements { - let elementToSet: Any - if let json = element.1 as? JSON { - elementToSet = json.object - } else if let jsonArray = element.1 as? [JSON] { - elementToSet = JSON(jsonArray).object - } else if let dictionary = element.1 as? [String : Any] { - elementToSet = jsonFromDictionaryLiteral(dictionary).object - } else if let dictArray = element.1 as? [[String : Any]] { - let jsonArray = dictArray.map { jsonFromDictionaryLiteral($0) } - elementToSet = JSON(jsonArray).object - } else { - elementToSet = element.1 - } - dict[element.0] = elementToSet - } - - self.init(dict) - } -} - -extension JSON: Swift.ExpressibleByArrayLiteral { - - public init(arrayLiteral elements: Any...) { - self.init(elements as Any) - } -} - -extension JSON: Swift.ExpressibleByNilLiteral { - - @available(*, deprecated, message: "use JSON.null instead. Will be removed in future versions") - public init(nilLiteral: ()) { - self.init(NSNull() as Any) - } -} - -// MARK: - Raw - -extension JSON: Swift.RawRepresentable { - - public init?(rawValue: Any) { - if JSON(rawValue).type == .unknown { - return nil - } else { - self.init(rawValue) - } - } - - public var rawValue: Any { - return self.object - } - - public func rawData(options opt: JSONSerialization.WritingOptions = JSONSerialization.WritingOptions(rawValue: 0)) throws -> Data { - guard JSONSerialization.isValidJSONObject(self.object) else { - throw NSError(domain: ErrorDomain, code: ErrorInvalidJSON, userInfo: [NSLocalizedDescriptionKey: "JSON is invalid"]) - } - - return try JSONSerialization.data(withJSONObject: self.object, options: opt) - } - - public func rawString(_ encoding: String.Encoding = String.Encoding.utf8, options opt: JSONSerialization.WritingOptions = .prettyPrinted) -> String? { - switch self.type { - case .array, .dictionary: - do { - let data = try self.rawData(options: opt) - return String(data: data, encoding: encoding) - } catch _ { - return nil - } - case .string: - return self.rawString - case .number: - return self.rawNumber.stringValue - case .bool: - return self.rawBool.description - case .null: - return "null" - default: - return nil - } - } -} - -// MARK: - Printable, DebugPrintable - -extension JSON: Swift.CustomStringConvertible, Swift.CustomDebugStringConvertible { - - public var description: String { - if let string = self.rawString(options:.prettyPrinted) { - return string - } else { - return "unknown" - } - } - - public var debugDescription: String { - return description - } -} - -// MARK: - Array - -extension JSON { - - //Optional [JSON] - public var array: [JSON]? { - get { - if self.type == .array { - return self.rawArray.map{ JSON($0) } - } else { - return nil - } - } - } - - //Non-optional [JSON] - public var arrayValue: [JSON] { - get { - return self.array ?? [] - } - } - - //Optional [Any] - public var arrayObject: [Any]? { - get { - switch self.type { - case .array: - return self.rawArray - default: - return nil - } - } - set { - if let array = newValue { - self.object = array as Any - } else { - self.object = NSNull() - } - } - } -} - -// MARK: - Dictionary - -extension JSON { - - //Optional [String : JSON] - public var dictionary: [String : JSON]? { - if self.type == .dictionary { - var d = [String : JSON](minimumCapacity: rawDictionary.count) - for (key, value) in rawDictionary { - d[key] = JSON(value) - } - return d - } else { - return nil - } - } - - //Non-optional [String : JSON] - public var dictionaryValue: [String : JSON] { - return self.dictionary ?? [:] - } - - //Optional [String : Any] - - public var dictionaryObject: [String : Any]? { - get { - switch self.type { - case .dictionary: - return self.rawDictionary - default: - return nil - } - } - set { - if let v = newValue { - self.object = v as Any - } else { - self.object = NSNull() - } - } - } -} - -// MARK: - Bool - -extension JSON { // : Swift.Bool - - //Optional bool - public var bool: Bool? { - get { - switch self.type { - case .bool: - return self.rawBool - default: - return nil - } - } - set { - if let newValue = newValue { - self.object = newValue as Bool - } else { - self.object = NSNull() - } - } - } - - //Non-optional bool - public var boolValue: Bool { - get { - switch self.type { - case .bool: - return self.rawBool - case .number: - return self.rawNumber.boolValue - case .string: - return ["true", "y", "t"].contains() { (truthyString) in - return self.rawString.caseInsensitiveCompare(truthyString) == .orderedSame - } - default: - return false - } - } - set { - self.object = newValue - } - } -} - -// MARK: - String - -extension JSON { - - //Optional string - public var string: String? { - get { - switch self.type { - case .string: - return self.object as? String - default: - return nil - } - } - set { - if let newValue = newValue { - self.object = NSString(string:newValue) - } else { - self.object = NSNull() - } - } - } - - //Non-optional string - public var stringValue: String { - get { - switch self.type { - case .string: - return self.object as? String ?? "" - case .number: - return self.rawNumber.stringValue - case .bool: - return (self.object as? Bool).map { String($0) } ?? "" - default: - return "" - } - } - set { - self.object = NSString(string:newValue) - } - } -} - -// MARK: - Number -extension JSON { - - //Optional number - public var number: NSNumber? { - get { - switch self.type { - case .number: - return self.rawNumber - case .bool: - return NSNumber(value: self.rawBool ? 1 : 0) - default: - return nil - } - } - set { - self.object = newValue ?? NSNull() - } - } - - //Non-optional number - public var numberValue: NSNumber { - get { - switch self.type { - case .string: - let decimal = NSDecimalNumber(string: self.object as? String) - if decimal == NSDecimalNumber.notANumber { // indicates parse error - return NSDecimalNumber.zero - } - return decimal - case .number: - return self.object as? NSNumber ?? NSNumber(value: 0) - case .bool: - return NSNumber(value: self.rawBool ? 1 : 0) - default: - return NSNumber(value: 0.0) - } - } - set { - self.object = newValue - } - } -} - -//MARK: - Null -extension JSON { - - public var null: NSNull? { - get { - switch self.type { - case .null: - return self.rawNull - default: - return nil - } - } - set { - self.object = NSNull() - } - } - public func exists() -> Bool{ - if let errorValue = error, errorValue.code == ErrorNotExist || - errorValue.code == ErrorIndexOutOfBounds || - errorValue.code == ErrorWrongType { - return false - } - return true - } -} - -//MARK: - URL -extension JSON { - - //Optional URL - public var URL: URL? { - get { - switch self.type { - case .string: - if let encodedString_ = self.rawString.addingPercentEncoding(withAllowedCharacters: CharacterSet.urlQueryAllowed) { - // We have to use `Foundation.URL` otherwise it conflicts with the variable name. - return Foundation.URL(string: encodedString_) - } else { - return nil - } - default: - return nil - } - } - set { - self.object = newValue?.absoluteString ?? NSNull() - } - } -} - -// MARK: - Int, Double, Float, Int8, Int16, Int32, Int64 - -extension JSON { - - public var double: Double? { - get { - return self.number?.doubleValue - } - set { - if let newValue = newValue { - self.object = NSNumber(value: newValue) - } else { - self.object = NSNull() - } - } - } - - public var doubleValue: Double { - get { - return self.numberValue.doubleValue - } - set { - self.object = NSNumber(value: newValue) - } - } - - public var float: Float? { - get { - return self.number?.floatValue - } - set { - if let newValue = newValue { - self.object = NSNumber(value: newValue) - } else { - self.object = NSNull() - } - } - } - - public var floatValue: Float { - get { - return self.numberValue.floatValue - } - set { - self.object = NSNumber(value: newValue) - } - } - - public var int: Int? - { - get - { - return self.number?.intValue - } - set - { - if let newValue = newValue - { - self.object = NSNumber(value: newValue) - } else - { - self.object = NSNull() - } - } - } - - public var intValue: Int { - get { - return self.numberValue.intValue - } - set { - self.object = NSNumber(value: newValue) - } - } - - public var uInt: UInt? { - get { - return self.number?.uintValue - } - set { - if let newValue = newValue { - self.object = NSNumber(value: newValue) - } else { - self.object = NSNull() - } - } - } - - public var uIntValue: UInt { - get { - return self.numberValue.uintValue - } - set { - self.object = NSNumber(value: newValue) - } - } - - public var int8: Int8? { - get { - return self.number?.int8Value - } - set { - if let newValue = newValue { - self.object = NSNumber(value: newValue) - } else { - self.object = NSNull() - } - } - } - - public var int8Value: Int8 { - get { - return self.numberValue.int8Value - } - set { - self.object = NSNumber(value: newValue) - } - } - - public var uInt8: UInt8? { - get { - return self.number?.uint8Value - } - set { - if let newValue = newValue { - self.object = NSNumber(value: newValue) - } else { - self.object = NSNull() - } - } - } - - public var uInt8Value: UInt8 { - get { - return self.numberValue.uint8Value - } - set { - self.object = NSNumber(value: newValue) - } - } - - public var int16: Int16? { - get { - return self.number?.int16Value - } - set { - if let newValue = newValue { - self.object = NSNumber(value: newValue) - } else { - self.object = NSNull() - } - } - } - - public var int16Value: Int16 { - get { - return self.numberValue.int16Value - } - set { - self.object = NSNumber(value: newValue) - } - } - - public var uInt16: UInt16? { - get { - return self.number?.uint16Value - } - set { - if let newValue = newValue { - self.object = NSNumber(value: newValue) - } else { - self.object = NSNull() - } - } - } - - public var uInt16Value: UInt16 { - get { - return self.numberValue.uint16Value - } - set { - self.object = NSNumber(value: newValue) - } - } - - public var int32: Int32? { - get { - return self.number?.int32Value - } - set { - if let newValue = newValue { - self.object = NSNumber(value: newValue) - } else { - self.object = NSNull() - } - } - } - - public var int32Value: Int32 { - get { - return self.numberValue.int32Value - } - set { - self.object = NSNumber(value: newValue) - } - } - - public var uInt32: UInt32? { - get { - return self.number?.uint32Value - } - set { - if let newValue = newValue { - self.object = NSNumber(value: newValue) - } else { - self.object = NSNull() - } - } - } - - public var uInt32Value: UInt32 { - get { - return self.numberValue.uint32Value - } - set { - self.object = NSNumber(value: newValue) - } - } - - public var int64: Int64? { - get { - return self.number?.int64Value - } - set { - if let newValue = newValue { - self.object = NSNumber(value: newValue) - } else { - self.object = NSNull() - } - } - } - - public var int64Value: Int64 { - get { - return self.numberValue.int64Value - } - set { - self.object = NSNumber(value: newValue) - } - } - - public var uInt64: UInt64? { - get { - return self.number?.uint64Value - } - set { - if let newValue = newValue { - self.object = NSNumber(value: newValue) - } else { - self.object = NSNull() - } - } - } - - public var uInt64Value: UInt64 { - get { - return self.numberValue.uint64Value - } - set { - self.object = NSNumber(value: newValue) - } - } -} - -//MARK: - Comparable -extension JSON : Swift.Comparable {} - -public func ==(lhs: JSON, rhs: JSON) -> Bool { - - switch (lhs.type, rhs.type) { - case (.number, .number): - return lhs.rawNumber == rhs.rawNumber - case (.string, .string): - return lhs.rawString == rhs.rawString - case (.bool, .bool): - return lhs.rawBool == rhs.rawBool - case (.array, .array): - return lhs.rawArray as NSArray == rhs.rawArray as NSArray - case (.dictionary, .dictionary): - return lhs.rawDictionary as NSDictionary == rhs.rawDictionary as NSDictionary - case (.null, .null): - return true - default: - return false - } -} - -public func <=(lhs: JSON, rhs: JSON) -> Bool { - - switch (lhs.type, rhs.type) { - case (.number, .number): - return lhs.rawNumber <= rhs.rawNumber - case (.string, .string): - return lhs.rawString <= rhs.rawString - case (.bool, .bool): - return lhs.rawBool == rhs.rawBool - case (.array, .array): - return lhs.rawArray as NSArray == rhs.rawArray as NSArray - case (.dictionary, .dictionary): - return lhs.rawDictionary as NSDictionary == rhs.rawDictionary as NSDictionary - case (.null, .null): - return true - default: - return false - } -} - -public func >=(lhs: JSON, rhs: JSON) -> Bool { - - switch (lhs.type, rhs.type) { - case (.number, .number): - return lhs.rawNumber >= rhs.rawNumber - case (.string, .string): - return lhs.rawString >= rhs.rawString - case (.bool, .bool): - return lhs.rawBool == rhs.rawBool - case (.array, .array): - return lhs.rawArray as NSArray == rhs.rawArray as NSArray - case (.dictionary, .dictionary): - return lhs.rawDictionary as NSDictionary == rhs.rawDictionary as NSDictionary - case (.null, .null): - return true - default: - return false - } -} - -public func >(lhs: JSON, rhs: JSON) -> Bool { - - switch (lhs.type, rhs.type) { - case (.number, .number): - return lhs.rawNumber > rhs.rawNumber - case (.string, .string): - return lhs.rawString > rhs.rawString - default: - return false - } -} - -public func <(lhs: JSON, rhs: JSON) -> Bool { - - switch (lhs.type, rhs.type) { - case (.number, .number): - return lhs.rawNumber < rhs.rawNumber - case (.string, .string): - return lhs.rawString < rhs.rawString - default: - return false - } -} - -private let trueNumber = NSNumber(value: true) -private let falseNumber = NSNumber(value: false) -private let trueObjCType = String(cString: trueNumber.objCType) -private let falseObjCType = String(cString: falseNumber.objCType) - -// MARK: - NSNumber: Comparable - -extension NSNumber { - var isBool:Bool { - get { - let objCType = String(cString: self.objCType) - if (self.compare(trueNumber) == .orderedSame && objCType == trueObjCType) || (self.compare(falseNumber) == .orderedSame && objCType == falseObjCType){ - return true - } else { - return false - } - } - } -} - -func ==(lhs: NSNumber, rhs: NSNumber) -> Bool { - switch (lhs.isBool, rhs.isBool) { - case (false, true): - return false - case (true, false): - return false - default: - return lhs.compare(rhs) == .orderedSame - } -} - -func !=(lhs: NSNumber, rhs: NSNumber) -> Bool { - return !(lhs == rhs) -} - -func <(lhs: NSNumber, rhs: NSNumber) -> Bool { - - switch (lhs.isBool, rhs.isBool) { - case (false, true): - return false - case (true, false): - return false - default: - return lhs.compare(rhs) == .orderedAscending - } -} - -func >(lhs: NSNumber, rhs: NSNumber) -> Bool { - - switch (lhs.isBool, rhs.isBool) { - case (false, true): - return false - case (true, false): - return false - default: - return lhs.compare(rhs) == ComparisonResult.orderedDescending - } -} - -func <=(lhs: NSNumber, rhs: NSNumber) -> Bool { - - switch (lhs.isBool, rhs.isBool) { - case (false, true): - return false - case (true, false): - return false - default: - return lhs.compare(rhs) != .orderedDescending - } -} - -func >=(lhs: NSNumber, rhs: NSNumber) -> Bool { - - switch (lhs.isBool, rhs.isBool) { - case (false, true): - return false - case (true, false): - return false - default: - return lhs.compare(rhs) != .orderedAscending - } -} diff --git a/Example/Pods/Target Support Files/FayeSwift/FayeSwift-prefix.pch b/Example/Pods/Target Support Files/FayeSwift/FayeSwift-prefix.pch index aa992a4..beb2a24 100644 --- a/Example/Pods/Target Support Files/FayeSwift/FayeSwift-prefix.pch +++ b/Example/Pods/Target Support Files/FayeSwift/FayeSwift-prefix.pch @@ -1,4 +1,12 @@ #ifdef __OBJC__ #import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif #endif diff --git a/Example/Pods/Target Support Files/FayeSwift/FayeSwift-umbrella.h b/Example/Pods/Target Support Files/FayeSwift/FayeSwift-umbrella.h index 66dbc4c..a53d068 100644 --- a/Example/Pods/Target Support Files/FayeSwift/FayeSwift-umbrella.h +++ b/Example/Pods/Target Support Files/FayeSwift/FayeSwift-umbrella.h @@ -1,5 +1,13 @@ #ifdef __OBJC__ #import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif #endif diff --git a/Example/Pods/Target Support Files/Pods-FayeSwift_Example/Pods-FayeSwift_Example-acknowledgements.markdown b/Example/Pods/Target Support Files/Pods-FayeSwift_Example/Pods-FayeSwift_Example-acknowledgements.markdown index 23b60d7..a43d8ec 100644 --- a/Example/Pods/Target Support Files/Pods-FayeSwift_Example/Pods-FayeSwift_Example-acknowledgements.markdown +++ b/Example/Pods/Target Support Files/Pods-FayeSwift_Example/Pods-FayeSwift_Example-acknowledgements.markdown @@ -207,7 +207,7 @@ THE SOFTWARE. The MIT License (MIT) -Copyright (c) 2016 Ruoyu Fu +Copyright (c) 2017 Ruoyu Fu Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/Example/Pods/Target Support Files/Pods-FayeSwift_Example/Pods-FayeSwift_Example-acknowledgements.plist b/Example/Pods/Target Support Files/Pods-FayeSwift_Example/Pods-FayeSwift_Example-acknowledgements.plist index c8419dd..91d92e1 100644 --- a/Example/Pods/Target Support Files/Pods-FayeSwift_Example/Pods-FayeSwift_Example-acknowledgements.plist +++ b/Example/Pods/Target Support Files/Pods-FayeSwift_Example/Pods-FayeSwift_Example-acknowledgements.plist @@ -230,7 +230,7 @@ THE SOFTWARE. FooterText The MIT License (MIT) -Copyright (c) 2016 Ruoyu Fu +Copyright (c) 2017 Ruoyu Fu Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/Example/Pods/Target Support Files/Pods-FayeSwift_Example/Pods-FayeSwift_Example-frameworks.sh b/Example/Pods/Target Support Files/Pods-FayeSwift_Example/Pods-FayeSwift_Example-frameworks.sh index 9dfadae..1a033ef 100755 --- a/Example/Pods/Target Support Files/Pods-FayeSwift_Example/Pods-FayeSwift_Example-frameworks.sh +++ b/Example/Pods/Target Support Files/Pods-FayeSwift_Example/Pods-FayeSwift_Example-frameworks.sh @@ -1,11 +1,32 @@ #!/bin/sh set -e +set -u +set -o pipefail + +function on_error { + echo "$(realpath -mq "${0}"):$1: error: Unexpected failure" +} +trap 'on_error $LINENO' ERR + +if [ -z ${FRAMEWORKS_FOLDER_PATH+x} ]; then + # If FRAMEWORKS_FOLDER_PATH is not set, then there's nowhere for us to copy + # frameworks to, so exit 0 (signalling the script phase was successful). + exit 0 +fi echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" +COCOAPODS_PARALLEL_CODE_SIGN="${COCOAPODS_PARALLEL_CODE_SIGN:-false}" SWIFT_STDLIB_PATH="${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" +BCSYMBOLMAP_DIR="BCSymbolMaps" + +# This protects against multiple targets copying the same framework dependency at the same time. The solution +# was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html +RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????") + +# Copies and strips a vendored framework install_framework() { if [ -r "${BUILT_PRODUCTS_DIR}/$1" ]; then @@ -19,19 +40,34 @@ install_framework() local destination="${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" if [ -L "${source}" ]; then - echo "Symlinked..." - source="$(readlink "${source}")" + echo "Symlinked..." + source="$(readlink "${source}")" fi - # use filter instead of exclude so missing patterns dont' throw errors - echo "rsync -av --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${destination}\"" - rsync -av --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${destination}" + if [ -d "${source}/${BCSYMBOLMAP_DIR}" ]; then + # Locate and install any .bcsymbolmaps if present, and remove them from the .framework before the framework is copied + find "${source}/${BCSYMBOLMAP_DIR}" -name "*.bcsymbolmap"|while read f; do + echo "Installing $f" + install_bcsymbolmap "$f" "$destination" + rm "$f" + done + rmdir "${source}/${BCSYMBOLMAP_DIR}" + fi + + # Use filter instead of exclude so missing patterns don't throw errors. + echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --links --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${destination}\"" + rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --links --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${destination}" local basename basename="$(basename -s .framework "$1")" binary="${destination}/${basename}.framework/${basename}" + if ! [ -r "$binary" ]; then binary="${destination}/${basename}" + elif [ -L "${binary}" ]; then + echo "Destination binary is symlinked..." + dirname="$(dirname "${binary}")" + binary="${dirname}/$(readlink "${binary}")" fi # Strip invalid architectures so "fat" simulator / device frameworks work on device @@ -45,7 +81,7 @@ install_framework() # Embed linked Swift runtime libraries. No longer necessary as of Xcode 7. if [ "${XCODE_VERSION_MAJOR}" -lt 7 ]; then local swift_runtime_libs - swift_runtime_libs=$(xcrun otool -LX "$binary" | grep --color=never @rpath/libswift | sed -E s/@rpath\\/\(.+dylib\).*/\\1/g | uniq -u && exit ${PIPESTATUS[0]}) + swift_runtime_libs=$(xcrun otool -LX "$binary" | grep --color=never @rpath/libswift | sed -E s/@rpath\\/\(.+dylib\).*/\\1/g | uniq -u) for lib in $swift_runtime_libs; do echo "rsync -auv \"${SWIFT_STDLIB_PATH}/${lib}\" \"${destination}\"" rsync -auv "${SWIFT_STDLIB_PATH}/${lib}" "${destination}" @@ -53,43 +89,101 @@ install_framework() done fi } +# Copies and strips a vendored dSYM +install_dsym() { + local source="$1" + warn_missing_arch=${2:-true} + if [ -r "$source" ]; then + # Copy the dSYM into the targets temp dir. + echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${DERIVED_FILES_DIR}\"" + rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${DERIVED_FILES_DIR}" -# Signs a framework with the provided identity -code_sign_if_enabled() { - if [ -n "${EXPANDED_CODE_SIGN_IDENTITY}" -a "${CODE_SIGNING_REQUIRED}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then - # Use the current code_sign_identitiy - echo "Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}" - echo "/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS} --preserve-metadata=identifier,entitlements \"$1\"" - /usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS} --preserve-metadata=identifier,entitlements "$1" + local basename + basename="$(basename -s .dSYM "$source")" + binary_name="$(ls "$source/Contents/Resources/DWARF")" + binary="${DERIVED_FILES_DIR}/${basename}.dSYM/Contents/Resources/DWARF/${binary_name}" + + # Strip invalid architectures from the dSYM. + if [[ "$(file "$binary")" == *"Mach-O "*"dSYM companion"* ]]; then + strip_invalid_archs "$binary" "$warn_missing_arch" + fi + if [[ $STRIP_BINARY_RETVAL == 0 ]]; then + # Move the stripped file into its final destination. + echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --links --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${DERIVED_FILES_DIR}/${basename}.framework.dSYM\" \"${DWARF_DSYM_FOLDER_PATH}\"" + rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --links --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${DERIVED_FILES_DIR}/${basename}.dSYM" "${DWARF_DSYM_FOLDER_PATH}" + else + # The dSYM was not stripped at all, in this case touch a fake folder so the input/output paths from Xcode do not reexecute this script because the file is missing. + touch "${DWARF_DSYM_FOLDER_PATH}/${basename}.dSYM" + fi fi } +# Used as a return value for each invocation of `strip_invalid_archs` function. +STRIP_BINARY_RETVAL=0 + # Strip invalid architectures strip_invalid_archs() { binary="$1" - # Get architectures for current file - archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | rev)" + warn_missing_arch=${2:-true} + # Get architectures for current target binary + binary_archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | awk '{$1=$1;print}' | rev)" + # Intersect them with the architectures we are building for + intersected_archs="$(echo ${ARCHS[@]} ${binary_archs[@]} | tr ' ' '\n' | sort | uniq -d)" + # If there are no archs supported by this binary then warn the user + if [[ -z "$intersected_archs" ]]; then + if [[ "$warn_missing_arch" == "true" ]]; then + echo "warning: [CP] Vendored binary '$binary' contains architectures ($binary_archs) none of which match the current build architectures ($ARCHS)." + fi + STRIP_BINARY_RETVAL=1 + return + fi stripped="" - for arch in $archs; do - if ! [[ "${VALID_ARCHS}" == *"$arch"* ]]; then + for arch in $binary_archs; do + if ! [[ "${ARCHS}" == *"$arch"* ]]; then # Strip non-valid architectures in-place - lipo -remove "$arch" -output "$binary" "$binary" || exit 1 + lipo -remove "$arch" -output "$binary" "$binary" stripped="$stripped $arch" fi done if [[ "$stripped" ]]; then echo "Stripped $binary of architectures:$stripped" fi + STRIP_BINARY_RETVAL=0 } +# Copies the bcsymbolmap files of a vendored framework +install_bcsymbolmap() { + local bcsymbolmap_path="$1" + local destination="${BUILT_PRODUCTS_DIR}" + echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${bcsymbolmap_path}" "${destination}"" + rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${bcsymbolmap_path}" "${destination}" +} + +# Signs a framework with the provided identity +code_sign_if_enabled() { + if [ -n "${EXPANDED_CODE_SIGN_IDENTITY:-}" -a "${CODE_SIGNING_REQUIRED:-}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then + # Use the current code_sign_identity + echo "Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}" + local code_sign_cmd="/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS:-} --preserve-metadata=identifier,entitlements '$1'" + + if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then + code_sign_cmd="$code_sign_cmd &" + fi + echo "$code_sign_cmd" + eval "$code_sign_cmd" + fi +} if [[ "$CONFIGURATION" == "Debug" ]]; then - install_framework "$BUILT_PRODUCTS_DIR/FayeSwift/FayeSwift.framework" - install_framework "$BUILT_PRODUCTS_DIR/Starscream/Starscream.framework" - install_framework "$BUILT_PRODUCTS_DIR/SwiftyJSON/SwiftyJSON.framework" + install_framework "${BUILT_PRODUCTS_DIR}/FayeSwift/FayeSwift.framework" + install_framework "${BUILT_PRODUCTS_DIR}/Starscream/Starscream.framework" + install_framework "${BUILT_PRODUCTS_DIR}/SwiftyJSON/SwiftyJSON.framework" fi if [[ "$CONFIGURATION" == "Release" ]]; then - install_framework "$BUILT_PRODUCTS_DIR/FayeSwift/FayeSwift.framework" - install_framework "$BUILT_PRODUCTS_DIR/Starscream/Starscream.framework" - install_framework "$BUILT_PRODUCTS_DIR/SwiftyJSON/SwiftyJSON.framework" + install_framework "${BUILT_PRODUCTS_DIR}/FayeSwift/FayeSwift.framework" + install_framework "${BUILT_PRODUCTS_DIR}/Starscream/Starscream.framework" + install_framework "${BUILT_PRODUCTS_DIR}/SwiftyJSON/SwiftyJSON.framework" +fi +if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then + wait fi diff --git a/Example/Pods/Target Support Files/Pods-FayeSwift_Example/Pods-FayeSwift_Example-umbrella.h b/Example/Pods/Target Support Files/Pods-FayeSwift_Example/Pods-FayeSwift_Example-umbrella.h index 6c81454..e43036b 100644 --- a/Example/Pods/Target Support Files/Pods-FayeSwift_Example/Pods-FayeSwift_Example-umbrella.h +++ b/Example/Pods/Target Support Files/Pods-FayeSwift_Example/Pods-FayeSwift_Example-umbrella.h @@ -1,5 +1,13 @@ #ifdef __OBJC__ #import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif #endif diff --git a/Example/Pods/Target Support Files/Pods-FayeSwift_Example/Pods-FayeSwift_Example.debug.xcconfig b/Example/Pods/Target Support Files/Pods-FayeSwift_Example/Pods-FayeSwift_Example.debug.xcconfig index 94ce487..5c047ef 100644 --- a/Example/Pods/Target Support Files/Pods-FayeSwift_Example/Pods-FayeSwift_Example.debug.xcconfig +++ b/Example/Pods/Target Support Files/Pods-FayeSwift_Example/Pods-FayeSwift_Example.debug.xcconfig @@ -1,11 +1,15 @@ ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES -EMBEDDED_CONTENT_CONTAINS_SWIFT = YES -FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/FayeSwift" "$PODS_CONFIGURATION_BUILD_DIR/Starscream" "$PODS_CONFIGURATION_BUILD_DIR/SwiftyJSON" +CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/FayeSwift" "${PODS_CONFIGURATION_BUILD_DIR}/Starscream" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/FayeSwift/FayeSwift.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Starscream/Starscream.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON/SwiftyJSON.framework/Headers" LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' -OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/FayeSwift/FayeSwift.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/Starscream/Starscream.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/SwiftyJSON/SwiftyJSON.framework/Headers" +OTHER_CFLAGS = $(inherited) -isystem "${PODS_CONFIGURATION_BUILD_DIR}/FayeSwift/FayeSwift.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/Starscream/Starscream.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON/SwiftyJSON.framework/Headers" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/FayeSwift" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/Starscream" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON" OTHER_LDFLAGS = $(inherited) -framework "FayeSwift" -framework "Starscream" -framework "SwiftyJSON" -OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" -PODS_BUILD_DIR = $BUILD_DIR -PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_PODFILE_DIR_PATH = ${SRCROOT}/. PODS_ROOT = ${SRCROOT}/Pods +PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/Example/Pods/Target Support Files/Pods-FayeSwift_Example/Pods-FayeSwift_Example.release.xcconfig b/Example/Pods/Target Support Files/Pods-FayeSwift_Example/Pods-FayeSwift_Example.release.xcconfig index 94ce487..5c047ef 100644 --- a/Example/Pods/Target Support Files/Pods-FayeSwift_Example/Pods-FayeSwift_Example.release.xcconfig +++ b/Example/Pods/Target Support Files/Pods-FayeSwift_Example/Pods-FayeSwift_Example.release.xcconfig @@ -1,11 +1,15 @@ ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES -EMBEDDED_CONTENT_CONTAINS_SWIFT = YES -FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/FayeSwift" "$PODS_CONFIGURATION_BUILD_DIR/Starscream" "$PODS_CONFIGURATION_BUILD_DIR/SwiftyJSON" +CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/FayeSwift" "${PODS_CONFIGURATION_BUILD_DIR}/Starscream" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/FayeSwift/FayeSwift.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Starscream/Starscream.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON/SwiftyJSON.framework/Headers" LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' -OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/FayeSwift/FayeSwift.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/Starscream/Starscream.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/SwiftyJSON/SwiftyJSON.framework/Headers" +OTHER_CFLAGS = $(inherited) -isystem "${PODS_CONFIGURATION_BUILD_DIR}/FayeSwift/FayeSwift.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/Starscream/Starscream.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON/SwiftyJSON.framework/Headers" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/FayeSwift" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/Starscream" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON" OTHER_LDFLAGS = $(inherited) -framework "FayeSwift" -framework "Starscream" -framework "SwiftyJSON" -OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" -PODS_BUILD_DIR = $BUILD_DIR -PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_PODFILE_DIR_PATH = ${SRCROOT}/. PODS_ROOT = ${SRCROOT}/Pods +PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/Example/Pods/Target Support Files/Pods-FayeSwift_Tests/Pods-FayeSwift_Tests-acknowledgements.markdown b/Example/Pods/Target Support Files/Pods-FayeSwift_Tests/Pods-FayeSwift_Tests-acknowledgements.markdown index 23b60d7..a43d8ec 100644 --- a/Example/Pods/Target Support Files/Pods-FayeSwift_Tests/Pods-FayeSwift_Tests-acknowledgements.markdown +++ b/Example/Pods/Target Support Files/Pods-FayeSwift_Tests/Pods-FayeSwift_Tests-acknowledgements.markdown @@ -207,7 +207,7 @@ THE SOFTWARE. The MIT License (MIT) -Copyright (c) 2016 Ruoyu Fu +Copyright (c) 2017 Ruoyu Fu Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/Example/Pods/Target Support Files/Pods-FayeSwift_Tests/Pods-FayeSwift_Tests-acknowledgements.plist b/Example/Pods/Target Support Files/Pods-FayeSwift_Tests/Pods-FayeSwift_Tests-acknowledgements.plist index c8419dd..91d92e1 100644 --- a/Example/Pods/Target Support Files/Pods-FayeSwift_Tests/Pods-FayeSwift_Tests-acknowledgements.plist +++ b/Example/Pods/Target Support Files/Pods-FayeSwift_Tests/Pods-FayeSwift_Tests-acknowledgements.plist @@ -230,7 +230,7 @@ THE SOFTWARE. FooterText The MIT License (MIT) -Copyright (c) 2016 Ruoyu Fu +Copyright (c) 2017 Ruoyu Fu Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/Example/Pods/Target Support Files/Pods-FayeSwift_Tests/Pods-FayeSwift_Tests-frameworks.sh b/Example/Pods/Target Support Files/Pods-FayeSwift_Tests/Pods-FayeSwift_Tests-frameworks.sh index 9dfadae..1a033ef 100755 --- a/Example/Pods/Target Support Files/Pods-FayeSwift_Tests/Pods-FayeSwift_Tests-frameworks.sh +++ b/Example/Pods/Target Support Files/Pods-FayeSwift_Tests/Pods-FayeSwift_Tests-frameworks.sh @@ -1,11 +1,32 @@ #!/bin/sh set -e +set -u +set -o pipefail + +function on_error { + echo "$(realpath -mq "${0}"):$1: error: Unexpected failure" +} +trap 'on_error $LINENO' ERR + +if [ -z ${FRAMEWORKS_FOLDER_PATH+x} ]; then + # If FRAMEWORKS_FOLDER_PATH is not set, then there's nowhere for us to copy + # frameworks to, so exit 0 (signalling the script phase was successful). + exit 0 +fi echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" +COCOAPODS_PARALLEL_CODE_SIGN="${COCOAPODS_PARALLEL_CODE_SIGN:-false}" SWIFT_STDLIB_PATH="${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" +BCSYMBOLMAP_DIR="BCSymbolMaps" + +# This protects against multiple targets copying the same framework dependency at the same time. The solution +# was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html +RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????") + +# Copies and strips a vendored framework install_framework() { if [ -r "${BUILT_PRODUCTS_DIR}/$1" ]; then @@ -19,19 +40,34 @@ install_framework() local destination="${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" if [ -L "${source}" ]; then - echo "Symlinked..." - source="$(readlink "${source}")" + echo "Symlinked..." + source="$(readlink "${source}")" fi - # use filter instead of exclude so missing patterns dont' throw errors - echo "rsync -av --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${destination}\"" - rsync -av --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${destination}" + if [ -d "${source}/${BCSYMBOLMAP_DIR}" ]; then + # Locate and install any .bcsymbolmaps if present, and remove them from the .framework before the framework is copied + find "${source}/${BCSYMBOLMAP_DIR}" -name "*.bcsymbolmap"|while read f; do + echo "Installing $f" + install_bcsymbolmap "$f" "$destination" + rm "$f" + done + rmdir "${source}/${BCSYMBOLMAP_DIR}" + fi + + # Use filter instead of exclude so missing patterns don't throw errors. + echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --links --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${destination}\"" + rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --links --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${destination}" local basename basename="$(basename -s .framework "$1")" binary="${destination}/${basename}.framework/${basename}" + if ! [ -r "$binary" ]; then binary="${destination}/${basename}" + elif [ -L "${binary}" ]; then + echo "Destination binary is symlinked..." + dirname="$(dirname "${binary}")" + binary="${dirname}/$(readlink "${binary}")" fi # Strip invalid architectures so "fat" simulator / device frameworks work on device @@ -45,7 +81,7 @@ install_framework() # Embed linked Swift runtime libraries. No longer necessary as of Xcode 7. if [ "${XCODE_VERSION_MAJOR}" -lt 7 ]; then local swift_runtime_libs - swift_runtime_libs=$(xcrun otool -LX "$binary" | grep --color=never @rpath/libswift | sed -E s/@rpath\\/\(.+dylib\).*/\\1/g | uniq -u && exit ${PIPESTATUS[0]}) + swift_runtime_libs=$(xcrun otool -LX "$binary" | grep --color=never @rpath/libswift | sed -E s/@rpath\\/\(.+dylib\).*/\\1/g | uniq -u) for lib in $swift_runtime_libs; do echo "rsync -auv \"${SWIFT_STDLIB_PATH}/${lib}\" \"${destination}\"" rsync -auv "${SWIFT_STDLIB_PATH}/${lib}" "${destination}" @@ -53,43 +89,101 @@ install_framework() done fi } +# Copies and strips a vendored dSYM +install_dsym() { + local source="$1" + warn_missing_arch=${2:-true} + if [ -r "$source" ]; then + # Copy the dSYM into the targets temp dir. + echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${DERIVED_FILES_DIR}\"" + rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${DERIVED_FILES_DIR}" -# Signs a framework with the provided identity -code_sign_if_enabled() { - if [ -n "${EXPANDED_CODE_SIGN_IDENTITY}" -a "${CODE_SIGNING_REQUIRED}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then - # Use the current code_sign_identitiy - echo "Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}" - echo "/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS} --preserve-metadata=identifier,entitlements \"$1\"" - /usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS} --preserve-metadata=identifier,entitlements "$1" + local basename + basename="$(basename -s .dSYM "$source")" + binary_name="$(ls "$source/Contents/Resources/DWARF")" + binary="${DERIVED_FILES_DIR}/${basename}.dSYM/Contents/Resources/DWARF/${binary_name}" + + # Strip invalid architectures from the dSYM. + if [[ "$(file "$binary")" == *"Mach-O "*"dSYM companion"* ]]; then + strip_invalid_archs "$binary" "$warn_missing_arch" + fi + if [[ $STRIP_BINARY_RETVAL == 0 ]]; then + # Move the stripped file into its final destination. + echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --links --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${DERIVED_FILES_DIR}/${basename}.framework.dSYM\" \"${DWARF_DSYM_FOLDER_PATH}\"" + rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --links --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${DERIVED_FILES_DIR}/${basename}.dSYM" "${DWARF_DSYM_FOLDER_PATH}" + else + # The dSYM was not stripped at all, in this case touch a fake folder so the input/output paths from Xcode do not reexecute this script because the file is missing. + touch "${DWARF_DSYM_FOLDER_PATH}/${basename}.dSYM" + fi fi } +# Used as a return value for each invocation of `strip_invalid_archs` function. +STRIP_BINARY_RETVAL=0 + # Strip invalid architectures strip_invalid_archs() { binary="$1" - # Get architectures for current file - archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | rev)" + warn_missing_arch=${2:-true} + # Get architectures for current target binary + binary_archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | awk '{$1=$1;print}' | rev)" + # Intersect them with the architectures we are building for + intersected_archs="$(echo ${ARCHS[@]} ${binary_archs[@]} | tr ' ' '\n' | sort | uniq -d)" + # If there are no archs supported by this binary then warn the user + if [[ -z "$intersected_archs" ]]; then + if [[ "$warn_missing_arch" == "true" ]]; then + echo "warning: [CP] Vendored binary '$binary' contains architectures ($binary_archs) none of which match the current build architectures ($ARCHS)." + fi + STRIP_BINARY_RETVAL=1 + return + fi stripped="" - for arch in $archs; do - if ! [[ "${VALID_ARCHS}" == *"$arch"* ]]; then + for arch in $binary_archs; do + if ! [[ "${ARCHS}" == *"$arch"* ]]; then # Strip non-valid architectures in-place - lipo -remove "$arch" -output "$binary" "$binary" || exit 1 + lipo -remove "$arch" -output "$binary" "$binary" stripped="$stripped $arch" fi done if [[ "$stripped" ]]; then echo "Stripped $binary of architectures:$stripped" fi + STRIP_BINARY_RETVAL=0 } +# Copies the bcsymbolmap files of a vendored framework +install_bcsymbolmap() { + local bcsymbolmap_path="$1" + local destination="${BUILT_PRODUCTS_DIR}" + echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${bcsymbolmap_path}" "${destination}"" + rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${bcsymbolmap_path}" "${destination}" +} + +# Signs a framework with the provided identity +code_sign_if_enabled() { + if [ -n "${EXPANDED_CODE_SIGN_IDENTITY:-}" -a "${CODE_SIGNING_REQUIRED:-}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then + # Use the current code_sign_identity + echo "Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}" + local code_sign_cmd="/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS:-} --preserve-metadata=identifier,entitlements '$1'" + + if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then + code_sign_cmd="$code_sign_cmd &" + fi + echo "$code_sign_cmd" + eval "$code_sign_cmd" + fi +} if [[ "$CONFIGURATION" == "Debug" ]]; then - install_framework "$BUILT_PRODUCTS_DIR/FayeSwift/FayeSwift.framework" - install_framework "$BUILT_PRODUCTS_DIR/Starscream/Starscream.framework" - install_framework "$BUILT_PRODUCTS_DIR/SwiftyJSON/SwiftyJSON.framework" + install_framework "${BUILT_PRODUCTS_DIR}/FayeSwift/FayeSwift.framework" + install_framework "${BUILT_PRODUCTS_DIR}/Starscream/Starscream.framework" + install_framework "${BUILT_PRODUCTS_DIR}/SwiftyJSON/SwiftyJSON.framework" fi if [[ "$CONFIGURATION" == "Release" ]]; then - install_framework "$BUILT_PRODUCTS_DIR/FayeSwift/FayeSwift.framework" - install_framework "$BUILT_PRODUCTS_DIR/Starscream/Starscream.framework" - install_framework "$BUILT_PRODUCTS_DIR/SwiftyJSON/SwiftyJSON.framework" + install_framework "${BUILT_PRODUCTS_DIR}/FayeSwift/FayeSwift.framework" + install_framework "${BUILT_PRODUCTS_DIR}/Starscream/Starscream.framework" + install_framework "${BUILT_PRODUCTS_DIR}/SwiftyJSON/SwiftyJSON.framework" +fi +if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then + wait fi diff --git a/Example/Pods/Target Support Files/Pods-FayeSwift_Tests/Pods-FayeSwift_Tests-umbrella.h b/Example/Pods/Target Support Files/Pods-FayeSwift_Tests/Pods-FayeSwift_Tests-umbrella.h index 2d8b84f..3ea03a3 100644 --- a/Example/Pods/Target Support Files/Pods-FayeSwift_Tests/Pods-FayeSwift_Tests-umbrella.h +++ b/Example/Pods/Target Support Files/Pods-FayeSwift_Tests/Pods-FayeSwift_Tests-umbrella.h @@ -1,5 +1,13 @@ #ifdef __OBJC__ #import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif #endif diff --git a/Example/Pods/Target Support Files/Pods-FayeSwift_Tests/Pods-FayeSwift_Tests.debug.xcconfig b/Example/Pods/Target Support Files/Pods-FayeSwift_Tests/Pods-FayeSwift_Tests.debug.xcconfig index 94ce487..5c047ef 100644 --- a/Example/Pods/Target Support Files/Pods-FayeSwift_Tests/Pods-FayeSwift_Tests.debug.xcconfig +++ b/Example/Pods/Target Support Files/Pods-FayeSwift_Tests/Pods-FayeSwift_Tests.debug.xcconfig @@ -1,11 +1,15 @@ ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES -EMBEDDED_CONTENT_CONTAINS_SWIFT = YES -FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/FayeSwift" "$PODS_CONFIGURATION_BUILD_DIR/Starscream" "$PODS_CONFIGURATION_BUILD_DIR/SwiftyJSON" +CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/FayeSwift" "${PODS_CONFIGURATION_BUILD_DIR}/Starscream" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/FayeSwift/FayeSwift.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Starscream/Starscream.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON/SwiftyJSON.framework/Headers" LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' -OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/FayeSwift/FayeSwift.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/Starscream/Starscream.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/SwiftyJSON/SwiftyJSON.framework/Headers" +OTHER_CFLAGS = $(inherited) -isystem "${PODS_CONFIGURATION_BUILD_DIR}/FayeSwift/FayeSwift.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/Starscream/Starscream.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON/SwiftyJSON.framework/Headers" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/FayeSwift" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/Starscream" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON" OTHER_LDFLAGS = $(inherited) -framework "FayeSwift" -framework "Starscream" -framework "SwiftyJSON" -OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" -PODS_BUILD_DIR = $BUILD_DIR -PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_PODFILE_DIR_PATH = ${SRCROOT}/. PODS_ROOT = ${SRCROOT}/Pods +PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/Example/Pods/Target Support Files/Pods-FayeSwift_Tests/Pods-FayeSwift_Tests.release.xcconfig b/Example/Pods/Target Support Files/Pods-FayeSwift_Tests/Pods-FayeSwift_Tests.release.xcconfig index 94ce487..5c047ef 100644 --- a/Example/Pods/Target Support Files/Pods-FayeSwift_Tests/Pods-FayeSwift_Tests.release.xcconfig +++ b/Example/Pods/Target Support Files/Pods-FayeSwift_Tests/Pods-FayeSwift_Tests.release.xcconfig @@ -1,11 +1,15 @@ ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES -EMBEDDED_CONTENT_CONTAINS_SWIFT = YES -FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/FayeSwift" "$PODS_CONFIGURATION_BUILD_DIR/Starscream" "$PODS_CONFIGURATION_BUILD_DIR/SwiftyJSON" +CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/FayeSwift" "${PODS_CONFIGURATION_BUILD_DIR}/Starscream" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/FayeSwift/FayeSwift.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Starscream/Starscream.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON/SwiftyJSON.framework/Headers" LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' -OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/FayeSwift/FayeSwift.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/Starscream/Starscream.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/SwiftyJSON/SwiftyJSON.framework/Headers" +OTHER_CFLAGS = $(inherited) -isystem "${PODS_CONFIGURATION_BUILD_DIR}/FayeSwift/FayeSwift.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/Starscream/Starscream.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON/SwiftyJSON.framework/Headers" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/FayeSwift" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/Starscream" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON" OTHER_LDFLAGS = $(inherited) -framework "FayeSwift" -framework "Starscream" -framework "SwiftyJSON" -OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" -PODS_BUILD_DIR = $BUILD_DIR -PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_PODFILE_DIR_PATH = ${SRCROOT}/. PODS_ROOT = ${SRCROOT}/Pods +PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/Example/Pods/Target Support Files/Starscream/Starscream-prefix.pch b/Example/Pods/Target Support Files/Starscream/Starscream-prefix.pch index aa992a4..beb2a24 100644 --- a/Example/Pods/Target Support Files/Starscream/Starscream-prefix.pch +++ b/Example/Pods/Target Support Files/Starscream/Starscream-prefix.pch @@ -1,4 +1,12 @@ #ifdef __OBJC__ #import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif #endif diff --git a/Example/Pods/Target Support Files/Starscream/Starscream-umbrella.h b/Example/Pods/Target Support Files/Starscream/Starscream-umbrella.h index 734a071..7bffee0 100644 --- a/Example/Pods/Target Support Files/Starscream/Starscream-umbrella.h +++ b/Example/Pods/Target Support Files/Starscream/Starscream-umbrella.h @@ -1,5 +1,13 @@ #ifdef __OBJC__ #import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif #endif diff --git a/Example/Pods/Target Support Files/SwiftyJSON/SwiftyJSON-prefix.pch b/Example/Pods/Target Support Files/SwiftyJSON/SwiftyJSON-prefix.pch index aa992a4..beb2a24 100644 --- a/Example/Pods/Target Support Files/SwiftyJSON/SwiftyJSON-prefix.pch +++ b/Example/Pods/Target Support Files/SwiftyJSON/SwiftyJSON-prefix.pch @@ -1,4 +1,12 @@ #ifdef __OBJC__ #import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif #endif diff --git a/Example/Pods/Target Support Files/SwiftyJSON/SwiftyJSON-umbrella.h b/Example/Pods/Target Support Files/SwiftyJSON/SwiftyJSON-umbrella.h index e0b0f40..b627dec 100644 --- a/Example/Pods/Target Support Files/SwiftyJSON/SwiftyJSON-umbrella.h +++ b/Example/Pods/Target Support Files/SwiftyJSON/SwiftyJSON-umbrella.h @@ -1,5 +1,13 @@ #ifdef __OBJC__ #import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif #endif From 07b116d4835b1802d30f5a4b6929c8702955dd21 Mon Sep 17 00:00:00 2001 From: Pavlos Simas Date: Fri, 5 Feb 2021 00:06:37 +0200 Subject: [PATCH 4/4] add some comments --- Sources/WebsocketTransport.swift | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Sources/WebsocketTransport.swift b/Sources/WebsocketTransport.swift index 837fa8d..a6c1714 100644 --- a/Sources/WebsocketTransport.swift +++ b/Sources/WebsocketTransport.swift @@ -76,14 +76,14 @@ internal class WebsocketTransport: Transport, WebSocketDelegate { case .disconnected(let reason, let code): socketConnected = false print("websocket is disconnected for reason: \(reason) /n with code: \(code)") - //TODO: FIX CODES + //TODO: maybe here we need to switch from didDisconnect to didFailConnection based on the error self.delegate?.didDisconnect(NSError(error: .lostConnection)) case .text(let text): self.delegate?.didReceiveMessage(text) case .pong(_): self.delegate?.didReceivePong() case .binary(_): - //TODO: ADD THIS + //TODO: Should we implement something with this? break case .error(_): break @@ -94,7 +94,7 @@ internal class WebsocketTransport: Transport, WebSocketDelegate { case .cancelled: break case .ping(_): - //TODO: ADD THIS + //do nothing break } }