diff --git a/.travis.yml b/.travis.yml index 85a4a141..c1550e86 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,7 +1,7 @@ language: swift os: osx -osx_image: xcode10.2 +osx_image: xcode11.4 cache: bundler: true directories: diff --git a/CHANGELOG.md b/CHANGELOG.md index 383a3d74..32f232a8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,9 @@ This product uses [Semantic Versioning](https://semver.org/). ## [Unreleased] +## [1.2.1] +* Pinned back Starscream version to fix Carthage build issue + ## [1.2.0](https://github.com/davidstump/SwiftPhoenixClient/compare/1.1.2...1.2.0) * [#153](https://github.com/davidstump/SwiftPhoenixClient/pull/153): Added ability to pass a closure when initializing a `Socket` to dynamically change `params` when reconnecting * Fixed Package.swift and updated it to use latest Starscream @@ -89,7 +92,8 @@ Thanks to @murphb52 and @ALucasVanDongen for helping with some of the developmen * Mirror [Phoenix.js](https://hexdocs.pm/phoenix/js/) more closely -[Unreleased]: https://github.com/davidstump/SwiftPhoenixClient/compare/0.9.3...HEAD +[Unreleased]: https://github.com/davidstump/SwiftPhoenixClient/compare/1.2.1...HEAD +[1.2.1]: https://github.com/davidstump/SwiftPhoenixClient/compare/1.2.0...1.2.1 [0.9.3]: https://github.com/davidstump/SwiftPhoenixClient/compare/0.9.2...0.9.3 [0.9.2]: https://github.com/davidstump/SwiftPhoenixClient/compare/0.9.1...0.9.2 [0.9.1]: https://github.com/davidstump/SwiftPhoenixClient/compare/0.9.0...0.9.1 diff --git a/Cartfile b/Cartfile index 1990fbdb..1071f871 100644 --- a/Cartfile +++ b/Cartfile @@ -1 +1 @@ -github "daltoniam/Starscream" >= 3.1.0 +github "daltoniam/Starscream" ~> 3.1.0 diff --git a/Example/ChatExample.xcodeproj/project.pbxproj b/Example/ChatExample.xcodeproj/project.pbxproj index aeea99c6..6f9b538c 100644 --- a/Example/ChatExample.xcodeproj/project.pbxproj +++ b/Example/ChatExample.xcodeproj/project.pbxproj @@ -190,23 +190,19 @@ buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( - "${SRCROOT}/Pods/Target Support Files/Pods-ChatExample/Pods-ChatExample-frameworks.sh", + "${PODS_ROOT}/Target Support Files/Pods-ChatExample/Pods-ChatExample-frameworks.sh", "${BUILT_PRODUCTS_DIR}/Starscream/Starscream.framework", "${BUILT_PRODUCTS_DIR}/SwiftPhoenixClient/SwiftPhoenixClient.framework", ); name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - ); outputPaths = ( "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Starscream.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SwiftPhoenixClient.framework", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-ChatExample/Pods-ChatExample-frameworks.sh\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-ChatExample/Pods-ChatExample-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ diff --git a/Example/Podfile.lock b/Example/Podfile.lock index 8d8b411e..1afedcd6 100644 --- a/Example/Podfile.lock +++ b/Example/Podfile.lock @@ -1,13 +1,13 @@ PODS: - Starscream (3.1.0) - - SwiftPhoenixClient (1.1.0): + - SwiftPhoenixClient (1.2.0): - Starscream (~> 3.1.0) DEPENDENCIES: - SwiftPhoenixClient (from `../`) SPEC REPOS: - https://github.com/cocoapods/specs.git: + https://github.com/CocoaPods/Specs.git: - Starscream EXTERNAL SOURCES: @@ -16,8 +16,8 @@ EXTERNAL SOURCES: SPEC CHECKSUMS: Starscream: 08172b481e145289c4930cb567230fb55897cfa4 - SwiftPhoenixClient: be3d46472ac61bf228783b1ef38de91904056cc7 + SwiftPhoenixClient: ba22ba809b345522afe478817d7cb51ee3d49365 PODFILE CHECKSUM: 4cce157fd27e110208bf7e296e2c2a19a1d68505 -COCOAPODS: 1.5.3 +COCOAPODS: 1.9.1 diff --git a/Example/Pods/Local Podspecs/SwiftPhoenixClient.podspec.json b/Example/Pods/Local Podspecs/SwiftPhoenixClient.podspec.json index c52ccecc..583a1084 100644 --- a/Example/Pods/Local Podspecs/SwiftPhoenixClient.podspec.json +++ b/Example/Pods/Local Podspecs/SwiftPhoenixClient.podspec.json @@ -1,8 +1,8 @@ { "name": "SwiftPhoenixClient", - "version": "1.1.0", + "version": "1.2.0", "summary": "Connect your Phoenix and iOS applications through WebSockets!", - "swift_version": "5.0", + "swift_versions": "5.0", "description": "This is the SwiftPhoenixClient, an iOS libaray that works with the\nPhoenix Framework's channels. The Phoenix Framework only ships with a\nJavascript client. Use this library to talk to your Phoenix app from\nyour iOS project. Check out the included chat client example, which\nworks with the Phoenix chat server example:\nhttps://github.com/chrismccord/phoenix_chat_example\n\nThis library implements Phoenix Channels on iOS. For more information\non Phoenix Channels check out the guide:\nhttp://www.phoenixframework.org/docs/channels", "homepage": "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/davidstump/SwiftPhoenixClient", "license": "MIT", @@ -11,7 +11,7 @@ }, "source": { "git": "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/davidstump/SwiftPhoenixClient.git", - "tag": "1.1.0" + "tag": "1.2.0" }, "platforms": { "ios": "9.0" @@ -22,5 +22,6 @@ "Starscream": [ "~> 3.1.0" ] - } + }, + "swift_version": "5.0" } diff --git a/Example/Pods/Manifest.lock b/Example/Pods/Manifest.lock index 8d8b411e..1afedcd6 100644 --- a/Example/Pods/Manifest.lock +++ b/Example/Pods/Manifest.lock @@ -1,13 +1,13 @@ PODS: - Starscream (3.1.0) - - SwiftPhoenixClient (1.1.0): + - SwiftPhoenixClient (1.2.0): - Starscream (~> 3.1.0) DEPENDENCIES: - SwiftPhoenixClient (from `../`) SPEC REPOS: - https://github.com/cocoapods/specs.git: + https://github.com/CocoaPods/Specs.git: - Starscream EXTERNAL SOURCES: @@ -16,8 +16,8 @@ EXTERNAL SOURCES: SPEC CHECKSUMS: Starscream: 08172b481e145289c4930cb567230fb55897cfa4 - SwiftPhoenixClient: be3d46472ac61bf228783b1ef38de91904056cc7 + SwiftPhoenixClient: ba22ba809b345522afe478817d7cb51ee3d49365 PODFILE CHECKSUM: 4cce157fd27e110208bf7e296e2c2a19a1d68505 -COCOAPODS: 1.5.3 +COCOAPODS: 1.9.1 diff --git a/Example/Pods/Pods.xcodeproj/project.pbxproj b/Example/Pods/Pods.xcodeproj/project.pbxproj index 3be5ba2b..2abc2563 100644 --- a/Example/Pods/Pods.xcodeproj/project.pbxproj +++ b/Example/Pods/Pods.xcodeproj/project.pbxproj @@ -7,541 +7,544 @@ objects = { /* Begin PBXBuildFile section */ - 06C4A4A9087266D23BC33EF917B988F4 /* Delegated.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8E18500EB0DD389F5E112538AF610106 /* Delegated.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 17470826CA9BE6230FE9D5BCF0487E00 /* Message.swift in Sources */ = {isa = PBXBuildFile; fileRef = BEE6342425BC9AC34A483A548F137816 /* Message.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 1A990348F3389018BCFF4736D136CFFA /* Pods-ChatExample-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 6305A7F7E3BE5845060709E057709268 /* Pods-ChatExample-dummy.m */; }; - 37B6A6D9F7BB1CF761FE0432CE3ACF07 /* SSLClientCertificate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 722B7A5196E76DAE17188C05D685DF4C /* SSLClientCertificate.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 3C1115097AF977677E66A47B7A6042E8 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 276140B1EDA081793CA6BDD7582E1B4B /* Foundation.framework */; }; - 3C742A7F6C5C16B9B3A2DB60EE79BA90 /* Starscream-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 677BC8911948C9658703184E269F0032 /* Starscream-dummy.m */; }; - 456A39B68C032D89EB674E8BD613E25C /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 276140B1EDA081793CA6BDD7582E1B4B /* Foundation.framework */; }; - 76B167AE8C3D6B545C8FFAEA2AA2F7A4 /* SwiftPhoenixClient-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 331DD9CEAC50C58A6BE7442E7E42A8BE /* SwiftPhoenixClient-dummy.m */; }; - 8130AC459082C692F00AD435598278DD /* Socket.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3371ED4635BDCE3F24420708B0F488CD /* Socket.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 8BB365610BD6DD90472AA137A843B165 /* Defaults.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF209B8C542AF73A5150922754573BEA /* Defaults.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 91C45B49F590685BB901653F0A8F0DD3 /* Channel.swift in Sources */ = {isa = PBXBuildFile; fileRef = F4E718F6D525A96AA8CFAB423C8DFA4A /* Channel.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 9B617F399EED4F24A9DE69ED5933776D /* WebSocket.swift in Sources */ = {isa = PBXBuildFile; fileRef = AEF667E69ACDB807B282E380354DB273 /* WebSocket.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - AE6A8721566E80F16C980B7FC1E1C495 /* Compression.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9F18693C1114E37BBFBEC8EE8686FDC /* Compression.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - B1D2731B3DD9AC7569D542C189BD5026 /* SwiftPhoenixClient-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 3E2E1E155EDD2C3275557338425D1EA4 /* SwiftPhoenixClient-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B7C5DCC270091B42B57D16C712E65C28 /* Presence.swift in Sources */ = {isa = PBXBuildFile; fileRef = FB268AF97FFA3EDB3566E378D760E046 /* Presence.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - BA688907DF7CFAD5049B788B11846968 /* Starscream.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0F52249DD4D3DD3159B64A42F2E7349B /* Starscream.framework */; }; - C349B6243A2B667D8DB6DE35685DD071 /* Pods-ChatExample-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 2C780E30A1AECA11F6D93AA3B5F6ED34 /* Pods-ChatExample-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D456F19D8EC88CC32F8D595A0CC8D5C8 /* Push.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CD40E39481516DEE20EAEF187CFA97E /* Push.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - DAEA69A2F2285AC83D9F745078DA3231 /* Starscream-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 74687D9F2CCAEE0A7C24845698666DB3 /* Starscream-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E3430BF9D634B22D9BAA59693D3D9A09 /* TimeoutTimer.swift in Sources */ = {isa = PBXBuildFile; fileRef = AADC2A78EE4041E349339CEB23CD1C14 /* TimeoutTimer.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - FC51E5A7A31ECAA83DEFD0661655BA18 /* SSLSecurity.swift in Sources */ = {isa = PBXBuildFile; fileRef = 805889F6E182005B68A4EDCFEF2FAF7D /* SSLSecurity.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - FD991E6534210E1DA68CB1EB3BE909F2 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 276140B1EDA081793CA6BDD7582E1B4B /* Foundation.framework */; }; + 068E5963381B58D7D8CD321462F567ED /* Compression.swift in Sources */ = {isa = PBXBuildFile; fileRef = 734469CD9655D7C38786710ED18F3D6B /* Compression.swift */; }; + 1627E6FA0453D6DB472BA444F1D32AE7 /* SSLClientCertificate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6DBD425D2B58528B26427B72C1648FA8 /* SSLClientCertificate.swift */; }; + 1C377D1D61015FC0964E4B1F6F8DFA78 /* SwiftPhoenixClient-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 90ED4795011CDD6C5DED9DFE76D9A214 /* SwiftPhoenixClient-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 26D4026CBA6B3157A5C9931FEFD77920 /* Pods-ChatExample-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 8968AC36F420FA420F0B2BC7B350DBBD /* Pods-ChatExample-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 294D61E8A195B6A1F6AEDCF0F73599A5 /* Starscream-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = E7CD3B886D6D8805A735BDEF3BDCF0BA /* Starscream-dummy.m */; }; + 29E64A3ACD661716137698BEACA5C00D /* TimeoutTimer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80BD9037D1B582AFDBED26A333CF424C /* TimeoutTimer.swift */; }; + 5A97FCDF938E4E4528C2A8086B9F83F8 /* Defaults.swift in Sources */ = {isa = PBXBuildFile; fileRef = F1319249CFC62051FD50F6B61EEDF887 /* Defaults.swift */; }; + 6808680D161C5D73FDC207827AB4F9B4 /* Presence.swift in Sources */ = {isa = PBXBuildFile; fileRef = E884B1EF67B415B3C5DC71EF27AF0D43 /* Presence.swift */; }; + 6888D80735A4D0C3751A0BE429E59305 /* Pods-ChatExample-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 0733E29ABA77F4D2AADD52DE9DB11322 /* Pods-ChatExample-dummy.m */; }; + 69DF62025D9573CEFB2D3537A6793521 /* Delegated.swift in Sources */ = {isa = PBXBuildFile; fileRef = 18419E349A2BEB5172EA6CA56169CB50 /* Delegated.swift */; }; + 6A16525FD84E49A997705EA660CE513F /* Starscream.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3319CBE6BF16B5B2366BDE834B663B5E /* Starscream.framework */; }; + 70B16A79D252268FAB89ADAB96A58E7F /* Message.swift in Sources */ = {isa = PBXBuildFile; fileRef = F3E1C63F1496934307291C2657F0926C /* Message.swift */; }; + 8B045D1A3F3B774DB53EBAE06405D88E /* Push.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7B25284C3B850913FF9E14700210DFDF /* Push.swift */; }; + 8B3350D96B15B975184C8EE0819F9623 /* SSLSecurity.swift in Sources */ = {isa = PBXBuildFile; fileRef = A2D9C839438B1BC7D9DC70F5786B7A79 /* SSLSecurity.swift */; }; + 96D67F9A7630A34944B6EAAD47F785E3 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DBB895F616DD1C4C7C1587261E4EBE5D /* Foundation.framework */; }; + B4A6283FDFA04E3A7B6FD0C13B6FEF32 /* Starscream-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 224B8A4E0612334207A2B350C859D2D4 /* Starscream-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C02D9FEB295BDA1359D2F52C80F8E75A /* WebSocket.swift in Sources */ = {isa = PBXBuildFile; fileRef = 22A53698F1D065DB33E81AB27CAAC02A /* WebSocket.swift */; }; + C6B50D5206585816CAB909F5874B43D0 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DBB895F616DD1C4C7C1587261E4EBE5D /* Foundation.framework */; }; + DC79A7DFBF5C910D8EB9CBC52FD36664 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DBB895F616DD1C4C7C1587261E4EBE5D /* Foundation.framework */; }; + E2D9463748B522920E1B12D69BA482E0 /* SwiftPhoenixClient-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 25C2CFD2324D16BCE5D5B41F493107F2 /* SwiftPhoenixClient-dummy.m */; }; + E62520AD33F11E30813D39270959DEFF /* Channel.swift in Sources */ = {isa = PBXBuildFile; fileRef = A35897FD3369F651955E43FBC183EA30 /* Channel.swift */; }; + E82952201E585700FDE122E17C589C95 /* Socket.swift in Sources */ = {isa = PBXBuildFile; fileRef = E2423C210EDBBE5A2B6C2CBEBD282F17 /* Socket.swift */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ - 24B97C4889C94A99424A8F9F7AAB6833 /* PBXContainerItemProxy */ = { + 1EA94C71C6D540F725A1A26CF40AB3F4 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = 053121EBF985B6CC360DB724CB25B118; + remoteGlobalIDString = 9B78EE4AF6AE03E79D88886319853FF7; remoteInfo = Starscream; }; - 539E84A2D1A6AEF561556B5047A16B8E /* PBXContainerItemProxy */ = { + 342E638607BF50BAE7B9B54337C46256 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = E69E84E9C3EACEEBD783A09756FB01E7; + remoteGlobalIDString = EB8BC13444B9C488EB847601B2F0E13B; remoteInfo = SwiftPhoenixClient; }; - DB61BC638F96FEEC7A1E2BA8288DA0C1 /* PBXContainerItemProxy */ = { + 4CFC01D944C71F16BCB05F91E67062BB /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = 053121EBF985B6CC360DB724CB25B118; + remoteGlobalIDString = 9B78EE4AF6AE03E79D88886319853FF7; remoteInfo = Starscream; }; /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ - 048CC02A5A42426650BB92C87A241618 /* Delegated.html */ = {isa = PBXFileReference; includeInIndex = 1; name = Delegated.html; path = docs/Structs/Delegated.html; sourceTree = ""; }; - 05E6AC6C9295917F50A4939C4D012545 /* jazzy.css */ = {isa = PBXFileReference; includeInIndex = 1; name = jazzy.css; path = docs/docsets/SwiftPhoenixClient.docset/Contents/Resources/Documents/css/jazzy.css; sourceTree = ""; }; - 0C3279281195DC530C615C4CBD36CE50 /* jazzy.js */ = {isa = PBXFileReference; includeInIndex = 1; name = jazzy.js; path = docs/js/jazzy.js; sourceTree = ""; }; - 0ED3AAA7FF5DDC7B27ABA19D6847563E /* Message.html */ = {isa = PBXFileReference; includeInIndex = 1; name = Message.html; path = docs/Classes/Message.html; sourceTree = ""; }; - 0F52249DD4D3DD3159B64A42F2E7349B /* Starscream.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Starscream.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 10CE38F8ACDEAE7BD94DAFBA5E574CC1 /* Starscream-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Starscream-prefix.pch"; sourceTree = ""; }; - 133EDBD706EF899D0A8C27600993729A /* Pods-ChatExample-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-ChatExample-acknowledgements.plist"; sourceTree = ""; }; - 1458B06DC7458B1125CD4CD60AD6016E /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 1C0FAD010F192A0E6747C7D4336EF0DF /* Delegated.html */ = {isa = PBXFileReference; includeInIndex = 1; name = Delegated.html; path = docs/docsets/SwiftPhoenixClient.docset/Contents/Resources/Documents/Structs/Delegated.html; sourceTree = ""; }; - 1D5CDCBC1067613A1F1A15FBDB7BA096 /* ChannelEvent.html */ = {isa = PBXFileReference; includeInIndex = 1; name = ChannelEvent.html; path = docs/Structs/ChannelEvent.html; sourceTree = ""; }; - 1EF8702E5E1C2CC2C646CB222E5F8E10 /* Pods-ChatExample-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-ChatExample-resources.sh"; sourceTree = ""; }; - 1F5722CC799B22AAD1FC90F9C651A329 /* SwiftPhoenixClient-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SwiftPhoenixClient-prefix.pch"; sourceTree = ""; }; - 1FF0B14F94236816F841D0674A8F7931 /* SwiftPhoenixClient.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = SwiftPhoenixClient.modulemap; sourceTree = ""; }; - 276140B1EDA081793CA6BDD7582E1B4B /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.0.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; - 2C780E30A1AECA11F6D93AA3B5F6ED34 /* Pods-ChatExample-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-ChatExample-umbrella.h"; sourceTree = ""; }; - 301BDAB58F7B8DBA2F7DEFCFDDB527A3 /* Pods-ChatExample-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-ChatExample-acknowledgements.markdown"; sourceTree = ""; }; - 3111104C5AC661E19379538CE82A587B /* Pods-ChatExample.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-ChatExample.debug.xcconfig"; sourceTree = ""; }; - 331DD9CEAC50C58A6BE7442E7E42A8BE /* SwiftPhoenixClient-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SwiftPhoenixClient-dummy.m"; sourceTree = ""; }; - 3371ED4635BDCE3F24420708B0F488CD /* Socket.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Socket.swift; path = Sources/client/Socket.swift; sourceTree = ""; }; - 35B75D02BB246E6B7EABEF61F78891EC /* Starscream.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = Starscream.modulemap; sourceTree = ""; }; - 36D204B789C129A695EC0B9080EF488D /* Push.html */ = {isa = PBXFileReference; includeInIndex = 1; name = Push.html; path = docs/docsets/SwiftPhoenixClient.docset/Contents/Resources/Documents/Classes/Push.html; sourceTree = ""; }; - 3E2E1E155EDD2C3275557338425D1EA4 /* SwiftPhoenixClient-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SwiftPhoenixClient-umbrella.h"; sourceTree = ""; }; - 3F061E6A6220360C7A4E665E755F6411 /* Structs.html */ = {isa = PBXFileReference; includeInIndex = 1; name = Structs.html; path = docs/Structs.html; sourceTree = ""; }; - 47D5666E4AF3D41E867E05510EB6537E /* highlight.css */ = {isa = PBXFileReference; includeInIndex = 1; name = highlight.css; path = docs/css/highlight.css; sourceTree = ""; }; - 48B28454DD9053134504D38EF5D2A081 /* ChannelEvent.html */ = {isa = PBXFileReference; includeInIndex = 1; name = ChannelEvent.html; path = docs/docsets/SwiftPhoenixClient.docset/Contents/Resources/Documents/Structs/ChannelEvent.html; sourceTree = ""; }; - 4CD3DEC0FE9F0AC284A93942C0A6EA35 /* Options.html */ = {isa = PBXFileReference; includeInIndex = 1; name = Options.html; path = docs/docsets/SwiftPhoenixClient.docset/Contents/Resources/Documents/Classes/Presence/Options.html; sourceTree = ""; }; - 4CD40E39481516DEE20EAEF187CFA97E /* Push.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Push.swift; path = Sources/client/Push.swift; sourceTree = ""; }; - 4EC449B09664B1B127DCD88C1CA39BAA /* SwiftPhoenixClient.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; lastKnownFileType = text; path = SwiftPhoenixClient.podspec; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; - 4F5F2F64FB7C40C6E38FFD9B8FE2521F /* Starscream.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Starscream.framework; path = Starscream.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 4F9C323447F2A105CB74A73E5B9E154B /* highlight.css */ = {isa = PBXFileReference; includeInIndex = 1; name = highlight.css; path = docs/docsets/SwiftPhoenixClient.docset/Contents/Resources/Documents/css/highlight.css; sourceTree = ""; }; - 50406E94975C82592BD951079E9B5429 /* Socket.html */ = {isa = PBXFileReference; includeInIndex = 1; name = Socket.html; path = docs/Classes/Socket.html; sourceTree = ""; }; - 52F131D01D993AC067941AF6DF20A336 /* badge.svg */ = {isa = PBXFileReference; includeInIndex = 1; name = badge.svg; path = docs/badge.svg; sourceTree = ""; }; - 539115E4E4BC385B665EA72A05B4CEDF /* Push.html */ = {isa = PBXFileReference; includeInIndex = 1; name = Push.html; path = docs/Classes/Push.html; sourceTree = ""; }; - 55CA529B7AEAA4573DBD97C25288F05F /* Options.html */ = {isa = PBXFileReference; includeInIndex = 1; name = Options.html; path = docs/Classes/Presence/Options.html; sourceTree = ""; }; - 58C28BD6FA6881B476B5574B3CF0B3E3 /* Enums.html */ = {isa = PBXFileReference; includeInIndex = 1; name = Enums.html; path = docs/Enums.html; sourceTree = ""; }; - 58D554D602959773AC32D029A4EB437B /* Serializer.html */ = {isa = PBXFileReference; includeInIndex = 1; name = Serializer.html; path = docs/Protocols/Serializer.html; sourceTree = ""; }; - 5A9D17B37705B99972E40CA15F05BB20 /* Pods-ChatExample-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-ChatExample-frameworks.sh"; sourceTree = ""; }; - 5B01C7A7BD44CC36D48A18E4CEC06E36 /* Message.html */ = {isa = PBXFileReference; includeInIndex = 1; name = Message.html; path = docs/docsets/SwiftPhoenixClient.docset/Contents/Resources/Documents/Classes/Message.html; sourceTree = ""; }; - 5BE270B66FA01307C687D400DB8B761B /* LICENSE */ = {isa = PBXFileReference; includeInIndex = 1; path = LICENSE; sourceTree = ""; }; - 624A28AB773F1C0F981FC1EDE3831616 /* undocumented.json */ = {isa = PBXFileReference; includeInIndex = 1; name = undocumented.json; path = docs/undocumented.json; sourceTree = ""; }; - 6305A7F7E3BE5845060709E057709268 /* Pods-ChatExample-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-ChatExample-dummy.m"; sourceTree = ""; }; - 64EFB0FC19735624285050C02D59BE29 /* Serializer.html */ = {isa = PBXFileReference; includeInIndex = 1; name = Serializer.html; path = docs/docsets/SwiftPhoenixClient.docset/Contents/Resources/Documents/Protocols/Serializer.html; sourceTree = ""; }; - 6555AA29F150E9FDF1785ED95E4901F0 /* carat.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = carat.png; path = docs/img/carat.png; sourceTree = ""; }; - 65686E733BDA68D4CA3D87A8A5B13256 /* Channel.html */ = {isa = PBXFileReference; includeInIndex = 1; name = Channel.html; path = docs/docsets/SwiftPhoenixClient.docset/Contents/Resources/Documents/Classes/Channel.html; sourceTree = ""; }; - 659B9B27CDEF29FCE22C5060AF1718A1 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; name = Info.plist; path = docs/docsets/SwiftPhoenixClient.docset/Contents/Info.plist; sourceTree = ""; }; - 669E22F9CA1DF6930721F7E2AFCC0C08 /* search.json */ = {isa = PBXFileReference; includeInIndex = 1; name = search.json; path = docs/search.json; sourceTree = ""; }; - 677BC8911948C9658703184E269F0032 /* Starscream-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Starscream-dummy.m"; sourceTree = ""; }; - 6D75B4276CC94369B6CA97C49A85ADC9 /* docSet.dsidx */ = {isa = PBXFileReference; includeInIndex = 1; name = docSet.dsidx; path = docs/docsets/SwiftPhoenixClient.docset/Contents/Resources/docSet.dsidx; sourceTree = ""; }; - 6EC900D8120142928ABDA371CAF94D5C /* index.html */ = {isa = PBXFileReference; includeInIndex = 1; name = index.html; path = docs/index.html; sourceTree = ""; }; - 722B7A5196E76DAE17188C05D685DF4C /* SSLClientCertificate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SSLClientCertificate.swift; path = Sources/Starscream/SSLClientCertificate.swift; sourceTree = ""; }; - 74687D9F2CCAEE0A7C24845698666DB3 /* Starscream-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Starscream-umbrella.h"; sourceTree = ""; }; - 76033BE1B2FCB6246DF52694D45E64E3 /* index.html */ = {isa = PBXFileReference; includeInIndex = 1; name = index.html; path = docs/docsets/SwiftPhoenixClient.docset/Contents/Resources/Documents/index.html; sourceTree = ""; }; - 7E3CC31CBA5B20F8A2BB6CBF73834640 /* Presence.html */ = {isa = PBXFileReference; includeInIndex = 1; name = Presence.html; path = docs/Classes/Presence.html; sourceTree = ""; }; - 805889F6E182005B68A4EDCFEF2FAF7D /* SSLSecurity.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SSLSecurity.swift; path = Sources/Starscream/SSLSecurity.swift; sourceTree = ""; }; - 808EFA76CAA82A1F18202E6FA491DA05 /* dash.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = dash.png; path = docs/docsets/SwiftPhoenixClient.docset/Contents/Resources/Documents/img/dash.png; sourceTree = ""; }; - 818204D2CEF1C6D6F48A3DE9DE025582 /* Classes.html */ = {isa = PBXFileReference; includeInIndex = 1; name = Classes.html; path = docs/Classes.html; sourceTree = ""; }; - 83210F4274BB40F686E66426957B96E9 /* Defaults.html */ = {isa = PBXFileReference; includeInIndex = 1; name = Defaults.html; path = docs/Classes/Defaults.html; sourceTree = ""; }; - 84F18C8C8F2DDCA8727E7AD9EE4A7DFE /* Pods-ChatExample.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-ChatExample.release.xcconfig"; sourceTree = ""; }; - 8964C5C7CE666AF3DA46A036E58C06AF /* Channel.html */ = {isa = PBXFileReference; includeInIndex = 1; name = Channel.html; path = docs/Classes/Channel.html; sourceTree = ""; }; - 8E18500EB0DD389F5E112538AF610106 /* Delegated.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Delegated.swift; sourceTree = ""; }; - 8E6D69FAC49F25F7364B5E6482871915 /* badge.svg */ = {isa = PBXFileReference; includeInIndex = 1; name = badge.svg; path = docs/docsets/SwiftPhoenixClient.docset/Contents/Resources/Documents/badge.svg; sourceTree = ""; }; - 924E8C636DDCF4A237D6B4A7405472E1 /* Presence.html */ = {isa = PBXFileReference; includeInIndex = 1; name = Presence.html; path = docs/docsets/SwiftPhoenixClient.docset/Contents/Resources/Documents/Classes/Presence.html; sourceTree = ""; }; - 9314D58633CC06C000BBC68E5CAC042B /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 93A4A3777CF96A4AAC1D13BA6DCCEA73 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; lastKnownFileType = text; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; - 9495B2E6EA9E5AD8EF2E35399B55FB3C /* jquery.min.js */ = {isa = PBXFileReference; includeInIndex = 1; name = jquery.min.js; path = docs/js/jquery.min.js; sourceTree = ""; }; - 966BB2C30188058813B3EC2FA0F3C59F /* jquery.min.js */ = {isa = PBXFileReference; includeInIndex = 1; name = jquery.min.js; path = docs/docsets/SwiftPhoenixClient.docset/Contents/Resources/Documents/js/jquery.min.js; sourceTree = ""; }; - 99D18BA96649BD0F2A32D0286652BC33 /* SwiftPhoenixClient.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = SwiftPhoenixClient.framework; path = SwiftPhoenixClient.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - A0018D722DEC9224FE9C48D7471EE655 /* Starscream.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Starscream.xcconfig; sourceTree = ""; }; - A048338426E69ABD6E836AEDD07B87C4 /* Global Variables.html */ = {isa = PBXFileReference; includeInIndex = 1; name = "Global Variables.html"; path = "docs/docsets/SwiftPhoenixClient.docset/Contents/Resources/Documents/Global Variables.html"; sourceTree = ""; }; - A1EC49B180C9C54E1070B48D77EA0CAD /* undocumented.json */ = {isa = PBXFileReference; includeInIndex = 1; name = undocumented.json; path = docs/docsets/SwiftPhoenixClient.docset/Contents/Resources/Documents/undocumented.json; sourceTree = ""; }; - A5351274DE394FA5817795117E40D6F6 /* dash.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = dash.png; path = docs/img/dash.png; sourceTree = ""; }; - A53D5AD8BF24FA5E8815F0C37E9D3A48 /* Events.html */ = {isa = PBXFileReference; includeInIndex = 1; name = Events.html; path = docs/Classes/Presence/Events.html; sourceTree = ""; }; - A9F18693C1114E37BBFBEC8EE8686FDC /* Compression.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Compression.swift; path = Sources/Starscream/Compression.swift; sourceTree = ""; }; - AADC2A78EE4041E349339CEB23CD1C14 /* TimeoutTimer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TimeoutTimer.swift; path = Sources/client/TimeoutTimer.swift; sourceTree = ""; }; - AEF667E69ACDB807B282E380354DB273 /* WebSocket.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = WebSocket.swift; path = Sources/Starscream/WebSocket.swift; sourceTree = ""; }; - AF209B8C542AF73A5150922754573BEA /* Defaults.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Defaults.swift; sourceTree = ""; }; - B21592CE6FD8647CCC045A6465E33083 /* SwiftPhoenixClient.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SwiftPhoenixClient.xcconfig; sourceTree = ""; }; - B2AC0C8C7F46CFF37D38B9B186C3C6F1 /* Defaults.html */ = {isa = PBXFileReference; includeInIndex = 1; name = Defaults.html; path = docs/docsets/SwiftPhoenixClient.docset/Contents/Resources/Documents/Classes/Defaults.html; sourceTree = ""; }; - B79511E301910F33D22F5112B878734B /* Structs.html */ = {isa = PBXFileReference; includeInIndex = 1; name = Structs.html; path = docs/docsets/SwiftPhoenixClient.docset/Contents/Resources/Documents/Structs.html; sourceTree = ""; }; - BB6B6883FFA69DA5D3CC9650653575F2 /* Pods-ChatExample.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-ChatExample.modulemap"; sourceTree = ""; }; - BEE6342425BC9AC34A483A548F137816 /* Message.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Message.swift; path = Sources/client/Message.swift; sourceTree = ""; }; - C04A41F56935C4F608F85C3363886909 /* Events.html */ = {isa = PBXFileReference; includeInIndex = 1; name = Events.html; path = docs/docsets/SwiftPhoenixClient.docset/Contents/Resources/Documents/Classes/Presence/Events.html; sourceTree = ""; }; - C2C207E5DC5B261DB7610E55F2FFAEEA /* jazzy.js */ = {isa = PBXFileReference; includeInIndex = 1; name = jazzy.js; path = docs/docsets/SwiftPhoenixClient.docset/Contents/Resources/Documents/js/jazzy.js; sourceTree = ""; }; - C6D97B7D9335CD07741308F79BAA6AB2 /* Global Variables.html */ = {isa = PBXFileReference; includeInIndex = 1; name = "Global Variables.html"; path = "docs/Global Variables.html"; sourceTree = ""; }; - C70B1E2B554391F3566383C3222699C6 /* README.md */ = {isa = PBXFileReference; includeInIndex = 1; path = README.md; sourceTree = ""; }; - C754EFC40C0B95992DEF159938B8EFE2 /* ChannelState.html */ = {isa = PBXFileReference; includeInIndex = 1; name = ChannelState.html; path = docs/Enums/ChannelState.html; sourceTree = ""; }; - CAC8C6EED92065919C084A4B20618C09 /* carat.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = carat.png; path = docs/docsets/SwiftPhoenixClient.docset/Contents/Resources/Documents/img/carat.png; sourceTree = ""; }; - D3BD70D83630E64E35B8575826D79F02 /* Protocols.html */ = {isa = PBXFileReference; includeInIndex = 1; name = Protocols.html; path = docs/Protocols.html; sourceTree = ""; }; - DDF0105E2B874CF5D18CC7678F673F33 /* Enums.html */ = {isa = PBXFileReference; includeInIndex = 1; name = Enums.html; path = docs/docsets/SwiftPhoenixClient.docset/Contents/Resources/Documents/Enums.html; sourceTree = ""; }; - DF3B76DCC22190AC5C9FCA50EDDE1A29 /* Socket.html */ = {isa = PBXFileReference; includeInIndex = 1; name = Socket.html; path = docs/docsets/SwiftPhoenixClient.docset/Contents/Resources/Documents/Classes/Socket.html; sourceTree = ""; }; - DFF43304821C1CED06C7710CEFBE51C8 /* ChannelState.html */ = {isa = PBXFileReference; includeInIndex = 1; name = ChannelState.html; path = docs/docsets/SwiftPhoenixClient.docset/Contents/Resources/Documents/Enums/ChannelState.html; sourceTree = ""; }; - E5E944E3B1D60840C47A85FF22C4061F /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - E97A2E33BE1843A0A22B04A51E1BBD98 /* jazzy.css */ = {isa = PBXFileReference; includeInIndex = 1; name = jazzy.css; path = docs/css/jazzy.css; sourceTree = ""; }; - EB2CCDF42DB10D14E9554632BBDFABBF /* SwiftPhoenixClient.tgz */ = {isa = PBXFileReference; includeInIndex = 1; name = SwiftPhoenixClient.tgz; path = docs/docsets/SwiftPhoenixClient.tgz; sourceTree = ""; }; - EC35CA96F6BCF4833ED9A62B9AE14D16 /* search.json */ = {isa = PBXFileReference; includeInIndex = 1; name = search.json; path = docs/docsets/SwiftPhoenixClient.docset/Contents/Resources/Documents/search.json; sourceTree = ""; }; - ED9166F023CBE2CC18CD5215EB745AFC /* Pods_ChatExample.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Pods_ChatExample.framework; path = "Pods-ChatExample.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; - EF21959727351D6AB8C837FD16F6EA96 /* Classes.html */ = {isa = PBXFileReference; includeInIndex = 1; name = Classes.html; path = docs/docsets/SwiftPhoenixClient.docset/Contents/Resources/Documents/Classes.html; sourceTree = ""; }; - F0E9A00EE563787071754734D23AF8AF /* Typealiases.html */ = {isa = PBXFileReference; includeInIndex = 1; name = Typealiases.html; path = docs/docsets/SwiftPhoenixClient.docset/Contents/Resources/Documents/Typealiases.html; sourceTree = ""; }; - F4E718F6D525A96AA8CFAB423C8DFA4A /* Channel.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Channel.swift; path = Sources/client/Channel.swift; sourceTree = ""; }; - F4E7DF1EA2106DB3D439F583141F44AF /* gh.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = gh.png; path = docs/img/gh.png; sourceTree = ""; }; - F6122F6446535AE4E9C83055C39DB36B /* Protocols.html */ = {isa = PBXFileReference; includeInIndex = 1; name = Protocols.html; path = docs/docsets/SwiftPhoenixClient.docset/Contents/Resources/Documents/Protocols.html; sourceTree = ""; }; - FB268AF97FFA3EDB3566E378D760E046 /* Presence.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Presence.swift; path = Sources/client/Presence.swift; sourceTree = ""; }; - FD6599AD9D2E5E80E7A4F71DF440AE2D /* Typealiases.html */ = {isa = PBXFileReference; includeInIndex = 1; name = Typealiases.html; path = docs/Typealiases.html; sourceTree = ""; }; - FEBE9A930D506D41BB7C57897C81B92F /* gh.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = gh.png; path = docs/docsets/SwiftPhoenixClient.docset/Contents/Resources/Documents/img/gh.png; sourceTree = ""; }; + 00ADD5B67E110014973D0A9F77415095 /* Serializer.html */ = {isa = PBXFileReference; includeInIndex = 1; name = Serializer.html; path = docs/docsets/SwiftPhoenixClient.docset/Contents/Resources/Documents/Protocols/Serializer.html; sourceTree = ""; }; + 01A0DF2365953A428374021B27F98537 /* Message.html */ = {isa = PBXFileReference; includeInIndex = 1; name = Message.html; path = docs/docsets/SwiftPhoenixClient.docset/Contents/Resources/Documents/Classes/Message.html; sourceTree = ""; }; + 035A99EE1954CD6DD25DB40707206B21 /* carat.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = carat.png; path = docs/docsets/SwiftPhoenixClient.docset/Contents/Resources/Documents/img/carat.png; sourceTree = ""; }; + 0733E29ABA77F4D2AADD52DE9DB11322 /* Pods-ChatExample-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-ChatExample-dummy.m"; sourceTree = ""; }; + 0E59D48A8FB0582306F657E6EF6B7979 /* Events.html */ = {isa = PBXFileReference; includeInIndex = 1; name = Events.html; path = docs/docsets/SwiftPhoenixClient.docset/Contents/Resources/Documents/Classes/Presence/Events.html; sourceTree = ""; }; + 10A81D80365D73C866604D5423C474D8 /* Protocols.html */ = {isa = PBXFileReference; includeInIndex = 1; name = Protocols.html; path = docs/Protocols.html; sourceTree = ""; }; + 1695D0E836236A6BDD78F33C8246C303 /* Socket.html */ = {isa = PBXFileReference; includeInIndex = 1; name = Socket.html; path = docs/Classes/Socket.html; sourceTree = ""; }; + 18419E349A2BEB5172EA6CA56169CB50 /* Delegated.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Delegated.swift; sourceTree = ""; }; + 1E4CE8C3DCC5AE11C22BBDE182C6D248 /* Defaults.html */ = {isa = PBXFileReference; includeInIndex = 1; name = Defaults.html; path = docs/docsets/SwiftPhoenixClient.docset/Contents/Resources/Documents/Classes/Defaults.html; sourceTree = ""; }; + 1F3FAC1BE866752BD6588A67E15A9140 /* Pods-ChatExample-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-ChatExample-frameworks.sh"; sourceTree = ""; }; + 2054E11EC2B0CA2DE7D9088164AA9B5E /* gh.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = gh.png; path = docs/img/gh.png; sourceTree = ""; }; + 224B8A4E0612334207A2B350C859D2D4 /* Starscream-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Starscream-umbrella.h"; sourceTree = ""; }; + 22A53698F1D065DB33E81AB27CAAC02A /* WebSocket.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = WebSocket.swift; path = Sources/Starscream/WebSocket.swift; sourceTree = ""; }; + 23178A96EF7F6BC88A41DFE0B8353942 /* jazzy.css */ = {isa = PBXFileReference; includeInIndex = 1; name = jazzy.css; path = docs/css/jazzy.css; sourceTree = ""; }; + 25C2CFD2324D16BCE5D5B41F493107F2 /* SwiftPhoenixClient-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SwiftPhoenixClient-dummy.m"; sourceTree = ""; }; + 280C6EACA8F6236E5F66C4EB015C495A /* jazzy.js */ = {isa = PBXFileReference; includeInIndex = 1; name = jazzy.js; path = docs/docsets/SwiftPhoenixClient.docset/Contents/Resources/Documents/js/jazzy.js; sourceTree = ""; }; + 3319CBE6BF16B5B2366BDE834B663B5E /* Starscream.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Starscream.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 349396FB8FED05F12ED1ABC7783062D3 /* Pods-ChatExample.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-ChatExample.release.xcconfig"; sourceTree = ""; }; + 3531100302B67C2ACF839C611FAAB78C /* search.json */ = {isa = PBXFileReference; includeInIndex = 1; name = search.json; path = docs/search.json; sourceTree = ""; }; + 3ABFA0687297D945558DCBB95ED557A2 /* Structs.html */ = {isa = PBXFileReference; includeInIndex = 1; name = Structs.html; path = docs/Structs.html; sourceTree = ""; }; + 3B2CABD0C97569EF72BA5C8254609716 /* SwiftPhoenixClient.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SwiftPhoenixClient.debug.xcconfig; sourceTree = ""; }; + 3BCFE01A9E61432230E5E36F9B9E0FC8 /* Channel.html */ = {isa = PBXFileReference; includeInIndex = 1; name = Channel.html; path = docs/docsets/SwiftPhoenixClient.docset/Contents/Resources/Documents/Classes/Channel.html; sourceTree = ""; }; + 423E5472C5471772EF7FD9AA2F37FD41 /* Typealiases.html */ = {isa = PBXFileReference; includeInIndex = 1; name = Typealiases.html; path = docs/docsets/SwiftPhoenixClient.docset/Contents/Resources/Documents/Typealiases.html; sourceTree = ""; }; + 4C32F08185D369079352E69315B9E7E1 /* Structs.html */ = {isa = PBXFileReference; includeInIndex = 1; name = Structs.html; path = docs/docsets/SwiftPhoenixClient.docset/Contents/Resources/Documents/Structs.html; sourceTree = ""; }; + 4FC726257402E94D4831A2C6F2139FE2 /* highlight.css */ = {isa = PBXFileReference; includeInIndex = 1; name = highlight.css; path = docs/css/highlight.css; sourceTree = ""; }; + 508413A2B727854135229C668D140B32 /* badge.svg */ = {isa = PBXFileReference; includeInIndex = 1; name = badge.svg; path = docs/docsets/SwiftPhoenixClient.docset/Contents/Resources/Documents/badge.svg; sourceTree = ""; }; + 52925BD811EAA3483DEDE7C986BAF5E6 /* jquery.min.js */ = {isa = PBXFileReference; includeInIndex = 1; name = jquery.min.js; path = docs/docsets/SwiftPhoenixClient.docset/Contents/Resources/Documents/js/jquery.min.js; sourceTree = ""; }; + 52CCB8534371A4392E14B9AEE4AACF6C /* Channel.html */ = {isa = PBXFileReference; includeInIndex = 1; name = Channel.html; path = docs/Classes/Channel.html; sourceTree = ""; }; + 5342706D95714A4BB92ED814E73BCBD7 /* Protocols.html */ = {isa = PBXFileReference; includeInIndex = 1; name = Protocols.html; path = docs/docsets/SwiftPhoenixClient.docset/Contents/Resources/Documents/Protocols.html; sourceTree = ""; }; + 5395054A717BC3ADD3FF821541B85E7E /* Pods-ChatExample.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-ChatExample.debug.xcconfig"; sourceTree = ""; }; + 55109FA355C6F42478846AD29C0131B4 /* SwiftPhoenixClient.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = SwiftPhoenixClient.modulemap; sourceTree = ""; }; + 58D086C87180B15859A7353B9939C122 /* SwiftPhoenixClient.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; path = SwiftPhoenixClient.podspec; sourceTree = ""; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; + 5B28BA9C30793A4FF32A8E2A0AB934EB /* Pods_ChatExample.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Pods_ChatExample.framework; path = "Pods-ChatExample.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; + 5D5E240C51338D03C83A9EF0676C3AFD /* Starscream-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Starscream-Info.plist"; sourceTree = ""; }; + 5DCCD894660EADA5EF4DA0EB3572DC05 /* SwiftPhoenixClient-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "SwiftPhoenixClient-Info.plist"; sourceTree = ""; }; + 5DFADCC53B4AE43977473C707A0FA2B1 /* index.html */ = {isa = PBXFileReference; includeInIndex = 1; name = index.html; path = docs/index.html; sourceTree = ""; }; + 5E182287B5596F5483F330E1F5962DD0 /* Socket.html */ = {isa = PBXFileReference; includeInIndex = 1; name = Socket.html; path = docs/docsets/SwiftPhoenixClient.docset/Contents/Resources/Documents/Classes/Socket.html; sourceTree = ""; }; + 5F4AE01EB2766223CAA3A71B9DA3AC96 /* Options.html */ = {isa = PBXFileReference; includeInIndex = 1; name = Options.html; path = docs/Classes/Presence/Options.html; sourceTree = ""; }; + 5FC6C4566645B9CF2475872416A461D1 /* Classes.html */ = {isa = PBXFileReference; includeInIndex = 1; name = Classes.html; path = docs/Classes.html; sourceTree = ""; }; + 612F1A3023355FE61E6345DEA2834576 /* badge.svg */ = {isa = PBXFileReference; includeInIndex = 1; name = badge.svg; path = docs/badge.svg; sourceTree = ""; }; + 69E21492CC6DBA060CEC551604521829 /* Message.html */ = {isa = PBXFileReference; includeInIndex = 1; name = Message.html; path = docs/Classes/Message.html; sourceTree = ""; }; + 6A0B7D439B81AAF110C14562A8D7CE1A /* Starscream.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Starscream.debug.xcconfig; sourceTree = ""; }; + 6D4A49CDC4A056499DD28B59E3BEDBF2 /* Serializer.html */ = {isa = PBXFileReference; includeInIndex = 1; name = Serializer.html; path = docs/Protocols/Serializer.html; sourceTree = ""; }; + 6DBD425D2B58528B26427B72C1648FA8 /* SSLClientCertificate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SSLClientCertificate.swift; path = Sources/Starscream/SSLClientCertificate.swift; sourceTree = ""; }; + 71907A9F8C72BE8139DF481DCF163C44 /* search.json */ = {isa = PBXFileReference; includeInIndex = 1; name = search.json; path = docs/docsets/SwiftPhoenixClient.docset/Contents/Resources/Documents/search.json; sourceTree = ""; }; + 728AE8A4BB2B043E9CC8826B3FA5E154 /* ChannelState.html */ = {isa = PBXFileReference; includeInIndex = 1; name = ChannelState.html; path = docs/Enums/ChannelState.html; sourceTree = ""; }; + 734469CD9655D7C38786710ED18F3D6B /* Compression.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Compression.swift; path = Sources/Starscream/Compression.swift; sourceTree = ""; }; + 79E4B71DF2A0B15EF8127748D614EB52 /* Enums.html */ = {isa = PBXFileReference; includeInIndex = 1; name = Enums.html; path = docs/docsets/SwiftPhoenixClient.docset/Contents/Resources/Documents/Enums.html; sourceTree = ""; }; + 7B25284C3B850913FF9E14700210DFDF /* Push.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Push.swift; path = Sources/Push.swift; sourceTree = ""; }; + 7C53DF3DB0542033B10E101498D72BC4 /* SwiftPhoenixClient.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = SwiftPhoenixClient.framework; path = SwiftPhoenixClient.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 809813DDC6F48467C03C6B68F92585CC /* Classes.html */ = {isa = PBXFileReference; includeInIndex = 1; name = Classes.html; path = docs/docsets/SwiftPhoenixClient.docset/Contents/Resources/Documents/Classes.html; sourceTree = ""; }; + 80BD9037D1B582AFDBED26A333CF424C /* TimeoutTimer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TimeoutTimer.swift; path = Sources/TimeoutTimer.swift; sourceTree = ""; }; + 852FE3D8062F5E6D3B913B9675338E04 /* SwiftPhoenixClient.tgz */ = {isa = PBXFileReference; includeInIndex = 1; name = SwiftPhoenixClient.tgz; path = docs/docsets/SwiftPhoenixClient.tgz; sourceTree = ""; }; + 885854AED8C88148590F9D27033B9316 /* Delegated.html */ = {isa = PBXFileReference; includeInIndex = 1; name = Delegated.html; path = docs/docsets/SwiftPhoenixClient.docset/Contents/Resources/Documents/Structs/Delegated.html; sourceTree = ""; }; + 891B2270823847ED23F2ECFC28F935EC /* Starscream.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Starscream.framework; path = Starscream.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 8968AC36F420FA420F0B2BC7B350DBBD /* Pods-ChatExample-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-ChatExample-umbrella.h"; sourceTree = ""; }; + 90ED4795011CDD6C5DED9DFE76D9A214 /* SwiftPhoenixClient-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SwiftPhoenixClient-umbrella.h"; sourceTree = ""; }; + 90F5A6AC1862695B4961991E01B4EA5F /* dash.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = dash.png; path = docs/docsets/SwiftPhoenixClient.docset/Contents/Resources/Documents/img/dash.png; sourceTree = ""; }; + 97120143F16C21D69FA67595DDE5C17B /* Defaults.html */ = {isa = PBXFileReference; includeInIndex = 1; name = Defaults.html; path = docs/Classes/Defaults.html; sourceTree = ""; }; + 98E86EFFF8888880B13C792F84B89DB8 /* carat.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = carat.png; path = docs/img/carat.png; sourceTree = ""; }; + 9B46773DB2AC91E9B872ECFEE025E786 /* LICENSE */ = {isa = PBXFileReference; includeInIndex = 1; path = LICENSE; sourceTree = ""; }; + 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; }; + A1EC75196D52A85AA17AE77E32C64BC1 /* undocumented.json */ = {isa = PBXFileReference; includeInIndex = 1; name = undocumented.json; path = docs/docsets/SwiftPhoenixClient.docset/Contents/Resources/Documents/undocumented.json; sourceTree = ""; }; + A2D9C839438B1BC7D9DC70F5786B7A79 /* SSLSecurity.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SSLSecurity.swift; path = Sources/Starscream/SSLSecurity.swift; sourceTree = ""; }; + A35897FD3369F651955E43FBC183EA30 /* Channel.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Channel.swift; path = Sources/Channel.swift; sourceTree = ""; }; + A4AB32AB888EEA432FE709A140086EE0 /* index.html */ = {isa = PBXFileReference; includeInIndex = 1; name = index.html; path = docs/docsets/SwiftPhoenixClient.docset/Contents/Resources/Documents/index.html; sourceTree = ""; }; + A6824ECAF3E98B891E467FF16179CC09 /* Pods-ChatExample-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-ChatExample-acknowledgements.plist"; sourceTree = ""; }; + ADA986123407C0F92BB00949569103A8 /* ChannelEvent.html */ = {isa = PBXFileReference; includeInIndex = 1; name = ChannelEvent.html; path = docs/Structs/ChannelEvent.html; sourceTree = ""; }; + B4318CBE9872AA3556C850ABEB96226B /* Pods-ChatExample-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-ChatExample-Info.plist"; sourceTree = ""; }; + B8751ADD8C72A9C5AD10CDD68F8EE6D3 /* gh.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = gh.png; path = docs/docsets/SwiftPhoenixClient.docset/Contents/Resources/Documents/img/gh.png; sourceTree = ""; }; + B90DF3976D49C71FB8E77FAC71C0D28A /* Options.html */ = {isa = PBXFileReference; includeInIndex = 1; name = Options.html; path = docs/docsets/SwiftPhoenixClient.docset/Contents/Resources/Documents/Classes/Presence/Options.html; sourceTree = ""; }; + B9675ECC9502C255C5BD7F96DCA482C1 /* jazzy.css */ = {isa = PBXFileReference; includeInIndex = 1; name = jazzy.css; path = docs/docsets/SwiftPhoenixClient.docset/Contents/Resources/Documents/css/jazzy.css; sourceTree = ""; }; + B9B62B9DD0A6942FC50017048AF2D249 /* Delegated.html */ = {isa = PBXFileReference; includeInIndex = 1; name = Delegated.html; path = docs/Structs/Delegated.html; sourceTree = ""; }; + BCC82B60AC3885953D0656AD4B0CA7B3 /* Global Variables.html */ = {isa = PBXFileReference; includeInIndex = 1; name = "Global Variables.html"; path = "docs/Global Variables.html"; sourceTree = ""; }; + BDDB3C52261713B09246B01316D1387D /* SwiftPhoenixClient-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SwiftPhoenixClient-prefix.pch"; sourceTree = ""; }; + BFAC16A8379AAC9E4F91EA9AC1B74AF7 /* SwiftPhoenixClient.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SwiftPhoenixClient.release.xcconfig; sourceTree = ""; }; + C64630A02BA9417FD87A6E2311BBCAFD /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; name = Info.plist; path = docs/docsets/SwiftPhoenixClient.docset/Contents/Info.plist; sourceTree = ""; }; + CEB4931F7C894B7119F8381E0FD4F398 /* jazzy.js */ = {isa = PBXFileReference; includeInIndex = 1; name = jazzy.js; path = docs/js/jazzy.js; sourceTree = ""; }; + CFBCB85A3F1A98E27A2A1D61DDAC15F4 /* Pods-ChatExample.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-ChatExample.modulemap"; sourceTree = ""; }; + CFCA6643C9D3D39C5AFCD35C7552ABE4 /* highlight.css */ = {isa = PBXFileReference; includeInIndex = 1; name = highlight.css; path = docs/docsets/SwiftPhoenixClient.docset/Contents/Resources/Documents/css/highlight.css; sourceTree = ""; }; + D35413E59EAD406C08EE3863803835C7 /* Push.html */ = {isa = PBXFileReference; includeInIndex = 1; name = Push.html; path = docs/docsets/SwiftPhoenixClient.docset/Contents/Resources/Documents/Classes/Push.html; sourceTree = ""; }; + D4AA0E3CD4A50DFB82FB9B64E4D1CEEA /* Starscream-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Starscream-prefix.pch"; sourceTree = ""; }; + DBB895F616DD1C4C7C1587261E4EBE5D /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.2.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; + DC565CA4B009A0BF2242FF8741C8E382 /* Presence.html */ = {isa = PBXFileReference; includeInIndex = 1; name = Presence.html; path = docs/Classes/Presence.html; sourceTree = ""; }; + DE2A6C466561C3230E243A41B2B1344C /* Presence.html */ = {isa = PBXFileReference; includeInIndex = 1; name = Presence.html; path = docs/docsets/SwiftPhoenixClient.docset/Contents/Resources/Documents/Classes/Presence.html; sourceTree = ""; }; + E091D8E25ED2B20BEACB57DB5D9A6FE0 /* jquery.min.js */ = {isa = PBXFileReference; includeInIndex = 1; name = jquery.min.js; path = docs/js/jquery.min.js; sourceTree = ""; }; + E0BACF5105849CF9F2376C1A96D67064 /* dash.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = dash.png; path = docs/img/dash.png; sourceTree = ""; }; + E2423C210EDBBE5A2B6C2CBEBD282F17 /* Socket.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Socket.swift; path = Sources/Socket.swift; sourceTree = ""; }; + E2DF44F78FA424986768CC75368C4797 /* Push.html */ = {isa = PBXFileReference; includeInIndex = 1; name = Push.html; path = docs/Classes/Push.html; sourceTree = ""; }; + E5E9421221E58119113665580F1828B9 /* Typealiases.html */ = {isa = PBXFileReference; includeInIndex = 1; name = Typealiases.html; path = docs/Typealiases.html; sourceTree = ""; }; + E63A7F2D8B4DA51D2907CBD374D6EF7C /* Starscream.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Starscream.release.xcconfig; sourceTree = ""; }; + E7CD3B886D6D8805A735BDEF3BDCF0BA /* Starscream-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Starscream-dummy.m"; sourceTree = ""; }; + E884B1EF67B415B3C5DC71EF27AF0D43 /* Presence.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Presence.swift; path = Sources/Presence.swift; sourceTree = ""; }; + E9D79E803E2C2B4F5DEA6C66E9F38CA9 /* Pods-ChatExample-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-ChatExample-acknowledgements.markdown"; sourceTree = ""; }; + EB3A967AF524D376310EC1862B0493E7 /* docSet.dsidx */ = {isa = PBXFileReference; includeInIndex = 1; name = docSet.dsidx; path = docs/docsets/SwiftPhoenixClient.docset/Contents/Resources/docSet.dsidx; sourceTree = ""; }; + ECB5B47C264E92701E31B6AE7E59CBC0 /* Events.html */ = {isa = PBXFileReference; includeInIndex = 1; name = Events.html; path = docs/Classes/Presence/Events.html; sourceTree = ""; }; + EF59D1237F4EB864ABBC45146893430C /* Global Variables.html */ = {isa = PBXFileReference; includeInIndex = 1; name = "Global Variables.html"; path = "docs/docsets/SwiftPhoenixClient.docset/Contents/Resources/Documents/Global Variables.html"; sourceTree = ""; }; + F1319249CFC62051FD50F6B61EEDF887 /* Defaults.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Defaults.swift; sourceTree = ""; }; + F1798C978FE00AAD1018DA77A1DE96A3 /* README.md */ = {isa = PBXFileReference; includeInIndex = 1; path = README.md; sourceTree = ""; }; + F3E1C63F1496934307291C2657F0926C /* Message.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Message.swift; path = Sources/Message.swift; sourceTree = ""; }; + F588C469601F2DC6619B722C3BD13449 /* Enums.html */ = {isa = PBXFileReference; includeInIndex = 1; name = Enums.html; path = docs/Enums.html; sourceTree = ""; }; + F5EB9CDCC1953BF51BE8EA91B7DB2320 /* undocumented.json */ = {isa = PBXFileReference; includeInIndex = 1; name = undocumented.json; path = docs/undocumented.json; sourceTree = ""; }; + F639798900C02A52DB81BC2169DA9ED5 /* Starscream.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = Starscream.modulemap; sourceTree = ""; }; + F6A52671529EB90DD0692CE0E5FB1B7C /* ChannelEvent.html */ = {isa = PBXFileReference; includeInIndex = 1; name = ChannelEvent.html; path = docs/docsets/SwiftPhoenixClient.docset/Contents/Resources/Documents/Structs/ChannelEvent.html; sourceTree = ""; }; + FCD4C7773C971E68CAB01FC9AAB19B3A /* ChannelState.html */ = {isa = PBXFileReference; includeInIndex = 1; name = ChannelState.html; path = docs/docsets/SwiftPhoenixClient.docset/Contents/Resources/Documents/Enums/ChannelState.html; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 51335944A7C0C5D07BF9F18CE7FF7278 /* Frameworks */ = { + 09206235EB9393FD6D895453F2569AF9 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 3C1115097AF977677E66A47B7A6042E8 /* Foundation.framework in Frameworks */, + 96D67F9A7630A34944B6EAAD47F785E3 /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - B22B4B2ABEFA63CBCBF029C479D97E3E /* Frameworks */ = { + 1F3F0577AF4415AC474903781E2FB42D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 456A39B68C032D89EB674E8BD613E25C /* Foundation.framework in Frameworks */, + DC79A7DFBF5C910D8EB9CBC52FD36664 /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - F2D323E272622232B77F4ED986EC6188 /* Frameworks */ = { + 5637F59DB651ED71A4F55EFF7043E2FD /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - FD991E6534210E1DA68CB1EB3BE909F2 /* Foundation.framework in Frameworks */, - BA688907DF7CFAD5049B788B11846968 /* Starscream.framework in Frameworks */, + C6B50D5206585816CAB909F5874B43D0 /* Foundation.framework in Frameworks */, + 6A16525FD84E49A997705EA660CE513F /* Starscream.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 12713C0E04A065748494E1A30294B4A3 /* Starscream */ = { + 1E1C9BD9FF6EFDE583061247856A3496 /* Pod */ = { isa = PBXGroup; children = ( - A9F18693C1114E37BBFBEC8EE8686FDC /* Compression.swift */, - 722B7A5196E76DAE17188C05D685DF4C /* SSLClientCertificate.swift */, - 805889F6E182005B68A4EDCFEF2FAF7D /* SSLSecurity.swift */, - AEF667E69ACDB807B282E380354DB273 /* WebSocket.swift */, - 2F8032CF59F581C402F1DD317800A923 /* Support Files */, + 612F1A3023355FE61E6345DEA2834576 /* badge.svg */, + 508413A2B727854135229C668D140B32 /* badge.svg */, + 98E86EFFF8888880B13C792F84B89DB8 /* carat.png */, + 035A99EE1954CD6DD25DB40707206B21 /* carat.png */, + 3BCFE01A9E61432230E5E36F9B9E0FC8 /* Channel.html */, + 52CCB8534371A4392E14B9AEE4AACF6C /* Channel.html */, + F6A52671529EB90DD0692CE0E5FB1B7C /* ChannelEvent.html */, + ADA986123407C0F92BB00949569103A8 /* ChannelEvent.html */, + 728AE8A4BB2B043E9CC8826B3FA5E154 /* ChannelState.html */, + FCD4C7773C971E68CAB01FC9AAB19B3A /* ChannelState.html */, + 5FC6C4566645B9CF2475872416A461D1 /* Classes.html */, + 809813DDC6F48467C03C6B68F92585CC /* Classes.html */, + 90F5A6AC1862695B4961991E01B4EA5F /* dash.png */, + E0BACF5105849CF9F2376C1A96D67064 /* dash.png */, + 97120143F16C21D69FA67595DDE5C17B /* Defaults.html */, + 1E4CE8C3DCC5AE11C22BBDE182C6D248 /* Defaults.html */, + B9B62B9DD0A6942FC50017048AF2D249 /* Delegated.html */, + 885854AED8C88148590F9D27033B9316 /* Delegated.html */, + EB3A967AF524D376310EC1862B0493E7 /* docSet.dsidx */, + F588C469601F2DC6619B722C3BD13449 /* Enums.html */, + 79E4B71DF2A0B15EF8127748D614EB52 /* Enums.html */, + ECB5B47C264E92701E31B6AE7E59CBC0 /* Events.html */, + 0E59D48A8FB0582306F657E6EF6B7979 /* Events.html */, + 2054E11EC2B0CA2DE7D9088164AA9B5E /* gh.png */, + B8751ADD8C72A9C5AD10CDD68F8EE6D3 /* gh.png */, + EF59D1237F4EB864ABBC45146893430C /* Global Variables.html */, + BCC82B60AC3885953D0656AD4B0CA7B3 /* Global Variables.html */, + 4FC726257402E94D4831A2C6F2139FE2 /* highlight.css */, + CFCA6643C9D3D39C5AFCD35C7552ABE4 /* highlight.css */, + A4AB32AB888EEA432FE709A140086EE0 /* index.html */, + 5DFADCC53B4AE43977473C707A0FA2B1 /* index.html */, + C64630A02BA9417FD87A6E2311BBCAFD /* Info.plist */, + 23178A96EF7F6BC88A41DFE0B8353942 /* jazzy.css */, + B9675ECC9502C255C5BD7F96DCA482C1 /* jazzy.css */, + 280C6EACA8F6236E5F66C4EB015C495A /* jazzy.js */, + CEB4931F7C894B7119F8381E0FD4F398 /* jazzy.js */, + E091D8E25ED2B20BEACB57DB5D9A6FE0 /* jquery.min.js */, + 52925BD811EAA3483DEDE7C986BAF5E6 /* jquery.min.js */, + 9B46773DB2AC91E9B872ECFEE025E786 /* LICENSE */, + 01A0DF2365953A428374021B27F98537 /* Message.html */, + 69E21492CC6DBA060CEC551604521829 /* Message.html */, + 5F4AE01EB2766223CAA3A71B9DA3AC96 /* Options.html */, + B90DF3976D49C71FB8E77FAC71C0D28A /* Options.html */, + DC565CA4B009A0BF2242FF8741C8E382 /* Presence.html */, + DE2A6C466561C3230E243A41B2B1344C /* Presence.html */, + 5342706D95714A4BB92ED814E73BCBD7 /* Protocols.html */, + 10A81D80365D73C866604D5423C474D8 /* Protocols.html */, + D35413E59EAD406C08EE3863803835C7 /* Push.html */, + E2DF44F78FA424986768CC75368C4797 /* Push.html */, + F1798C978FE00AAD1018DA77A1DE96A3 /* README.md */, + 71907A9F8C72BE8139DF481DCF163C44 /* search.json */, + 3531100302B67C2ACF839C611FAAB78C /* search.json */, + 6D4A49CDC4A056499DD28B59E3BEDBF2 /* Serializer.html */, + 00ADD5B67E110014973D0A9F77415095 /* Serializer.html */, + 5E182287B5596F5483F330E1F5962DD0 /* Socket.html */, + 1695D0E836236A6BDD78F33C8246C303 /* Socket.html */, + 4C32F08185D369079352E69315B9E7E1 /* Structs.html */, + 3ABFA0687297D945558DCBB95ED557A2 /* Structs.html */, + 58D086C87180B15859A7353B9939C122 /* SwiftPhoenixClient.podspec */, + 852FE3D8062F5E6D3B913B9675338E04 /* SwiftPhoenixClient.tgz */, + 423E5472C5471772EF7FD9AA2F37FD41 /* Typealiases.html */, + E5E9421221E58119113665580F1828B9 /* Typealiases.html */, + A1EC75196D52A85AA17AE77E32C64BC1 /* undocumented.json */, + F5EB9CDCC1953BF51BE8EA91B7DB2320 /* undocumented.json */, ); - name = Starscream; - path = Starscream; + name = Pod; sourceTree = ""; }; - 1C9B10A654BCF9BD93C14FE0346B9148 /* iOS */ = { + 20644ECD2D7020FEF0E56E487F14A109 /* Support Files */ = { isa = PBXGroup; children = ( - 276140B1EDA081793CA6BDD7582E1B4B /* Foundation.framework */, + 55109FA355C6F42478846AD29C0131B4 /* SwiftPhoenixClient.modulemap */, + 25C2CFD2324D16BCE5D5B41F493107F2 /* SwiftPhoenixClient-dummy.m */, + 5DCCD894660EADA5EF4DA0EB3572DC05 /* SwiftPhoenixClient-Info.plist */, + BDDB3C52261713B09246B01316D1387D /* SwiftPhoenixClient-prefix.pch */, + 90ED4795011CDD6C5DED9DFE76D9A214 /* SwiftPhoenixClient-umbrella.h */, + 3B2CABD0C97569EF72BA5C8254609716 /* SwiftPhoenixClient.debug.xcconfig */, + BFAC16A8379AAC9E4F91EA9AC1B74AF7 /* SwiftPhoenixClient.release.xcconfig */, ); - name = iOS; + name = "Support Files"; + path = "Example/Pods/Target Support Files/SwiftPhoenixClient"; sourceTree = ""; }; - 29132E82BD8826C9CC978AF59BD6B8BB /* Development Pods */ = { + 497B36D55216BD8F9B72DE1177A89FD9 /* Targets Support Files */ = { isa = PBXGroup; children = ( - 37FD90F83E3EBE4CAE0A4C9ED78EA2AB /* SwiftPhoenixClient */, + E8D21D7583419461ABE70E8E80C0AF52 /* Pods-ChatExample */, ); - name = "Development Pods"; + name = "Targets Support Files"; sourceTree = ""; }; - 2B0FDD84B727C02B747DE69360E99C20 /* Products */ = { + 6A56A1DC0A5461BEE6DCAF8396DCC4C8 /* Development Pods */ = { isa = PBXGroup; children = ( - ED9166F023CBE2CC18CD5215EB745AFC /* Pods_ChatExample.framework */, - 4F5F2F64FB7C40C6E38FFD9B8FE2521F /* Starscream.framework */, - 99D18BA96649BD0F2A32D0286652BC33 /* SwiftPhoenixClient.framework */, + DCE6FE562A37C85CFF7BBCBEDBEA9B68 /* SwiftPhoenixClient */, ); - name = Products; + name = "Development Pods"; sourceTree = ""; }; - 2F8032CF59F581C402F1DD317800A923 /* Support Files */ = { + 7022F56D3C22E8CAE58845194650BA35 /* Support Files */ = { isa = PBXGroup; children = ( - E5E944E3B1D60840C47A85FF22C4061F /* Info.plist */, - 35B75D02BB246E6B7EABEF61F78891EC /* Starscream.modulemap */, - A0018D722DEC9224FE9C48D7471EE655 /* Starscream.xcconfig */, - 677BC8911948C9658703184E269F0032 /* Starscream-dummy.m */, - 10CE38F8ACDEAE7BD94DAFBA5E574CC1 /* Starscream-prefix.pch */, - 74687D9F2CCAEE0A7C24845698666DB3 /* Starscream-umbrella.h */, + F639798900C02A52DB81BC2169DA9ED5 /* Starscream.modulemap */, + E7CD3B886D6D8805A735BDEF3BDCF0BA /* Starscream-dummy.m */, + 5D5E240C51338D03C83A9EF0676C3AFD /* Starscream-Info.plist */, + D4AA0E3CD4A50DFB82FB9B64E4D1CEEA /* Starscream-prefix.pch */, + 224B8A4E0612334207A2B350C859D2D4 /* Starscream-umbrella.h */, + 6A0B7D439B81AAF110C14562A8D7CE1A /* Starscream.debug.xcconfig */, + E63A7F2D8B4DA51D2907CBD374D6EF7C /* Starscream.release.xcconfig */, ); name = "Support Files"; path = "../Target Support Files/Starscream"; sourceTree = ""; }; - 2FB65C86D96EF9619254CF2F303AB3A8 /* Utilities */ = { + 97C5288770E1953BDB40F8F908E40D46 /* Pods */ = { isa = PBXGroup; children = ( - AF209B8C542AF73A5150922754573BEA /* Defaults.swift */, - 8E18500EB0DD389F5E112538AF610106 /* Delegated.swift */, + F5209523CD23E3706A7BB516D14FA299 /* Starscream */, ); - name = Utilities; - path = Sources/client/Utilities; + name = Pods; sourceTree = ""; }; - 37FD90F83E3EBE4CAE0A4C9ED78EA2AB /* SwiftPhoenixClient */ = { + BBB312D2AE3A9F8387529C851C4E3699 /* Utilities */ = { isa = PBXGroup; children = ( - F4E718F6D525A96AA8CFAB423C8DFA4A /* Channel.swift */, - BEE6342425BC9AC34A483A548F137816 /* Message.swift */, - FB268AF97FFA3EDB3566E378D760E046 /* Presence.swift */, - 4CD40E39481516DEE20EAEF187CFA97E /* Push.swift */, - 3371ED4635BDCE3F24420708B0F488CD /* Socket.swift */, - AADC2A78EE4041E349339CEB23CD1C14 /* TimeoutTimer.swift */, - 7B738A7E68FAEE6F7BB174AECFB99E87 /* Pod */, - BCC9F2EC02422F33922A1AFDDA4F4737 /* Support Files */, - 2FB65C86D96EF9619254CF2F303AB3A8 /* Utilities */, + F1319249CFC62051FD50F6B61EEDF887 /* Defaults.swift */, + 18419E349A2BEB5172EA6CA56169CB50 /* Delegated.swift */, ); - name = SwiftPhoenixClient; - path = ../..; + name = Utilities; + path = Sources/Utilities; sourceTree = ""; }; - 7B738A7E68FAEE6F7BB174AECFB99E87 /* Pod */ = { + CD272A03C5BA2A49B245F2735E358B7D /* Frameworks */ = { isa = PBXGroup; children = ( - 52F131D01D993AC067941AF6DF20A336 /* badge.svg */, - 8E6D69FAC49F25F7364B5E6482871915 /* badge.svg */, - 6555AA29F150E9FDF1785ED95E4901F0 /* carat.png */, - CAC8C6EED92065919C084A4B20618C09 /* carat.png */, - 65686E733BDA68D4CA3D87A8A5B13256 /* Channel.html */, - 8964C5C7CE666AF3DA46A036E58C06AF /* Channel.html */, - 48B28454DD9053134504D38EF5D2A081 /* ChannelEvent.html */, - 1D5CDCBC1067613A1F1A15FBDB7BA096 /* ChannelEvent.html */, - C754EFC40C0B95992DEF159938B8EFE2 /* ChannelState.html */, - DFF43304821C1CED06C7710CEFBE51C8 /* ChannelState.html */, - 818204D2CEF1C6D6F48A3DE9DE025582 /* Classes.html */, - EF21959727351D6AB8C837FD16F6EA96 /* Classes.html */, - 808EFA76CAA82A1F18202E6FA491DA05 /* dash.png */, - A5351274DE394FA5817795117E40D6F6 /* dash.png */, - 83210F4274BB40F686E66426957B96E9 /* Defaults.html */, - B2AC0C8C7F46CFF37D38B9B186C3C6F1 /* Defaults.html */, - 048CC02A5A42426650BB92C87A241618 /* Delegated.html */, - 1C0FAD010F192A0E6747C7D4336EF0DF /* Delegated.html */, - 6D75B4276CC94369B6CA97C49A85ADC9 /* docSet.dsidx */, - 58C28BD6FA6881B476B5574B3CF0B3E3 /* Enums.html */, - DDF0105E2B874CF5D18CC7678F673F33 /* Enums.html */, - A53D5AD8BF24FA5E8815F0C37E9D3A48 /* Events.html */, - C04A41F56935C4F608F85C3363886909 /* Events.html */, - F4E7DF1EA2106DB3D439F583141F44AF /* gh.png */, - FEBE9A930D506D41BB7C57897C81B92F /* gh.png */, - A048338426E69ABD6E836AEDD07B87C4 /* Global Variables.html */, - C6D97B7D9335CD07741308F79BAA6AB2 /* Global Variables.html */, - 47D5666E4AF3D41E867E05510EB6537E /* highlight.css */, - 4F9C323447F2A105CB74A73E5B9E154B /* highlight.css */, - 76033BE1B2FCB6246DF52694D45E64E3 /* index.html */, - 6EC900D8120142928ABDA371CAF94D5C /* index.html */, - 659B9B27CDEF29FCE22C5060AF1718A1 /* Info.plist */, - E97A2E33BE1843A0A22B04A51E1BBD98 /* jazzy.css */, - 05E6AC6C9295917F50A4939C4D012545 /* jazzy.css */, - C2C207E5DC5B261DB7610E55F2FFAEEA /* jazzy.js */, - 0C3279281195DC530C615C4CBD36CE50 /* jazzy.js */, - 9495B2E6EA9E5AD8EF2E35399B55FB3C /* jquery.min.js */, - 966BB2C30188058813B3EC2FA0F3C59F /* jquery.min.js */, - 5BE270B66FA01307C687D400DB8B761B /* LICENSE */, - 5B01C7A7BD44CC36D48A18E4CEC06E36 /* Message.html */, - 0ED3AAA7FF5DDC7B27ABA19D6847563E /* Message.html */, - 55CA529B7AEAA4573DBD97C25288F05F /* Options.html */, - 4CD3DEC0FE9F0AC284A93942C0A6EA35 /* Options.html */, - 7E3CC31CBA5B20F8A2BB6CBF73834640 /* Presence.html */, - 924E8C636DDCF4A237D6B4A7405472E1 /* Presence.html */, - F6122F6446535AE4E9C83055C39DB36B /* Protocols.html */, - D3BD70D83630E64E35B8575826D79F02 /* Protocols.html */, - 36D204B789C129A695EC0B9080EF488D /* Push.html */, - 539115E4E4BC385B665EA72A05B4CEDF /* Push.html */, - C70B1E2B554391F3566383C3222699C6 /* README.md */, - EC35CA96F6BCF4833ED9A62B9AE14D16 /* search.json */, - 669E22F9CA1DF6930721F7E2AFCC0C08 /* search.json */, - 58D554D602959773AC32D029A4EB437B /* Serializer.html */, - 64EFB0FC19735624285050C02D59BE29 /* Serializer.html */, - DF3B76DCC22190AC5C9FCA50EDDE1A29 /* Socket.html */, - 50406E94975C82592BD951079E9B5429 /* Socket.html */, - B79511E301910F33D22F5112B878734B /* Structs.html */, - 3F061E6A6220360C7A4E665E755F6411 /* Structs.html */, - 4EC449B09664B1B127DCD88C1CA39BAA /* SwiftPhoenixClient.podspec */, - EB2CCDF42DB10D14E9554632BBDFABBF /* SwiftPhoenixClient.tgz */, - F0E9A00EE563787071754734D23AF8AF /* Typealiases.html */, - FD6599AD9D2E5E80E7A4F71DF440AE2D /* Typealiases.html */, - A1EC49B180C9C54E1070B48D77EA0CAD /* undocumented.json */, - 624A28AB773F1C0F981FC1EDE3831616 /* undocumented.json */, + 3319CBE6BF16B5B2366BDE834B663B5E /* Starscream.framework */, + DB2C61061EC170240411C29EF6DD7C9D /* iOS */, ); - name = Pod; + name = Frameworks; sourceTree = ""; }; - 7DB346D0F39D3F0E887471402A8071AB = { + CF1408CF629C7361332E53B88F7BD30C = { isa = PBXGroup; children = ( - 93A4A3777CF96A4AAC1D13BA6DCCEA73 /* Podfile */, - 29132E82BD8826C9CC978AF59BD6B8BB /* Development Pods */, - C6C6CF85326A60B112CC4A77BAD281D7 /* Frameworks */, - B2F54CB704E1800078ACC2EEBFF040C5 /* Pods */, - 2B0FDD84B727C02B747DE69360E99C20 /* Products */, - ACAF46C7928B85784C9C99D99ACADAEC /* Targets Support Files */, + 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */, + 6A56A1DC0A5461BEE6DCAF8396DCC4C8 /* Development Pods */, + CD272A03C5BA2A49B245F2735E358B7D /* Frameworks */, + 97C5288770E1953BDB40F8F908E40D46 /* Pods */, + DDE2F5603965BA3F2406754C43E0F89C /* Products */, + 497B36D55216BD8F9B72DE1177A89FD9 /* Targets Support Files */, ); sourceTree = ""; }; - A2E73AE8AFBA222FC2948FE8959EF62E /* Pods-ChatExample */ = { + DB2C61061EC170240411C29EF6DD7C9D /* iOS */ = { isa = PBXGroup; children = ( - 1458B06DC7458B1125CD4CD60AD6016E /* Info.plist */, - BB6B6883FFA69DA5D3CC9650653575F2 /* Pods-ChatExample.modulemap */, - 301BDAB58F7B8DBA2F7DEFCFDDB527A3 /* Pods-ChatExample-acknowledgements.markdown */, - 133EDBD706EF899D0A8C27600993729A /* Pods-ChatExample-acknowledgements.plist */, - 6305A7F7E3BE5845060709E057709268 /* Pods-ChatExample-dummy.m */, - 5A9D17B37705B99972E40CA15F05BB20 /* Pods-ChatExample-frameworks.sh */, - 1EF8702E5E1C2CC2C646CB222E5F8E10 /* Pods-ChatExample-resources.sh */, - 2C780E30A1AECA11F6D93AA3B5F6ED34 /* Pods-ChatExample-umbrella.h */, - 3111104C5AC661E19379538CE82A587B /* Pods-ChatExample.debug.xcconfig */, - 84F18C8C8F2DDCA8727E7AD9EE4A7DFE /* Pods-ChatExample.release.xcconfig */, + DBB895F616DD1C4C7C1587261E4EBE5D /* Foundation.framework */, ); - name = "Pods-ChatExample"; - path = "Target Support Files/Pods-ChatExample"; + name = iOS; sourceTree = ""; }; - ACAF46C7928B85784C9C99D99ACADAEC /* Targets Support Files */ = { + DCE6FE562A37C85CFF7BBCBEDBEA9B68 /* SwiftPhoenixClient */ = { isa = PBXGroup; children = ( - A2E73AE8AFBA222FC2948FE8959EF62E /* Pods-ChatExample */, + A35897FD3369F651955E43FBC183EA30 /* Channel.swift */, + F3E1C63F1496934307291C2657F0926C /* Message.swift */, + E884B1EF67B415B3C5DC71EF27AF0D43 /* Presence.swift */, + 7B25284C3B850913FF9E14700210DFDF /* Push.swift */, + E2423C210EDBBE5A2B6C2CBEBD282F17 /* Socket.swift */, + 80BD9037D1B582AFDBED26A333CF424C /* TimeoutTimer.swift */, + 1E1C9BD9FF6EFDE583061247856A3496 /* Pod */, + 20644ECD2D7020FEF0E56E487F14A109 /* Support Files */, + BBB312D2AE3A9F8387529C851C4E3699 /* Utilities */, ); - name = "Targets Support Files"; + name = SwiftPhoenixClient; + path = ../..; sourceTree = ""; }; - B2F54CB704E1800078ACC2EEBFF040C5 /* Pods */ = { + DDE2F5603965BA3F2406754C43E0F89C /* Products */ = { isa = PBXGroup; children = ( - 12713C0E04A065748494E1A30294B4A3 /* Starscream */, + 5B28BA9C30793A4FF32A8E2A0AB934EB /* Pods_ChatExample.framework */, + 891B2270823847ED23F2ECFC28F935EC /* Starscream.framework */, + 7C53DF3DB0542033B10E101498D72BC4 /* SwiftPhoenixClient.framework */, ); - name = Pods; + name = Products; sourceTree = ""; }; - BCC9F2EC02422F33922A1AFDDA4F4737 /* Support Files */ = { + E8D21D7583419461ABE70E8E80C0AF52 /* Pods-ChatExample */ = { isa = PBXGroup; children = ( - 9314D58633CC06C000BBC68E5CAC042B /* Info.plist */, - 1FF0B14F94236816F841D0674A8F7931 /* SwiftPhoenixClient.modulemap */, - B21592CE6FD8647CCC045A6465E33083 /* SwiftPhoenixClient.xcconfig */, - 331DD9CEAC50C58A6BE7442E7E42A8BE /* SwiftPhoenixClient-dummy.m */, - 1F5722CC799B22AAD1FC90F9C651A329 /* SwiftPhoenixClient-prefix.pch */, - 3E2E1E155EDD2C3275557338425D1EA4 /* SwiftPhoenixClient-umbrella.h */, + CFBCB85A3F1A98E27A2A1D61DDAC15F4 /* Pods-ChatExample.modulemap */, + E9D79E803E2C2B4F5DEA6C66E9F38CA9 /* Pods-ChatExample-acknowledgements.markdown */, + A6824ECAF3E98B891E467FF16179CC09 /* Pods-ChatExample-acknowledgements.plist */, + 0733E29ABA77F4D2AADD52DE9DB11322 /* Pods-ChatExample-dummy.m */, + 1F3FAC1BE866752BD6588A67E15A9140 /* Pods-ChatExample-frameworks.sh */, + B4318CBE9872AA3556C850ABEB96226B /* Pods-ChatExample-Info.plist */, + 8968AC36F420FA420F0B2BC7B350DBBD /* Pods-ChatExample-umbrella.h */, + 5395054A717BC3ADD3FF821541B85E7E /* Pods-ChatExample.debug.xcconfig */, + 349396FB8FED05F12ED1ABC7783062D3 /* Pods-ChatExample.release.xcconfig */, ); - name = "Support Files"; - path = "Example/Pods/Target Support Files/SwiftPhoenixClient"; + name = "Pods-ChatExample"; + path = "Target Support Files/Pods-ChatExample"; sourceTree = ""; }; - C6C6CF85326A60B112CC4A77BAD281D7 /* Frameworks */ = { + F5209523CD23E3706A7BB516D14FA299 /* Starscream */ = { isa = PBXGroup; children = ( - 0F52249DD4D3DD3159B64A42F2E7349B /* Starscream.framework */, - 1C9B10A654BCF9BD93C14FE0346B9148 /* iOS */, + 734469CD9655D7C38786710ED18F3D6B /* Compression.swift */, + 6DBD425D2B58528B26427B72C1648FA8 /* SSLClientCertificate.swift */, + A2D9C839438B1BC7D9DC70F5786B7A79 /* SSLSecurity.swift */, + 22A53698F1D065DB33E81AB27CAAC02A /* WebSocket.swift */, + 7022F56D3C22E8CAE58845194650BA35 /* Support Files */, ); - name = Frameworks; + name = Starscream; + path = Starscream; sourceTree = ""; }; /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */ - 152AFB6D706D33B97863897C65FED1B9 /* Headers */ = { + 9D886C2A1B925C2BD398430C6C5E06DB /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - B1D2731B3DD9AC7569D542C189BD5026 /* SwiftPhoenixClient-umbrella.h in Headers */, + 1C377D1D61015FC0964E4B1F6F8DFA78 /* SwiftPhoenixClient-umbrella.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - 184D69BCB3F9FCD1D9ECC4E1E22B1FF7 /* Headers */ = { + ABD37AF9B9F78580D159AE761C456202 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - C349B6243A2B667D8DB6DE35685DD071 /* Pods-ChatExample-umbrella.h in Headers */, + B4A6283FDFA04E3A7B6FD0C13B6FEF32 /* Starscream-umbrella.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - C7B4AD0D5EA35250CE2ED160AD9F6B07 /* Headers */ = { + F32200D6618B4BB47C974BE5F35DEB2D /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - DAEA69A2F2285AC83D9F745078DA3231 /* Starscream-umbrella.h in Headers */, + 26D4026CBA6B3157A5C9931FEFD77920 /* Pods-ChatExample-umbrella.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXHeadersBuildPhase section */ /* Begin PBXNativeTarget section */ - 053121EBF985B6CC360DB724CB25B118 /* Starscream */ = { + 8F12D546920DFB5E90EC10EEE9FC4B9C /* Pods-ChatExample */ = { isa = PBXNativeTarget; - buildConfigurationList = 9FED46BD5AEB4324DDBAFCEC347AF87B /* Build configuration list for PBXNativeTarget "Starscream" */; + buildConfigurationList = 6D6D0208101264347752A859E51EDA76 /* Build configuration list for PBXNativeTarget "Pods-ChatExample" */; buildPhases = ( - C7B4AD0D5EA35250CE2ED160AD9F6B07 /* Headers */, - B349F1005EE24FAEC30D268A2A5DAE66 /* Sources */, - B22B4B2ABEFA63CBCBF029C479D97E3E /* Frameworks */, - D4783A89240F6BFEF4571E1526E7BCE9 /* Resources */, + F32200D6618B4BB47C974BE5F35DEB2D /* Headers */, + BF6D64ACD2C4944E8900D74F93E621D2 /* Sources */, + 1F3F0577AF4415AC474903781E2FB42D /* Frameworks */, + 677B71264FA89EAEDE7DFEDD8D9939CB /* Resources */, ); buildRules = ( ); dependencies = ( + 6D1B675AA5DFCF7308AF33BF0B94A641 /* PBXTargetDependency */, + AC9650AAAF5493EB594C840943C8941D /* PBXTargetDependency */, ); - name = Starscream; - productName = Starscream; - productReference = 4F5F2F64FB7C40C6E38FFD9B8FE2521F /* Starscream.framework */; + name = "Pods-ChatExample"; + productName = "Pods-ChatExample"; + productReference = 5B28BA9C30793A4FF32A8E2A0AB934EB /* Pods_ChatExample.framework */; productType = "com.apple.product-type.framework"; }; - 7C5A3CF21D8A200930BD47CFCF90311D /* Pods-ChatExample */ = { + 9B78EE4AF6AE03E79D88886319853FF7 /* Starscream */ = { isa = PBXNativeTarget; - buildConfigurationList = CC4717C56D92C274629982A911D1E575 /* Build configuration list for PBXNativeTarget "Pods-ChatExample" */; + buildConfigurationList = ED5C15C705AB67930733A7E237A0A33A /* Build configuration list for PBXNativeTarget "Starscream" */; buildPhases = ( - 184D69BCB3F9FCD1D9ECC4E1E22B1FF7 /* Headers */, - 231353A5B87DA589BCF03F56F65BCC42 /* Sources */, - 51335944A7C0C5D07BF9F18CE7FF7278 /* Frameworks */, - D61FB9B6C546F85B5776E31C8DB0C022 /* Resources */, + ABD37AF9B9F78580D159AE761C456202 /* Headers */, + 621EE447A1C117BDCD418F5DE070FD3C /* Sources */, + 09206235EB9393FD6D895453F2569AF9 /* Frameworks */, + BE174469BA3F43D1B5CE60520CA93EB3 /* Resources */, ); buildRules = ( ); dependencies = ( - FFCB9C9A3A9379BF6FAA5412F4654BCE /* PBXTargetDependency */, - 9C99B0C10B21A15C00825D1DFEDB19F8 /* PBXTargetDependency */, ); - name = "Pods-ChatExample"; - productName = "Pods-ChatExample"; - productReference = ED9166F023CBE2CC18CD5215EB745AFC /* Pods_ChatExample.framework */; + name = Starscream; + productName = Starscream; + productReference = 891B2270823847ED23F2ECFC28F935EC /* Starscream.framework */; productType = "com.apple.product-type.framework"; }; - E69E84E9C3EACEEBD783A09756FB01E7 /* SwiftPhoenixClient */ = { + EB8BC13444B9C488EB847601B2F0E13B /* SwiftPhoenixClient */ = { isa = PBXNativeTarget; - buildConfigurationList = 1B92B2054603892068DF074CEA2D22C4 /* Build configuration list for PBXNativeTarget "SwiftPhoenixClient" */; + buildConfigurationList = 322E72D91A9CF4D55A4C13C0DAE47E13 /* Build configuration list for PBXNativeTarget "SwiftPhoenixClient" */; buildPhases = ( - 152AFB6D706D33B97863897C65FED1B9 /* Headers */, - 3C1AB042E12A50926DFC780989AAEC9A /* Sources */, - F2D323E272622232B77F4ED986EC6188 /* Frameworks */, - 6CA5F98DD9B5D4D0166E350F83CAF6C6 /* Resources */, + 9D886C2A1B925C2BD398430C6C5E06DB /* Headers */, + BC9EDCD21393F307975A1791EC95BF5F /* Sources */, + 5637F59DB651ED71A4F55EFF7043E2FD /* Frameworks */, + 925032C1458ECE712E2275466E8BE042 /* Resources */, ); buildRules = ( ); dependencies = ( - 48C1CD0195B8AF4E51C52CA67060144E /* PBXTargetDependency */, + F23B4A5D6C1C7115E30539BC9DE0C33E /* PBXTargetDependency */, ); name = SwiftPhoenixClient; productName = SwiftPhoenixClient; - productReference = 99D18BA96649BD0F2A32D0286652BC33 /* SwiftPhoenixClient.framework */; + productReference = 7C53DF3DB0542033B10E101498D72BC4 /* SwiftPhoenixClient.framework */; productType = "com.apple.product-type.framework"; }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ - D41D8CD98F00B204E9800998ECF8427E /* Project object */ = { + BFDFE7DC352907FC980B868725387E98 /* Project object */ = { isa = PBXProject; attributes = { - LastSwiftUpdateCheck = 0930; - LastUpgradeCheck = 0930; + 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 = 2B0FDD84B727C02B747DE69360E99C20 /* Products */; + mainGroup = CF1408CF629C7361332E53B88F7BD30C; + productRefGroup = DDE2F5603965BA3F2406754C43E0F89C /* Products */; projectDirPath = ""; projectRoot = ""; targets = ( - 7C5A3CF21D8A200930BD47CFCF90311D /* Pods-ChatExample */, - 053121EBF985B6CC360DB724CB25B118 /* Starscream */, - E69E84E9C3EACEEBD783A09756FB01E7 /* SwiftPhoenixClient */, + 8F12D546920DFB5E90EC10EEE9FC4B9C /* Pods-ChatExample */, + 9B78EE4AF6AE03E79D88886319853FF7 /* Starscream */, + EB8BC13444B9C488EB847601B2F0E13B /* SwiftPhoenixClient */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ - 6CA5F98DD9B5D4D0166E350F83CAF6C6 /* Resources */ = { + 677B71264FA89EAEDE7DFEDD8D9939CB /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; - D4783A89240F6BFEF4571E1526E7BCE9 /* Resources */ = { + 925032C1458ECE712E2275466E8BE042 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; - D61FB9B6C546F85B5776E31C8DB0C022 /* Resources */ = { + BE174469BA3F43D1B5CE60520CA93EB3 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( @@ -551,69 +554,69 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ - 231353A5B87DA589BCF03F56F65BCC42 /* Sources */ = { + 621EE447A1C117BDCD418F5DE070FD3C /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 1A990348F3389018BCFF4736D136CFFA /* Pods-ChatExample-dummy.m in Sources */, + 068E5963381B58D7D8CD321462F567ED /* Compression.swift in Sources */, + 1627E6FA0453D6DB472BA444F1D32AE7 /* SSLClientCertificate.swift in Sources */, + 8B3350D96B15B975184C8EE0819F9623 /* SSLSecurity.swift in Sources */, + 294D61E8A195B6A1F6AEDCF0F73599A5 /* Starscream-dummy.m in Sources */, + C02D9FEB295BDA1359D2F52C80F8E75A /* WebSocket.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 3C1AB042E12A50926DFC780989AAEC9A /* Sources */ = { + BC9EDCD21393F307975A1791EC95BF5F /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 91C45B49F590685BB901653F0A8F0DD3 /* Channel.swift in Sources */, - 8BB365610BD6DD90472AA137A843B165 /* Defaults.swift in Sources */, - 06C4A4A9087266D23BC33EF917B988F4 /* Delegated.swift in Sources */, - 17470826CA9BE6230FE9D5BCF0487E00 /* Message.swift in Sources */, - B7C5DCC270091B42B57D16C712E65C28 /* Presence.swift in Sources */, - D456F19D8EC88CC32F8D595A0CC8D5C8 /* Push.swift in Sources */, - 8130AC459082C692F00AD435598278DD /* Socket.swift in Sources */, - 76B167AE8C3D6B545C8FFAEA2AA2F7A4 /* SwiftPhoenixClient-dummy.m in Sources */, - E3430BF9D634B22D9BAA59693D3D9A09 /* TimeoutTimer.swift in Sources */, + E62520AD33F11E30813D39270959DEFF /* Channel.swift in Sources */, + 5A97FCDF938E4E4528C2A8086B9F83F8 /* Defaults.swift in Sources */, + 69DF62025D9573CEFB2D3537A6793521 /* Delegated.swift in Sources */, + 70B16A79D252268FAB89ADAB96A58E7F /* Message.swift in Sources */, + 6808680D161C5D73FDC207827AB4F9B4 /* Presence.swift in Sources */, + 8B045D1A3F3B774DB53EBAE06405D88E /* Push.swift in Sources */, + E82952201E585700FDE122E17C589C95 /* Socket.swift in Sources */, + E2D9463748B522920E1B12D69BA482E0 /* SwiftPhoenixClient-dummy.m in Sources */, + 29E64A3ACD661716137698BEACA5C00D /* TimeoutTimer.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - B349F1005EE24FAEC30D268A2A5DAE66 /* Sources */ = { + BF6D64ACD2C4944E8900D74F93E621D2 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - AE6A8721566E80F16C980B7FC1E1C495 /* Compression.swift in Sources */, - 37B6A6D9F7BB1CF761FE0432CE3ACF07 /* SSLClientCertificate.swift in Sources */, - FC51E5A7A31ECAA83DEFD0661655BA18 /* SSLSecurity.swift in Sources */, - 3C742A7F6C5C16B9B3A2DB60EE79BA90 /* Starscream-dummy.m in Sources */, - 9B617F399EED4F24A9DE69ED5933776D /* WebSocket.swift in Sources */, + 6888D80735A4D0C3751A0BE429E59305 /* Pods-ChatExample-dummy.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ - 48C1CD0195B8AF4E51C52CA67060144E /* PBXTargetDependency */ = { + 6D1B675AA5DFCF7308AF33BF0B94A641 /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = Starscream; - target = 053121EBF985B6CC360DB724CB25B118 /* Starscream */; - targetProxy = DB61BC638F96FEEC7A1E2BA8288DA0C1 /* PBXContainerItemProxy */; + target = 9B78EE4AF6AE03E79D88886319853FF7 /* Starscream */; + targetProxy = 1EA94C71C6D540F725A1A26CF40AB3F4 /* PBXContainerItemProxy */; }; - 9C99B0C10B21A15C00825D1DFEDB19F8 /* PBXTargetDependency */ = { + AC9650AAAF5493EB594C840943C8941D /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = SwiftPhoenixClient; - target = E69E84E9C3EACEEBD783A09756FB01E7 /* SwiftPhoenixClient */; - targetProxy = 539E84A2D1A6AEF561556B5047A16B8E /* PBXContainerItemProxy */; + target = EB8BC13444B9C488EB847601B2F0E13B /* SwiftPhoenixClient */; + targetProxy = 342E638607BF50BAE7B9B54337C46256 /* PBXContainerItemProxy */; }; - FFCB9C9A3A9379BF6FAA5412F4654BCE /* PBXTargetDependency */ = { + F23B4A5D6C1C7115E30539BC9DE0C33E /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = Starscream; - target = 053121EBF985B6CC360DB724CB25B118 /* Starscream */; - targetProxy = 24B97C4889C94A99424A8F9F7AAB6833 /* PBXContainerItemProxy */; + target = 9B78EE4AF6AE03E79D88886319853FF7 /* Starscream */; + targetProxy = 4CFC01D944C71F16BCB05F91E67062BB /* PBXContainerItemProxy */; }; /* End PBXTargetDependency section */ /* Begin XCBuildConfiguration section */ - 178F5B12A24FF52C2721675F87E6C7E2 /* Debug */ = { + 23DAA796EA37EA24566495280E748F06 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = A0018D722DEC9224FE9C48D7471EE655 /* Starscream.xcconfig */; + baseConfigurationReference = 6A0B7D439B81AAF110C14562A8D7CE1A /* Starscream.debug.xcconfig */; buildSettings = { CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -625,7 +628,7 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; GCC_PREFIX_HEADER = "Target Support Files/Starscream/Starscream-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/Starscream/Info.plist"; + 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"; @@ -642,9 +645,41 @@ }; name = Debug; }; - 21B0209E9B5E1440E477B9D36562DAC1 /* Debug */ = { + 35BC321697BA712E466815924337D1AA /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = E63A7F2D8B4DA51D2907CBD374D6EF7C /* Starscream.release.xcconfig */; + buildSettings = { + CODE_SIGN_IDENTITY = ""; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + 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/Starscream/Starscream.modulemap"; + PRODUCT_MODULE_NAME = Starscream; + PRODUCT_NAME = Starscream; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; + 57049D4A7AC612FA0BBA20C5A1F120D0 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = B21592CE6FD8647CCC045A6465E33083 /* SwiftPhoenixClient.xcconfig */; + baseConfigurationReference = 3B2CABD0C97569EF72BA5C8254609716 /* SwiftPhoenixClient.debug.xcconfig */; buildSettings = { CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -656,7 +691,7 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; GCC_PREFIX_HEADER = "Target Support Files/SwiftPhoenixClient/SwiftPhoenixClient-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/SwiftPhoenixClient/Info.plist"; + INFOPLIST_FILE = "Target Support Files/SwiftPhoenixClient/SwiftPhoenixClient-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 9.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; @@ -673,7 +708,40 @@ }; name = Debug; }; - 5DE19CECB206ACCCACF04D62F93FFDA6 /* Release */ = { + 7D1E02795E9A898885002E4ED298C1E5 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 5395054A717BC3ADD3FF821541B85E7E /* Pods-ChatExample.debug.xcconfig */; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; + CODE_SIGN_IDENTITY = ""; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + INFOPLIST_FILE = "Target Support Files/Pods-ChatExample/Pods-ChatExample-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-ChatExample/Pods-ChatExample.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; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + 8F17DC3A99F99FBAD606CE6963886315 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; @@ -705,8 +773,6 @@ CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGNING_ALLOWED = NO; - CODE_SIGNING_REQUIRED = NO; COPY_PHASE_STRIP = NO; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; ENABLE_NS_ASSERTIONS = NO; @@ -730,44 +796,12 @@ STRIP_INSTALLED_PRODUCT = NO; SWIFT_COMPILATION_MODE = wholemodule; SWIFT_OPTIMIZATION_LEVEL = "-O"; - SWIFT_VERSION = 4.2; - SYMROOT = "${SRCROOT}/../build"; - }; - name = Release; - }; - 75263B9B4E7EE337B23444407CF36E1D /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = A0018D722DEC9224FE9C48D7471EE655 /* Starscream.xcconfig */; - buildSettings = { - CODE_SIGN_IDENTITY = ""; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/Starscream/Starscream-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/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/Starscream/Starscream.modulemap"; - PRODUCT_MODULE_NAME = Starscream; - PRODUCT_NAME = Starscream; - 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 = ""; + SYMROOT = "${SRCROOT}/../build"; }; name = Release; }; - 858D01EEFE984249A9581D18DBEA53F1 /* Debug */ = { + 916E0404255105F480DC4950B7625F7A /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; @@ -799,8 +833,6 @@ CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGNING_ALLOWED = NO; - CODE_SIGNING_REQUIRED = NO; COPY_PHASE_STRIP = NO; DEBUG_INFORMATION_FORMAT = dwarf; ENABLE_STRICT_OBJC_MSGSEND = YES; @@ -828,14 +860,14 @@ STRIP_INSTALLED_PRODUCT = NO; SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 4.2; + SWIFT_VERSION = 5.0; SYMROOT = "${SRCROOT}/../build"; }; name = Debug; }; - 871427E357383EA65B33607D756921C2 /* Debug */ = { + CAC9DAE5DF2DB93C7F6FAD388A50060A /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 3111104C5AC661E19379538CE82A587B /* Pods-ChatExample.debug.xcconfig */; + baseConfigurationReference = 349396FB8FED05F12ED1ABC7783062D3 /* Pods-ChatExample.release.xcconfig */; buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; CODE_SIGN_IDENTITY = ""; @@ -847,7 +879,7 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = "Target Support Files/Pods-ChatExample/Info.plist"; + INFOPLIST_FILE = "Target Support Files/Pods-ChatExample/Pods-ChatExample-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 9.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; @@ -861,14 +893,15 @@ SDKROOT = iphoneos; SKIP_INSTALL = YES; TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Debug; + name = Release; }; - B2365A7E94C99388F3A512CAC90AB519 /* Release */ = { + D2D553C8DF905913B71331B19B1D9492 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = B21592CE6FD8647CCC045A6465E33083 /* SwiftPhoenixClient.xcconfig */; + baseConfigurationReference = BFAC16A8379AAC9E4F91EA9AC1B74AF7 /* SwiftPhoenixClient.release.xcconfig */; buildSettings = { CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -880,7 +913,7 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; GCC_PREFIX_HEADER = "Target Support Files/SwiftPhoenixClient/SwiftPhoenixClient-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/SwiftPhoenixClient/Info.plist"; + INFOPLIST_FILE = "Target Support Files/SwiftPhoenixClient/SwiftPhoenixClient-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 9.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; @@ -898,80 +931,46 @@ }; name = Release; }; - F7AF66AF868A28B2DAC9E49947F728AC /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 84F18C8C8F2DDCA8727E7AD9EE4A7DFE /* Pods-ChatExample.release.xcconfig */; - buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; - CODE_SIGN_IDENTITY = ""; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = "Target Support Files/Pods-ChatExample/Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/Pods-ChatExample/Pods-ChatExample.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; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ - 1B92B2054603892068DF074CEA2D22C4 /* Build configuration list for PBXNativeTarget "SwiftPhoenixClient" */ = { + 322E72D91A9CF4D55A4C13C0DAE47E13 /* Build configuration list for PBXNativeTarget "SwiftPhoenixClient" */ = { isa = XCConfigurationList; buildConfigurations = ( - 21B0209E9B5E1440E477B9D36562DAC1 /* Debug */, - B2365A7E94C99388F3A512CAC90AB519 /* Release */, + 57049D4A7AC612FA0BBA20C5A1F120D0 /* Debug */, + D2D553C8DF905913B71331B19B1D9492 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 2D8E8EC45A3A1A1D94AE762CB5028504 /* Build configuration list for PBXProject "Pods" */ = { + 4821239608C13582E20E6DA73FD5F1F9 /* Build configuration list for PBXProject "Pods" */ = { isa = XCConfigurationList; buildConfigurations = ( - 858D01EEFE984249A9581D18DBEA53F1 /* Debug */, - 5DE19CECB206ACCCACF04D62F93FFDA6 /* Release */, + 916E0404255105F480DC4950B7625F7A /* Debug */, + 8F17DC3A99F99FBAD606CE6963886315 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 9FED46BD5AEB4324DDBAFCEC347AF87B /* Build configuration list for PBXNativeTarget "Starscream" */ = { + 6D6D0208101264347752A859E51EDA76 /* Build configuration list for PBXNativeTarget "Pods-ChatExample" */ = { isa = XCConfigurationList; buildConfigurations = ( - 178F5B12A24FF52C2721675F87E6C7E2 /* Debug */, - 75263B9B4E7EE337B23444407CF36E1D /* Release */, + 7D1E02795E9A898885002E4ED298C1E5 /* Debug */, + CAC9DAE5DF2DB93C7F6FAD388A50060A /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - CC4717C56D92C274629982A911D1E575 /* Build configuration list for PBXNativeTarget "Pods-ChatExample" */ = { + ED5C15C705AB67930733A7E237A0A33A /* Build configuration list for PBXNativeTarget "Starscream" */ = { isa = XCConfigurationList; buildConfigurations = ( - 871427E357383EA65B33607D756921C2 /* Debug */, - F7AF66AF868A28B2DAC9E49947F728AC /* Release */, + 23DAA796EA37EA24566495280E748F06 /* Debug */, + 35BC321697BA712E466815924337D1AA /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; /* End XCConfigurationList section */ }; - rootObject = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + rootObject = BFDFE7DC352907FC980B868725387E98 /* Project object */; } diff --git a/Example/Pods/Target Support Files/Pods-ChatExample/Pods-ChatExample-Info.plist b/Example/Pods/Target Support Files/Pods-ChatExample/Pods-ChatExample-Info.plist new file mode 100644 index 00000000..2243fe6e --- /dev/null +++ b/Example/Pods/Target Support Files/Pods-ChatExample/Pods-ChatExample-Info.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIdentifier + ${PRODUCT_BUNDLE_IDENTIFIER} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.0.0 + CFBundleSignature + ???? + CFBundleVersion + ${CURRENT_PROJECT_VERSION} + NSPrincipalClass + + + diff --git a/Example/Pods/Target Support Files/Pods-ChatExample/Pods-ChatExample-frameworks.sh b/Example/Pods/Target Support Files/Pods-ChatExample/Pods-ChatExample-frameworks.sh index ce90ff84..c785f59f 100755 --- a/Example/Pods/Target Support Files/Pods-ChatExample/Pods-ChatExample-frameworks.sh +++ b/Example/Pods/Target Support Files/Pods-ChatExample/Pods-ChatExample-frameworks.sh @@ -3,10 +3,15 @@ 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 + # 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}" @@ -36,19 +41,24 @@ 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 don't throw errors. - echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${destination}\"" - rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${destination}" + 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 @@ -62,7 +72,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}" @@ -74,35 +84,45 @@ install_framework() # Copies and strips a vendored dSYM install_dsym() { local source="$1" + warn_missing_arch=${2:-true} if [ -r "$source" ]; then - # Copy the dSYM into a the targets temp dir. + # 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}" local basename - basename="$(basename -s .framework.dSYM "$source")" - binary="${DERIVED_FILES_DIR}/${basename}.framework.dSYM/Contents/Resources/DWARF/${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 so "fat" simulator / device frameworks work on device - if [[ "$(file "$binary")" == *"Mach-O dSYM companion"* ]]; then - strip_invalid_archs "$binary" + if [[ "$(file "$binary")" == *"Mach-O "*"dSYM companion"* ]]; then + strip_invalid_archs "$binary" "$warn_missing_arch" fi if [[ $STRIP_BINARY_RETVAL == 1 ]]; then # Move the stripped file into its final destination. - echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --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[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${DERIVED_FILES_DIR}/${basename}.framework.dSYM" "${DWARF_DSYM_FOLDER_PATH}" + 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}.framework.dSYM" + touch "${DWARF_DSYM_FOLDER_PATH}/${basename}.dSYM" fi fi } +# 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_identitiy + 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'" @@ -117,13 +137,16 @@ code_sign_if_enabled() { # Strip invalid architectures strip_invalid_archs() { binary="$1" + 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 - echo "warning: [CP] Vendored binary '$binary' contains architectures ($binary_archs) none of which match the current build architectures ($ARCHS)." + 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=0 return fi @@ -131,7 +154,7 @@ strip_invalid_archs() { 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 @@ -141,6 +164,37 @@ strip_invalid_archs() { STRIP_BINARY_RETVAL=1 } +install_artifact() { + artifact="$1" + base="$(basename "$artifact")" + case $base in + *.framework) + install_framework "$artifact" + ;; + *.dSYM) + # Suppress arch warnings since XCFrameworks will include many dSYM files + install_dsym "$artifact" "false" + ;; + *.bcsymbolmap) + install_bcsymbolmap "$artifact" + ;; + *) + echo "error: Unrecognized artifact "$artifact"" + ;; + esac +} + +copy_artifacts() { + file_list="$1" + while read artifact; do + install_artifact "$artifact" + done <$file_list +} + +ARTIFACT_LIST_FILE="${BUILT_PRODUCTS_DIR}/cocoapods-artifacts-${CONFIGURATION}.txt" +if [ -r "${ARTIFACT_LIST_FILE}" ]; then + copy_artifacts "${ARTIFACT_LIST_FILE}" +fi if [[ "$CONFIGURATION" == "Debug" ]]; then install_framework "${BUILT_PRODUCTS_DIR}/Starscream/Starscream.framework" diff --git a/Example/Pods/Target Support Files/Pods-ChatExample/Pods-ChatExample.debug.xcconfig b/Example/Pods/Target Support Files/Pods-ChatExample/Pods-ChatExample.debug.xcconfig index 59e23633..011fa07f 100644 --- a/Example/Pods/Target Support Files/Pods-ChatExample/Pods-ChatExample.debug.xcconfig +++ b/Example/Pods/Target Support Files/Pods-ChatExample/Pods-ChatExample.debug.xcconfig @@ -1,11 +1,13 @@ ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Starscream" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftPhoenixClient" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Starscream/Starscream.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftPhoenixClient/SwiftPhoenixClient.framework/Headers" LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' -OTHER_CFLAGS = $(inherited) -iquote "${PODS_CONFIGURATION_BUILD_DIR}/Starscream/Starscream.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/SwiftPhoenixClient/SwiftPhoenixClient.framework/Headers" +OTHER_CFLAGS = $(inherited) -isystem "${PODS_CONFIGURATION_BUILD_DIR}/Starscream/Starscream.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/SwiftPhoenixClient/SwiftPhoenixClient.framework/Headers" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/Starscream" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/SwiftPhoenixClient" OTHER_LDFLAGS = $(inherited) -framework "Starscream" -framework "SwiftPhoenixClient" -OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" +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 +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/Example/Pods/Target Support Files/Pods-ChatExample/Pods-ChatExample.release.xcconfig b/Example/Pods/Target Support Files/Pods-ChatExample/Pods-ChatExample.release.xcconfig index 59e23633..011fa07f 100644 --- a/Example/Pods/Target Support Files/Pods-ChatExample/Pods-ChatExample.release.xcconfig +++ b/Example/Pods/Target Support Files/Pods-ChatExample/Pods-ChatExample.release.xcconfig @@ -1,11 +1,13 @@ ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Starscream" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftPhoenixClient" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Starscream/Starscream.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftPhoenixClient/SwiftPhoenixClient.framework/Headers" LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' -OTHER_CFLAGS = $(inherited) -iquote "${PODS_CONFIGURATION_BUILD_DIR}/Starscream/Starscream.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/SwiftPhoenixClient/SwiftPhoenixClient.framework/Headers" +OTHER_CFLAGS = $(inherited) -isystem "${PODS_CONFIGURATION_BUILD_DIR}/Starscream/Starscream.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/SwiftPhoenixClient/SwiftPhoenixClient.framework/Headers" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/Starscream" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/SwiftPhoenixClient" OTHER_LDFLAGS = $(inherited) -framework "Starscream" -framework "SwiftPhoenixClient" -OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" +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 +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/Example/Pods/Target Support Files/Starscream/Starscream-Info.plist b/Example/Pods/Target Support Files/Starscream/Starscream-Info.plist new file mode 100644 index 00000000..90db36aa --- /dev/null +++ b/Example/Pods/Target Support Files/Starscream/Starscream-Info.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIdentifier + ${PRODUCT_BUNDLE_IDENTIFIER} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + FMWK + CFBundleShortVersionString + 3.1.0 + CFBundleSignature + ???? + CFBundleVersion + ${CURRENT_PROJECT_VERSION} + NSPrincipalClass + + + diff --git a/Example/Pods/Target Support Files/Starscream/Starscream.debug.xcconfig b/Example/Pods/Target Support Files/Starscream/Starscream.debug.xcconfig new file mode 100644 index 00000000..7360f22c --- /dev/null +++ b/Example/Pods/Target Support Files/Starscream/Starscream.debug.xcconfig @@ -0,0 +1,10 @@ +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/Starscream +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -suppress-warnings +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT} +PODS_TARGET_SRCROOT = ${PODS_ROOT}/Starscream +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/Example/Pods/Target Support Files/Starscream/Starscream.release.xcconfig b/Example/Pods/Target Support Files/Starscream/Starscream.release.xcconfig new file mode 100644 index 00000000..7360f22c --- /dev/null +++ b/Example/Pods/Target Support Files/Starscream/Starscream.release.xcconfig @@ -0,0 +1,10 @@ +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/Starscream +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -suppress-warnings +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT} +PODS_TARGET_SRCROOT = ${PODS_ROOT}/Starscream +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/Example/Pods/Target Support Files/SwiftPhoenixClient/SwiftPhoenixClient-Info.plist b/Example/Pods/Target Support Files/SwiftPhoenixClient/SwiftPhoenixClient-Info.plist new file mode 100644 index 00000000..2a9158a0 --- /dev/null +++ b/Example/Pods/Target Support Files/SwiftPhoenixClient/SwiftPhoenixClient-Info.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIdentifier + ${PRODUCT_BUNDLE_IDENTIFIER} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.2.0 + CFBundleSignature + ???? + CFBundleVersion + ${CURRENT_PROJECT_VERSION} + NSPrincipalClass + + + diff --git a/Example/Pods/Target Support Files/SwiftPhoenixClient/SwiftPhoenixClient.debug.xcconfig b/Example/Pods/Target Support Files/SwiftPhoenixClient/SwiftPhoenixClient.debug.xcconfig new file mode 100644 index 00000000..199f4514 --- /dev/null +++ b/Example/Pods/Target Support Files/SwiftPhoenixClient/SwiftPhoenixClient.debug.xcconfig @@ -0,0 +1,11 @@ +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/SwiftPhoenixClient +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Starscream" +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -suppress-warnings +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT} +PODS_TARGET_SRCROOT = ${PODS_ROOT}/../.. +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/Example/Pods/Target Support Files/SwiftPhoenixClient/SwiftPhoenixClient.release.xcconfig b/Example/Pods/Target Support Files/SwiftPhoenixClient/SwiftPhoenixClient.release.xcconfig new file mode 100644 index 00000000..199f4514 --- /dev/null +++ b/Example/Pods/Target Support Files/SwiftPhoenixClient/SwiftPhoenixClient.release.xcconfig @@ -0,0 +1,11 @@ +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/SwiftPhoenixClient +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Starscream" +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -suppress-warnings +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT} +PODS_TARGET_SRCROOT = ${PODS_ROOT}/../.. +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/Gemfile.lock b/Gemfile.lock index 97625815..99d04128 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -10,6 +10,22 @@ GEM addressable (2.7.0) public_suffix (>= 2.0.2, < 5.0) atomos (0.1.3) + aws-eventstream (1.0.3) + aws-partitions (1.286.0) + aws-sdk-core (3.92.0) + aws-eventstream (~> 1.0, >= 1.0.2) + aws-partitions (~> 1, >= 1.239.0) + aws-sigv4 (~> 1.1) + jmespath (~> 1.0) + aws-sdk-kms (1.30.0) + aws-sdk-core (~> 3, >= 3.71.0) + aws-sigv4 (~> 1.1) + aws-sdk-s3 (1.61.1) + aws-sdk-core (~> 3, >= 3.83.0) + aws-sdk-kms (~> 1) + aws-sigv4 (~> 1.1) + aws-sigv4 (1.1.1) + aws-eventstream (~> 1.0, >= 1.0.2) babosa (1.0.3) claide (1.0.3) clamp (1.3.0) @@ -20,13 +36,13 @@ GEM concurrent-ruby (1.1.5) declarative (0.0.10) declarative-option (0.1.0) - digest-crc (0.4.1) + digest-crc (0.5.1) domain_name (0.5.20190701) unf (>= 0.0.5, < 1.0.0) dotenv (2.7.5) emoji_regex (1.0.1) - excon (0.71.1) - faraday (0.17.1) + excon (0.73.0) + faraday (0.17.3) multipart-post (>= 1.2, < 3) faraday-cookie_jar (0.0.6) faraday (>= 0.7.4) @@ -34,9 +50,10 @@ GEM faraday_middleware (0.13.1) faraday (>= 0.7.4, < 1.0) fastimage (2.1.7) - fastlane (2.138.0) + fastlane (2.144.0) CFPropertyList (>= 2.3, < 4.0.0) addressable (>= 2.3, < 3.0.0) + aws-sdk-s3 (~> 1.0) babosa (>= 1.0.2, < 2.0.0) bundler (>= 1.12.0, < 3.0.0) colored @@ -49,7 +66,7 @@ GEM faraday_middleware (~> 0.13.1) fastimage (>= 2.1.0, < 3.0.0) gh_inspector (>= 1.1.2, < 2.0.0) - google-api-client (>= 0.21.2, < 0.24.0) + google-api-client (>= 0.29.2, < 0.37.0) google-cloud-storage (>= 1.15.0, < 2.0.0) highline (>= 1.7.2, < 2.0.0) json (< 3.0.0) @@ -72,43 +89,46 @@ GEM xcpretty (~> 0.3.0) xcpretty-travis-formatter (>= 0.0.3) gh_inspector (1.1.3) - google-api-client (0.23.9) + google-api-client (0.36.4) addressable (~> 2.5, >= 2.5.1) - googleauth (>= 0.5, < 0.7.0) + googleauth (~> 0.9) httpclient (>= 2.8.1, < 3.0) - mime-types (~> 3.0) + mini_mime (~> 1.0) representable (~> 3.0) retriable (>= 2.0, < 4.0) - signet (~> 0.9) - google-cloud-core (1.4.1) + signet (~> 0.12) + google-cloud-core (1.5.0) google-cloud-env (~> 1.0) - google-cloud-env (1.3.0) - faraday (~> 0.11) - google-cloud-storage (1.16.0) + google-cloud-errors (~> 1.0) + google-cloud-env (1.3.1) + faraday (>= 0.17.3, < 2.0) + google-cloud-errors (1.0.0) + google-cloud-storage (1.25.1) + addressable (~> 2.5) digest-crc (~> 0.4) - google-api-client (~> 0.23) + google-api-client (~> 0.33) google-cloud-core (~> 1.2) - googleauth (>= 0.6.2, < 0.10.0) - googleauth (0.6.7) - faraday (~> 0.12) + googleauth (~> 0.9) + mini_mime (~> 1.0) + googleauth (0.11.0) + faraday (>= 0.17.3, < 2.0) jwt (>= 1.4, < 3.0) memoist (~> 0.16) multi_json (~> 1.11) os (>= 0.9, < 2.0) - signet (~> 0.7) + signet (~> 0.12) highline (1.7.10) http-cookie (1.0.3) domain_name (~> 0.5) httpclient (2.8.3) i18n (0.9.5) concurrent-ruby (~> 1.0) + jmespath (1.4.0) json (2.3.0) jwt (2.1.0) memoist (0.16.2) - mime-types (3.3) - mime-types-data (~> 3.2015) - mime-types-data (3.2019.1009) - mini_magick (4.9.5) + mini_magick (4.10.1) + mini_mime (1.0.2) mini_portile2 (2.4.0) minitest (5.11.3) multi_json (1.14.1) @@ -129,12 +149,12 @@ GEM rouge (2.0.7) rubyzip (1.3.0) security (0.1.3) - signet (0.12.0) + signet (0.13.0) addressable (~> 2.3) - faraday (~> 0.9) + faraday (>= 0.17.3, < 2.0) jwt (>= 1.5, < 3.0) multi_json (~> 1.10) - simctl (1.6.7) + simctl (1.6.8) CFPropertyList naturally slack-notifier (2.3.2) @@ -148,9 +168,9 @@ GEM terminal-table (1.8.0) unicode-display_width (~> 1.1, >= 1.1.1) thread_safe (0.3.6) - tty-cursor (0.7.0) - tty-screen (0.7.0) - tty-spinner (0.9.2) + tty-cursor (0.7.1) + tty-screen (0.7.1) + tty-spinner (0.9.3) tty-cursor (~> 0.7) tzinfo (1.2.5) thread_safe (~> 0.1) @@ -158,9 +178,9 @@ GEM unf (0.1.4) unf_ext unf_ext (0.0.7.6) - unicode-display_width (1.6.0) + unicode-display_width (1.7.0) word_wrap (1.0.0) - xcodeproj (1.14.0) + xcodeproj (1.15.0) CFPropertyList (>= 2.3.3, < 4.0) atomos (~> 0.1.3) claide (>= 1.0.2, < 2.0) diff --git a/Package.swift b/Package.swift index fcfe0419..a81a513f 100644 --- a/Package.swift +++ b/Package.swift @@ -24,6 +24,7 @@ import PackageDescription let package = Package( name: "SwiftPhoenixClient", + platforms: [.iOS(.v9), .macOS(.v10_12), .tvOS(.v10), .watchOS(.v2)], products: [ .library(name: "SwiftPhoenixClient", targets: ["SwiftPhoenixClient"]) ], diff --git a/README.md b/README.md index 1c47dbdd..f0a23749 100644 --- a/README.md +++ b/README.md @@ -63,7 +63,7 @@ Make sure you have added `SwiftPhoenixClient.framework`, and `Starscream.framewo ## Usage -Using the Swift Phoenix Client is extremely easy (and familiar if have used the phoenix.s client). +Using the Swift Phoenix Client is extremely easy (and familiar if you have used the phoenix.js client). See the [Usage Guide](https://github.com/davidstump/SwiftPhoenixClient/wiki/Usage-Guide) for details instructions. You can also check out the [documentation](http://davidstump.github.io/SwiftPhoenixClient/) diff --git a/Sources/HeartbeatTimer.swift b/Sources/HeartbeatTimer.swift new file mode 100644 index 00000000..7e60fdd2 --- /dev/null +++ b/Sources/HeartbeatTimer.swift @@ -0,0 +1,99 @@ +// Copyright (c) 2019 David Stump +// +// 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 + +class HeartbeatTimer: Equatable { + let timeInterval: TimeInterval + let dispatchQueue: DispatchQueue + let id: String = UUID().uuidString + init(timeInterval: TimeInterval, dispatchQueue: DispatchQueue) { + self.timeInterval = timeInterval + self.dispatchQueue = dispatchQueue + } + + private lazy var timer: DispatchSourceTimer = { + let t = DispatchSource.makeTimerSource(flags: [], queue: self.dispatchQueue) + t.schedule(deadline: .now() + self.timeInterval, repeating: self.timeInterval) + t.setEventHandler(handler: { [weak self] in + self?.eventHandler?() + }) + return t + }() + + var isValid: Bool { + return state == .resumed + } + + private var eventHandler: (() -> Void)? + + private enum State { + case suspended + case resumed + } + private var state: State = .suspended + + + func startTimerWithEvent(eventHandler: (() -> Void)?) { + self.eventHandler = eventHandler + resume() + } + + func stopTimer() { + timer.setEventHandler {} + eventHandler = nil + suspend() + } + + private func resume() { + if state == .resumed { + return + } + state = .resumed + timer.resume() + } + + private func suspend() { + if state == .suspended { + return + } + state = .suspended + timer.suspend() + } + + func fire() { + eventHandler?() + } + + deinit { + timer.setEventHandler {} + timer.cancel() + /* + If the timer is suspended, calling cancel without resuming + triggers a crash. This is documented here https://forums.developer.apple.com/thread/15902 + */ + resume() + eventHandler = nil + } + + static func == (lhs: HeartbeatTimer, rhs: HeartbeatTimer) -> Bool { + return lhs.id == rhs.id + } +} diff --git a/Sources/Socket.swift b/Sources/Socket.swift index 26e6c050..61607e82 100644 --- a/Sources/Socket.swift +++ b/Sources/Socket.swift @@ -52,10 +52,10 @@ struct StateChangeCallbacks { /// the authentication params, as well as options that can be found in /// the Socket docs, such as configuring the heartbeat. public class Socket { - - - - + + + + //---------------------------------------------------------------------- // MARK: - Public Attributes //---------------------------------------------------------------------- @@ -67,94 +67,97 @@ public class Socket { /// The fully qualified socket URL public private(set) var endPointUrl: URL - + /// Resolves to return the `paramsClosure` result at the time of calling. /// If the `Socket` was created with static params, then those will be /// returned every time. public var params: Payload? { return self.paramsClosure?() } - + /// The optional params closure used to get params whhen connecting. Must /// be set when initializaing the Socket. public let paramsClosure: PayloadClosure? - + /// The WebSocket transport. Default behavior is to provide a Starscream /// WebSocket instance. Potentially allows changing WebSockets in future private let transport: ((URL) -> WebSocketClient) - + /// Override to provide custom encoding of data before writing to the socket public var encode: ([String: Any]) -> Data = Defaults.encode - + /// Override to provide customd decoding of data read from the socket public var decode: (Data) -> [String: Any]? = Defaults.decode - + /// Timeout to use when opening connections public var timeout: TimeInterval = Defaults.timeoutInterval - + /// Interval between sending a heartbeat public var heartbeatInterval: TimeInterval = Defaults.heartbeatInterval - + /// Interval between socket reconnect attempts, in seconds public var reconnectAfter: (Int) -> TimeInterval = Defaults.reconnectSteppedBackOff - + /// Interval between channel rejoin attempts, in seconds public var rejoinAfter: (Int) -> TimeInterval = Defaults.rejoinSteppedBackOff - + /// The optional function to receive logs public var logger: ((String) -> Void)? - + /// Disables heartbeats from being sent. Default is false. public var skipHeartbeat: Bool = false - + /// Enable/Disable SSL certificate validation. Default is false. This /// must be set before calling `socket.connect()` in order to be applied public var disableSSLCertValidation: Bool = false - + #if os(Linux) #else /// Configure custom SSL validation logic, eg. SSL pinning. This /// must be set before calling `socket.connect()` in order to apply. public var security: SSLTrustValidator? - + /// Configure the encryption used by your client by setting the /// allowed cipher suites supported by your server. This must be /// set before calling `socket.connect()` in order to apply. public var enabledSSLCipherSuites: [SSLCipherSuite]? #endif - - + + //---------------------------------------------------------------------- // MARK: - Private Attributes //---------------------------------------------------------------------- /// Callbacks for socket state changes var stateChangeCallbacks: StateChangeCallbacks = StateChangeCallbacks() - + /// Collection on channels created for the Socket var channels: [Channel] = [] - + /// Buffers messages that need to be sent once the socket has connected var sendBuffer: [() throws -> ()] = [] - + /// Ref counter for messages var ref: UInt64 = UInt64.min // 0 (max: 18,446,744,073,709,551,615) - + + ///Queue to run heartbeat timer on + var heartbeatQueue: DispatchQueue = DispatchQueue(label: "com.phoenix.socket.heartbeat") + /// Timer that triggers sending new Heartbeat messages - var heartbeatTimer: Timer? - + var heartbeatTimer: HeartbeatTimer? + /// Ref counter for the last heartbeat that was sent var pendingHeartbeatRef: String? - + /// Timer to use when attempting to reconnect var reconnectTimer: TimeoutTimer - + /// True if the Socket closed cleaned. False if not (connection timeout, heartbeat, etc) var closeWasClean: Bool = false - + /// Websocket connection to the server var connection: WebSocketClient? - - + + //---------------------------------------------------------------------- // MARK: - Initialization //---------------------------------------------------------------------- @@ -171,9 +174,9 @@ public class Socket { transport: { url in return WebSocket(url: url) }, paramsClosure: paramsClosure) } - - - init(endPoint: String, + + + public init(endPoint: String, transport: @escaping ((URL) -> WebSocketClient), paramsClosure: PayloadClosure? = nil) { self.transport = transport @@ -192,11 +195,11 @@ public class Socket { return self.reconnectAfter(tries) } } - + deinit { reconnectTimer.reset() } - + //---------------------------------------------------------------------- // MARK: - Public //---------------------------------------------------------------------- @@ -208,19 +211,19 @@ public class Socket { default: return endPointUrl.scheme ?? "" } } - + /// - return: True if the socket is connected public var isConnected: Bool { return self.connection != nil && self.connection!.isConnected } - + /// Connects the Socket. The params passed to the Socket on initialization /// will be sent through the connection. If the Socket is already connected, /// then this call will be ignored. public func connect() { // Do not attempt to reconnect if the socket is currently connected guard !isConnected else { return } - + // Reset the clean close flag when attempting to connect self.closeWasClean = false @@ -232,16 +235,16 @@ public class Socket { self.connection = self.transport(self.endPointUrl) self.connection?.delegate = self self.connection?.disableSSLCertValidation = disableSSLCertValidation - + #if os(Linux) #else self.connection?.security = security self.connection?.enabledSSLCipherSuites = enabledSSLCipherSuites #endif - + self.connection?.connect() } - + /// Disconnects the socket /// /// - parameter code: Optional. Closing status code @@ -250,34 +253,34 @@ public class Socket { callback: (() -> Void)? = nil) { // The socket was closed cleanly by the User self.closeWasClean = true - + // Reset any reconnects and teardown the socket connection self.reconnectTimer.reset() self.teardown(code: code, callback: callback) } - - + + internal func teardown(code: CloseCode = CloseCode.normal, callback: (() -> Void)? = nil) { self.connection?.delegate = nil self.connection?.disconnect(forceTimeout: nil, closeCode: code.rawValue) self.connection = nil - + // The socket connection has been torndown, heartbeats are not needed - self.heartbeatTimer?.invalidate() + self.heartbeatTimer?.stopTimer() self.heartbeatTimer = nil - + // Since the connection's delegate was nil'd out, inform all state // callbacks that the connection has closed self.stateChangeCallbacks.close.forEach({ $0.call() }) callback?() } - - + + //---------------------------------------------------------------------- // MARK: - Register Socket State Callbacks //---------------------------------------------------------------------- - + /// Registers callbacks for connection open events. Does not handle retain /// cycles. Use `delegateOnOpen(to:)` for automatic handling of retain cycles. /// @@ -293,7 +296,7 @@ public class Socket { delegated.manuallyDelegate(with: callback) self.stateChangeCallbacks.open.append(delegated) } - + /// Registers callbacks for connection open events. Automatically handles /// retain cycles. Use `onOpen()` to handle yourself. /// @@ -311,7 +314,7 @@ public class Socket { delegated.delegate(to: owner, with: callback) self.stateChangeCallbacks.open.append(delegated) } - + /// Registers callbacks for connection close events. Does not handle retain /// cycles. Use `delegateOnClose(_:)` for automatic handling of retain cycles. /// @@ -327,7 +330,7 @@ public class Socket { delegated.manuallyDelegate(with: callback) self.stateChangeCallbacks.close.append(delegated) } - + /// Registers callbacks for connection close events. Automatically handles /// retain cycles. Use `onClose()` to handle yourself. /// @@ -345,8 +348,8 @@ public class Socket { delegated.delegate(to: owner, with: callback) self.stateChangeCallbacks.close.append(delegated) } - - + + /// Registers callbacks for connection error events. Does not handle retain /// cycles. Use `delegateOnError(to:)` for automatic handling of retain cycles. /// @@ -362,7 +365,7 @@ public class Socket { delegated.manuallyDelegate(with: callback) self.stateChangeCallbacks.error.append(delegated) } - + /// Registers callbacks for connection error events. Automatically handles /// retain cycles. Use `manualOnError()` to handle yourself. /// @@ -380,7 +383,7 @@ public class Socket { delegated.delegate(to: owner, with: callback) self.stateChangeCallbacks.error.append(delegated) } - + /// Registers callbacks for connection message events. Does not handle /// retain cycles. Use `delegateOnMessage(_to:)` for automatic handling of /// retain cycles. @@ -397,7 +400,7 @@ public class Socket { delegated.manuallyDelegate(with: callback) self.stateChangeCallbacks.message.append(delegated) } - + /// Registers callbacks for connection message events. Automatically handles /// retain cycles. Use `onMessage()` to handle yourself. /// @@ -415,7 +418,7 @@ public class Socket { delegated.delegate(to: owner, with: callback) self.stateChangeCallbacks.message.append(delegated) } - + /// Releases all stored callback hooks (onError, onOpen, onClose, etc.) You should /// call this method when you are finished when the Socket in order to release /// any references held by the socket. @@ -425,9 +428,9 @@ public class Socket { self.stateChangeCallbacks.error.removeAll() self.stateChangeCallbacks.message.removeAll() } - - - + + + //---------------------------------------------------------------------- // MARK: - Channel Initialization //---------------------------------------------------------------------- @@ -444,10 +447,10 @@ public class Socket { params: [String: Any] = [:]) -> Channel { let channel = Channel(topic: topic, params: params, socket: self) self.channels.append(channel) - + return channel } - + /// Removes the Channel from the socket. This does not cause the channel to /// inform the server that it is leaving. You should call channel.leave() /// prior to removing the Channel. @@ -461,8 +464,8 @@ public class Socket { public func remove(_ channel: Channel) { self.channels.removeAll(where: { $0.joinRef == channel.joinRef }) } - - + + //---------------------------------------------------------------------- // MARK: - Sending Data //---------------------------------------------------------------------- @@ -480,23 +483,23 @@ public class Socket { payload: Payload, ref: String? = nil, joinRef: String? = nil) { - + let callback: (() throws -> ()) = { var body: [String: Any] = [ "topic": topic, "event": event, "payload": payload ] - + if let safeRef = ref { body["ref"] = safeRef } if let safeJoinRef = joinRef { body["join_ref"] = safeJoinRef} - + let data = self.encode(body) - + self.logItems("push", "Sending \(String(data: data, encoding: String.Encoding.utf8) ?? "")" ) self.connection?.write(data: data) } - + /// If the socket is connected, then execute the callback immediately. if isConnected { try? callback() @@ -506,13 +509,13 @@ public class Socket { self.sendBuffer.append(callback) } } - + /// - return: the next message ref, accounting for overflows public func makeRef() -> String { self.ref = (ref == UInt64.max) ? 0 : self.ref + 1 return String(ref) } - + /// Logs the message. Override Socket.logger for specialized logging. noops by default /// /// - paramter items: List of items to be logged. Behaves just like debugPrint() @@ -520,59 +523,59 @@ public class Socket { let msg = items.map( { return String(describing: $0) } ).joined(separator: ", ") self.logger?("SwiftPhoenixClient: \(msg)") } - + //---------------------------------------------------------------------- // MARK: - Connection Events //---------------------------------------------------------------------- /// Called when the underlying Websocket connects to it's host internal func onConnectionOpen() { self.logItems("transport", "Connected to \(endPoint)") - + // Reset the closeWasClean flag now that the socket has been connected self.closeWasClean = false - + // Send any messages that were waiting for a connection self.flushSendBuffer() - + // Reset how the socket tried to reconnect self.reconnectTimer.reset() - + // Restart the heartbeat timer self.resetHeartbeat() - + // Inform all onOpen callbacks that the Socket has opened self.stateChangeCallbacks.open.forEach({ $0.call() }) } - + internal func onConnectionClosed(code: Int?) { self.logItems("transport", "close") self.triggerChannelError() - + // Prevent the heartbeat from triggering if the - self.heartbeatTimer?.invalidate() + self.heartbeatTimer?.stopTimer() self.heartbeatTimer = nil - + // Only attempt to reconnect if the socket did not close normally if (!self.closeWasClean) { self.reconnectTimer.scheduleTimeout() } - + self.stateChangeCallbacks.close.forEach({ $0.call() }) } - + internal func onConnectionError(_ error: Error) { self.logItems("transport", error) - + // Send an error to all channels self.triggerChannelError() - + // Inform any state callabcks of the error self.stateChangeCallbacks.error.forEach({ $0.call(error) }) } - + internal func onConnectionMessage(_ rawMessage: String) { self.logItems("receive ", rawMessage) - + guard let data = rawMessage.data(using: String.Encoding.utf8), let json = self.decode(data), @@ -580,19 +583,19 @@ public class Socket { else { self.logItems("receive: Unable to parse JSON: \(rawMessage)") return } - + // Clear heartbeat ref, preventing a heartbeat timeout disconnect if message.ref == pendingHeartbeatRef { pendingHeartbeatRef = nil } - + // Dispatch the message to all channels that belong to the topic self.channels .filter( { $0.isMember(message) } ) .forEach( { $0.trigger(message) } ) - + // Inform all onMessage callbacks of the message self.stateChangeCallbacks.message.forEach({ $0.call(message) }) } - + /// Triggers an error event to all of the connected Channels internal func triggerChannelError() { self.channels.forEach { (channel) in @@ -602,7 +605,7 @@ public class Socket { } } } - + /// Send all messages that were buffered before the socket opened internal func flushSendBuffer() { guard isConnected && sendBuffer.count > 0 else { return } @@ -640,40 +643,32 @@ public class Socket { else { fatalError("Malformed URL while adding parameters") } return qualifiedUrl } - + //---------------------------------------------------------------------- // MARK: - Heartbeat //---------------------------------------------------------------------- internal func resetHeartbeat() { // Clear anything related to the heartbeat self.pendingHeartbeatRef = nil - self.heartbeatTimer?.invalidate() + self.heartbeatTimer?.stopTimer() self.heartbeatTimer = nil - + // Do not start up the heartbeat timer if skipHeartbeat is true guard !skipHeartbeat else { return } - - // Start the timer based on the correct iOS version - if #available(iOS 10.0, *) { - self.heartbeatTimer - = Timer.scheduledTimer(withTimeInterval: heartbeatInterval, - repeats: true) { _ in self.sendHeartbeat() } - } else { - self.heartbeatTimer - = Timer.scheduledTimer(timeInterval: heartbeatInterval, - target: self, - selector: #selector(sendHeartbeat), - userInfo: nil, - repeats: false) - } + + self.heartbeatTimer = HeartbeatTimer(timeInterval: heartbeatInterval, dispatchQueue: heartbeatQueue) + + self.heartbeatTimer?.startTimerWithEvent(eventHandler: { [weak self] in + self?.sendHeartbeat() + }) } - + /// Sends a hearbeat payload to the phoenix serverss @objc func sendHeartbeat() { // Do not send if the connection is closed guard isConnected else { return } - + // If there is a pending heartbeat ref, then the last heartbeat was // never acknowledged by the server. Close the connection and attempt // to reconnect. @@ -681,17 +676,17 @@ public class Socket { self.pendingHeartbeatRef = nil self.logItems("transport", "heartbeat timeout. Attempting to re-establish connection") - + // Close the socket, flagging the closure as abnormal self.abnormalClose("heartbeat timeout") - + // Disconnect the socket manually. Do not use `teardown` or // `disconnect` as they will nil out the websocket delegate self.connection?.disconnect(forceTimeout: nil, closeCode: CloseCode.normal.rawValue) return } - + // The last heartbeat was acknowledged by the server. Send another one self.pendingHeartbeatRef = self.makeRef() self.push(topic: "phoenix", @@ -699,10 +694,10 @@ public class Socket { payload: [:], ref: self.pendingHeartbeatRef) } - + internal func abnormalClose(_ reason: String) { self.closeWasClean = false - + /* We use NORMAL here since the client is the one determining to close the connection. However, we keep a flag `closeWasClean` set to false so that @@ -710,7 +705,7 @@ public class Socket { */ self.connection?.disconnect(forceTimeout: nil, closeCode: CloseCode.normal.rawValue) - + } } @@ -719,20 +714,20 @@ public class Socket { // MARK: - WebSocketDelegate //---------------------------------------------------------------------- extension Socket: WebSocketDelegate { - + public func websocketDidConnect(socket: WebSocketClient) { self.onConnectionOpen() } - + public func websocketDidDisconnect(socket: WebSocketClient, error: Error?) { self.onConnectionClosed(code: (error as? WSError)?.code) if let safeError = error { self.onConnectionError(safeError) } } - + public func websocketDidReceiveMessage(socket: WebSocketClient, text: String) { self.onConnectionMessage(text) } - + public func websocketDidReceiveData(socket: WebSocketClient, data: Data) { /* no-op */ } diff --git a/SwiftPhoenixClient.podspec b/SwiftPhoenixClient.podspec index 1caa673d..bfa5647a 100644 --- a/SwiftPhoenixClient.podspec +++ b/SwiftPhoenixClient.podspec @@ -8,7 +8,7 @@ Pod::Spec.new do |s| s.name = "SwiftPhoenixClient" - s.version = "1.2.0" + s.version = "1.2.1" s.summary = "Connect your Phoenix and iOS applications through WebSockets!" s.swift_version = "5.0" diff --git a/SwiftPhoenixClient.xcodeproj/project.pbxproj b/SwiftPhoenixClient.xcodeproj/project.pbxproj index ce3da55b..541ef467 100644 --- a/SwiftPhoenixClient.xcodeproj/project.pbxproj +++ b/SwiftPhoenixClient.xcodeproj/project.pbxproj @@ -36,6 +36,7 @@ 12F7830C2210D56D00291614 /* MockableWebSocketClient.generated.swift in Sources */ = {isa = PBXBuildFile; fileRef = 12F7830A2210D56D00291614 /* MockableWebSocketClient.generated.swift */; }; 12FAEE47231EB222003EC62B /* SocketSpy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 12FAEE46231EB222003EC62B /* SocketSpy.swift */; }; 12FAEE49231EB4B0003EC62B /* FakeTimerQueueSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 12FAEE48231EB4B0003EC62B /* FakeTimerQueueSpec.swift */; }; + 4886F286240D2E36006B8376 /* HeartbeatTimer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4886F285240D2E36006B8376 /* HeartbeatTimer.swift */; }; B48458A82164E3D300466E32 /* PresenceSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = B48458A62164E28500466E32 /* PresenceSpec.swift */; }; E38FACD222B9EA4500D80A7D /* Starscream.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E38FACD022B9EA4500D80A7D /* Starscream.framework */; }; E38FACD422B9EA4A00D80A7D /* Starscream.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E38FACD122B9EA4500D80A7D /* Starscream.framework */; }; @@ -75,6 +76,7 @@ 12F7830A2210D56D00291614 /* MockableWebSocketClient.generated.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MockableWebSocketClient.generated.swift; sourceTree = ""; }; 12FAEE46231EB222003EC62B /* SocketSpy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SocketSpy.swift; sourceTree = ""; }; 12FAEE48231EB4B0003EC62B /* FakeTimerQueueSpec.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FakeTimerQueueSpec.swift; sourceTree = ""; }; + 4886F285240D2E36006B8376 /* HeartbeatTimer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HeartbeatTimer.swift; sourceTree = ""; }; B48458A62164E28500466E32 /* PresenceSpec.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PresenceSpec.swift; sourceTree = ""; }; E330972322B9E6A300BCF98A /* SwiftPhoenixClient.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SwiftPhoenixClient.framework; sourceTree = BUILT_PRODUCTS_DIR; }; E38FACD022B9EA4500D80A7D /* Starscream.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Starscream.framework; path = Carthage/Build/iOS/Starscream.framework; sourceTree = ""; }; @@ -167,6 +169,7 @@ 1203046E23B112050012FF2D /* Push.swift */, 1203046F23B112050012FF2D /* Utilities */, 1203047223B112050012FF2D /* TimeoutTimer.swift */, + 4886F285240D2E36006B8376 /* HeartbeatTimer.swift */, 1203047323B112050012FF2D /* Supporting Files */, 1203047423B112050012FF2D /* Socket.swift */, ); @@ -373,6 +376,7 @@ buildActionMask = 2147483647; files = ( 1203048323B112060012FF2D /* Socket.swift in Sources */, + 4886F286240D2E36006B8376 /* HeartbeatTimer.swift in Sources */, 1203048123B112060012FF2D /* TimeoutTimer.swift in Sources */, 1203047523B112050012FF2D /* Presence.swift in Sources */, 1203047B23B112060012FF2D /* Push.swift in Sources */, diff --git a/Tests/client/ChannelSpec.swift b/Tests/client/ChannelSpec.swift index dc2287db..1600c470 100644 --- a/Tests/client/ChannelSpec.swift +++ b/Tests/client/ChannelSpec.swift @@ -44,7 +44,7 @@ class ChannelSpec: QuickSpec { mockClient = WebSocketClientMock() - mockSocket = SocketMock("/socket") + mockSocket = SocketMock(endPoint: "/socket", transport: { _ in mockClient }) mockSocket.connection = mockClient mockSocket.timeout = kDefaultTimeout mockSocket.makeRefReturnValue = kDefaultRef diff --git a/Tests/client/PresenceSpec.swift b/Tests/client/PresenceSpec.swift index 28e6fdbf..6bd01240 100644 --- a/Tests/client/PresenceSpec.swift +++ b/Tests/client/PresenceSpec.swift @@ -36,7 +36,7 @@ class PresenceSpec: QuickSpec { beforeEach { let mockClient = WebSocketClientMock() - mockSocket = SocketMock("/socket") + mockSocket = SocketMock(endPoint: "/socket", transport: { _ in mockClient }) mockSocket.connection = mockClient mockSocket.timeout = 10.0 mockSocket.makeRefReturnValue = "1" diff --git a/Tests/client/SocketSpec.swift b/Tests/client/SocketSpec.swift index 5be0ceda..5e504c99 100644 --- a/Tests/client/SocketSpec.swift +++ b/Tests/client/SocketSpec.swift @@ -59,6 +59,21 @@ class SocketSpec: QuickSpec { expect(socket.reconnectAfter(2)).to(equal(10)) }) + it("sets queue for underlying transport", closure: { + let socket = Socket(endPoint: "wss://localhost:4000/socket", transport: { (url) -> WebSocketClient in + let webSocket = WebSocket(url: url) + webSocket.callbackQueue = DispatchQueue(label: "test_queue") + return webSocket + }) + socket.timeout = 40000 + socket.heartbeatInterval = 60000 + socket.logger = { _ in } + socket.reconnectAfter = { _ in return 10 } + socket.connect() + expect(socket.connection).to(beAKindOf(WebSocket.self)) + expect((socket.connection as! WebSocket).callbackQueue.label).to(equal("test_queue")) + }) + it("should construct a valid URL", closure: { // Test different schemes @@ -319,9 +334,11 @@ class SocketSpec: QuickSpec { it("invalidates and releases the heartbeat timer", closure: { var timerCalled = 0 - let timer = Timer.scheduledTimer(withTimeInterval: 10, repeats: false, block: { (_) in + let timer = HeartbeatTimer(timeInterval: 10, dispatchQueue: .main) + + timer.startTimerWithEvent { timerCalled += 1 - }) + } socket.heartbeatTimer = timer @@ -653,7 +670,8 @@ class SocketSpec: QuickSpec { it("should invalidate an old timer and create a new one", closure: { mockWebSocket.isConnected = true - let timer = Timer.scheduledTimer(withTimeInterval: 1000, repeats: true) { (_) in } + let timer = HeartbeatTimer(timeInterval: 1000, dispatchQueue: .main) + timer.startTimerWithEvent { } socket.heartbeatTimer = timer expect(timer.isValid).to(beTrue()) diff --git a/Tests/mocks/MockableClass.generated.swift b/Tests/mocks/MockableClass.generated.swift index be67349d..9eb78a05 100644 --- a/Tests/mocks/MockableClass.generated.swift +++ b/Tests/mocks/MockableClass.generated.swift @@ -631,7 +631,7 @@ class SocketMock: Socket { var underlyingRef: (UInt64)! var heartbeatTimerSetCount: Int = 0 var heartbeatTimerDidGetSet: Bool { return heartbeatTimerSetCount > 0 } - override var heartbeatTimer: Timer? { + override var heartbeatTimer: HeartbeatTimer? { didSet { heartbeatTimerSetCount += 1 } } var pendingHeartbeatRefSetCount: Int = 0