diff --git a/.github/workflows/integration-test-xros.yaml b/.github/workflows/integration-test-xros.yaml new file mode 100644 index 000000000..8c7fc16a1 --- /dev/null +++ b/.github/workflows/integration-test-xros.yaml @@ -0,0 +1,113 @@ +name: "Integration Test" + +on: + workflow_dispatch: + pull_request: + push: + branches: + - main + +# IMPORTANT NOTES: +# - Changes made to this file needs to replicated across other integration-test-*.yaml files. +# - The Fastlane lane name is duplicated in more than one place within this workflow. + +jobs: + check: + runs-on: macos-13-xlarge + + strategy: + fail-fast: false + matrix: + include: + + - platform: visionOS + lane: test_visionOS_1_0 + + env: + LC_CTYPE: en_US.UTF-8 + LANG: en_US.UTF-8 + ABLY_ENV: sandbox + + steps: + - name: Check out repo + uses: actions/checkout@v2 + + - name: Select Xcode (15.2) + run: | + sudo xcode-select -s /Applications/Xcode_15.2.app + echo "Selected Xcode version:" + xcodebuild -version + + - name: Environment Info + run: ./Scripts/log-environment-information.sh + + - name: Check out xcparse repo + uses: actions/checkout@v3 + with: + repository: ably-forks/xcparse + ref: emit-test-case-info + path: xcparse + + - id: get-xcparse-commit-sha + name: Get xcparse commit SHA + run: | + cd xcparse + echo "::set-output name=sha::$(git rev-parse HEAD)" + + - name: "actions/cache@v3 (xcparse binary)" + uses: actions/cache@v3 + with: + path: xcparse/.build/debug/xcparse + key: ${{ runner.os }}-xcparse-${{ steps.get-xcparse-commit-sha.outputs.sha }} + + - name: Reset Simulators + run: xcrun simctl erase all + + - name: Install Dependencies + run: | + brew install xcbeautify + make submodules + bundle install + + - name: Run Tests + run: bundle exec fastlane ${{ matrix.lane }} + + - name: Check Static Analyzer Output + id: analyzer-output + run: | + if [[ -z $(find ./derived_data -name "report-*.html") ]]; then + echo "Static Analyzer found no issues." + else + echo "Static Analyzer found some issues. HTML report will be available in Artifacts section. Failing build." + exit 1 + fi + + - name: Upload Static Analyzer Reports + if: ${{ failure() && steps.analyzer-output.outcome == 'failure' }} + uses: actions/upload-artifact@v4 + with: + name: static-analyzer-reports-${{ matrix.lane }} + path: ./derived_data/**/report-*.html + + - name: Upload Xcodebuild Logs + if: always() + uses: actions/upload-artifact@v4 + with: + name: xcodebuild-logs-${{ matrix.lane }} + path: ~/Library/Developer/Xcode/DerivedData/*/Logs + + - name: Upload Test Output + if: always() + uses: actions/upload-artifact@v4 + with: + name: test-output-${{ matrix.lane }} + path: fastlane/test_output + + - name: Upload Test Results + if: always() + env: + TEST_OBSERVABILITY_SERVER_AUTH_KEY: ${{ secrets.TEST_OBSERVABILITY_SERVER_AUTH_KEY }} + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + Scripts/upload_test_results.sh --job-name "check (${{ matrix.platform }}, ${{ matrix.lane }})" + diff --git a/Ably.xcodeproj/project.pbxproj b/Ably.xcodeproj/project.pbxproj index 431e61be6..d99fb8848 100644 --- a/Ably.xcodeproj/project.pbxproj +++ b/Ably.xcodeproj/project.pbxproj @@ -407,15 +407,392 @@ 841134782722205400CFA837 /* ARTArchiveTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 841134772722205400CFA837 /* ARTArchiveTests.m */; }; 8412FDE72661AC37001FE9E6 /* AblyDeltaCodec.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8412FDE12661AC37001FE9E6 /* AblyDeltaCodec.xcframework */; }; 8412FDED2661AC37001FE9E6 /* msgpack.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8412FDE32661AC37001FE9E6 /* msgpack.xcframework */; }; - 8412FDFE2661AC7B001FE9E6 /* Nimble.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8412FDF42661AC7B001FE9E6 /* Nimble.xcframework */; }; - 8412FDFF2661AC7B001FE9E6 /* Nimble.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8412FDF42661AC7B001FE9E6 /* Nimble.xcframework */; }; - 8412FE002661AC7B001FE9E6 /* Nimble.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8412FDF42661AC7B001FE9E6 /* Nimble.xcframework */; }; 844B9CCF2C807BC400A260E8 /* ARTDeviceDetails+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 844B9CCE2C807BC400A260E8 /* ARTDeviceDetails+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; 844B9CD02C807BC400A260E8 /* ARTDeviceDetails+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 844B9CCE2C807BC400A260E8 /* ARTDeviceDetails+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; 844B9CD12C807BC400A260E8 /* ARTDeviceDetails+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 844B9CCE2C807BC400A260E8 /* ARTDeviceDetails+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 847F4FCD2DB592CD0002FAC0 /* Nimble in Frameworks */ = {isa = PBXBuildFile; productRef = 847F4FCC2DB592CD0002FAC0 /* Nimble */; }; + 847F4FCF2DB592E10002FAC0 /* Nimble in Frameworks */ = {isa = PBXBuildFile; productRef = 847F4FCE2DB592E10002FAC0 /* Nimble */; }; + 847F4FD12DB592E80002FAC0 /* Nimble in Frameworks */ = {isa = PBXBuildFile; productRef = 847F4FD02DB592E80002FAC0 /* Nimble */; }; 848ED97326E50D0F0087E800 /* ObjcppTest.mm in Sources */ = {isa = PBXBuildFile; fileRef = 848ED97226E50D0F0087E800 /* ObjcppTest.mm */; settings = {COMPILER_FLAGS = "-fmodules"; }; }; 848ED97426E50D0F0087E800 /* ObjcppTest.mm in Sources */ = {isa = PBXBuildFile; fileRef = 848ED97226E50D0F0087E800 /* ObjcppTest.mm */; settings = {COMPILER_FLAGS = "-fmodules"; }; }; 848ED97526E50D0F0087E800 /* ObjcppTest.mm in Sources */ = {isa = PBXBuildFile; fileRef = 848ED97226E50D0F0087E800 /* ObjcppTest.mm */; settings = {COMPILER_FLAGS = "-fmodules"; }; }; + 84B2BAF12DB6A6B400334337 /* AblyDeltaCodec in Frameworks */ = {isa = PBXBuildFile; productRef = 84B2BAF02DB6A6B400334337 /* AblyDeltaCodec */; }; + 84B2BAF32DB6A6B700334337 /* msgpack in Frameworks */ = {isa = PBXBuildFile; productRef = 84B2BAF22DB6A6B700334337 /* msgpack */; }; + 84B2BAF42DB6CC3500334337 /* Ably.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84E6DB102DB69D9700E6A1AD /* Ably.framework */; }; + 84B2BAF52DB6CC3500334337 /* Ably.framework in Copy Carthage Frameworks to Test bundle */ = {isa = PBXBuildFile; fileRef = 84E6DB102DB69D9700E6A1AD /* Ably.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + 84B3FC772DB69F9C00037368 /* RestClientTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 856AAC981B6E312F00B07119 /* RestClientTests.swift */; }; + 84B3FC782DB69F9C00037368 /* AttachRetryStateTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2110CC392A530D42007310D4 /* AttachRetryStateTests.swift */; }; + 84B3FC792DB69F9C00037368 /* RealtimeClientChannelTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D74EFAEA1C4D09B500CFF98E /* RealtimeClientChannelTests.swift */; }; + 84B3FC7A2DB69F9C00037368 /* ObjcppTest.mm in Sources */ = {isa = PBXBuildFile; fileRef = 848ED97226E50D0F0087E800 /* ObjcppTest.mm */; settings = {COMPILER_FLAGS = "-fmodules"; }; }; + 84B3FC7B2DB69F9C00037368 /* RealtimeClientPresenceTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7CEF1311C8DD3BC004FB242 /* RealtimeClientPresenceTests.swift */; }; + 84B3FC7C2DB69F9C00037368 /* LogAdapterTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 21113B5E29DDDDD000652C86 /* LogAdapterTests.swift */; }; + 84B3FC7D2DB69F9C00037368 /* ReadmeExamplesTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = EBAB9A6E1C69702800AF036B /* ReadmeExamplesTests.swift */; }; + 84B3FC7E2DB69F9C00037368 /* DefaultJitterCoefficientGeneratorTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 217FCF4529D626F6006E5F2D /* DefaultJitterCoefficientGeneratorTests.swift */; }; + 84B3FC7F2DB69F9C00037368 /* ARTDefaultTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 560579D824AF1BA900A4D03D /* ARTDefaultTests.swift */; }; + 84B3FC802DB69F9C00037368 /* DataGatherer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 21113B5829DCA4C700652C86 /* DataGatherer.swift */; }; + 84B3FC812DB69F9C00037368 /* BackoffCoefficients.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2132C2E829D4B91B000C4355 /* BackoffCoefficients.swift */; }; + 84B3FC822DB69F9C00037368 /* DefaultErrorCheckerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2132C22129D233EB000C4355 /* DefaultErrorCheckerTests.swift */; }; + 84B3FC832DB69F9C00037368 /* CryptoData.swift in Sources */ = {isa = PBXBuildFile; fileRef = D5FFA6A729E97EF30082DB4B /* CryptoData.swift */; }; + 84B3FC842DB69F9C00037368 /* NSObject+TestSuite.m in Sources */ = {isa = PBXBuildFile; fileRef = D780846D1C68B3E50083009D /* NSObject+TestSuite.m */; }; + 84B3FC852DB69F9C00037368 /* TestUtilities.swift in Sources */ = {isa = PBXBuildFile; fileRef = 856AAC961B6E30C800B07119 /* TestUtilities.swift */; }; + 84B3FC862DB69F9C00037368 /* StatsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 851674EE1B7BA5CD00D35169 /* StatsTests.swift */; }; + 84B3FC872DB69F9C00037368 /* RestClientChannelTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D746AE2A1BBB625E003ECEF8 /* RestClientChannelTests.swift */; }; + 84B3FC882DB69F9C00037368 /* StringifiableTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D520C4DD2680A1E3000012B2 /* StringifiableTests.swift */; }; + 84B3FC892DB69F9C00037368 /* RealtimeClientChannelsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D71D30031C5F7B2F002115B0 /* RealtimeClientChannelsTests.swift */; }; + 84B3FC8A2DB69F9C00037368 /* TestProxyTransportFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 210F67B029E9DB62007B9345 /* TestProxyTransportFactory.swift */; }; + 84B3FC8B2DB69F9C00037368 /* RestClientPresenceTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D72768201C9C19040022F8B2 /* RestClientPresenceTests.swift */; }; + 84B3FC8C2DB69F9C00037368 /* ClientInformationTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 215F75FE2922B30F009E0E76 /* ClientInformationTests.swift */; }; + 84B3FC8D2DB69F9C00037368 /* BackoffRetryDelayCalculatorTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2132C31829D5E574000C4355 /* BackoffRetryDelayCalculatorTests.swift */; }; + 84B3FC8E2DB69F9C00037368 /* RestClientChannelsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D746AE2B1BBB625E003ECEF8 /* RestClientChannelsTests.swift */; }; + 84B3FC8F2DB69F9C00037368 /* ChannelOptionsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 212374662D415983005427E0 /* ChannelOptionsTests.swift */; }; + 84B3FC902DB69F9C00037368 /* RestClientStatsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 853ED7C31B7A1A3C006F1C6F /* RestClientStatsTests.swift */; }; + 84B3FC912DB69F9C00037368 /* ConnectRetryStateTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 21088DCA2A53560C0033C722 /* ConnectRetryStateTests.swift */; }; + 84B3FC922DB69F9C00037368 /* DefaultInternalLogCoreTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2124B79629DB144600AD8361 /* DefaultInternalLogCoreTests.swift */; }; + 84B3FC932DB69F9C00037368 /* JSON.swift in Sources */ = {isa = PBXBuildFile; fileRef = D50D86E829E9444600EA72EA /* JSON.swift */; }; + 84B3FC942DB69F9C00037368 /* CryptoTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB7913A71C6E54C3000ABF9B /* CryptoTests.swift */; }; + 84B3FC952DB69F9C00037368 /* GCDTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D5A22171266F526600C87C42 /* GCDTests.swift */; }; + 84B3FC962DB69F9C00037368 /* ObjectLifetimesTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB1B53F822F85CE4006A59AC /* ObjectLifetimesTests.swift */; }; + 84B3FC972DB69F9C00037368 /* TestAppSetup.swift in Sources */ = {isa = PBXBuildFile; fileRef = D5FFA6A329E96C960082DB4B /* TestAppSetup.swift */; }; + 84B3FC982DB69F9C00037368 /* RetrySequenceTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 217FCF3129D62460006E5F2D /* RetrySequenceTests.swift */; }; + 84B3FC992DB69F9C00037368 /* MockInternalLogCore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2147F03429E5872C0071CB94 /* MockInternalLogCore.swift */; }; + 84B3FC9A2DB69F9C00037368 /* ARTInternalLogTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 21113B6229DDF7E800652C86 /* ARTInternalLogTests.m */; }; + 84B3FC9B2DB69F9C00037368 /* RealtimeClientConnectionTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7EBE5A21BE8391E0086E675 /* RealtimeClientConnectionTests.swift */; }; + 84B3FC9C2DB69F9C00037368 /* DeltaCodecTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D798554723EB96C000946BE2 /* DeltaCodecTests.swift */; }; + 84B3FC9D2DB69F9C00037368 /* MockVersion2Log.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2124B78629DB127900AD8361 /* MockVersion2Log.swift */; }; + 84B3FC9E2DB69F9C00037368 /* Aspects.m in Sources */ = {isa = PBXBuildFile; fileRef = D510E4AA29F1659F00F77F43 /* Aspects.m */; }; + 84B3FC9F2DB69F9C00037368 /* MockRetryDelayCalculator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 21113B4829DB60F800652C86 /* MockRetryDelayCalculator.swift */; }; + 84B3FCA02DB69F9C00037368 /* MockJitterCoefficientGenerator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 217FCF3E29D626E4006E5F2D /* MockJitterCoefficientGenerator.swift */; }; + 84B3FCA12DB69F9C00037368 /* AuthTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7C1B8761BBEA81A0087B55F /* AuthTests.swift */; }; + 84B3FCA22DB69F9C00037368 /* MockErrorChecker.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2132C22529D2347F000C4355 /* MockErrorChecker.swift */; }; + 84B3FCA32DB69F9C00037368 /* NSObject+TestSuite.swift in Sources */ = {isa = PBXBuildFile; fileRef = D714A63D1C74D4B2002F2CA0 /* NSObject+TestSuite.swift */; }; + 84B3FCA42DB69F9C00037368 /* RealtimeClientTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D723046F1BB72CED00F1ABDA /* RealtimeClientTests.swift */; }; + 84B3FCA52DB69F9C00037368 /* WrapperSDKProxyTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 213AEA2A2D36C4C70067FD5F /* WrapperSDKProxyTests.swift */; }; + 84B3FCA62DB69F9C00037368 /* CryptoTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 56190953238C3D3200A862A6 /* CryptoTest.m */; }; + 84B3FCA72DB69F9C00037368 /* RestPaginatedTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D74CBC09212EC02C00D090E4 /* RestPaginatedTests.swift */; }; + 84B3FCA82DB69F9C00037368 /* ContinuousClockTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 21276CC129F00BAA00107B5F /* ContinuousClockTests.swift */; }; + 84B3FCA92DB69F9C00037368 /* Test.swift in Sources */ = {isa = PBXBuildFile; fileRef = 21FD9F262A015BE400216482 /* Test.swift */; }; + 84B3FCAA2DB69F9C00037368 /* UtilitiesTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB1AE0CD1C5C3A4900D62250 /* UtilitiesTests.swift */; }; + 84B3FCAB2DB69F9C00037368 /* StaticJitterCoefficients.swift in Sources */ = {isa = PBXBuildFile; fileRef = 217FCF3D29D626E4006E5F2D /* StaticJitterCoefficients.swift */; }; + 84B3FCAE2DB69F9C00037368 /* (null) in Frameworks */ = {isa = PBXBuildFile; }; + 84B3FCB02DB69F9C00037368 /* ably-common in Resources */ = {isa = PBXBuildFile; fileRef = 856AAC9A1B6E326E00B07119 /* ably-common */; }; + 84B3FCB92DB69FE700037368 /* Nimble in Frameworks */ = {isa = PBXBuildFile; productRef = 84B3FCB82DB69FE700037368 /* Nimble */; }; + 84E6D9CB2DB69D9700E6A1AD /* ARTMessageOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 808B245F2D62D9D7008547C1 /* ARTMessageOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 84E6D9CC2DB69D9700E6A1AD /* ARTLocalDevice.h in Headers */ = {isa = PBXBuildFile; fileRef = D7DEAFCF1E65926D00D23F24 /* ARTLocalDevice.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 84E6D9CD2DB69D9700E6A1AD /* ARTPendingMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = D70EECAA1FEAF331008A50CD /* ARTPendingMessage.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 84E6D9CE2DB69D9700E6A1AD /* ARTAttachRetryState.h in Headers */ = {isa = PBXBuildFile; fileRef = 2104EFAB2A4CC33300CC1184 /* ARTAttachRetryState.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 84E6D9CF2DB69D9700E6A1AD /* ARTRestChannel+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = D7F1D3791BF4E33A001A4B5E /* ARTRestChannel+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 84E6D9D02DB69D9700E6A1AD /* ARTPaginatedResult+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = D746AE2E1BBBE7D7003ECEF8 /* ARTPaginatedResult+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 84E6D9D12DB69D9700E6A1AD /* ARTChannels.h in Headers */ = {isa = PBXBuildFile; fileRef = D746AE511BBD85C5003ECEF8 /* ARTChannels.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 84E6D9D22DB69D9700E6A1AD /* ARTCrypto+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = EB5E058C1C77027600A48B39 /* ARTCrypto+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 84E6D9D32DB69D9700E6A1AD /* ARTTypes.h in Headers */ = {isa = PBXBuildFile; fileRef = 96BF615C1A35C1C8004CF2B3 /* ARTTypes.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 84E6D9D42DB69D9700E6A1AD /* ARTPushActivationState.h in Headers */ = {isa = PBXBuildFile; fileRef = D71966E81E5E006E000974DD /* ARTPushActivationState.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 84E6D9D52DB69D9700E6A1AD /* ARTRealtimeChannels+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = D7CEF12C1C8D821D004FB242 /* ARTRealtimeChannels+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 84E6D9D62DB69D9700E6A1AD /* ARTClientOptions.h in Headers */ = {isa = PBXBuildFile; fileRef = 961343D61A42E0B7006DC822 /* ARTClientOptions.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 84E6D9D72DB69D9700E6A1AD /* ARTRetrySequence.h in Headers */ = {isa = PBXBuildFile; fileRef = 2132C2F429D5BE05000C4355 /* ARTRetrySequence.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 84E6D9D82DB69D9700E6A1AD /* ARTEncoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 96A507A71A37806A0077CDF8 /* ARTEncoder.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 84E6D9D92DB69D9700E6A1AD /* ARTDeltaCodec.h in Headers */ = {isa = PBXBuildFile; fileRef = D73B655323EF2B2900D459A6 /* ARTDeltaCodec.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 84E6D9DA2DB69D9700E6A1AD /* ARTJitterCoefficientGenerator.h in Headers */ = {isa = PBXBuildFile; fileRef = 217FCF3529D6269D006E5F2D /* ARTJitterCoefficientGenerator.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 84E6D9DB2DB69D9700E6A1AD /* ARTChannel+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = D746AE241BBB611C003ECEF8 /* ARTChannel+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 84E6D9DC2DB69D9700E6A1AD /* ARTPresenceMessage+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = D7F2B8B11E42410D00B65151 /* ARTPresenceMessage+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 84E6D9DD2DB69D9700E6A1AD /* ARTLog.h in Headers */ = {isa = PBXBuildFile; fileRef = 1C6C18A11ADFDAB100AB79E4 /* ARTLog.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 84E6D9DE2DB69D9700E6A1AD /* ARTChannels+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = D746AE551BBD8622003ECEF8 /* ARTChannels+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 84E6D9DF2DB69D9700E6A1AD /* ARTHTTPPaginatedResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = D769E15121270F3400DC5CD1 /* ARTHTTPPaginatedResponse.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 84E6D9E02DB69D9700E6A1AD /* ARTMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = D746AE361BBC3201003ECEF8 /* ARTMessage.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 84E6D9E12DB69D9700E6A1AD /* ARTClientOptions+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = EB503C871C7E4A090053AF00 /* ARTClientOptions+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 84E6D9E22DB69D9700E6A1AD /* ARTConnectionStateChangeParams.h in Headers */ = {isa = PBXBuildFile; fileRef = 211A60DA29D726F800D169C5 /* ARTConnectionStateChangeParams.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 84E6D9E32DB69D9700E6A1AD /* ARTChannelStateChangeParams.h in Headers */ = {isa = PBXBuildFile; fileRef = 211A60FA29D8ABCF00D169C5 /* ARTChannelStateChangeParams.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 84E6D9E42DB69D9700E6A1AD /* ARTChannel.h in Headers */ = {isa = PBXBuildFile; fileRef = D746AE201BBB60EE003ECEF8 /* ARTChannel.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 84E6D9E52DB69D9700E6A1AD /* ARTPushChannel+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = EB1B541022FB1AB4006A59AC /* ARTPushChannel+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 84E6D9E62DB69D9700E6A1AD /* ARTNSURL+ARTUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = D54C55A526957FDD00729EC4 /* ARTNSURL+ARTUtils.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 84E6D9E72DB69D9700E6A1AD /* ARTNSMutableURLRequest+ARTUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = D5BB212C26AAA55C00AA5F3E /* ARTNSMutableURLRequest+ARTUtils.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 84E6D9E82DB69D9700E6A1AD /* ARTOSReachability.h in Headers */ = {isa = PBXBuildFile; fileRef = EB2D85001CD769C800F23CDA /* ARTOSReachability.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 84E6D9E92DB69D9700E6A1AD /* ARTPushActivationStateMachine.h in Headers */ = {isa = PBXBuildFile; fileRef = D71966E21E5DF360000974DD /* ARTPushActivationStateMachine.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 84E6D9EA2DB69D9700E6A1AD /* ARTPresenceMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = 96A5079F1A377AA50077CDF8 /* ARTPresenceMessage.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 84E6D9EB2DB69D9700E6A1AD /* ARTRealtimeChannel+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = D746AE421BBC5CD0003ECEF8 /* ARTRealtimeChannel+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 84E6D9EC2DB69D9700E6A1AD /* ARTDataEncoder.h in Headers */ = {isa = PBXBuildFile; fileRef = EB3239461C59AB2C00892664 /* ARTDataEncoder.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 84E6D9ED2DB69D9700E6A1AD /* ARTRest+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 960D07951A46FFC300ED8C8C /* ARTRest+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 84E6D9EE2DB69D9700E6A1AD /* ARTChannelOptions.h in Headers */ = {isa = PBXBuildFile; fileRef = D746AE4D1BBD84E7003ECEF8 /* ARTChannelOptions.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 84E6D9EF2DB69D9700E6A1AD /* ARTPaginatedResult+Subclass.h in Headers */ = {isa = PBXBuildFile; fileRef = 2105ED2129E7429E00DE6D67 /* ARTPaginatedResult+Subclass.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 84E6D9F02DB69D9700E6A1AD /* ARTEventEmitter+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = EB1AE0CB1C5C1EB200D62250 /* ARTEventEmitter+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 84E6D9F12DB69D9700E6A1AD /* ARTWrapperSDKProxyPush.h in Headers */ = {isa = PBXBuildFile; fileRef = 2159248A2D636826004A235C /* ARTWrapperSDKProxyPush.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 84E6D9F22DB69D9700E6A1AD /* ARTConnectRetryState.h in Headers */ = {isa = PBXBuildFile; fileRef = 21088DC22A5354F10033C722 /* ARTConnectRetryState.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 84E6D9F32DB69D9700E6A1AD /* ARTInternalLog+Testing.h in Headers */ = {isa = PBXBuildFile; fileRef = 2105ED2529E830D600DE6D67 /* ARTInternalLog+Testing.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 84E6D9F42DB69D9700E6A1AD /* ARTPresence+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = EB20F8D61C653F1E00EF3978 /* ARTPresence+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 84E6D9F52DB69D9700E6A1AD /* ARTCrypto.h in Headers */ = {isa = PBXBuildFile; fileRef = 960D07911A45F1D800ED8C8C /* ARTCrypto.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 84E6D9F62DB69D9700E6A1AD /* ARTReachability.h in Headers */ = {isa = PBXBuildFile; fileRef = EB2D84F61CD75CCE00F23CDA /* ARTReachability.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 84E6D9F72DB69D9700E6A1AD /* ARTBaseMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = 96BF61621A35CDE1004CF2B3 /* ARTBaseMessage.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 84E6D9F82DB69D9700E6A1AD /* ARTPushActivationEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = D71966EC1E5E0081000974DD /* ARTPushActivationEvent.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 84E6D9F92DB69D9700E6A1AD /* ARTStringifiable+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = D520C4DC26809D49000012B2 /* ARTStringifiable+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 84E6D9FA2DB69D9700E6A1AD /* ARTSRWebSocket.h in Headers */ = {isa = PBXBuildFile; fileRef = 217D181B25421FED00DFF07E /* ARTSRWebSocket.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 84E6D9FB2DB69D9700E6A1AD /* ARTURLSession.h in Headers */ = {isa = PBXBuildFile; fileRef = EBB721CA2376B454001C3550 /* ARTURLSession.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 84E6D9FC2DB69D9700E6A1AD /* ARTWebSocketTransport+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = D714A63F1C75F0C5002F2CA0 /* ARTWebSocketTransport+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 84E6D9FD2DB69D9700E6A1AD /* ARTWrapperSDKProxyRealtimeChannel.h in Headers */ = {isa = PBXBuildFile; fileRef = 21AC0CC02D4AA0630030BD23 /* ARTWrapperSDKProxyRealtimeChannel.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 84E6D9FE2DB69D9700E6A1AD /* ARTWrapperSDKProxyRealtimeChannels.h in Headers */ = {isa = PBXBuildFile; fileRef = 21AC0CC12D4AA0630030BD23 /* ARTWrapperSDKProxyRealtimeChannels.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 84E6D9FF2DB69D9700E6A1AD /* ARTWrapperSDKProxyOptions.h in Headers */ = {isa = PBXBuildFile; fileRef = 213AEA192D35A6120067FD5F /* ARTWrapperSDKProxyOptions.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 84E6DA002DB69D9700E6A1AD /* ARTWrapperSDKProxyPushAdmin+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 2159249A2D636AD5004A235C /* ARTWrapperSDKProxyPushAdmin+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 84E6DA012DB69D9700E6A1AD /* ARTPushChannelSubscriptions.h in Headers */ = {isa = PBXBuildFile; fileRef = D7AE18D01E5B410F00478D82 /* ARTPushChannelSubscriptions.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 84E6DA022DB69D9700E6A1AD /* ARTWebSocketFactory.h in Headers */ = {isa = PBXBuildFile; fileRef = 21E1C0E42A0DC47400A5DB65 /* ARTWebSocketFactory.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 84E6DA032DB69D9700E6A1AD /* ARTTypes+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 2132C31F29D5FE74000C4355 /* ARTTypes+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 84E6DA042DB69D9700E6A1AD /* ARTPushActivationStateMachine+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = D72C67DE201AB74000978EBB /* ARTPushActivationStateMachine+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 84E6DA052DB69D9700E6A1AD /* ARTVCDiffDecoder.h in Headers */ = {isa = PBXBuildFile; fileRef = D798555E23ECCDAF00946BE2 /* ARTVCDiffDecoder.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 84E6DA062DB69D9700E6A1AD /* ARTEventEmitter.h in Headers */ = {isa = PBXBuildFile; fileRef = D746AE3E1BBC5B14003ECEF8 /* ARTEventEmitter.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 84E6DA072DB69D9700E6A1AD /* ARTHttp.h in Headers */ = {isa = PBXBuildFile; fileRef = 96BF61561A35B52C004CF2B3 /* ARTHttp.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 84E6DA082DB69D9700E6A1AD /* ARTChannel+Subclass.h in Headers */ = {isa = PBXBuildFile; fileRef = 21113B4429DB484200652C86 /* ARTChannel+Subclass.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 84E6DA092DB69D9700E6A1AD /* ARTMsgPackEncoder.h in Headers */ = {isa = PBXBuildFile; fileRef = EB91213D1CA0AD6600BA0A40 /* ARTMsgPackEncoder.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 84E6DA0A2DB69D9700E6A1AD /* ARTJsonEncoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 96A507AB1A3780F60077CDF8 /* ARTJsonEncoder.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 84E6DA0B2DB69D9700E6A1AD /* ARTTokenParams+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = EB8AC6421C6515ED002ABA92 /* ARTTokenParams+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 84E6DA0C2DB69D9700E6A1AD /* ARTPushChannelSubscription.h in Headers */ = {isa = PBXBuildFile; fileRef = D785C4271E549E33008FEC05 /* ARTPushChannelSubscription.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 84E6DA0D2DB69D9700E6A1AD /* ARTAuth+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = D7C1B8781BBF5F460087B55F /* ARTAuth+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 84E6DA0E2DB69D9700E6A1AD /* ARTRealtimeTransport.h in Headers */ = {isa = PBXBuildFile; fileRef = 96E4083D1A3892C700087F77 /* ARTRealtimeTransport.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 84E6DA0F2DB69D9700E6A1AD /* ARTDeviceDetails+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 844B9CCE2C807BC400A260E8 /* ARTDeviceDetails+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 84E6DA102DB69D9700E6A1AD /* ARTTokenRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = D7D8F8271BC2C706009718F2 /* ARTTokenRequest.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 84E6DA112DB69D9700E6A1AD /* ARTRealtimePresence+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = EB7617711CB6CBFE00D0981E /* ARTRealtimePresence+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 84E6DA122DB69D9700E6A1AD /* ARTRestPresence.h in Headers */ = {isa = PBXBuildFile; fileRef = D7F1D3711BF4DE07001A4B5E /* ARTRestPresence.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 84E6DA132DB69D9700E6A1AD /* ARTProtocolMessage+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = D77394021C6F6FFE00F5478F /* ARTProtocolMessage+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 84E6DA142DB69D9700E6A1AD /* ARTRestChannels+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = EB4B1A0B1F2190BB00467F07 /* ARTRestChannels+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 84E6DA152DB69D9700E6A1AD /* ARTAuthOptions.h in Headers */ = {isa = PBXBuildFile; fileRef = D7D8F81F1BC2BE15009718F2 /* ARTAuthOptions.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 84E6DA162DB69D9700E6A1AD /* ARTDevicePushDetails.h in Headers */ = {isa = PBXBuildFile; fileRef = D768C6AA1E4B5B0200436011 /* ARTDevicePushDetails.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 84E6DA172DB69D9700E6A1AD /* ARTClientOptions+TestConfiguration.h in Headers */ = {isa = PBXBuildFile; fileRef = 2132C2BC29D482E8000C4355 /* ARTClientOptions+TestConfiguration.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 84E6DA182DB69D9700E6A1AD /* ARTStats.h in Headers */ = {isa = PBXBuildFile; fileRef = 96A507931A370F860077CDF8 /* ARTStats.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 84E6DA192DB69D9700E6A1AD /* ARTRestPresence+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = EB7617701CB6C18C00D0981E /* ARTRestPresence+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 84E6DA1A2DB69D9700E6A1AD /* ARTRestChannels.h in Headers */ = {isa = PBXBuildFile; fileRef = EB89D4021C61C1A4007FA5B7 /* ARTRestChannels.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 84E6DA1B2DB69D9700E6A1AD /* ARTRealtimePresence.h in Headers */ = {isa = PBXBuildFile; fileRef = D7F1D3751BF4DE72001A4B5E /* ARTRealtimePresence.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 84E6DA1C2DB69D9700E6A1AD /* ARTRest.h in Headers */ = {isa = PBXBuildFile; fileRef = 96BF61511A35B39C004CF2B3 /* ARTRest.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 84E6DA1D2DB69D9700E6A1AD /* ARTAuthOptions+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = D7D5A6991CA3D9040071BD6D /* ARTAuthOptions+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 84E6DA1E2DB69D9700E6A1AD /* ARTInternalLog.h in Headers */ = {isa = PBXBuildFile; fileRef = 2124B79229DB13C400AD8361 /* ARTInternalLog.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 84E6DA1F2DB69D9700E6A1AD /* ARTWrapperSDKProxyRealtimeChannel+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 21AC0CC82D4AA0F50030BD23 /* ARTWrapperSDKProxyRealtimeChannel+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 84E6DA202DB69D9700E6A1AD /* ARTWrapperSDKProxyRealtimeChannels+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 21AC0CC92D4AA0F50030BD23 /* ARTWrapperSDKProxyRealtimeChannels+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 84E6DA212DB69D9700E6A1AD /* ARTDeviceStorage.h in Headers */ = {isa = PBXBuildFile; fileRef = D75F49C2205ACFEC003DE04F /* ARTDeviceStorage.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 84E6DA222DB69D9700E6A1AD /* ARTWrapperSDKProxyRealtimePresence.h in Headers */ = {isa = PBXBuildFile; fileRef = 215924D22D636DF8004A235C /* ARTWrapperSDKProxyRealtimePresence.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 84E6DA232DB69D9700E6A1AD /* ARTDataQuery.h in Headers */ = {isa = PBXBuildFile; fileRef = D746AE1A1BBB5207003ECEF8 /* ARTDataQuery.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 84E6DA242DB69D9700E6A1AD /* ARTTokenParams.h in Headers */ = {isa = PBXBuildFile; fileRef = D7D8F8291BC2C706009718F2 /* ARTTokenParams.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 84E6DA252DB69D9700E6A1AD /* ARTDeviceDetails.h in Headers */ = {isa = PBXBuildFile; fileRef = D7B621921E4A6FE600684474 /* ARTDeviceDetails.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 84E6DA262DB69D9700E6A1AD /* ARTConnection+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = EB89D40E1C62303E007FA5B7 /* ARTConnection+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 84E6DA272DB69D9700E6A1AD /* ARTNSMutableRequest+ARTPush.h in Headers */ = {isa = PBXBuildFile; fileRef = D777EEE22063A64E002EBA03 /* ARTNSMutableRequest+ARTPush.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 84E6DA282DB69D9700E6A1AD /* ARTAttachRequestParams.h in Headers */ = {isa = PBXBuildFile; fileRef = 211A610229DA05C700D169C5 /* ARTAttachRequestParams.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 84E6DA292DB69D9700E6A1AD /* ARTWrapperSDKProxyRealtime.h in Headers */ = {isa = PBXBuildFile; fileRef = 213AEA262D35A7FC0067FD5F /* ARTWrapperSDKProxyRealtime.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 84E6DA2A2DB69D9700E6A1AD /* ARTHttp+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = D7D06F0726330E1B00DEBDAD /* ARTHttp+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 84E6DA2B2DB69D9700E6A1AD /* ARTRealtimeTransportFactory.h in Headers */ = {isa = PBXBuildFile; fileRef = 210F67A129E9D718007B9345 /* ARTRealtimeTransportFactory.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 84E6DA2C2DB69D9700E6A1AD /* ARTChannelOptions+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 84039A4B2C811F49001C053E /* ARTChannelOptions+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 84E6DA2D2DB69D9700E6A1AD /* ARTPushChannelSubscriptions+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = EB1B541822FB1D7F006A59AC /* ARTPushChannelSubscriptions+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 84E6DA2E2DB69D9700E6A1AD /* ARTConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = D74CBC0C212F076000D090E4 /* ARTConstants.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 84E6DA2F2DB69D9700E6A1AD /* ARTURLSessionServerTrust.h in Headers */ = {isa = PBXBuildFile; fileRef = D7588AF11BFF91B800BB8279 /* ARTURLSessionServerTrust.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 84E6DA302DB69D9700E6A1AD /* ARTPush.h in Headers */ = {isa = PBXBuildFile; fileRef = D7B6218E1E4A6E0200684474 /* ARTPush.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 84E6DA312DB69D9700E6A1AD /* ARTMessageOperation+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 80350CE22D6E11DA002A0732 /* ARTMessageOperation+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 84E6DA322DB69D9700E6A1AD /* ARTFallbackHosts.h in Headers */ = {isa = PBXBuildFile; fileRef = D737F824263AF4CE0064FA05 /* ARTFallbackHosts.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 84E6DA332DB69D9700E6A1AD /* ARTWrapperSDKProxyRealtime+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 213AEA2E2D36E9D30067FD5F /* ARTWrapperSDKProxyRealtime+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 84E6DA342DB69D9700E6A1AD /* ARTRealtimeChannel.h in Headers */ = {isa = PBXBuildFile; fileRef = D746AE3A1BBC5AE1003ECEF8 /* ARTRealtimeChannel.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 84E6DA352DB69D9700E6A1AD /* ARTDevicePushDetails+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 840FCE522C875B8A001163E1 /* ARTDevicePushDetails+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 84E6DA362DB69D9700E6A1AD /* ARTContinuousClock.h in Headers */ = {isa = PBXBuildFile; fileRef = 21276CB929EF323100107B5F /* ARTContinuousClock.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 84E6DA372DB69D9700E6A1AD /* ARTPushChannel.h in Headers */ = {isa = PBXBuildFile; fileRef = D7B621961E4A762A00684474 /* ARTPushChannel.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 84E6DA382DB69D9700E6A1AD /* ARTLocalDeviceStorage.h in Headers */ = {isa = PBXBuildFile; fileRef = D7DF73881EA645300013CD36 /* ARTLocalDeviceStorage.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 84E6DA392DB69D9700E6A1AD /* ARTConnectionDetails+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = D7D5A69B1CA40C350071BD6D /* ARTConnectionDetails+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 84E6DA3A2DB69D9700E6A1AD /* ARTRetryDelayCalculator.h in Headers */ = {isa = PBXBuildFile; fileRef = 2132C30029D5D154000C4355 /* ARTRetryDelayCalculator.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 84E6DA3B2DB69D9700E6A1AD /* ARTErrorChecker.h in Headers */ = {isa = PBXBuildFile; fileRef = 2132C21929D230AE000C4355 /* ARTErrorChecker.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 84E6DA3C2DB69D9700E6A1AD /* ARTStringifiable.h in Headers */ = {isa = PBXBuildFile; fileRef = D520C4D426809BB5000012B2 /* ARTStringifiable.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 84E6DA3D2DB69D9700E6A1AD /* NSURLQueryItem+Stringifiable.h in Headers */ = {isa = PBXBuildFile; fileRef = D5C0CB3B268317B500C06521 /* NSURLQueryItem+Stringifiable.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 84E6DA3E2DB69D9700E6A1AD /* ARTWrapperSDKProxyPushChannel+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 215924CA2D636D50004A235C /* ARTWrapperSDKProxyPushChannel+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 84E6DA3F2DB69D9700E6A1AD /* ARTDeviceIdentityTokenDetails.h in Headers */ = {isa = PBXBuildFile; fileRef = D777EEDE206285CF002EBA03 /* ARTDeviceIdentityTokenDetails.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 84E6DA402DB69D9700E6A1AD /* ARTRealtimeChannelOptions.h in Headers */ = {isa = PBXBuildFile; fileRef = D76F153923DB010C00B5133C /* ARTRealtimeChannelOptions.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 84E6DA412DB69D9700E6A1AD /* ARTDefault.h in Headers */ = {isa = PBXBuildFile; fileRef = 1CD8DC9D1B1C7315007EAF36 /* ARTDefault.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 84E6DA422DB69D9700E6A1AD /* ARTDeviceIdentityTokenDetails+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 2124B7A229DB153500AD8361 /* ARTDeviceIdentityTokenDetails+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 84E6DA432DB69D9700E6A1AD /* ARTClientInformation+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 215F76022922C76C009E0E76 /* ARTClientInformation+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 84E6DA442DB69D9700E6A1AD /* ARTAuthDetails.h in Headers */ = {isa = PBXBuildFile; fileRef = D73691FD1DB788C40062C150 /* ARTAuthDetails.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 84E6DA452DB69D9700E6A1AD /* ARTLocalDevice+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = EBFFAC181E97919C003E7326 /* ARTLocalDevice+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 84E6DA462DB69D9700E6A1AD /* ARTRealtime.h in Headers */ = {isa = PBXBuildFile; fileRef = 96A507BB1A3791490077CDF8 /* ARTRealtime.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 84E6DA472DB69D9700E6A1AD /* ARTProtocolMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = 96E408411A38939E00087F77 /* ARTProtocolMessage.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 84E6DA482DB69D9700E6A1AD /* ARTVersion2Log.h in Headers */ = {isa = PBXBuildFile; fileRef = 2124B78A29DB12A900AD8361 /* ARTVersion2Log.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 84E6DA492DB69D9700E6A1AD /* Ably.h in Headers */ = {isa = PBXBuildFile; fileRef = D7534C311D79E5C20054C182 /* Ably.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 84E6DA4A2DB69D9700E6A1AD /* AblyInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 2114D4262D4BC5470032839A /* AblyInternal.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 84E6DA4B2DB69D9700E6A1AD /* ARTChannelProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = 21E5D87E2D5E3EC300526C4C /* ARTChannelProtocol.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 84E6DA4C2DB69D9700E6A1AD /* AblyPublic.h in Headers */ = {isa = PBXBuildFile; fileRef = 2114D4272D4BC5470032839A /* AblyPublic.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 84E6DA4D2DB69D9700E6A1AD /* ARTQueuedDealloc.h in Headers */ = {isa = PBXBuildFile; fileRef = EB1B53FC22F8D91C006A59AC /* ARTQueuedDealloc.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 84E6DA4E2DB69D9700E6A1AD /* ARTPushAdmin.h in Headers */ = {isa = PBXBuildFile; fileRef = D7AE18C71E5B40C900478D82 /* ARTPushAdmin.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 84E6DA4F2DB69D9700E6A1AD /* ARTDefault+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = D7DC8AF01C6A9FFC005AF165 /* ARTDefault+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 84E6DA502DB69D9700E6A1AD /* ARTWrapperSDKProxyPush+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 2159248E2D636839004A235C /* ARTWrapperSDKProxyPush+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 84E6DA512DB69D9700E6A1AD /* ARTFormEncode.h in Headers */ = {isa = PBXBuildFile; fileRef = D70C36C1233E6831002FD6E3 /* ARTFormEncode.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 84E6DA522DB69D9700E6A1AD /* ARTStatus.h in Headers */ = {isa = PBXBuildFile; fileRef = 96BF61551A35B40E004CF2B3 /* ARTStatus.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 84E6DA532DB69D9700E6A1AD /* ARTHTTPPaginatedResponse+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = D78D780821271FB10016808B /* ARTHTTPPaginatedResponse+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 84E6DA542DB69D9700E6A1AD /* ARTTokenDetails.h in Headers */ = {isa = PBXBuildFile; fileRef = D7D8F8231BC2C691009718F2 /* ARTTokenDetails.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 84E6DA552DB69D9700E6A1AD /* ARTPush+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = EBFFAC1C1E97FB23003E7326 /* ARTPush+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 84E6DA562DB69D9700E6A1AD /* ARTNSDate+ARTUtil.h in Headers */ = {isa = PBXBuildFile; fileRef = 96A507B31A37881C0077CDF8 /* ARTNSDate+ARTUtil.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 84E6DA572DB69D9700E6A1AD /* ARTWrapperSDKProxyPushDeviceRegistrations.h in Headers */ = {isa = PBXBuildFile; fileRef = 215924A32D636B5C004A235C /* ARTWrapperSDKProxyPushDeviceRegistrations.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 84E6DA582DB69D9700E6A1AD /* ARTWrapperSDKProxyPushChannelSubscriptions.h in Headers */ = {isa = PBXBuildFile; fileRef = 215924A22D636B5C004A235C /* ARTWrapperSDKProxyPushChannelSubscriptions.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 84E6DA592DB69D9700E6A1AD /* ARTWrapperSDKProxyRealtimePresence+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 215924D62D636E04004A235C /* ARTWrapperSDKProxyRealtimePresence+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 84E6DA5A2DB69D9700E6A1AD /* ARTConnectionDetails.h in Headers */ = {isa = PBXBuildFile; fileRef = D7B17EE11C07208B00A6958E /* ARTConnectionDetails.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 84E6DA5B2DB69D9700E6A1AD /* ARTRealtimeChannels.h in Headers */ = {isa = PBXBuildFile; fileRef = EB89D4081C61C5ED007FA5B7 /* ARTRealtimeChannels.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 84E6DA5C2DB69D9700E6A1AD /* ARTFallback.h in Headers */ = {isa = PBXBuildFile; fileRef = 1C578E1D1B3435CA00EF46EC /* ARTFallback.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 84E6DA5D2DB69D9700E6A1AD /* ARTWebSocket.h in Headers */ = {isa = PBXBuildFile; fileRef = EBB721C42376A948001C3550 /* ARTWebSocket.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 84E6DA5E2DB69D9700E6A1AD /* ARTWebSocketTransport.h in Headers */ = {isa = PBXBuildFile; fileRef = 96E408451A3895E800087F77 /* ARTWebSocketTransport.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 84E6DA5F2DB69D9700E6A1AD /* ARTConnection.h in Headers */ = {isa = PBXBuildFile; fileRef = D7D29B401BE3DD0600374295 /* ARTConnection.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 84E6DA602DB69D9700E6A1AD /* ARTRealtime+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 1C05CF1E1AC1D7EB00687AC9 /* ARTRealtime+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 84E6DA612DB69D9700E6A1AD /* ARTPushDeviceRegistrations.h in Headers */ = {isa = PBXBuildFile; fileRef = D7AE18CC1E5B40FE00478D82 /* ARTPushDeviceRegistrations.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 84E6DA622DB69D9700E6A1AD /* ARTNSMutableURLRequest+ARTPaginated.h in Headers */ = {isa = PBXBuildFile; fileRef = D74CBC05212EB5B900D090E4 /* ARTNSMutableURLRequest+ARTPaginated.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 84E6DA632DB69D9700E6A1AD /* ARTBackoffRetryDelayCalculator.h in Headers */ = {isa = PBXBuildFile; fileRef = 2132C31029D5E4C6000C4355 /* ARTBackoffRetryDelayCalculator.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 84E6DA642DB69D9700E6A1AD /* ARTAuth.h in Headers */ = {isa = PBXBuildFile; fileRef = 96BF616E1A35FB7C004CF2B3 /* ARTAuth.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 84E6DA652DB69D9700E6A1AD /* ARTPresence.h in Headers */ = {isa = PBXBuildFile; fileRef = D746AE261BBB61C9003ECEF8 /* ARTPresence.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 84E6DA662DB69D9700E6A1AD /* ARTQueuedMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = D746AE451BBD6FE9003ECEF8 /* ARTQueuedMessage.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 84E6DA672DB69D9700E6A1AD /* ARTNSHTTPURLResponse+ARTPaginated.h in Headers */ = {isa = PBXBuildFile; fileRef = D74CBC01212EB58700D090E4 /* ARTNSHTTPURLResponse+ARTPaginated.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 84E6DA682DB69D9700E6A1AD /* ARTJsonLikeEncoder.h in Headers */ = {isa = PBXBuildFile; fileRef = EB9C530A1CD7BEB100.8.557 /* ARTJsonLikeEncoder.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 84E6DA692DB69D9700E6A1AD /* ARTRestChannel.h in Headers */ = {isa = PBXBuildFile; fileRef = D70EAAEB1BC3376200CD8B9E /* ARTRestChannel.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 84E6DA6A2DB69D9700E6A1AD /* ARTInternalLogCore+Testing.h in Headers */ = {isa = PBXBuildFile; fileRef = 2105ED1929E722DD00DE6D67 /* ARTInternalLogCore+Testing.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 84E6DA6B2DB69D9700E6A1AD /* ARTLog+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = EB503C891C7F1FE40053AF00 /* ARTLog+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 84E6DA6C2DB69D9700E6A1AD /* ARTPushAdmin+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = EBFFAC1A1E97EF5C003E7326 /* ARTPushAdmin+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 84E6DA6D2DB69D9700E6A1AD /* ARTDataQuery+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = D746AE1B1BBB5207003ECEF8 /* ARTDataQuery+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 84E6DA6E2DB69D9700E6A1AD /* ARTGCD.h in Headers */ = {isa = PBXBuildFile; fileRef = D75A3F191DDE5B62002A4AAD /* ARTGCD.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 84E6DA6F2DB69D9700E6A1AD /* ARTNSArray+ARTFunctional.h in Headers */ = {isa = PBXBuildFile; fileRef = 967A431F1A39AEAF00E4CE23 /* ARTNSArray+ARTFunctional.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 84E6DA702DB69D9700E6A1AD /* ARTNSDictionary+ARTDictionaryUtil.h in Headers */ = {isa = PBXBuildFile; fileRef = 96A507A31A377DE90077CDF8 /* ARTNSDictionary+ARTDictionaryUtil.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 84E6DA712DB69D9700E6A1AD /* ARTNSString+ARTUtil.h in Headers */ = {isa = PBXBuildFile; fileRef = D3AD0EBB215E2FB000312105 /* ARTNSString+ARTUtil.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 84E6DA722DB69D9700E6A1AD /* ARTPushDeviceRegistrations+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = EB1B541422FB1CE1006A59AC /* ARTPushDeviceRegistrations+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 84E6DA732DB69D9700E6A1AD /* ARTLogAdapter+Testing.h in Headers */ = {isa = PBXBuildFile; fileRef = 2105ED1D29E7242400DE6D67 /* ARTLogAdapter+Testing.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 84E6DA742DB69D9700E6A1AD /* ARTTestClientOptions.h in Headers */ = {isa = PBXBuildFile; fileRef = 21113B5029DC6AAF00652C86 /* ARTTestClientOptions.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 84E6DA752DB69D9700E6A1AD /* ARTFallback+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = D77F02A71DAF8099001B3FF9 /* ARTFallback+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 84E6DA762DB69D9700E6A1AD /* ARTPaginatedResult.h in Headers */ = {isa = PBXBuildFile; fileRef = 850BFB4A1B79323C009D0ADD /* ARTPaginatedResult.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 84E6DA772DB69D9700E6A1AD /* ARTNSError+ARTUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = D5BB213526AAA60500AA5F3E /* ARTNSError+ARTUtils.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 84E6DA782DB69D9700E6A1AD /* ARTWrapperSDKProxyPushAdmin.h in Headers */ = {isa = PBXBuildFile; fileRef = 215924962D636AC5004A235C /* ARTWrapperSDKProxyPushAdmin.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 84E6DA792DB69D9700E6A1AD /* ARTWrapperSDKProxyPushDeviceRegistrations+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 215924AB2D636B6B004A235C /* ARTWrapperSDKProxyPushDeviceRegistrations+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 84E6DA7A2DB69D9700E6A1AD /* ARTWrapperSDKProxyPushChannelSubscriptions+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 215924AA2D636B6B004A235C /* ARTWrapperSDKProxyPushChannelSubscriptions+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 84E6DA7B2DB69D9700E6A1AD /* ARTRealtime+WrapperSDKProxy.h in Headers */ = {isa = PBXBuildFile; fileRef = 2114D42E2D4BCAE20032839A /* ARTRealtime+WrapperSDKProxy.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 84E6DA7C2DB69D9700E6A1AD /* ARTNSMutableRequest+ARTRest.h in Headers */ = {isa = PBXBuildFile; fileRef = D7E0FEB6211DE94700659FAA /* ARTNSMutableRequest+ARTRest.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 84E6DA7D2DB69D9700E6A1AD /* ARTWrapperSDKProxyPushChannel.h in Headers */ = {isa = PBXBuildFile; fileRef = 215924C62D636D43004A235C /* ARTWrapperSDKProxyPushChannel.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 84E6DA7E2DB69D9700E6A1AD /* ARTInternalLogCore.h in Headers */ = {isa = PBXBuildFile; fileRef = 2147F02C29E583AD0071CB94 /* ARTInternalLogCore.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 84E6DA7F2DB69D9700E6A1AD /* ARTBaseMessage+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = EB0505FB1C5BD7C4006BA7E2 /* ARTBaseMessage+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 84E6DA802DB69D9700E6A1AD /* ARTSRPinningSecurityPolicy.h in Headers */ = {isa = PBXBuildFile; fileRef = 217D17F725421FED00DFF07E /* ARTSRPinningSecurityPolicy.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 84E6DA812DB69D9700E6A1AD /* ARTClientInformation.h in Headers */ = {isa = PBXBuildFile; fileRef = 215F75F62922B1DB009E0E76 /* ARTClientInformation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 84E6DA822DB69D9700E6A1AD /* NSRunLoop+ARTSRWebSocket.h in Headers */ = {isa = PBXBuildFile; fileRef = 217D181625421FED00DFF07E /* NSRunLoop+ARTSRWebSocket.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 84E6DA832DB69D9700E6A1AD /* ARTNSMutableDictionary+ARTDictionaryUtil.h in Headers */ = {isa = PBXBuildFile; fileRef = D54C5546268B31E500729EC4 /* ARTNSMutableDictionary+ARTDictionaryUtil.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 84E6DA842DB69D9700E6A1AD /* NSURLRequest+ARTSRWebSocket.h in Headers */ = {isa = PBXBuildFile; fileRef = 217D181C25421FED00DFF07E /* NSURLRequest+ARTSRWebSocket.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 84E6DA852DB69D9700E6A1AD /* ARTSRSecurityPolicy.h in Headers */ = {isa = PBXBuildFile; fileRef = 217D182025421FED00DFF07E /* ARTSRSecurityPolicy.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 84E6DA862DB69D9700E6A1AD /* ARTLogAdapter.h in Headers */ = {isa = PBXBuildFile; fileRef = 2124B79E29DB14D000AD8361 /* ARTLogAdapter.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 84E6DA882DB69D9700E6A1AD /* ARTConnectionDetails.m in Sources */ = {isa = PBXBuildFile; fileRef = D7B17EE21C07208B00A6958E /* ARTConnectionDetails.m */; }; + 84E6DA892DB69D9700E6A1AD /* NSURLRequest+ARTSRWebSocket.m in Sources */ = {isa = PBXBuildFile; fileRef = 217D181725421FED00DFF07E /* NSURLRequest+ARTSRWebSocket.m */; }; + 84E6DA8A2DB69D9700E6A1AD /* ARTSRWebSocket.m in Sources */ = {isa = PBXBuildFile; fileRef = 217D181F25421FED00DFF07E /* ARTSRWebSocket.m */; }; + 84E6DA8B2DB69D9700E6A1AD /* ARTRealtimePresence.m in Sources */ = {isa = PBXBuildFile; fileRef = D7F1D3761BF4DE72001A4B5E /* ARTRealtimePresence.m */; }; + 84E6DA8C2DB69D9700E6A1AD /* ARTRealtimeChannels.m in Sources */ = {isa = PBXBuildFile; fileRef = EB89D40A1C61C6EA007FA5B7 /* ARTRealtimeChannels.m */; }; + 84E6DA8D2DB69D9700E6A1AD /* ARTFallbackHosts.m in Sources */ = {isa = PBXBuildFile; fileRef = D737F825263AF4CE0064FA05 /* ARTFallbackHosts.m */; }; + 84E6DA8E2DB69D9700E6A1AD /* ARTChannelStateChangeParams.m in Sources */ = {isa = PBXBuildFile; fileRef = 211A60FE29D8ABF100D169C5 /* ARTChannelStateChangeParams.m */; }; + 84E6DA8F2DB69D9700E6A1AD /* ARTDevicePushDetails.m in Sources */ = {isa = PBXBuildFile; fileRef = D768C6AB1E4B5B0200436011 /* ARTDevicePushDetails.m */; }; + 84E6DA902DB69D9700E6A1AD /* ARTDataQuery.m in Sources */ = {isa = PBXBuildFile; fileRef = D746AE1C1BBB5207003ECEF8 /* ARTDataQuery.m */; }; + 84E6DA912DB69D9700E6A1AD /* ARTPush.m in Sources */ = {isa = PBXBuildFile; fileRef = D7B6218F1E4A6E0200684474 /* ARTPush.m */; }; + 84E6DA922DB69D9700E6A1AD /* ARTSRDelegateController.m in Sources */ = {isa = PBXBuildFile; fileRef = 217D17FC25421FED00DFF07E /* ARTSRDelegateController.m */; }; + 84E6DA932DB69D9700E6A1AD /* ARTStats.m in Sources */ = {isa = PBXBuildFile; fileRef = 96A507941A370F860077CDF8 /* ARTStats.m */; }; + 84E6DA942DB69D9700E6A1AD /* ARTWrapperSDKProxyPushAdmin.m in Sources */ = {isa = PBXBuildFile; fileRef = 2159249E2D636ADF004A235C /* ARTWrapperSDKProxyPushAdmin.m */; }; + 84E6DA952DB69D9700E6A1AD /* ARTRealtimeChannelOptions.m in Sources */ = {isa = PBXBuildFile; fileRef = D76F153A23DB010C00B5133C /* ARTRealtimeChannelOptions.m */; }; + 84E6DA962DB69D9700E6A1AD /* ARTWrapperSDKProxyPush.m in Sources */ = {isa = PBXBuildFile; fileRef = 215924922D636A6E004A235C /* ARTWrapperSDKProxyPush.m */; }; + 84E6DA972DB69D9700E6A1AD /* ARTQueuedMessage.m in Sources */ = {isa = PBXBuildFile; fileRef = D746AE461BBD6FE9003ECEF8 /* ARTQueuedMessage.m */; }; + 84E6DA982DB69D9700E6A1AD /* ARTRest.m in Sources */ = {isa = PBXBuildFile; fileRef = 96BF61521A35B39C004CF2B3 /* ARTRest.m */; }; + 84E6DA992DB69D9700E6A1AD /* ARTNSMutableRequest+ARTPush.m in Sources */ = {isa = PBXBuildFile; fileRef = D777EEE32063A64E002EBA03 /* ARTNSMutableRequest+ARTPush.m */; }; + 84E6DA9A2DB69D9700E6A1AD /* ARTNSMutableURLRequest+ARTUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = D5BB212D26AAA55C00AA5F3E /* ARTNSMutableURLRequest+ARTUtils.m */; }; + 84E6DA9B2DB69D9700E6A1AD /* ARTSRHash.m in Sources */ = {isa = PBXBuildFile; fileRef = 217D180425421FED00DFF07E /* ARTSRHash.m */; }; + 84E6DA9C2DB69D9700E6A1AD /* ARTLog.m in Sources */ = {isa = PBXBuildFile; fileRef = 1C6C18A21ADFDAB100AB79E4 /* ARTLog.m */; }; + 84E6DA9D2DB69D9700E6A1AD /* ARTSRMutex.m in Sources */ = {isa = PBXBuildFile; fileRef = 217D180225421FED00DFF07E /* ARTSRMutex.m */; }; + 84E6DA9E2DB69D9700E6A1AD /* ARTChannels.m in Sources */ = {isa = PBXBuildFile; fileRef = D746AE521BBD85C5003ECEF8 /* ARTChannels.m */; }; + 84E6DA9F2DB69D9700E6A1AD /* ARTSRError.m in Sources */ = {isa = PBXBuildFile; fileRef = 217D180E25421FED00DFF07E /* ARTSRError.m */; }; + 84E6DAA02DB69D9700E6A1AD /* ARTPendingMessage.m in Sources */ = {isa = PBXBuildFile; fileRef = D70EECAB1FEAF331008A50CD /* ARTPendingMessage.m */; }; + 84E6DAA12DB69D9700E6A1AD /* ARTPushActivationState.m in Sources */ = {isa = PBXBuildFile; fileRef = D71966E91E5E006E000974DD /* ARTPushActivationState.m */; }; + 84E6DAA22DB69D9700E6A1AD /* ARTGCD.m in Sources */ = {isa = PBXBuildFile; fileRef = D75A3F1A1DDE5B62002A4AAD /* ARTGCD.m */; }; + 84E6DAA32DB69D9700E6A1AD /* ARTSRRunLoopThread.m in Sources */ = {isa = PBXBuildFile; fileRef = 217D17F425421FED00DFF07E /* ARTSRRunLoopThread.m */; }; + 84E6DAA42DB69D9700E6A1AD /* ARTSRSecurityPolicy.m in Sources */ = {isa = PBXBuildFile; fileRef = 217D181E25421FED00DFF07E /* ARTSRSecurityPolicy.m */; }; + 84E6DAA52DB69D9700E6A1AD /* ARTInternalLogCore.m in Sources */ = {isa = PBXBuildFile; fileRef = 2147F03029E583CE0071CB94 /* ARTInternalLogCore.m */; }; + 84E6DAA62DB69D9700E6A1AD /* ARTNSHTTPURLResponse+ARTPaginated.m in Sources */ = {isa = PBXBuildFile; fileRef = D74CBC02212EB58700D090E4 /* ARTNSHTTPURLResponse+ARTPaginated.m */; }; + 84E6DAA72DB69D9700E6A1AD /* ARTAuthOptions.m in Sources */ = {isa = PBXBuildFile; fileRef = D7D8F8201BC2BE15009718F2 /* ARTAuthOptions.m */; }; + 84E6DAA82DB69D9700E6A1AD /* ARTTypes.m in Sources */ = {isa = PBXBuildFile; fileRef = 96BF615D1A35C1C8004CF2B3 /* ARTTypes.m */; }; + 84E6DAA92DB69D9700E6A1AD /* ARTDataEncoder.m in Sources */ = {isa = PBXBuildFile; fileRef = EB3239421C59AB0400892664 /* ARTDataEncoder.m */; }; + 84E6DAAA2DB69D9700E6A1AD /* ARTConnection.m in Sources */ = {isa = PBXBuildFile; fileRef = D7D29B411BE3DEB300374295 /* ARTConnection.m */; }; + 84E6DAAB2DB69D9700E6A1AD /* ARTClientInformation.m in Sources */ = {isa = PBXBuildFile; fileRef = 215F75F72922B1DB009E0E76 /* ARTClientInformation.m */; }; + 84E6DAAC2DB69D9700E6A1AD /* ARTWebSocketTransport.m in Sources */ = {isa = PBXBuildFile; fileRef = 96E408461A3895E800087F77 /* ARTWebSocketTransport.m */; }; + 84E6DAAD2DB69D9700E6A1AD /* ARTSRRandom.m in Sources */ = {isa = PBXBuildFile; fileRef = 217D180025421FED00DFF07E /* ARTSRRandom.m */; }; + 84E6DAAE2DB69D9700E6A1AD /* ARTPresenceMessage.m in Sources */ = {isa = PBXBuildFile; fileRef = 96A507A01A377AA50077CDF8 /* ARTPresenceMessage.m */; }; + 84E6DAAF2DB69D9700E6A1AD /* ARTFallback.m in Sources */ = {isa = PBXBuildFile; fileRef = 1C578E1E1B3435CA00EF46EC /* ARTFallback.m */; }; + 84E6DAB02DB69D9700E6A1AD /* ARTTokenRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = D7D8F8281BC2C706009718F2 /* ARTTokenRequest.m */; }; + 84E6DAB12DB69D9700E6A1AD /* ARTEventEmitter.m in Sources */ = {isa = PBXBuildFile; fileRef = D746AE3F1BBC5B14003ECEF8 /* ARTEventEmitter.m */; }; + 84E6DAB22DB69D9700E6A1AD /* ARTProtocolMessage.m in Sources */ = {isa = PBXBuildFile; fileRef = 96E408421A38939E00087F77 /* ARTProtocolMessage.m */; }; + 84E6DAB32DB69D9700E6A1AD /* ARTNSURL+ARTUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = D54C55A626957FDE00729EC4 /* ARTNSURL+ARTUtils.m */; }; + 84E6DAB42DB69D9700E6A1AD /* ARTLocalDevice.m in Sources */ = {isa = PBXBuildFile; fileRef = D7DEAFD01E65926D00D23F24 /* ARTLocalDevice.m */; }; + 84E6DAB52DB69D9700E6A1AD /* ARTDeviceIdentityTokenDetails.m in Sources */ = {isa = PBXBuildFile; fileRef = D777EEDF206285CF002EBA03 /* ARTDeviceIdentityTokenDetails.m */; }; + 84E6DAB62DB69D9700E6A1AD /* ARTLogAdapter.m in Sources */ = {isa = PBXBuildFile; fileRef = 2124B79A29DB14C000AD8361 /* ARTLogAdapter.m */; }; + 84E6DAB72DB69D9700E6A1AD /* ARTRealtimeTransportFactory.m in Sources */ = {isa = PBXBuildFile; fileRef = 210F67A529E9D93D007B9345 /* ARTRealtimeTransportFactory.m */; }; + 84E6DAB82DB69D9700E6A1AD /* ARTJitterCoefficientGenerator.m in Sources */ = {isa = PBXBuildFile; fileRef = 217FCF3929D626C1006E5F2D /* ARTJitterCoefficientGenerator.m */; }; + 84E6DAB92DB69D9700E6A1AD /* ARTRealtimeTransport.m in Sources */ = {isa = PBXBuildFile; fileRef = EB2D5A901CC941A700AD1A67 /* ARTRealtimeTransport.m */; }; + 84E6DABA2DB69D9700E6A1AD /* ARTWrapperSDKProxyRealtimeChannel.m in Sources */ = {isa = PBXBuildFile; fileRef = 21AC0CD02D4AA3200030BD23 /* ARTWrapperSDKProxyRealtimeChannel.m */; }; + 84E6DABB2DB69D9700E6A1AD /* ARTWrapperSDKProxyRealtimeChannels.m in Sources */ = {isa = PBXBuildFile; fileRef = 21AC0CD12D4AA3200030BD23 /* ARTWrapperSDKProxyRealtimeChannels.m */; }; + 84E6DABC2DB69D9700E6A1AD /* ARTSRPinningSecurityPolicy.m in Sources */ = {isa = PBXBuildFile; fileRef = 217D17F825421FED00DFF07E /* ARTSRPinningSecurityPolicy.m */; }; + 84E6DABD2DB69D9700E6A1AD /* ARTRestChannel.m in Sources */ = {isa = PBXBuildFile; fileRef = D70EAAEC1BC3376200CD8B9E /* ARTRestChannel.m */; }; + 84E6DABE2DB69D9700E6A1AD /* ARTRestPresence.m in Sources */ = {isa = PBXBuildFile; fileRef = D7F1D3721BF4DE07001A4B5E /* ARTRestPresence.m */; }; + 84E6DABF2DB69D9700E6A1AD /* ARTTestClientOptions.m in Sources */ = {isa = PBXBuildFile; fileRef = 21113B5429DC6ACD00652C86 /* ARTTestClientOptions.m */; }; + 84E6DAC02DB69D9700E6A1AD /* ARTNSDate+ARTUtil.m in Sources */ = {isa = PBXBuildFile; fileRef = 96A507B41A37881C0077CDF8 /* ARTNSDate+ARTUtil.m */; }; + 84E6DAC12DB69D9700E6A1AD /* ARTSRConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 217D181525421FED00DFF07E /* ARTSRConstants.m */; }; + 84E6DAC22DB69D9700E6A1AD /* ARTContinuousClock.m in Sources */ = {isa = PBXBuildFile; fileRef = 21276CBD29EF34AE00107B5F /* ARTContinuousClock.m */; }; + 84E6DAC32DB69D9700E6A1AD /* ARTMessageOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 808B24292D62D58C008547C1 /* ARTMessageOperation.m */; }; + 84E6DAC42DB69D9700E6A1AD /* ARTPushAdmin.m in Sources */ = {isa = PBXBuildFile; fileRef = D7AE18C81E5B40C900478D82 /* ARTPushAdmin.m */; }; + 84E6DAC52DB69D9700E6A1AD /* ARTSRProxyConnect.m in Sources */ = {isa = PBXBuildFile; fileRef = 217D17F225421FED00DFF07E /* ARTSRProxyConnect.m */; }; + 84E6DAC62DB69D9700E6A1AD /* ARTDeviceDetails.m in Sources */ = {isa = PBXBuildFile; fileRef = D7B621931E4A6FE600684474 /* ARTDeviceDetails.m */; }; + 84E6DAC72DB69D9700E6A1AD /* ARTJsonLikeEncoder.m in Sources */ = {isa = PBXBuildFile; fileRef = EB9C530C1CD7BFF300.8.557 /* ARTJsonLikeEncoder.m */; }; + 84E6DAC82DB69D9700E6A1AD /* ARTWrapperSDKProxyOptions.m in Sources */ = {isa = PBXBuildFile; fileRef = 213AEA332D37F6890067FD5F /* ARTWrapperSDKProxyOptions.m */; }; + 84E6DAC92DB69D9700E6A1AD /* ARTPushChannelSubscriptions.m in Sources */ = {isa = PBXBuildFile; fileRef = D7AE18D11E5B410F00478D82 /* ARTPushChannelSubscriptions.m */; }; + 84E6DACA2DB69D9700E6A1AD /* ARTPushActivationStateMachine.m in Sources */ = {isa = PBXBuildFile; fileRef = D71966E31E5DF360000974DD /* ARTPushActivationStateMachine.m */; }; + 84E6DACB2DB69D9700E6A1AD /* ARTNSMutableRequest+ARTRest.m in Sources */ = {isa = PBXBuildFile; fileRef = D7E0FEB7211DE94700659FAA /* ARTNSMutableRequest+ARTRest.m */; }; + 84E6DACC2DB69D9700E6A1AD /* NSRunLoop+ARTSRWebSocket.m in Sources */ = {isa = PBXBuildFile; fileRef = 217D181D25421FED00DFF07E /* NSRunLoop+ARTSRWebSocket.m */; }; + 84E6DACD2DB69D9700E6A1AD /* ARTWrapperSDKProxyPushChannelSubscriptions.m in Sources */ = {isa = PBXBuildFile; fileRef = 215924B22D636B89004A235C /* ARTWrapperSDKProxyPushChannelSubscriptions.m */; }; + 84E6DACE2DB69D9700E6A1AD /* ARTWrapperSDKProxyPushDeviceRegistrations.m in Sources */ = {isa = PBXBuildFile; fileRef = 215924B32D636B89004A235C /* ARTWrapperSDKProxyPushDeviceRegistrations.m */; }; + 84E6DACF2DB69D9700E6A1AD /* ARTMsgPackEncoder.m in Sources */ = {isa = PBXBuildFile; fileRef = EB91213F1CA0AD8200BA0A40 /* ARTMsgPackEncoder.m */; }; + 84E6DAD02DB69D9700E6A1AD /* ARTDefault.m in Sources */ = {isa = PBXBuildFile; fileRef = 1CD8DC9E1B1C7315007EAF36 /* ARTDefault.m */; }; + 84E6DAD12DB69D9700E6A1AD /* ARTAttachRetryState.m in Sources */ = {isa = PBXBuildFile; fileRef = 2104EFA72A4CC30C00CC1184 /* ARTAttachRetryState.m */; }; + 84E6DAD22DB69D9700E6A1AD /* ARTMessage.m in Sources */ = {isa = PBXBuildFile; fileRef = D746AE371BBC3201003ECEF8 /* ARTMessage.m */; }; + 84E6DAD32DB69D9700E6A1AD /* ARTNSArray+ARTFunctional.m in Sources */ = {isa = PBXBuildFile; fileRef = 967A43201A39AEAF00E4CE23 /* ARTNSArray+ARTFunctional.m */; }; + 84E6DAD42DB69D9700E6A1AD /* ARTNSString+ARTUtil.m in Sources */ = {isa = PBXBuildFile; fileRef = D3AD0EBC215E2FB000312105 /* ARTNSString+ARTUtil.m */; }; + 84E6DAD52DB69D9700E6A1AD /* ARTAuth.m in Sources */ = {isa = PBXBuildFile; fileRef = 96BF616F1A35FB7C004CF2B3 /* ARTAuth.m */; }; + 84E6DAD62DB69D9700E6A1AD /* ARTTokenParams.m in Sources */ = {isa = PBXBuildFile; fileRef = D7D8F82A1BC2C706009718F2 /* ARTTokenParams.m */; }; + 84E6DAD72DB69D9700E6A1AD /* ARTPushChannel.m in Sources */ = {isa = PBXBuildFile; fileRef = D7B621971E4A762A00684474 /* ARTPushChannel.m */; }; + 84E6DAD82DB69D9700E6A1AD /* ARTWrapperSDKProxyRealtime.m in Sources */ = {isa = PBXBuildFile; fileRef = 213AEA1E2D35A7CD0067FD5F /* ARTWrapperSDKProxyRealtime.m */; }; + 84E6DAD92DB69D9700E6A1AD /* ARTTokenDetails.m in Sources */ = {isa = PBXBuildFile; fileRef = D7D8F8241BC2C691009718F2 /* ARTTokenDetails.m */; }; + 84E6DADA2DB69D9700E6A1AD /* ARTRestChannels.m in Sources */ = {isa = PBXBuildFile; fileRef = EB89D4031C61C1A4007FA5B7 /* ARTRestChannels.m */; }; + 84E6DADB2DB69D9700E6A1AD /* ARTURLSessionServerTrust.m in Sources */ = {isa = PBXBuildFile; fileRef = D7588AF21BFF91B800BB8279 /* ARTURLSessionServerTrust.m */; }; + 84E6DADC2DB69D9700E6A1AD /* ARTWrapperSDKProxyRealtimePresence.m in Sources */ = {isa = PBXBuildFile; fileRef = 215924CE2D636DED004A235C /* ARTWrapperSDKProxyRealtimePresence.m */; }; + 84E6DADD2DB69D9700E6A1AD /* ARTJsonEncoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 96A507AC1A3780F60077CDF8 /* ARTJsonEncoder.m */; }; + 84E6DADE2DB69D9700E6A1AD /* ARTClientOptions.m in Sources */ = {isa = PBXBuildFile; fileRef = 961343D71A42E0B7006DC822 /* ARTClientOptions.m */; }; + 84E6DADF2DB69D9700E6A1AD /* ARTChannel.m in Sources */ = {isa = PBXBuildFile; fileRef = D746AE211BBB60EE003ECEF8 /* ARTChannel.m */; }; + 84E6DAE02DB69D9700E6A1AD /* ARTFormEncode.m in Sources */ = {isa = PBXBuildFile; fileRef = D70C36C2233E6831002FD6E3 /* ARTFormEncode.m */; }; + 84E6DAE12DB69D9700E6A1AD /* ARTAuthDetails.m in Sources */ = {isa = PBXBuildFile; fileRef = D73691FE1DB788C40062C150 /* ARTAuthDetails.m */; }; + 84E6DAE22DB69D9700E6A1AD /* ARTRealtime.m in Sources */ = {isa = PBXBuildFile; fileRef = 96A507BC1A3791490077CDF8 /* ARTRealtime.m */; }; + 84E6DAE32DB69D9700E6A1AD /* ARTRealtimeChannel.m in Sources */ = {isa = PBXBuildFile; fileRef = D746AE3B1BBC5AE1003ECEF8 /* ARTRealtimeChannel.m */; }; + 84E6DAE42DB69D9700E6A1AD /* ARTNSDictionary+ARTDictionaryUtil.m in Sources */ = {isa = PBXBuildFile; fileRef = 96A507A41A377DE90077CDF8 /* ARTNSDictionary+ARTDictionaryUtil.m */; }; + 84E6DAE52DB69D9700E6A1AD /* ARTAttachRequestParams.m in Sources */ = {isa = PBXBuildFile; fileRef = 211A610629DA05D700D169C5 /* ARTAttachRequestParams.m */; }; + 84E6DAE62DB69D9700E6A1AD /* ARTConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = D74CBC0D212F076000D090E4 /* ARTConstants.m */; }; + 84E6DAE72DB69D9700E6A1AD /* ARTBaseMessage.m in Sources */ = {isa = PBXBuildFile; fileRef = 96BF61631A35CDE1004CF2B3 /* ARTBaseMessage.m */; }; + 84E6DAE82DB69D9700E6A1AD /* ARTStringifiable.m in Sources */ = {isa = PBXBuildFile; fileRef = D520C4D526809BB5000012B2 /* ARTStringifiable.m */; }; + 84E6DAE92DB69D9700E6A1AD /* ARTNSMutableURLRequest+ARTPaginated.m in Sources */ = {isa = PBXBuildFile; fileRef = D74CBC06212EB5B900D090E4 /* ARTNSMutableURLRequest+ARTPaginated.m */; }; + 84E6DAEA2DB69D9700E6A1AD /* ARTInternalLog.m in Sources */ = {isa = PBXBuildFile; fileRef = 2124B78E29DB13BD00AD8361 /* ARTInternalLog.m */; }; + 84E6DAEB2DB69D9700E6A1AD /* ARTSRHTTPConnectMessage.m in Sources */ = {isa = PBXBuildFile; fileRef = 217D180D25421FED00DFF07E /* ARTSRHTTPConnectMessage.m */; }; + 84E6DAEC2DB69D9700E6A1AD /* ARTPushDeviceRegistrations.m in Sources */ = {isa = PBXBuildFile; fileRef = D7AE18CD1E5B40FE00478D82 /* ARTPushDeviceRegistrations.m */; }; + 84E6DAED2DB69D9700E6A1AD /* ARTRetrySequence.m in Sources */ = {isa = PBXBuildFile; fileRef = 2132C2F829D5BE3D000C4355 /* ARTRetrySequence.m */; }; + 84E6DAEE2DB69D9700E6A1AD /* ARTChannelOptions.m in Sources */ = {isa = PBXBuildFile; fileRef = D746AE4E1BBD84E7003ECEF8 /* ARTChannelOptions.m */; }; + 84E6DAEF2DB69D9700E6A1AD /* ARTNSError+ARTUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = D5BB213426AAA60500AA5F3E /* ARTNSError+ARTUtils.m */; }; + 84E6DAF02DB69D9700E6A1AD /* ARTConnectionStateChangeParams.m in Sources */ = {isa = PBXBuildFile; fileRef = 211A60DE29D7272000D169C5 /* ARTConnectionStateChangeParams.m */; }; + 84E6DAF12DB69D9700E6A1AD /* ARTSRURLUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = 217D180C25421FED00DFF07E /* ARTSRURLUtilities.m */; }; + 84E6DAF22DB69D9700E6A1AD /* ARTErrorChecker.m in Sources */ = {isa = PBXBuildFile; fileRef = 2132C21D29D23196000C4355 /* ARTErrorChecker.m */; }; + 84E6DAF32DB69D9700E6A1AD /* ARTDeltaCodec.m in Sources */ = {isa = PBXBuildFile; fileRef = D73B655423EF2B2900D459A6 /* ARTDeltaCodec.m */; }; + 84E6DAF42DB69D9700E6A1AD /* ARTHttp.m in Sources */ = {isa = PBXBuildFile; fileRef = 96BF61571A35B52C004CF2B3 /* ARTHttp.m */; }; + 84E6DAF52DB69D9700E6A1AD /* ARTPaginatedResult.m in Sources */ = {isa = PBXBuildFile; fileRef = 850BFB4B1B79323C009D0ADD /* ARTPaginatedResult.m */; }; + 84E6DAF62DB69D9700E6A1AD /* ARTBackoffRetryDelayCalculator.m in Sources */ = {isa = PBXBuildFile; fileRef = 2132C31429D5E50A000C4355 /* ARTBackoffRetryDelayCalculator.m */; }; + 84E6DAF72DB69D9700E6A1AD /* ARTStatus.m in Sources */ = {isa = PBXBuildFile; fileRef = 1C55427C1B148306003068DB /* ARTStatus.m */; }; + 84E6DAF82DB69D9700E6A1AD /* ARTWebSocketFactory.m in Sources */ = {isa = PBXBuildFile; fileRef = 21E1C0E82A0DC5E600A5DB65 /* ARTWebSocketFactory.m */; }; + 84E6DAF92DB69D9700E6A1AD /* NSURLQueryItem+Stringifiable.m in Sources */ = {isa = PBXBuildFile; fileRef = D5C0CB3C268317B500C06521 /* NSURLQueryItem+Stringifiable.m */; }; + 84E6DAFA2DB69D9700E6A1AD /* ARTQueuedDealloc.m in Sources */ = {isa = PBXBuildFile; fileRef = EB1B540422F8DA05006A59AC /* ARTQueuedDealloc.m */; }; + 84E6DAFB2DB69D9700E6A1AD /* ARTPushChannelSubscription.m in Sources */ = {isa = PBXBuildFile; fileRef = D785C4281E549E33008FEC05 /* ARTPushChannelSubscription.m */; }; + 84E6DAFC2DB69D9700E6A1AD /* ARTOSReachability.m in Sources */ = {isa = PBXBuildFile; fileRef = EB2D84FC1CD769B700F23CDA /* ARTOSReachability.m */; }; + 84E6DAFD2DB69D9700E6A1AD /* ARTNSMutableDictionary+ARTDictionaryUtil.m in Sources */ = {isa = PBXBuildFile; fileRef = D54C5547268B31E500729EC4 /* ARTNSMutableDictionary+ARTDictionaryUtil.m */; }; + 84E6DAFE2DB69D9700E6A1AD /* ARTPushActivationEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = D71966ED1E5E0081000974DD /* ARTPushActivationEvent.m */; }; + 84E6DAFF2DB69D9700E6A1AD /* ARTSRIOConsumerPool.m in Sources */ = {isa = PBXBuildFile; fileRef = 217D181325421FED00DFF07E /* ARTSRIOConsumerPool.m */; }; + 84E6DB002DB69D9700E6A1AD /* ARTConnectRetryState.m in Sources */ = {isa = PBXBuildFile; fileRef = 21088DC62A5355510033C722 /* ARTConnectRetryState.m */; }; + 84E6DB012DB69D9700E6A1AD /* ARTCrypto.m in Sources */ = {isa = PBXBuildFile; fileRef = 960D07921A45F1D800ED8C8C /* ARTCrypto.m */; }; + 84E6DB022DB69D9700E6A1AD /* ARTHTTPPaginatedResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = D769E15221270F3400DC5CD1 /* ARTHTTPPaginatedResponse.m */; }; + 84E6DB032DB69D9700E6A1AD /* ARTSRIOConsumer.m in Sources */ = {isa = PBXBuildFile; fileRef = 217D181225421FED00DFF07E /* ARTSRIOConsumer.m */; }; + 84E6DB042DB69D9700E6A1AD /* ARTPresence.m in Sources */ = {isa = PBXBuildFile; fileRef = D746AE271BBB61C9003ECEF8 /* ARTPresence.m */; }; + 84E6DB052DB69D9700E6A1AD /* ARTLocalDeviceStorage.m in Sources */ = {isa = PBXBuildFile; fileRef = D7DF73891EA645300013CD36 /* ARTLocalDeviceStorage.m */; }; + 84E6DB062DB69D9700E6A1AD /* ARTSRSIMDHelpers.m in Sources */ = {isa = PBXBuildFile; fileRef = 217D180925421FED00DFF07E /* ARTSRSIMDHelpers.m */; }; + 84E6DB072DB69D9700E6A1AD /* ARTWrapperSDKProxyPushChannel.m in Sources */ = {isa = PBXBuildFile; fileRef = 215924C22D636D2F004A235C /* ARTWrapperSDKProxyPushChannel.m */; }; + 84E6DB0C2DB69D9700E6A1AD /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = 80E519C62BBCBE20006545B4 /* PrivacyInfo.xcprivacy */; }; 850BFB4C1B79323C009D0ADD /* ARTPaginatedResult.h in Headers */ = {isa = PBXBuildFile; fileRef = 850BFB4A1B79323C009D0ADD /* ARTPaginatedResult.h */; settings = {ATTRIBUTES = (Public, ); }; }; 850BFB4D1B79323C009D0ADD /* ARTPaginatedResult.m in Sources */ = {isa = PBXBuildFile; fileRef = 850BFB4B1B79323C009D0ADD /* ARTPaginatedResult.m */; }; 851674EF1B7BA5CD00D35169 /* StatsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 851674EE1B7BA5CD00D35169 /* StatsTests.swift */; }; @@ -1151,6 +1528,13 @@ /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ + 84B2BAF62DB6CC3500334337 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 96BF61281A35B2AB004CF2B3 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 84E6D9C92DB69D9700E6A1AD; + remoteInfo = "Ably-visionOS"; + }; D7093C10219E2DB200723F17 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 96BF61281A35B2AB004CF2B3 /* Project object */; @@ -1189,6 +1573,17 @@ /* End PBXContainerItemProxy section */ /* Begin PBXCopyFilesBuildPhase section */ + 84B3FCB12DB69F9C00037368 /* Copy Carthage Frameworks to Test bundle */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + 84B2BAF52DB6CC3500334337 /* Ably.framework in Copy Carthage Frameworks to Test bundle */, + ); + name = "Copy Carthage Frameworks to Test bundle"; + runOnlyForDeploymentPostprocessing = 0; + }; D7093C36219EDB4400723F17 /* Copy Carthage Frameworks to Test bundle */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; @@ -1395,9 +1790,13 @@ 841134772722205400CFA837 /* ARTArchiveTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ARTArchiveTests.m; sourceTree = ""; }; 8412FDE12661AC37001FE9E6 /* AblyDeltaCodec.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = AblyDeltaCodec.xcframework; path = Carthage/Build/AblyDeltaCodec.xcframework; sourceTree = ""; }; 8412FDE32661AC37001FE9E6 /* msgpack.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = msgpack.xcframework; path = Carthage/Build/msgpack.xcframework; sourceTree = ""; }; - 8412FDF42661AC7B001FE9E6 /* Nimble.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = Nimble.xcframework; path = Carthage/Build/Nimble.xcframework; sourceTree = ""; }; 844B9CCE2C807BC400A260E8 /* ARTDeviceDetails+Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "ARTDeviceDetails+Private.h"; path = "PrivateHeaders/Ably/ARTDeviceDetails+Private.h"; sourceTree = ""; }; 848ED97226E50D0F0087E800 /* ObjcppTest.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = ObjcppTest.mm; sourceTree = ""; }; + 84B3FCB52DB69F9C00037368 /* Ably-visionOS-Tests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "Ably-visionOS-Tests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; + 84B3FCB62DB69F9C00037368 /* Info-visionOS.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = "Info-visionOS.plist"; path = "/Users/admin/Work/ably-cocoa/Test/Info-visionOS.plist"; sourceTree = ""; }; + 84B3FCBA2DB6A41100037368 /* Ably-visionOS.xctestplan */ = {isa = PBXFileReference; lastKnownFileType = text; path = "Ably-visionOS.xctestplan"; sourceTree = ""; }; + 84E6DB102DB69D9700E6A1AD /* Ably.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Ably.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 84E6DB112DB69D9700E6A1AD /* Info-visionOS.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = "Info-visionOS.plist"; path = "/Users/admin/Work/ably-cocoa/Source/Info-visionOS.plist"; sourceTree = ""; }; 850BFB4A1B79323C009D0ADD /* ARTPaginatedResult.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ARTPaginatedResult.h; path = include/Ably/ARTPaginatedResult.h; sourceTree = ""; }; 850BFB4B1B79323C009D0ADD /* ARTPaginatedResult.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ARTPaginatedResult.m; sourceTree = ""; }; 851674EE1B7BA5CD00D35169 /* StatsTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StatsTests.swift; sourceTree = ""; }; @@ -1666,12 +2065,31 @@ /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ + 84B3FCAC2DB69F9C00037368 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 84B3FCB92DB69FE700037368 /* Nimble in Frameworks */, + 84B2BAF42DB6CC3500334337 /* Ably.framework in Frameworks */, + 84B3FCAE2DB69F9C00037368 /* (null) in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 84E6DB082DB69D9700E6A1AD /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 84B2BAF12DB6A6B400334337 /* AblyDeltaCodec in Frameworks */, + 84B2BAF32DB6A6B700334337 /* msgpack in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 856AAC871B6E304B00B07119 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 8412FDFE2661AC7B001FE9E6 /* Nimble.xcframework in Frameworks */, D70F277D2261046A00956251 /* Ably.framework in Frameworks */, + 847F4FCD2DB592CD0002FAC0 /* Nimble in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1688,8 +2106,8 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 8412FDFF2661AC7B001FE9E6 /* Nimble.xcframework in Frameworks */, D7093C0F219E2DB200723F17 /* Ably.framework in Frameworks */, + 847F4FCF2DB592E10002FAC0 /* Nimble in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1697,8 +2115,8 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 8412FE002661AC7B001FE9E6 /* Nimble.xcframework in Frameworks */, D7093C65219EE1AE00723F17 /* Ably.framework in Frameworks */, + 847F4FD12DB592E80002FAC0 /* Nimble in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1959,8 +2377,10 @@ 856AAC8E1B6E304B00B07119 /* Info-iOS.plist */, D7093C0E219E2DB200723F17 /* Info-macOS.plist */, D7093C64219EE1AE00723F17 /* Info-tvOS.plist */, + 84B3FCB62DB69F9C00037368 /* Info-visionOS.plist */, 21DCDA8229F818630073A211 /* Ably-iOS.xctestplan */, 21DCDA8329F81B350073A211 /* Ably-macOS.xctestplan */, + 84B3FCBA2DB6A41100037368 /* Ably-visionOS.xctestplan */, 21DCDA8429F81B550073A211 /* Ably-tvOS.xctestplan */, ); path = Test; @@ -1995,6 +2415,8 @@ D7093C60219EE1AE00723F17 /* Ably-tvOS-Tests.xctest */, EB36308923804F7A00B83598 /* Ably-SoakTest-App.app */, EB36309E23804F7C00B83598 /* Ably-SoakTest-AppUITests.xctest */, + 84E6DB102DB69D9700E6A1AD /* Ably.framework */, + 84B3FCB52DB69F9C00037368 /* Ably-visionOS-Tests.xctest */, ); name = Products; sourceTree = ""; @@ -2030,6 +2452,7 @@ 1C118A5B1AE63D89006AD19E /* Info-iOS.plist */, D710D45E219495E2008F54AD /* Info-macOS.plist */, D710D478219495FC008F54AD /* Info-tvOS.plist */, + 84E6DB112DB69D9700E6A1AD /* Info-visionOS.plist */, ); name = "Supporting Files"; sourceTree = ""; @@ -2413,7 +2836,6 @@ children = ( 8412FDE12661AC37001FE9E6 /* AblyDeltaCodec.xcframework */, 8412FDE32661AC37001FE9E6 /* msgpack.xcframework */, - 8412FDF42661AC7B001FE9E6 /* Nimble.xcframework */, ); name = Frameworks; sourceTree = ""; @@ -2421,6 +2843,201 @@ /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */ + 84E6D9CA2DB69D9700E6A1AD /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 84E6D9CB2DB69D9700E6A1AD /* ARTMessageOperation.h in Headers */, + 84E6D9CC2DB69D9700E6A1AD /* ARTLocalDevice.h in Headers */, + 84E6D9CD2DB69D9700E6A1AD /* ARTPendingMessage.h in Headers */, + 84E6D9CE2DB69D9700E6A1AD /* ARTAttachRetryState.h in Headers */, + 84E6D9CF2DB69D9700E6A1AD /* ARTRestChannel+Private.h in Headers */, + 84E6D9D02DB69D9700E6A1AD /* ARTPaginatedResult+Private.h in Headers */, + 84E6D9D12DB69D9700E6A1AD /* ARTChannels.h in Headers */, + 84E6D9D22DB69D9700E6A1AD /* ARTCrypto+Private.h in Headers */, + 84E6D9D32DB69D9700E6A1AD /* ARTTypes.h in Headers */, + 84E6D9D42DB69D9700E6A1AD /* ARTPushActivationState.h in Headers */, + 84E6D9D52DB69D9700E6A1AD /* ARTRealtimeChannels+Private.h in Headers */, + 84E6D9D62DB69D9700E6A1AD /* ARTClientOptions.h in Headers */, + 84E6D9D72DB69D9700E6A1AD /* ARTRetrySequence.h in Headers */, + 84E6D9D82DB69D9700E6A1AD /* ARTEncoder.h in Headers */, + 84E6D9D92DB69D9700E6A1AD /* ARTDeltaCodec.h in Headers */, + 84E6D9DA2DB69D9700E6A1AD /* ARTJitterCoefficientGenerator.h in Headers */, + 84E6D9DB2DB69D9700E6A1AD /* ARTChannel+Private.h in Headers */, + 84E6D9DC2DB69D9700E6A1AD /* ARTPresenceMessage+Private.h in Headers */, + 84E6D9DD2DB69D9700E6A1AD /* ARTLog.h in Headers */, + 84E6D9DE2DB69D9700E6A1AD /* ARTChannels+Private.h in Headers */, + 84E6D9DF2DB69D9700E6A1AD /* ARTHTTPPaginatedResponse.h in Headers */, + 84E6D9E02DB69D9700E6A1AD /* ARTMessage.h in Headers */, + 84E6D9E12DB69D9700E6A1AD /* ARTClientOptions+Private.h in Headers */, + 84E6D9E22DB69D9700E6A1AD /* ARTConnectionStateChangeParams.h in Headers */, + 84E6D9E32DB69D9700E6A1AD /* ARTChannelStateChangeParams.h in Headers */, + 84E6D9E42DB69D9700E6A1AD /* ARTChannel.h in Headers */, + 84E6D9E52DB69D9700E6A1AD /* ARTPushChannel+Private.h in Headers */, + 84E6D9E62DB69D9700E6A1AD /* ARTNSURL+ARTUtils.h in Headers */, + 84E6D9E72DB69D9700E6A1AD /* ARTNSMutableURLRequest+ARTUtils.h in Headers */, + 84E6D9E82DB69D9700E6A1AD /* ARTOSReachability.h in Headers */, + 84E6D9E92DB69D9700E6A1AD /* ARTPushActivationStateMachine.h in Headers */, + 84E6D9EA2DB69D9700E6A1AD /* ARTPresenceMessage.h in Headers */, + 84E6D9EB2DB69D9700E6A1AD /* ARTRealtimeChannel+Private.h in Headers */, + 84E6D9EC2DB69D9700E6A1AD /* ARTDataEncoder.h in Headers */, + 84E6D9ED2DB69D9700E6A1AD /* ARTRest+Private.h in Headers */, + 84E6D9EE2DB69D9700E6A1AD /* ARTChannelOptions.h in Headers */, + 84E6D9EF2DB69D9700E6A1AD /* ARTPaginatedResult+Subclass.h in Headers */, + 84E6D9F02DB69D9700E6A1AD /* ARTEventEmitter+Private.h in Headers */, + 84E6D9F12DB69D9700E6A1AD /* ARTWrapperSDKProxyPush.h in Headers */, + 84E6D9F22DB69D9700E6A1AD /* ARTConnectRetryState.h in Headers */, + 84E6D9F32DB69D9700E6A1AD /* ARTInternalLog+Testing.h in Headers */, + 84E6D9F42DB69D9700E6A1AD /* ARTPresence+Private.h in Headers */, + 84E6D9F52DB69D9700E6A1AD /* ARTCrypto.h in Headers */, + 84E6D9F62DB69D9700E6A1AD /* ARTReachability.h in Headers */, + 84E6D9F72DB69D9700E6A1AD /* ARTBaseMessage.h in Headers */, + 84E6D9F82DB69D9700E6A1AD /* ARTPushActivationEvent.h in Headers */, + 84E6D9F92DB69D9700E6A1AD /* ARTStringifiable+Private.h in Headers */, + 84E6D9FA2DB69D9700E6A1AD /* ARTSRWebSocket.h in Headers */, + 84E6D9FB2DB69D9700E6A1AD /* ARTURLSession.h in Headers */, + 84E6D9FC2DB69D9700E6A1AD /* ARTWebSocketTransport+Private.h in Headers */, + 84E6D9FD2DB69D9700E6A1AD /* ARTWrapperSDKProxyRealtimeChannel.h in Headers */, + 84E6D9FE2DB69D9700E6A1AD /* ARTWrapperSDKProxyRealtimeChannels.h in Headers */, + 84E6D9FF2DB69D9700E6A1AD /* ARTWrapperSDKProxyOptions.h in Headers */, + 84E6DA002DB69D9700E6A1AD /* ARTWrapperSDKProxyPushAdmin+Private.h in Headers */, + 84E6DA012DB69D9700E6A1AD /* ARTPushChannelSubscriptions.h in Headers */, + 84E6DA022DB69D9700E6A1AD /* ARTWebSocketFactory.h in Headers */, + 84E6DA032DB69D9700E6A1AD /* ARTTypes+Private.h in Headers */, + 84E6DA042DB69D9700E6A1AD /* ARTPushActivationStateMachine+Private.h in Headers */, + 84E6DA052DB69D9700E6A1AD /* ARTVCDiffDecoder.h in Headers */, + 84E6DA062DB69D9700E6A1AD /* ARTEventEmitter.h in Headers */, + 84E6DA072DB69D9700E6A1AD /* ARTHttp.h in Headers */, + 84E6DA082DB69D9700E6A1AD /* ARTChannel+Subclass.h in Headers */, + 84E6DA092DB69D9700E6A1AD /* ARTMsgPackEncoder.h in Headers */, + 84E6DA0A2DB69D9700E6A1AD /* ARTJsonEncoder.h in Headers */, + 84E6DA0B2DB69D9700E6A1AD /* ARTTokenParams+Private.h in Headers */, + 84E6DA0C2DB69D9700E6A1AD /* ARTPushChannelSubscription.h in Headers */, + 84E6DA0D2DB69D9700E6A1AD /* ARTAuth+Private.h in Headers */, + 84E6DA0E2DB69D9700E6A1AD /* ARTRealtimeTransport.h in Headers */, + 84E6DA0F2DB69D9700E6A1AD /* ARTDeviceDetails+Private.h in Headers */, + 84E6DA102DB69D9700E6A1AD /* ARTTokenRequest.h in Headers */, + 84E6DA112DB69D9700E6A1AD /* ARTRealtimePresence+Private.h in Headers */, + 84E6DA122DB69D9700E6A1AD /* ARTRestPresence.h in Headers */, + 84E6DA132DB69D9700E6A1AD /* ARTProtocolMessage+Private.h in Headers */, + 84E6DA142DB69D9700E6A1AD /* ARTRestChannels+Private.h in Headers */, + 84E6DA152DB69D9700E6A1AD /* ARTAuthOptions.h in Headers */, + 84E6DA162DB69D9700E6A1AD /* ARTDevicePushDetails.h in Headers */, + 84E6DA172DB69D9700E6A1AD /* ARTClientOptions+TestConfiguration.h in Headers */, + 84E6DA182DB69D9700E6A1AD /* ARTStats.h in Headers */, + 84E6DA192DB69D9700E6A1AD /* ARTRestPresence+Private.h in Headers */, + 84E6DA1A2DB69D9700E6A1AD /* ARTRestChannels.h in Headers */, + 84E6DA1B2DB69D9700E6A1AD /* ARTRealtimePresence.h in Headers */, + 84E6DA1C2DB69D9700E6A1AD /* ARTRest.h in Headers */, + 84E6DA1D2DB69D9700E6A1AD /* ARTAuthOptions+Private.h in Headers */, + 84E6DA1E2DB69D9700E6A1AD /* ARTInternalLog.h in Headers */, + 84E6DA1F2DB69D9700E6A1AD /* ARTWrapperSDKProxyRealtimeChannel+Private.h in Headers */, + 84E6DA202DB69D9700E6A1AD /* ARTWrapperSDKProxyRealtimeChannels+Private.h in Headers */, + 84E6DA212DB69D9700E6A1AD /* ARTDeviceStorage.h in Headers */, + 84E6DA222DB69D9700E6A1AD /* ARTWrapperSDKProxyRealtimePresence.h in Headers */, + 84E6DA232DB69D9700E6A1AD /* ARTDataQuery.h in Headers */, + 84E6DA242DB69D9700E6A1AD /* ARTTokenParams.h in Headers */, + 84E6DA252DB69D9700E6A1AD /* ARTDeviceDetails.h in Headers */, + 84E6DA262DB69D9700E6A1AD /* ARTConnection+Private.h in Headers */, + 84E6DA272DB69D9700E6A1AD /* ARTNSMutableRequest+ARTPush.h in Headers */, + 84E6DA282DB69D9700E6A1AD /* ARTAttachRequestParams.h in Headers */, + 84E6DA292DB69D9700E6A1AD /* ARTWrapperSDKProxyRealtime.h in Headers */, + 84E6DA2A2DB69D9700E6A1AD /* ARTHttp+Private.h in Headers */, + 84E6DA2B2DB69D9700E6A1AD /* ARTRealtimeTransportFactory.h in Headers */, + 84E6DA2C2DB69D9700E6A1AD /* ARTChannelOptions+Private.h in Headers */, + 84E6DA2D2DB69D9700E6A1AD /* ARTPushChannelSubscriptions+Private.h in Headers */, + 84E6DA2E2DB69D9700E6A1AD /* ARTConstants.h in Headers */, + 84E6DA2F2DB69D9700E6A1AD /* ARTURLSessionServerTrust.h in Headers */, + 84E6DA302DB69D9700E6A1AD /* ARTPush.h in Headers */, + 84E6DA312DB69D9700E6A1AD /* ARTMessageOperation+Private.h in Headers */, + 84E6DA322DB69D9700E6A1AD /* ARTFallbackHosts.h in Headers */, + 84E6DA332DB69D9700E6A1AD /* ARTWrapperSDKProxyRealtime+Private.h in Headers */, + 84E6DA342DB69D9700E6A1AD /* ARTRealtimeChannel.h in Headers */, + 84E6DA352DB69D9700E6A1AD /* ARTDevicePushDetails+Private.h in Headers */, + 84E6DA362DB69D9700E6A1AD /* ARTContinuousClock.h in Headers */, + 84E6DA372DB69D9700E6A1AD /* ARTPushChannel.h in Headers */, + 84E6DA382DB69D9700E6A1AD /* ARTLocalDeviceStorage.h in Headers */, + 84E6DA392DB69D9700E6A1AD /* ARTConnectionDetails+Private.h in Headers */, + 84E6DA3A2DB69D9700E6A1AD /* ARTRetryDelayCalculator.h in Headers */, + 84E6DA3B2DB69D9700E6A1AD /* ARTErrorChecker.h in Headers */, + 84E6DA3C2DB69D9700E6A1AD /* ARTStringifiable.h in Headers */, + 84E6DA3D2DB69D9700E6A1AD /* NSURLQueryItem+Stringifiable.h in Headers */, + 84E6DA3E2DB69D9700E6A1AD /* ARTWrapperSDKProxyPushChannel+Private.h in Headers */, + 84E6DA3F2DB69D9700E6A1AD /* ARTDeviceIdentityTokenDetails.h in Headers */, + 84E6DA402DB69D9700E6A1AD /* ARTRealtimeChannelOptions.h in Headers */, + 84E6DA412DB69D9700E6A1AD /* ARTDefault.h in Headers */, + 84E6DA422DB69D9700E6A1AD /* ARTDeviceIdentityTokenDetails+Private.h in Headers */, + 84E6DA432DB69D9700E6A1AD /* ARTClientInformation+Private.h in Headers */, + 84E6DA442DB69D9700E6A1AD /* ARTAuthDetails.h in Headers */, + 84E6DA452DB69D9700E6A1AD /* ARTLocalDevice+Private.h in Headers */, + 84E6DA462DB69D9700E6A1AD /* ARTRealtime.h in Headers */, + 84E6DA472DB69D9700E6A1AD /* ARTProtocolMessage.h in Headers */, + 84E6DA482DB69D9700E6A1AD /* ARTVersion2Log.h in Headers */, + 84E6DA492DB69D9700E6A1AD /* Ably.h in Headers */, + 84E6DA4A2DB69D9700E6A1AD /* AblyInternal.h in Headers */, + 84E6DA4B2DB69D9700E6A1AD /* ARTChannelProtocol.h in Headers */, + 84E6DA4C2DB69D9700E6A1AD /* AblyPublic.h in Headers */, + 84E6DA4D2DB69D9700E6A1AD /* ARTQueuedDealloc.h in Headers */, + 84E6DA4E2DB69D9700E6A1AD /* ARTPushAdmin.h in Headers */, + 84E6DA4F2DB69D9700E6A1AD /* ARTDefault+Private.h in Headers */, + 84E6DA502DB69D9700E6A1AD /* ARTWrapperSDKProxyPush+Private.h in Headers */, + 84E6DA512DB69D9700E6A1AD /* ARTFormEncode.h in Headers */, + 84E6DA522DB69D9700E6A1AD /* ARTStatus.h in Headers */, + 84E6DA532DB69D9700E6A1AD /* ARTHTTPPaginatedResponse+Private.h in Headers */, + 84E6DA542DB69D9700E6A1AD /* ARTTokenDetails.h in Headers */, + 84E6DA552DB69D9700E6A1AD /* ARTPush+Private.h in Headers */, + 84E6DA562DB69D9700E6A1AD /* ARTNSDate+ARTUtil.h in Headers */, + 84E6DA572DB69D9700E6A1AD /* ARTWrapperSDKProxyPushDeviceRegistrations.h in Headers */, + 84E6DA582DB69D9700E6A1AD /* ARTWrapperSDKProxyPushChannelSubscriptions.h in Headers */, + 84E6DA592DB69D9700E6A1AD /* ARTWrapperSDKProxyRealtimePresence+Private.h in Headers */, + 84E6DA5A2DB69D9700E6A1AD /* ARTConnectionDetails.h in Headers */, + 84E6DA5B2DB69D9700E6A1AD /* ARTRealtimeChannels.h in Headers */, + 84E6DA5C2DB69D9700E6A1AD /* ARTFallback.h in Headers */, + 84E6DA5D2DB69D9700E6A1AD /* ARTWebSocket.h in Headers */, + 84E6DA5E2DB69D9700E6A1AD /* ARTWebSocketTransport.h in Headers */, + 84E6DA5F2DB69D9700E6A1AD /* ARTConnection.h in Headers */, + 84E6DA602DB69D9700E6A1AD /* ARTRealtime+Private.h in Headers */, + 84E6DA612DB69D9700E6A1AD /* ARTPushDeviceRegistrations.h in Headers */, + 84E6DA622DB69D9700E6A1AD /* ARTNSMutableURLRequest+ARTPaginated.h in Headers */, + 84E6DA632DB69D9700E6A1AD /* ARTBackoffRetryDelayCalculator.h in Headers */, + 84E6DA642DB69D9700E6A1AD /* ARTAuth.h in Headers */, + 84E6DA652DB69D9700E6A1AD /* ARTPresence.h in Headers */, + 84E6DA662DB69D9700E6A1AD /* ARTQueuedMessage.h in Headers */, + 84E6DA672DB69D9700E6A1AD /* ARTNSHTTPURLResponse+ARTPaginated.h in Headers */, + 84E6DA682DB69D9700E6A1AD /* ARTJsonLikeEncoder.h in Headers */, + 84E6DA692DB69D9700E6A1AD /* ARTRestChannel.h in Headers */, + 84E6DA6A2DB69D9700E6A1AD /* ARTInternalLogCore+Testing.h in Headers */, + 84E6DA6B2DB69D9700E6A1AD /* ARTLog+Private.h in Headers */, + 84E6DA6C2DB69D9700E6A1AD /* ARTPushAdmin+Private.h in Headers */, + 84E6DA6D2DB69D9700E6A1AD /* ARTDataQuery+Private.h in Headers */, + 84E6DA6E2DB69D9700E6A1AD /* ARTGCD.h in Headers */, + 84E6DA6F2DB69D9700E6A1AD /* ARTNSArray+ARTFunctional.h in Headers */, + 84E6DA702DB69D9700E6A1AD /* ARTNSDictionary+ARTDictionaryUtil.h in Headers */, + 84E6DA712DB69D9700E6A1AD /* ARTNSString+ARTUtil.h in Headers */, + 84E6DA722DB69D9700E6A1AD /* ARTPushDeviceRegistrations+Private.h in Headers */, + 84E6DA732DB69D9700E6A1AD /* ARTLogAdapter+Testing.h in Headers */, + 84E6DA742DB69D9700E6A1AD /* ARTTestClientOptions.h in Headers */, + 84E6DA752DB69D9700E6A1AD /* ARTFallback+Private.h in Headers */, + 84E6DA762DB69D9700E6A1AD /* ARTPaginatedResult.h in Headers */, + 84E6DA772DB69D9700E6A1AD /* ARTNSError+ARTUtils.h in Headers */, + 84E6DA782DB69D9700E6A1AD /* ARTWrapperSDKProxyPushAdmin.h in Headers */, + 84E6DA792DB69D9700E6A1AD /* ARTWrapperSDKProxyPushDeviceRegistrations+Private.h in Headers */, + 84E6DA7A2DB69D9700E6A1AD /* ARTWrapperSDKProxyPushChannelSubscriptions+Private.h in Headers */, + 84E6DA7B2DB69D9700E6A1AD /* ARTRealtime+WrapperSDKProxy.h in Headers */, + 84E6DA7C2DB69D9700E6A1AD /* ARTNSMutableRequest+ARTRest.h in Headers */, + 84E6DA7D2DB69D9700E6A1AD /* ARTWrapperSDKProxyPushChannel.h in Headers */, + 84E6DA7E2DB69D9700E6A1AD /* ARTInternalLogCore.h in Headers */, + 84E6DA7F2DB69D9700E6A1AD /* ARTBaseMessage+Private.h in Headers */, + 84E6DA802DB69D9700E6A1AD /* ARTSRPinningSecurityPolicy.h in Headers */, + 84E6DA812DB69D9700E6A1AD /* ARTClientInformation.h in Headers */, + 84E6DA822DB69D9700E6A1AD /* NSRunLoop+ARTSRWebSocket.h in Headers */, + 84E6DA832DB69D9700E6A1AD /* ARTNSMutableDictionary+ARTDictionaryUtil.h in Headers */, + 84E6DA842DB69D9700E6A1AD /* NSURLRequest+ARTSRWebSocket.h in Headers */, + 84E6DA852DB69D9700E6A1AD /* ARTSRSecurityPolicy.h in Headers */, + 84E6DA862DB69D9700E6A1AD /* ARTLogAdapter.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 96BF612E1A35B2AB004CF2B3 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; @@ -3008,6 +3625,43 @@ /* End PBXHeadersBuildPhase section */ /* Begin PBXNativeTarget section */ + 84B3FC732DB69F9C00037368 /* Ably-visionOS-Tests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 84B3FCB22DB69F9C00037368 /* Build configuration list for PBXNativeTarget "Ably-visionOS-Tests" */; + buildPhases = ( + 84B3FC762DB69F9C00037368 /* Sources */, + 84B3FCAC2DB69F9C00037368 /* Frameworks */, + 84B3FCAF2DB69F9C00037368 /* Resources */, + 84B3FCB12DB69F9C00037368 /* Copy Carthage Frameworks to Test bundle */, + ); + buildRules = ( + ); + dependencies = ( + 84B2BAF72DB6CC3500334337 /* PBXTargetDependency */, + ); + name = "Ably-visionOS-Tests"; + productName = "Ably-tvOS-Tests"; + productReference = 84B3FCB52DB69F9C00037368 /* Ably-visionOS-Tests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; + 84E6D9C92DB69D9700E6A1AD /* Ably-visionOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = 84E6DB0D2DB69D9700E6A1AD /* Build configuration list for PBXNativeTarget "Ably-visionOS" */; + buildPhases = ( + 84E6D9CA2DB69D9700E6A1AD /* Headers */, + 84E6DA872DB69D9700E6A1AD /* Sources */, + 84E6DB082DB69D9700E6A1AD /* Frameworks */, + 84E6DB0B2DB69D9700E6A1AD /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "Ably-visionOS"; + productName = "Ably-tvOS"; + productReference = 84E6DB102DB69D9700E6A1AD /* Ably.framework */; + productType = "com.apple.product-type.framework"; + }; 856AAC891B6E304B00B07119 /* Ably-iOS-Tests */ = { isa = PBXNativeTarget; buildConfigurationList = 856AAC921B6E304B00B07119 /* Build configuration list for PBXNativeTarget "Ably-iOS-Tests" */; @@ -3216,6 +3870,11 @@ Base, ); mainGroup = 96BF61271A35B2AB004CF2B3; + packageReferences = ( + 84B3FCB72DB69FD500037368 /* XCRemoteSwiftPackageReference "Nimble" */, + 84B2BAEE2DB6A66300334337 /* XCRemoteSwiftPackageReference "delta-codec-cocoa" */, + 84B2BAEF2DB6A66E00334337 /* XCRemoteSwiftPackageReference "msgpack-objective-C" */, + ); productRefGroup = 96BF61321A35B2AB004CF2B3 /* Products */; projectDirPath = ""; projectRoot = ""; @@ -3226,6 +3885,8 @@ D7093C09219E2DB200723F17 /* Ably-macOS-Tests */, D710D474219495FC008F54AD /* Ably-tvOS */, D7093C5F219EE1AE00723F17 /* Ably-tvOS-Tests */, + 84E6D9C92DB69D9700E6A1AD /* Ably-visionOS */, + 84B3FC732DB69F9C00037368 /* Ably-visionOS-Tests */, EB36308823804F7A00B83598 /* Ably-SoakTest-App */, EB36309D23804F7C00B83598 /* Ably-SoakTest-AppUITests */, ); @@ -3233,6 +3894,22 @@ /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ + 84B3FCAF2DB69F9C00037368 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 84B3FCB02DB69F9C00037368 /* ably-common in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 84E6DB0B2DB69D9700E6A1AD /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 84E6DB0C2DB69D9700E6A1AD /* PrivacyInfo.xcprivacy in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 856AAC881B6E304B00B07119 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; @@ -3301,6 +3978,201 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ + 84B3FC762DB69F9C00037368 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 84B3FC772DB69F9C00037368 /* RestClientTests.swift in Sources */, + 84B3FC782DB69F9C00037368 /* AttachRetryStateTests.swift in Sources */, + 84B3FC792DB69F9C00037368 /* RealtimeClientChannelTests.swift in Sources */, + 84B3FC7A2DB69F9C00037368 /* ObjcppTest.mm in Sources */, + 84B3FC7B2DB69F9C00037368 /* RealtimeClientPresenceTests.swift in Sources */, + 84B3FC7C2DB69F9C00037368 /* LogAdapterTests.swift in Sources */, + 84B3FC7D2DB69F9C00037368 /* ReadmeExamplesTests.swift in Sources */, + 84B3FC7E2DB69F9C00037368 /* DefaultJitterCoefficientGeneratorTests.swift in Sources */, + 84B3FC7F2DB69F9C00037368 /* ARTDefaultTests.swift in Sources */, + 84B3FC802DB69F9C00037368 /* DataGatherer.swift in Sources */, + 84B3FC812DB69F9C00037368 /* BackoffCoefficients.swift in Sources */, + 84B3FC822DB69F9C00037368 /* DefaultErrorCheckerTests.swift in Sources */, + 84B3FC832DB69F9C00037368 /* CryptoData.swift in Sources */, + 84B3FC842DB69F9C00037368 /* NSObject+TestSuite.m in Sources */, + 84B3FC852DB69F9C00037368 /* TestUtilities.swift in Sources */, + 84B3FC862DB69F9C00037368 /* StatsTests.swift in Sources */, + 84B3FC872DB69F9C00037368 /* RestClientChannelTests.swift in Sources */, + 84B3FC882DB69F9C00037368 /* StringifiableTests.swift in Sources */, + 84B3FC892DB69F9C00037368 /* RealtimeClientChannelsTests.swift in Sources */, + 84B3FC8A2DB69F9C00037368 /* TestProxyTransportFactory.swift in Sources */, + 84B3FC8B2DB69F9C00037368 /* RestClientPresenceTests.swift in Sources */, + 84B3FC8C2DB69F9C00037368 /* ClientInformationTests.swift in Sources */, + 84B3FC8D2DB69F9C00037368 /* BackoffRetryDelayCalculatorTests.swift in Sources */, + 84B3FC8E2DB69F9C00037368 /* RestClientChannelsTests.swift in Sources */, + 84B3FC8F2DB69F9C00037368 /* ChannelOptionsTests.swift in Sources */, + 84B3FC902DB69F9C00037368 /* RestClientStatsTests.swift in Sources */, + 84B3FC912DB69F9C00037368 /* ConnectRetryStateTests.swift in Sources */, + 84B3FC922DB69F9C00037368 /* DefaultInternalLogCoreTests.swift in Sources */, + 84B3FC932DB69F9C00037368 /* JSON.swift in Sources */, + 84B3FC942DB69F9C00037368 /* CryptoTests.swift in Sources */, + 84B3FC952DB69F9C00037368 /* GCDTests.swift in Sources */, + 84B3FC962DB69F9C00037368 /* ObjectLifetimesTests.swift in Sources */, + 84B3FC972DB69F9C00037368 /* TestAppSetup.swift in Sources */, + 84B3FC982DB69F9C00037368 /* RetrySequenceTests.swift in Sources */, + 84B3FC992DB69F9C00037368 /* MockInternalLogCore.swift in Sources */, + 84B3FC9A2DB69F9C00037368 /* ARTInternalLogTests.m in Sources */, + 84B3FC9B2DB69F9C00037368 /* RealtimeClientConnectionTests.swift in Sources */, + 84B3FC9C2DB69F9C00037368 /* DeltaCodecTests.swift in Sources */, + 84B3FC9D2DB69F9C00037368 /* MockVersion2Log.swift in Sources */, + 84B3FC9E2DB69F9C00037368 /* Aspects.m in Sources */, + 84B3FC9F2DB69F9C00037368 /* MockRetryDelayCalculator.swift in Sources */, + 84B3FCA02DB69F9C00037368 /* MockJitterCoefficientGenerator.swift in Sources */, + 84B3FCA12DB69F9C00037368 /* AuthTests.swift in Sources */, + 84B3FCA22DB69F9C00037368 /* MockErrorChecker.swift in Sources */, + 84B3FCA32DB69F9C00037368 /* NSObject+TestSuite.swift in Sources */, + 84B3FCA42DB69F9C00037368 /* RealtimeClientTests.swift in Sources */, + 84B3FCA52DB69F9C00037368 /* WrapperSDKProxyTests.swift in Sources */, + 84B3FCA62DB69F9C00037368 /* CryptoTest.m in Sources */, + 84B3FCA72DB69F9C00037368 /* RestPaginatedTests.swift in Sources */, + 84B3FCA82DB69F9C00037368 /* ContinuousClockTests.swift in Sources */, + 84B3FCA92DB69F9C00037368 /* Test.swift in Sources */, + 84B3FCAA2DB69F9C00037368 /* UtilitiesTests.swift in Sources */, + 84B3FCAB2DB69F9C00037368 /* StaticJitterCoefficients.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 84E6DA872DB69D9700E6A1AD /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 84E6DA882DB69D9700E6A1AD /* ARTConnectionDetails.m in Sources */, + 84E6DA892DB69D9700E6A1AD /* NSURLRequest+ARTSRWebSocket.m in Sources */, + 84E6DA8A2DB69D9700E6A1AD /* ARTSRWebSocket.m in Sources */, + 84E6DA8B2DB69D9700E6A1AD /* ARTRealtimePresence.m in Sources */, + 84E6DA8C2DB69D9700E6A1AD /* ARTRealtimeChannels.m in Sources */, + 84E6DA8D2DB69D9700E6A1AD /* ARTFallbackHosts.m in Sources */, + 84E6DA8E2DB69D9700E6A1AD /* ARTChannelStateChangeParams.m in Sources */, + 84E6DA8F2DB69D9700E6A1AD /* ARTDevicePushDetails.m in Sources */, + 84E6DA902DB69D9700E6A1AD /* ARTDataQuery.m in Sources */, + 84E6DA912DB69D9700E6A1AD /* ARTPush.m in Sources */, + 84E6DA922DB69D9700E6A1AD /* ARTSRDelegateController.m in Sources */, + 84E6DA932DB69D9700E6A1AD /* ARTStats.m in Sources */, + 84E6DA942DB69D9700E6A1AD /* ARTWrapperSDKProxyPushAdmin.m in Sources */, + 84E6DA952DB69D9700E6A1AD /* ARTRealtimeChannelOptions.m in Sources */, + 84E6DA962DB69D9700E6A1AD /* ARTWrapperSDKProxyPush.m in Sources */, + 84E6DA972DB69D9700E6A1AD /* ARTQueuedMessage.m in Sources */, + 84E6DA982DB69D9700E6A1AD /* ARTRest.m in Sources */, + 84E6DA992DB69D9700E6A1AD /* ARTNSMutableRequest+ARTPush.m in Sources */, + 84E6DA9A2DB69D9700E6A1AD /* ARTNSMutableURLRequest+ARTUtils.m in Sources */, + 84E6DA9B2DB69D9700E6A1AD /* ARTSRHash.m in Sources */, + 84E6DA9C2DB69D9700E6A1AD /* ARTLog.m in Sources */, + 84E6DA9D2DB69D9700E6A1AD /* ARTSRMutex.m in Sources */, + 84E6DA9E2DB69D9700E6A1AD /* ARTChannels.m in Sources */, + 84E6DA9F2DB69D9700E6A1AD /* ARTSRError.m in Sources */, + 84E6DAA02DB69D9700E6A1AD /* ARTPendingMessage.m in Sources */, + 84E6DAA12DB69D9700E6A1AD /* ARTPushActivationState.m in Sources */, + 84E6DAA22DB69D9700E6A1AD /* ARTGCD.m in Sources */, + 84E6DAA32DB69D9700E6A1AD /* ARTSRRunLoopThread.m in Sources */, + 84E6DAA42DB69D9700E6A1AD /* ARTSRSecurityPolicy.m in Sources */, + 84E6DAA52DB69D9700E6A1AD /* ARTInternalLogCore.m in Sources */, + 84E6DAA62DB69D9700E6A1AD /* ARTNSHTTPURLResponse+ARTPaginated.m in Sources */, + 84E6DAA72DB69D9700E6A1AD /* ARTAuthOptions.m in Sources */, + 84E6DAA82DB69D9700E6A1AD /* ARTTypes.m in Sources */, + 84E6DAA92DB69D9700E6A1AD /* ARTDataEncoder.m in Sources */, + 84E6DAAA2DB69D9700E6A1AD /* ARTConnection.m in Sources */, + 84E6DAAB2DB69D9700E6A1AD /* ARTClientInformation.m in Sources */, + 84E6DAAC2DB69D9700E6A1AD /* ARTWebSocketTransport.m in Sources */, + 84E6DAAD2DB69D9700E6A1AD /* ARTSRRandom.m in Sources */, + 84E6DAAE2DB69D9700E6A1AD /* ARTPresenceMessage.m in Sources */, + 84E6DAAF2DB69D9700E6A1AD /* ARTFallback.m in Sources */, + 84E6DAB02DB69D9700E6A1AD /* ARTTokenRequest.m in Sources */, + 84E6DAB12DB69D9700E6A1AD /* ARTEventEmitter.m in Sources */, + 84E6DAB22DB69D9700E6A1AD /* ARTProtocolMessage.m in Sources */, + 84E6DAB32DB69D9700E6A1AD /* ARTNSURL+ARTUtils.m in Sources */, + 84E6DAB42DB69D9700E6A1AD /* ARTLocalDevice.m in Sources */, + 84E6DAB52DB69D9700E6A1AD /* ARTDeviceIdentityTokenDetails.m in Sources */, + 84E6DAB62DB69D9700E6A1AD /* ARTLogAdapter.m in Sources */, + 84E6DAB72DB69D9700E6A1AD /* ARTRealtimeTransportFactory.m in Sources */, + 84E6DAB82DB69D9700E6A1AD /* ARTJitterCoefficientGenerator.m in Sources */, + 84E6DAB92DB69D9700E6A1AD /* ARTRealtimeTransport.m in Sources */, + 84E6DABA2DB69D9700E6A1AD /* ARTWrapperSDKProxyRealtimeChannel.m in Sources */, + 84E6DABB2DB69D9700E6A1AD /* ARTWrapperSDKProxyRealtimeChannels.m in Sources */, + 84E6DABC2DB69D9700E6A1AD /* ARTSRPinningSecurityPolicy.m in Sources */, + 84E6DABD2DB69D9700E6A1AD /* ARTRestChannel.m in Sources */, + 84E6DABE2DB69D9700E6A1AD /* ARTRestPresence.m in Sources */, + 84E6DABF2DB69D9700E6A1AD /* ARTTestClientOptions.m in Sources */, + 84E6DAC02DB69D9700E6A1AD /* ARTNSDate+ARTUtil.m in Sources */, + 84E6DAC12DB69D9700E6A1AD /* ARTSRConstants.m in Sources */, + 84E6DAC22DB69D9700E6A1AD /* ARTContinuousClock.m in Sources */, + 84E6DAC32DB69D9700E6A1AD /* ARTMessageOperation.m in Sources */, + 84E6DAC42DB69D9700E6A1AD /* ARTPushAdmin.m in Sources */, + 84E6DAC52DB69D9700E6A1AD /* ARTSRProxyConnect.m in Sources */, + 84E6DAC62DB69D9700E6A1AD /* ARTDeviceDetails.m in Sources */, + 84E6DAC72DB69D9700E6A1AD /* ARTJsonLikeEncoder.m in Sources */, + 84E6DAC82DB69D9700E6A1AD /* ARTWrapperSDKProxyOptions.m in Sources */, + 84E6DAC92DB69D9700E6A1AD /* ARTPushChannelSubscriptions.m in Sources */, + 84E6DACA2DB69D9700E6A1AD /* ARTPushActivationStateMachine.m in Sources */, + 84E6DACB2DB69D9700E6A1AD /* ARTNSMutableRequest+ARTRest.m in Sources */, + 84E6DACC2DB69D9700E6A1AD /* NSRunLoop+ARTSRWebSocket.m in Sources */, + 84E6DACD2DB69D9700E6A1AD /* ARTWrapperSDKProxyPushChannelSubscriptions.m in Sources */, + 84E6DACE2DB69D9700E6A1AD /* ARTWrapperSDKProxyPushDeviceRegistrations.m in Sources */, + 84E6DACF2DB69D9700E6A1AD /* ARTMsgPackEncoder.m in Sources */, + 84E6DAD02DB69D9700E6A1AD /* ARTDefault.m in Sources */, + 84E6DAD12DB69D9700E6A1AD /* ARTAttachRetryState.m in Sources */, + 84E6DAD22DB69D9700E6A1AD /* ARTMessage.m in Sources */, + 84E6DAD32DB69D9700E6A1AD /* ARTNSArray+ARTFunctional.m in Sources */, + 84E6DAD42DB69D9700E6A1AD /* ARTNSString+ARTUtil.m in Sources */, + 84E6DAD52DB69D9700E6A1AD /* ARTAuth.m in Sources */, + 84E6DAD62DB69D9700E6A1AD /* ARTTokenParams.m in Sources */, + 84E6DAD72DB69D9700E6A1AD /* ARTPushChannel.m in Sources */, + 84E6DAD82DB69D9700E6A1AD /* ARTWrapperSDKProxyRealtime.m in Sources */, + 84E6DAD92DB69D9700E6A1AD /* ARTTokenDetails.m in Sources */, + 84E6DADA2DB69D9700E6A1AD /* ARTRestChannels.m in Sources */, + 84E6DADB2DB69D9700E6A1AD /* ARTURLSessionServerTrust.m in Sources */, + 84E6DADC2DB69D9700E6A1AD /* ARTWrapperSDKProxyRealtimePresence.m in Sources */, + 84E6DADD2DB69D9700E6A1AD /* ARTJsonEncoder.m in Sources */, + 84E6DADE2DB69D9700E6A1AD /* ARTClientOptions.m in Sources */, + 84E6DADF2DB69D9700E6A1AD /* ARTChannel.m in Sources */, + 84E6DAE02DB69D9700E6A1AD /* ARTFormEncode.m in Sources */, + 84E6DAE12DB69D9700E6A1AD /* ARTAuthDetails.m in Sources */, + 84E6DAE22DB69D9700E6A1AD /* ARTRealtime.m in Sources */, + 84E6DAE32DB69D9700E6A1AD /* ARTRealtimeChannel.m in Sources */, + 84E6DAE42DB69D9700E6A1AD /* ARTNSDictionary+ARTDictionaryUtil.m in Sources */, + 84E6DAE52DB69D9700E6A1AD /* ARTAttachRequestParams.m in Sources */, + 84E6DAE62DB69D9700E6A1AD /* ARTConstants.m in Sources */, + 84E6DAE72DB69D9700E6A1AD /* ARTBaseMessage.m in Sources */, + 84E6DAE82DB69D9700E6A1AD /* ARTStringifiable.m in Sources */, + 84E6DAE92DB69D9700E6A1AD /* ARTNSMutableURLRequest+ARTPaginated.m in Sources */, + 84E6DAEA2DB69D9700E6A1AD /* ARTInternalLog.m in Sources */, + 84E6DAEB2DB69D9700E6A1AD /* ARTSRHTTPConnectMessage.m in Sources */, + 84E6DAEC2DB69D9700E6A1AD /* ARTPushDeviceRegistrations.m in Sources */, + 84E6DAED2DB69D9700E6A1AD /* ARTRetrySequence.m in Sources */, + 84E6DAEE2DB69D9700E6A1AD /* ARTChannelOptions.m in Sources */, + 84E6DAEF2DB69D9700E6A1AD /* ARTNSError+ARTUtils.m in Sources */, + 84E6DAF02DB69D9700E6A1AD /* ARTConnectionStateChangeParams.m in Sources */, + 84E6DAF12DB69D9700E6A1AD /* ARTSRURLUtilities.m in Sources */, + 84E6DAF22DB69D9700E6A1AD /* ARTErrorChecker.m in Sources */, + 84E6DAF32DB69D9700E6A1AD /* ARTDeltaCodec.m in Sources */, + 84E6DAF42DB69D9700E6A1AD /* ARTHttp.m in Sources */, + 84E6DAF52DB69D9700E6A1AD /* ARTPaginatedResult.m in Sources */, + 84E6DAF62DB69D9700E6A1AD /* ARTBackoffRetryDelayCalculator.m in Sources */, + 84E6DAF72DB69D9700E6A1AD /* ARTStatus.m in Sources */, + 84E6DAF82DB69D9700E6A1AD /* ARTWebSocketFactory.m in Sources */, + 84E6DAF92DB69D9700E6A1AD /* NSURLQueryItem+Stringifiable.m in Sources */, + 84E6DAFA2DB69D9700E6A1AD /* ARTQueuedDealloc.m in Sources */, + 84E6DAFB2DB69D9700E6A1AD /* ARTPushChannelSubscription.m in Sources */, + 84E6DAFC2DB69D9700E6A1AD /* ARTOSReachability.m in Sources */, + 84E6DAFD2DB69D9700E6A1AD /* ARTNSMutableDictionary+ARTDictionaryUtil.m in Sources */, + 84E6DAFE2DB69D9700E6A1AD /* ARTPushActivationEvent.m in Sources */, + 84E6DAFF2DB69D9700E6A1AD /* ARTSRIOConsumerPool.m in Sources */, + 84E6DB002DB69D9700E6A1AD /* ARTConnectRetryState.m in Sources */, + 84E6DB012DB69D9700E6A1AD /* ARTCrypto.m in Sources */, + 84E6DB022DB69D9700E6A1AD /* ARTHTTPPaginatedResponse.m in Sources */, + 84E6DB032DB69D9700E6A1AD /* ARTSRIOConsumer.m in Sources */, + 84E6DB042DB69D9700E6A1AD /* ARTPresence.m in Sources */, + 84E6DB052DB69D9700E6A1AD /* ARTLocalDeviceStorage.m in Sources */, + 84E6DB062DB69D9700E6A1AD /* ARTSRSIMDHelpers.m in Sources */, + 84E6DB072DB69D9700E6A1AD /* ARTWrapperSDKProxyPushChannel.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 856AAC861B6E304B00B07119 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -3915,6 +4787,11 @@ /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ + 84B2BAF72DB6CC3500334337 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 84E6D9C92DB69D9700E6A1AD /* Ably-visionOS */; + targetProxy = 84B2BAF62DB6CC3500334337 /* PBXContainerItemProxy */; + }; D7093C11219E2DB200723F17 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = D710D45A219495E2008F54AD /* Ably-macOS */; @@ -3962,6 +4839,153 @@ /* End PBXVariantGroup section */ /* Begin XCBuildConfiguration section */ + 84B3FCB32DB69F9C00037368 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CODE_SIGN_STYLE = Automatic; + DEBUG_INFORMATION_FORMAT = dwarf; + GCC_C_LANGUAGE_STANDARD = gnu11; + INFOPLIST_FILE = "Test/Info-visionOS.plist"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + OTHER_SWIFT_FLAGS = "-D TARGET_OS_TV -D TARGET_OS_IPHONE -D TARGET_OS_MAC"; + PRODUCT_BUNDLE_IDENTIFIER = "io.ably.Ably-visionOS-Tests"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = xros; + SUPPORTED_PLATFORMS = "xros xrsimulator"; + SUPPORTS_MACCATALYST = NO; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OBJC_BRIDGING_HEADER = "Test/AblyTests-Bridging-Header.h"; + SWIFT_OBJC_INTERFACE_HEADER_NAME = "Ably_Tests-Swift.h"; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = 7; + }; + name = Debug; + }; + 84B3FCB42DB69F9C00037368 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CODE_SIGN_STYLE = Automatic; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + GCC_C_LANGUAGE_STANDARD = gnu11; + INFOPLIST_FILE = "Test/Info-visionOS.plist"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MTL_FAST_MATH = YES; + OTHER_SWIFT_FLAGS = "-D TARGET_OS_TV -D TARGET_OS_IPHONE -D TARGET_OS_MAC"; + PRODUCT_BUNDLE_IDENTIFIER = "io.ably.Ably-visionOS-Tests"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = xros; + SUPPORTED_PLATFORMS = "xros xrsimulator"; + SUPPORTS_MACCATALYST = NO; + SWIFT_OBJC_BRIDGING_HEADER = "Test/AblyTests-Bridging-Header.h"; + SWIFT_OBJC_INTERFACE_HEADER_NAME = "Ably_Tests-Swift.h"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = 7; + }; + name = Release; + }; + 84E6DB0E2DB69D9700E6A1AD /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CODE_SIGN_IDENTITY = ""; + CODE_SIGN_STYLE = Automatic; + DEBUG_INFORMATION_FORMAT = dwarf; + DEFINES_MODULE = YES; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + GCC_C_LANGUAGE_STANDARD = gnu11; + HEADER_SEARCH_PATHS = "$(SRCROOT)/include"; + INFOPLIST_FILE = "Source/Info-visionOS.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MODULEMAP_FILE = Source/Ably.modulemap; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + PRODUCT_BUNDLE_IDENTIFIER = io.ably.Ably; + PRODUCT_NAME = Ably; + SDKROOT = xros; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = "xros xrsimulator"; + SUPPORTS_MACCATALYST = NO; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = 7; + }; + name = Debug; + }; + 84E6DB0F2DB69D9700E6A1AD /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CODE_SIGN_IDENTITY = ""; + CODE_SIGN_STYLE = Automatic; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEFINES_MODULE = YES; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + GCC_C_LANGUAGE_STANDARD = gnu11; + HEADER_SEARCH_PATHS = "$(SRCROOT)/include"; + INFOPLIST_FILE = "Source/Info-visionOS.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MODULEMAP_FILE = Source/Ably.modulemap; + MTL_FAST_MATH = YES; + PRODUCT_BUNDLE_IDENTIFIER = io.ably.Ably; + PRODUCT_NAME = Ably; + SDKROOT = xros; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = "xros xrsimulator"; + SUPPORTS_MACCATALYST = NO; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = 7; + }; + name = Release; + }; 856AAC931B6E304B00B07119 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -3974,7 +4998,7 @@ "TEST_SUITE=1", ); INFOPLIST_FILE = "Test/Info-iOS.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 10.0; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -4003,7 +5027,7 @@ "TEST_SUITE=1", ); INFOPLIST_FILE = "Test/Info-iOS.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 10.0; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -4217,7 +5241,7 @@ "@executable_path/../Frameworks", "@loader_path/../Frameworks", ); - MACOSX_DEPLOYMENT_TARGET = 10.14; + MACOSX_DEPLOYMENT_TARGET = 10.15; MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; MTL_FAST_MATH = YES; OTHER_SWIFT_FLAGS = "-D TARGET_OS_OSX -D TARGET_OS_MAC"; @@ -4254,7 +5278,7 @@ "@executable_path/../Frameworks", "@loader_path/../Frameworks", ); - MACOSX_DEPLOYMENT_TARGET = 10.14; + MACOSX_DEPLOYMENT_TARGET = 10.15; MTL_FAST_MATH = YES; OTHER_SWIFT_FLAGS = "-D TARGET_OS_OSX -D TARGET_OS_MAC"; PRODUCT_BUNDLE_IDENTIFIER = "io.ably.Ably-macOS-Tests"; @@ -4297,7 +5321,7 @@ SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = 3; - TVOS_DEPLOYMENT_TARGET = 12.1; + TVOS_DEPLOYMENT_TARGET = 13; }; name = Debug; }; @@ -4330,7 +5354,7 @@ SWIFT_OBJC_INTERFACE_HEADER_NAME = "Ably_Tests-Swift.h"; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = 3; - TVOS_DEPLOYMENT_TARGET = 12.1; + TVOS_DEPLOYMENT_TARGET = 13; }; name = Release; }; @@ -4625,6 +5649,24 @@ /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ + 84B3FCB22DB69F9C00037368 /* Build configuration list for PBXNativeTarget "Ably-visionOS-Tests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 84B3FCB32DB69F9C00037368 /* Debug */, + 84B3FCB42DB69F9C00037368 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 84E6DB0D2DB69D9700E6A1AD /* Build configuration list for PBXNativeTarget "Ably-visionOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 84E6DB0E2DB69D9700E6A1AD /* Debug */, + 84E6DB0F2DB69D9700E6A1AD /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; 856AAC921B6E304B00B07119 /* Build configuration list for PBXNativeTarget "Ably-iOS-Tests" */ = { isa = XCConfigurationList; buildConfigurations = ( @@ -4707,6 +5749,74 @@ defaultConfigurationName = Release; }; /* End XCConfigurationList section */ + +/* Begin XCRemoteSwiftPackageReference section */ + 847F4FCB2DB592B60002FAC0 /* XCRemoteSwiftPackageReference "Nimble" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/Quick/Nimble"; + requirement = { + branch = main; + kind = branch; + }; + }; + 84B2BAEE2DB6A66300334337 /* XCRemoteSwiftPackageReference "delta-codec-cocoa" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/ably/delta-codec-cocoa"; + requirement = { + kind = upToNextMajorVersion; + minimumVersion = 1.3.3; + }; + }; + 84B2BAEF2DB6A66E00334337 /* XCRemoteSwiftPackageReference "msgpack-objective-C" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/rvi/msgpack-objective-C"; + requirement = { + kind = upToNextMajorVersion; + minimumVersion = 0.4.0; + }; + }; + 84B3FCB72DB69FD500037368 /* XCRemoteSwiftPackageReference "Nimble" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/Quick/Nimble"; + requirement = { + branch = main; + kind = branch; + }; + }; +/* End XCRemoteSwiftPackageReference section */ + +/* Begin XCSwiftPackageProductDependency section */ + 847F4FCC2DB592CD0002FAC0 /* Nimble */ = { + isa = XCSwiftPackageProductDependency; + package = 847F4FCB2DB592B60002FAC0 /* XCRemoteSwiftPackageReference "Nimble" */; + productName = Nimble; + }; + 847F4FCE2DB592E10002FAC0 /* Nimble */ = { + isa = XCSwiftPackageProductDependency; + package = 847F4FCB2DB592B60002FAC0 /* XCRemoteSwiftPackageReference "Nimble" */; + productName = Nimble; + }; + 847F4FD02DB592E80002FAC0 /* Nimble */ = { + isa = XCSwiftPackageProductDependency; + package = 847F4FCB2DB592B60002FAC0 /* XCRemoteSwiftPackageReference "Nimble" */; + productName = Nimble; + }; + 84B2BAF02DB6A6B400334337 /* AblyDeltaCodec */ = { + isa = XCSwiftPackageProductDependency; + package = 84B2BAEE2DB6A66300334337 /* XCRemoteSwiftPackageReference "delta-codec-cocoa" */; + productName = AblyDeltaCodec; + }; + 84B2BAF22DB6A6B700334337 /* msgpack */ = { + isa = XCSwiftPackageProductDependency; + package = 84B2BAEF2DB6A66E00334337 /* XCRemoteSwiftPackageReference "msgpack-objective-C" */; + productName = msgpack; + }; + 84B3FCB82DB69FE700037368 /* Nimble */ = { + isa = XCSwiftPackageProductDependency; + package = 84B3FCB72DB69FD500037368 /* XCRemoteSwiftPackageReference "Nimble" */; + productName = Nimble; + }; +/* End XCSwiftPackageProductDependency section */ }; rootObject = 96BF61281A35B2AB004CF2B3 /* Project object */; } diff --git a/Ably.xcodeproj/xcshareddata/xcschemes/Ably-visionOS.xcscheme b/Ably.xcodeproj/xcshareddata/xcschemes/Ably-visionOS.xcscheme new file mode 100644 index 000000000..c5292a749 --- /dev/null +++ b/Ably.xcodeproj/xcshareddata/xcschemes/Ably-visionOS.xcscheme @@ -0,0 +1,79 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Examples/AblyPush/AblyPushExample.xcodeproj/project.pbxproj b/Examples/AblyPush/AblyPushExample.xcodeproj/project.pbxproj index 66a370156..6e3d4850d 100644 --- a/Examples/AblyPush/AblyPushExample.xcodeproj/project.pbxproj +++ b/Examples/AblyPush/AblyPushExample.xcodeproj/project.pbxproj @@ -501,9 +501,11 @@ MARKETING_VERSION = 1.0; PRODUCT_BUNDLE_IDENTIFIER = io.ably.AblyPushExample; PRODUCT_NAME = "Ably Push"; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator xros xrsimulator"; + SUPPORTS_MACCATALYST = NO; SWIFT_EMIT_LOC_STRINGS = YES; SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; + TARGETED_DEVICE_FAMILY = "1,2,7"; }; name = Debug; }; @@ -535,9 +537,11 @@ MARKETING_VERSION = 1.0; PRODUCT_BUNDLE_IDENTIFIER = io.ably.AblyPushExample; PRODUCT_NAME = "Ably Push"; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator xros xrsimulator"; + SUPPORTS_MACCATALYST = NO; SWIFT_EMIT_LOC_STRINGS = YES; SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; + TARGETED_DEVICE_FAMILY = "1,2,7"; }; name = Release; }; diff --git a/Examples/AblyPush/AblyPushExample/AblyHelper.swift b/Examples/AblyPush/AblyPushExample/AblyHelper.swift index f40d33ce8..1c9ae71d1 100644 --- a/Examples/AblyPush/AblyPushExample/AblyHelper.swift +++ b/Examples/AblyPush/AblyPushExample/AblyHelper.swift @@ -34,7 +34,9 @@ class AblyHelper: NSObject, ObservableObject { UNUserNotificationCenter.current().delegate = self locationManager = CLLocationManager() locationManager.delegate = self + #if os(iOS) locationManager.requestAlwaysAuthorization() // for simplicity we put it here, but in the real app you should care about particular moment, when you ask for any permissions + #endif } } @@ -47,6 +49,7 @@ extension AblyHelper { } func activateLocationPush() { + #if os(iOS) locationManager.startMonitoringLocationPushes { deviceToken, error in guard error == nil else { return ARTPush.didFailToRegisterForLocationNotificationsWithError(error!, realtime: self.realtime) @@ -54,6 +57,7 @@ extension AblyHelper { self.locationDeviceToken = deviceToken!.deviceTokenString ARTPush.didRegisterForLocationNotifications(withDeviceToken: deviceToken!, realtime: self.realtime) } + #endif } func deactivatePush() { diff --git a/Package.swift b/Package.swift index 459855712..9c17310b8 100644 --- a/Package.swift +++ b/Package.swift @@ -1,13 +1,14 @@ -// swift-tools-version:5.3.0 +// swift-tools-version:5.9 import PackageDescription let package = Package( name: "ably-cocoa", platforms: [ - .macOS(.v10_11), - .iOS(.v9), - .tvOS(.v10) + .macOS(.v10_13), + .iOS(.v12), + .tvOS(.v12), + .visionOS(.v1) ], products: [ .library( diff --git a/Source/ARTAuth.m b/Source/ARTAuth.m index 934c66035..b5cdeace6 100644 --- a/Source/ARTAuth.m +++ b/Source/ARTAuth.m @@ -733,7 +733,7 @@ - (NSDate *)handleServerTime:(NSDate *)time { - (void)setProtocolClientId:(NSString *)clientId { _protocolClientId = clientId; - #if TARGET_OS_IOS + #if TARGET_SUPPORTS_APNS [self setLocalDeviceClientId_nosync:_protocolClientId]; #endif } @@ -790,7 +790,7 @@ - (void)discardTimeOffset { - (void)setTokenDetails:(ARTTokenDetails *)tokenDetails { _tokenDetails = tokenDetails; - #if TARGET_OS_IOS + #if TARGET_SUPPORTS_APNS [self setLocalDeviceClientId_nosync:tokenDetails.clientId]; #endif } @@ -822,7 +822,7 @@ - (NSString *_Nullable)appId { return parts[0]; } -#if TARGET_OS_IOS +#if TARGET_SUPPORTS_APNS - (void)setLocalDeviceClientId_nosync:(NSString *)clientId { if (clientId == nil || [clientId isEqualToString:@"*"] || [clientId isEqualToString:_rest.device_nosync.clientId]) { return; diff --git a/Source/ARTClientInformation.m b/Source/ARTClientInformation.m index 84cdf053a..6479d28d8 100644 --- a/Source/ARTClientInformation.m +++ b/Source/ARTClientInformation.m @@ -84,6 +84,8 @@ + (NSString *)osName { @"watchOS" #elif TARGET_OS_OSX @"macOS" + #elif TARGET_OS_VISION + @"visionOS" #else nil #endif diff --git a/Source/ARTLocalDevice.m b/Source/ARTLocalDevice.m index 581c4d2c0..d9a2af50a 100644 --- a/Source/ARTLocalDevice.m +++ b/Source/ARTLocalDevice.m @@ -17,6 +17,8 @@ NSString *const ARTDeviceFormFactor = @"tv"; #elif TARGET_OS_WATCH NSString *const ARTDeviceFormFactor = @"watch"; +#elif TARGET_OS_VISION +NSString *const ARTDeviceFormFactor = @"vision"; #elif TARGET_OS_SIMULATOR NSString *const ARTDeviceFormFactor = @"simulator"; #elif TARGET_OS_MAC diff --git a/Source/ARTOSReachability.m b/Source/ARTOSReachability.m index 7520af153..fbb18d134 100644 --- a/Source/ARTOSReachability.m +++ b/Source/ARTOSReachability.m @@ -12,10 +12,10 @@ typedef const void * __nonnull (* __nullable ARTNetworkReachabilityContextRetain)(const void * _Nullable info); /// Global callback for network state changes -static void ARTOSReachability_Callback(SCNetworkReachabilityRef target, SCNetworkReachabilityFlags flags, void* info) { - void (^callbackBlock)(SCNetworkReachabilityFlags) = (__bridge id)info; - callbackBlock(flags); -} +//static void ARTOSReachability_Callback(SCNetworkReachabilityRef target, SCNetworkReachabilityFlags flags, void* info) { +// void (^callbackBlock)(SCNetworkReachabilityFlags) = (__bridge id)info; +// callbackBlock(flags); +//} @implementation ARTOSReachability { ARTInternalLog *_logger; @@ -33,49 +33,49 @@ - (instancetype)initWithLogger:(ARTInternalLog *)logger queue:(dispatch_queue_t) } - (void)listenForHost:(NSString *)host callback:(void (^)(BOOL))callback { - [self off]; - _host = host; - - // This strategy is taken from Mike Ash's book "The Complete Friday Q&A: Volume III". - // Article: https://www.mikeash.com/pyblog/friday-qa-2013-06-14-reachability.html +// [self off]; +// _host = host; +// +// // This strategy is taken from Mike Ash's book "The Complete Friday Q&A: Volume III". +// // Article: https://www.mikeash.com/pyblog/friday-qa-2013-06-14-reachability.html +// +// __weak ARTOSReachability *weakSelf = self; +// void (^callbackBlock)(SCNetworkReachabilityFlags) = ^(SCNetworkReachabilityFlags flags) { +// ARTOSReachability *strongSelf = weakSelf; +// if (strongSelf) { +// BOOL reachable = (flags & kSCNetworkReachabilityFlagsReachable) != 0; +// ARTLogInfo(strongSelf->_logger, @"Reachability: host %@ is reachable: %@", strongSelf->_host, reachable ? @"true" : @"false"); +// dispatch_async(strongSelf->_queue, ^{ +// if (callback) { +// callback(reachable); +// } +// }); +// } +// }; - __weak ARTOSReachability *weakSelf = self; - void (^callbackBlock)(SCNetworkReachabilityFlags) = ^(SCNetworkReachabilityFlags flags) { - ARTOSReachability *strongSelf = weakSelf; - if (strongSelf) { - BOOL reachable = (flags & kSCNetworkReachabilityFlagsReachable) != 0; - ARTLogInfo(strongSelf->_logger, @"Reachability: host %@ is reachable: %@", strongSelf->_host, reachable ? @"true" : @"false"); - dispatch_async(strongSelf->_queue, ^{ - if (callback) { - callback(reachable); - } - }); - } - }; +// _reachabilityRef = SCNetworkReachabilityCreateWithName(NULL, [host UTF8String]); - _reachabilityRef = SCNetworkReachabilityCreateWithName(NULL, [host UTF8String]); - - SCNetworkReachabilityContext context = { - .version = 0, - .info = (__bridge void *)(callbackBlock), - .retain = (ARTNetworkReachabilityContextRetain)CFBridgingRetain, - .release = CFRelease - }; - if (SCNetworkReachabilitySetCallback(_reachabilityRef, ARTOSReachability_Callback, &context)) { - if (SCNetworkReachabilityScheduleWithRunLoop(_reachabilityRef, CFRunLoopGetCurrent(), kCFRunLoopDefaultMode)) { - ARTLogInfo(_logger, @"Reachability: started listening for host %@", _host); - } - else { - ARTLogWarn(_logger, @"Reachability: failed starting listener for host %@", _host); - } - } +// SCNetworkReachabilityContext context = { +// .version = 0, +// .info = (__bridge void *)(callbackBlock), +// .retain = (ARTNetworkReachabilityContextRetain)CFBridgingRetain, +// .release = CFRelease +// }; +// if (SCNetworkReachabilitySetCallback(_reachabilityRef, ARTOSReachability_Callback, &context)) { +// if (SCNetworkReachabilityScheduleWithRunLoop(_reachabilityRef, CFRunLoopGetCurrent(), kCFRunLoopDefaultMode)) { +// ARTLogInfo(_logger, @"Reachability: started listening for host %@", _host); +// } +// else { +// ARTLogWarn(_logger, @"Reachability: failed starting listener for host %@", _host); +// } +// } } - (void)off { if (_reachabilityRef != NULL) { ARTLogInfo(_logger, @"Reachability: stopped listening for host %@", _host); - SCNetworkReachabilityUnscheduleFromRunLoop(_reachabilityRef, CFRunLoopGetCurrent(), kCFRunLoopDefaultMode); - SCNetworkReachabilitySetCallback(_reachabilityRef, NULL, NULL); +// SCNetworkReachabilityUnscheduleFromRunLoop(_reachabilityRef, CFRunLoopGetCurrent(), kCFRunLoopDefaultMode); +// SCNetworkReachabilitySetCallback(_reachabilityRef, NULL, NULL); CFRelease(_reachabilityRef); _reachabilityRef = NULL; } diff --git a/Source/ARTPush.m b/Source/ARTPush.m index ccad56a6a..4a121b221 100644 --- a/Source/ARTPush.m +++ b/Source/ARTPush.m @@ -5,8 +5,10 @@ #import "ARTJsonEncoder.h" #import "ARTJsonLikeEncoder.h" #import "ARTEventEmitter.h" -#if TARGET_OS_IOS +#if TARGET_OS_IOS || TARGET_OS_IPHONE || TARGET_OS_UIKITFORMAC #import +#endif +#if TARGET_SUPPORTS_APNS #import "ARTPushActivationStateMachine+Private.h" #endif #import "ARTPushAdmin.h" @@ -35,7 +37,7 @@ - (ARTPushAdmin *)admin { return [[ARTPushAdmin alloc] initWithInternal:_internal.admin queuedDealloc:_dealloc]; } -#if TARGET_OS_IOS +#if TARGET_SUPPORTS_APNS + (void)didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken rest:(ARTRest *)rest; { return [ARTPushInternal didRegisterForRemoteNotificationsWithDeviceToken:deviceToken rest:rest]; @@ -104,7 +106,7 @@ - (dispatch_queue_t)queue { return _rest.queue; } -#if TARGET_OS_IOS +#if TARGET_SUPPORTS_APNS - (void)getActivationMachine:(void (^)(ARTPushActivationStateMachine *const))block { if (!block) { @@ -128,6 +130,7 @@ - (void)getActivationMachine:(void (^)(ARTPushActivationStateMachine *const))blo callbackWithUnlock([self createActivationStateMachineWithDelegate:delegate]); } else { +#if TARGET_OS_IOS || TARGET_OS_IPHONE || TARGET_OS_UIKITFORMAC dispatch_async(dispatch_get_main_queue(), ^{ // -[UIApplication delegate] is an UI API call, so needs to be called from main thread. const id legacyDelegate = UIApplication.sharedApplication.delegate; @@ -136,6 +139,9 @@ - (void)getActivationMachine:(void (^)(ARTPushActivationStateMachine *const))blo callbackWithUnlock(machine); }]; }); +#else + ARTLogDebug(rest.logger_onlyForUseInClassMethodsAndTests, @"ARTPush: legacy delegate is only supported for UIKit."); +#endif } } else { diff --git a/Source/ARTPushActivationState.m b/Source/ARTPushActivationState.m index 96e0ea7bb..1c1709019 100644 --- a/Source/ARTPushActivationState.m +++ b/Source/ARTPushActivationState.m @@ -1,3 +1,7 @@ +#import "ARTTypes+Private.h" + +#if TARGET_SUPPORTS_APNS + #import "ARTPushActivationState.h" #import "ARTPushActivationStateMachine+Private.h" #import "ARTPushActivationEvent.h" @@ -8,7 +12,6 @@ #import "ARTRest+Private.h" #import "ARTAuth+Private.h" #import "ARTHttp.h" -#import "ARTTypes+Private.h" NS_ASSUME_NONNULL_BEGIN @@ -85,7 +88,6 @@ @implementation ARTPushActivationPersistentState #pragma mark - Activation States ARTPushActivationState *validateAndSync(ARTPushActivationStateMachine *machine, ARTPushActivationEvent *event, ARTInternalLog *logger) { - #if TARGET_OS_IOS ARTLocalDevice *const local = machine.rest.device_nosync; if (local.identityTokenDetails) { @@ -104,7 +106,6 @@ @implementation ARTPushActivationPersistentState } [machine.rest setupLocalDevice_nosync]; [machine registerForAPNS]; - #endif return [ARTPushActivationStateWaitingForPushDeviceDetails newWithMachine:machine logger:logger]; } @@ -114,20 +115,14 @@ @implementation ARTPushActivationStateNotActivated - (ARTPushActivationState *)transition:(ARTPushActivationEvent *)event { [self logEventTransition:event file:__FILE__ line:__LINE__]; if ([event isKindOfClass:[ARTPushActivationEventCalledDeactivate class]]) { - #if TARGET_OS_IOS ARTLocalDevice *device = self.machine.rest.device_nosync; - #else - ARTLocalDevice *device = nil; - #endif // RSH3a1c if (device.isRegistered) { [self.machine deviceUnregistration:nil]; return [ARTPushActivationStateWaitingForDeregistration newWithMachine:self.machine logger:self.logger]; // RSH3a1d } else { - #if TARGET_OS_IOS [self.machine.rest resetLocalDevice_nosync]; - #endif [self.machine callDeactivatedCallback:nil]; return self; } @@ -151,11 +146,9 @@ - (ARTPushActivationState *)transition:(ARTPushActivationEvent *)event { return self; } else if ([event isKindOfClass:[ARTPushActivationEventGotDeviceRegistration class]]) { - #if TARGET_OS_IOS ARTPushActivationEventGotDeviceRegistration *gotDeviceRegistrationEvent = (ARTPushActivationEventGotDeviceRegistration *)event; ARTLocalDevice *local = self.machine.rest.device_nosync; [local setAndPersistIdentityTokenDetails:gotDeviceRegistrationEvent.identityTokenDetails]; - #endif [self.machine callActivatedCallback:nil]; return [ARTPushActivationStateWaitingForNewPushDeviceDetails newWithMachine:self.machine logger:self.logger]; } @@ -235,13 +228,11 @@ - (ARTPushActivationState *)transition:(ARTPushActivationEvent *)event { return self; } else if ([event isKindOfClass:[ARTPushActivationEventRegistrationSynced class]]) { - #if TARGET_OS_IOS ARTPushActivationEventRegistrationSynced *registrationUpdatedEvent = (ARTPushActivationEventRegistrationSynced *)event; if (registrationUpdatedEvent.identityTokenDetails) { ARTLocalDevice *local = self.machine.rest.device_nosync; [local setAndPersistIdentityTokenDetails:registrationUpdatedEvent.identityTokenDetails]; } - #endif if ([_fromEvent isKindOfClass:[ARTPushActivationEventCalledActivate class]]) { [self.machine callActivatedCallback:nil]; @@ -292,9 +283,7 @@ - (ARTPushActivationState *)transition:(ARTPushActivationEvent *)event { return [ARTPushActivationStateWaitingForDeregistration newWithMachine:self.machine logger:self.logger]; } else if ([event isKindOfClass:[ARTPushActivationEventDeregistered class]]) { - #if TARGET_OS_IOS [self.machine.rest resetLocalDevice_nosync]; - #endif [self.machine callDeactivatedCallback:nil]; return [ARTPushActivationStateNotActivated newWithMachine:self.machine logger:self.logger]; } @@ -323,3 +312,5 @@ - (ARTPushActivationPersistentState *)migrate { } @end + +#endif diff --git a/Source/ARTPushActivationStateMachine.m b/Source/ARTPushActivationStateMachine.m index 959380e97..4e8e0132f 100644 --- a/Source/ARTPushActivationStateMachine.m +++ b/Source/ARTPushActivationStateMachine.m @@ -15,7 +15,7 @@ #import "ARTNSMutableRequest+ARTPush.h" #import "ARTAuth+Private.h" -#if TARGET_OS_IOS +#if TARGET_SUPPORTS_APNS #import @@ -162,7 +162,6 @@ - (void)persist { } - (void)deviceRegistration:(ARTErrorInfo *)error { - #if TARGET_OS_IOS ARTLocalDevice *local = _rest.device_nosync; const id delegate = self.delegate; @@ -221,11 +220,9 @@ - (void)deviceRegistration:(ARTErrorInfo *)error { else { doDeviceRegistration(); } - #endif } - (void)deviceUpdateRegistration:(ARTErrorInfo *)error { - #if TARGET_OS_IOS ARTLocalDevice *local = _rest.device_nosync; const id delegate = self.delegate; @@ -270,11 +267,9 @@ - (void)deviceUpdateRegistration:(ARTErrorInfo *)error { } [self sendEvent:[ARTPushActivationEventRegistrationSynced new]]; }]; - #endif } - (void)syncDevice { - #if TARGET_OS_IOS ARTLocalDevice *const local = _rest.device_nosync; const id delegate = self.delegate; @@ -328,11 +323,9 @@ - (void)syncDevice { else { doDeviceSync(); } - #endif } - (void)deviceUnregistration:(ARTErrorInfo *)error { - #if TARGET_OS_IOS ARTLocalDevice *local = _rest.device_nosync; __block id delegate = self.delegate; @@ -380,33 +373,27 @@ - (void)deviceUnregistration:(ARTErrorInfo *)error { ARTLogDebug(self->_logger, @"successfully deactivate device"); [self sendEvent:[ARTPushActivationEventDeregistered new]]; }]; - #endif } - (void)callActivatedCallback:(ARTErrorInfo *)error { - #if TARGET_OS_IOS dispatch_async(_userQueue, ^{ const id delegate = self.delegate; if ([delegate respondsToSelector:@selector(didActivateAblyPush:)]) { [delegate didActivateAblyPush:error]; } }); - #endif } - (void)callDeactivatedCallback:(ARTErrorInfo *)error { - #if TARGET_OS_IOS dispatch_async(_userQueue, ^{ const id delegate = self.delegate; if ([delegate respondsToSelector:@selector(didDeactivateAblyPush:)]) { [delegate didDeactivateAblyPush:error]; } }); - #endif } - (void)callUpdatedCallback:(nullable ARTErrorInfo *)error { - #if TARGET_OS_IOS dispatch_async(_userQueue, ^{ const id delegate = self.delegate; if ([delegate respondsToSelector:@selector(didUpdateAblyPush:)]) { @@ -416,7 +403,6 @@ - (void)callUpdatedCallback:(nullable ARTErrorInfo *)error { [delegate didAblyPushRegistrationFail:error]; } }); - #endif } - (void)registerForAPNS { diff --git a/Source/ARTPushChannel.m b/Source/ARTPushChannel.m index f52b4bb2a..02ff485ee 100644 --- a/Source/ARTPushChannel.m +++ b/Source/ARTPushChannel.m @@ -298,7 +298,7 @@ - (BOOL)listSubscriptions:(NSStringDictionary *)params } - (ARTLocalDevice *)getDevice:(ARTCallback)callback { - #if TARGET_OS_IOS + #if TARGET_SUPPORTS_APNS ARTLocalDevice *device = [_rest device_nosync]; #else ARTLocalDevice *device = nil; diff --git a/Source/ARTPushChannelSubscriptions.m b/Source/ARTPushChannelSubscriptions.m index 05b3cd6e6..da34d6d07 100644 --- a/Source/ARTPushChannelSubscriptions.m +++ b/Source/ARTPushChannelSubscriptions.m @@ -72,7 +72,7 @@ - (void)save:(ARTPushChannelSubscription *)channelSubscription wrapperSDKAgents: }; } -#if TARGET_OS_IOS +#if TARGET_SUPPORTS_APNS ARTLocalDevice *local = _rest.device; #else ARTLocalDevice *local = nil; @@ -203,7 +203,7 @@ - (void)_removeWhere:(NSStringDictionary *)params wrapperSDKAgents:(nullable NSS } NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[components URL]]; request.HTTPMethod = @"DELETE"; -#if TARGET_OS_IOS +#if TARGET_SUPPORTS_APNS [request setDeviceAuthentication:[params objectForKey:@"deviceId"] localDevice:_rest.device_nosync]; #endif diff --git a/Source/ARTPushDeviceRegistrations.m b/Source/ARTPushDeviceRegistrations.m index 4b8f3747b..678490698 100644 --- a/Source/ARTPushDeviceRegistrations.m +++ b/Source/ARTPushDeviceRegistrations.m @@ -73,7 +73,7 @@ - (void)save:(ARTDeviceDetails *)deviceDetails wrapperSDKAgents:(nullable NSStri }; } - #if TARGET_OS_IOS + #if TARGET_SUPPORTS_APNS ARTLocalDevice *local = _rest.device; #else ARTLocalDevice *local = nil; @@ -127,7 +127,7 @@ - (void)get:(ARTDeviceId *)deviceId wrapperSDKAgents:(nullable NSStringDictionar }; } - #if TARGET_OS_IOS + #if TARGET_SUPPORTS_APNS ARTLocalDevice *local = _rest.device; #else ARTLocalDevice *local = nil; @@ -240,7 +240,7 @@ - (void)removeWhere:(NSStringDictionary *)params wrapperSDKAgents:(nullable NSSt }; } - #if TARGET_OS_IOS + #if TARGET_SUPPORTS_APNS ARTLocalDevice *local = _rest.device; #else ARTLocalDevice *local = nil; diff --git a/Source/ARTRealtime.m b/Source/ARTRealtime.m index 8a8b5388a..71e37109b 100644 --- a/Source/ARTRealtime.m +++ b/Source/ARTRealtime.m @@ -96,7 +96,7 @@ - (ARTPush *)push { return [[ARTPush alloc] initWithInternal:_internal.push queuedDealloc:_dealloc]; } -#if TARGET_OS_IOS +#if TARGET_SUPPORTS_APNS - (ARTLocalDevice *)device { return _internal.device; } @@ -1763,7 +1763,7 @@ - (void)realtimeTransportSetMsgSerial:(id)transport msgSer self.msgSerial = msgSerial; } -#if TARGET_OS_IOS +#if TARGET_SUPPORTS_APNS - (ARTLocalDevice *)device { return _rest.device; } diff --git a/Source/ARTRest.m b/Source/ARTRest.m index 8796f64c8..951a151a8 100644 --- a/Source/ARTRest.m +++ b/Source/ARTRest.m @@ -43,7 +43,7 @@ #import "ARTClientOptions+TestConfiguration.h" #import "ARTTestClientOptions.h" #import "ARTContinuousClock.h" -#if TARGET_OS_IOS +#if TARGET_SUPPORTS_APNS #import "ARTPushActivationStateMachine+Private.h" #import "ARTPushActivationEvent.h" #endif @@ -137,7 +137,7 @@ - (ARTPush *)push { return [[ARTPush alloc] initWithInternal:_internal.push queuedDealloc:_dealloc]; } -#if TARGET_OS_IOS +#if TARGET_SUPPORTS_APNS - (ARTLocalDevice *)device { return _internal.device; @@ -185,7 +185,7 @@ - (instancetype)initWithOptions:(ARTClientOptions *)options realtime:(ARTRealtim _continuousClock = [[ARTContinuousClock alloc] init]; _queue = options.internalDispatchQueue; _userQueue = options.dispatchQueue; -#if TARGET_OS_IOS +#if TARGET_SUPPORTS_APNS _storage = [ARTLocalDeviceStorage newWithLogger:_logger]; #endif _http = [[ARTHttp alloc] initWithQueue:_queue logger:_logger]; @@ -762,7 +762,7 @@ - (void)setCurrentFallbackHost:(NSString *)value { _fallbackRetryExpiration = [self.continuousClock addingDuration:_options.fallbackRetryTimeout toInstant:now]; } -#if TARGET_OS_IOS +#if TARGET_SUPPORTS_APNS - (ARTLocalDevice *)device { __block ARTLocalDevice *ret; dispatch_sync(_queue, ^{ diff --git a/Source/ARTTypes.m b/Source/ARTTypes.m index a7934cb14..61137710e 100644 --- a/Source/ARTTypes.m +++ b/Source/ARTTypes.m @@ -443,7 +443,7 @@ -(void)invokeWithResult:(const id)result error:(NSError *const)error { @implementation NSObject (ARTArchive) - (nullable NSData *)art_archiveWithLogger:(nullable ARTInternalLog *)logger { -#if TARGET_OS_MACCATALYST // if (@available(iOS 13.0, macCatalyst 13.0, ... doesn't help +#if TARGET_OS_MACCATALYST || TARGET_OS_VISION // if (@available(iOS 13.0, macCatalyst 13.0, ... doesn't help NSError *error; NSData *data = [NSKeyedArchiver archivedDataWithRootObject:self requiringSecureCoding:false error:&error]; if (error) { @@ -451,7 +451,7 @@ - (nullable NSData *)art_archiveWithLogger:(nullable ARTInternalLog *)logger { } return data; #else - if (@available(macOS 10.13, iOS 11, tvOS 11, *)) { + if (@available(macOS 10.13, iOS 11, tvOS 11, visionOS 1, *)) { NSError *error; NSData *data = [NSKeyedArchiver archivedDataWithRootObject:self requiringSecureCoding:false error:&error]; if (error) { @@ -467,7 +467,7 @@ - (nullable NSData *)art_archiveWithLogger:(nullable ARTInternalLog *)logger { + (nullable id)art_unarchiveFromData:(NSData *)data withLogger:(nullable ARTInternalLog *)logger { NSSet* allowedTypes = [NSSet setWithArray:@[ [NSArray class], [NSDictionary class], self]]; -#if TARGET_OS_MACCATALYST +#if TARGET_OS_MACCATALYST || TARGET_OS_VISION NSError *error; id result = [NSKeyedUnarchiver unarchivedObjectOfClasses:allowedTypes fromData:data error:&error]; if (error) { diff --git a/Source/ARTURLSessionServerTrust.m b/Source/ARTURLSessionServerTrust.m index 22faa45ee..6ceb50803 100644 --- a/Source/ARTURLSessionServerTrust.m +++ b/Source/ARTURLSessionServerTrust.m @@ -13,7 +13,7 @@ - (instancetype)init:(dispatch_queue_t)queue { if (self = [super init]) { _queue = queue; NSURLSessionConfiguration *config = [NSURLSessionConfiguration ephemeralSessionConfiguration]; -#if TARGET_OS_MACCATALYST // if (@available(iOS 13.0, macCatalyst 13.0, ... doesn't help +#if TARGET_OS_MACCATALYST || TARGET_OS_VISION // if (@available(iOS 13.0, macCatalyst 13.0, ... doesn't help config.TLSMinimumSupportedProtocolVersion = tls_protocol_version_TLSv12; #else if (@available(iOS 13.0, macOS 10.15, tvOS 13.0, *)) { diff --git a/Source/ARTWrapperSDKProxyPush.m b/Source/ARTWrapperSDKProxyPush.m index 88b19fb40..e82c2c28d 100644 --- a/Source/ARTWrapperSDKProxyPush.m +++ b/Source/ARTWrapperSDKProxyPush.m @@ -25,7 +25,7 @@ - (instancetype)initWithPush:(ARTPush *)push proxyOptions:(ARTWrapperSDKProxyOpt return self; } -#if TARGET_OS_IOS +#if TARGET_SUPPORTS_APNS - (void)activate { [self.underlyingPush activate]; diff --git a/Source/ARTWrapperSDKProxyRealtime.m b/Source/ARTWrapperSDKProxyRealtime.m index 858a0682a..b4d6bfd07 100644 --- a/Source/ARTWrapperSDKProxyRealtime.m +++ b/Source/ARTWrapperSDKProxyRealtime.m @@ -43,7 +43,7 @@ - (NSString *)clientId { return self.underlyingRealtime.clientId; } -#if TARGET_OS_IOS +#if TARGET_SUPPORTS_APNS - (ARTLocalDevice *)device { return self.underlyingRealtime.device; } diff --git a/Source/ARTWrapperSDKProxyRealtimeChannel.m b/Source/ARTWrapperSDKProxyRealtimeChannel.m index 4ef6ff79a..3a3d44e3e 100644 --- a/Source/ARTWrapperSDKProxyRealtimeChannel.m +++ b/Source/ARTWrapperSDKProxyRealtimeChannel.m @@ -21,7 +21,7 @@ - (instancetype)initWithChannel:(ARTRealtimeChannel *)channel proxyOptions:(ARTW if (self = [super init]) { _underlyingChannel = channel; _proxyOptions = proxyOptions; -#if TARGET_OS_IOS +#if TARGET_SUPPORTS_APNS _push = [[ARTWrapperSDKProxyPushChannel alloc] initWithPushChannel:channel.push proxyOptions:proxyOptions]; #endif diff --git a/Source/Info-visionOS.plist b/Source/Info-visionOS.plist new file mode 100644 index 000000000..337bf6e1b --- /dev/null +++ b/Source/Info-visionOS.plist @@ -0,0 +1,22 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + FMWK + CFBundleShortVersionString + $(CURRENT_PROJECT_VERSION) + CFBundleVersion + $(CURRENT_PROJECT_VERSION) + + diff --git a/Source/PrivateHeaders/Ably/ARTPush+Private.h b/Source/PrivateHeaders/Ably/ARTPush+Private.h index bf2a37444..e4e25d8f0 100644 --- a/Source/PrivateHeaders/Ably/ARTPush+Private.h +++ b/Source/PrivateHeaders/Ably/ARTPush+Private.h @@ -15,7 +15,7 @@ NS_ASSUME_NONNULL_BEGIN - (instancetype)initWithRest:(ARTRestInternal *)rest logger:(ARTInternalLog *)logger; -#if TARGET_OS_IOS +#if TARGET_SUPPORTS_APNS - (void)getActivationMachine:(void (^)(ARTPushActivationStateMachine *))block; /// Direct access to _activationMachine var for internal testing. @@ -24,9 +24,6 @@ NS_ASSUME_NONNULL_BEGIN /// Create the _activationMachine manually with a custom delegate for internal testing. - (ARTPushActivationStateMachine *)createActivationStateMachineWithDelegate:(id)delegate; -#endif - -#if TARGET_OS_IOS + (void)didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken rest:(ARTRest *)rest; diff --git a/Source/PrivateHeaders/Ably/ARTRealtime+Private.h b/Source/PrivateHeaders/Ably/ARTRealtime+Private.h index 27a9c2240..073aa601a 100644 --- a/Source/PrivateHeaders/Ably/ARTRealtime+Private.h +++ b/Source/PrivateHeaders/Ably/ARTRealtime+Private.h @@ -38,7 +38,7 @@ NS_ASSUME_NONNULL_BEGIN @property (nonatomic, readonly) ARTRealtimeChannelsInternal *channels; @property (readonly) ARTAuthInternal *auth; @property (readonly) ARTPushInternal *push; -#if TARGET_OS_IOS +#if TARGET_SUPPORTS_APNS @property (nonnull, nonatomic, readonly, getter=device) ARTLocalDevice *device; #endif @property (readonly, nullable, getter=clientId) NSString *clientId; diff --git a/Source/PrivateHeaders/Ably/ARTRest+Private.h b/Source/PrivateHeaders/Ably/ARTRest+Private.h index fbfd3171f..e00cfe3a1 100644 --- a/Source/PrivateHeaders/Ably/ARTRest+Private.h +++ b/Source/PrivateHeaders/Ably/ARTRest+Private.h @@ -24,7 +24,7 @@ NS_ASSUME_NONNULL_BEGIN @property (nonatomic, readonly) ARTRestChannelsInternal *channels; @property (nonatomic, readonly) ARTAuthInternal *auth; @property (nonatomic, readonly) ARTPushInternal *push; -#if TARGET_OS_IOS +#if TARGET_SUPPORTS_APNS @property (nonnull, nonatomic, readonly, getter=device) ARTLocalDevice *device; @property (nonnull, nonatomic, readonly, getter=device_nosync) ARTLocalDevice *device_nosync; @property (nonatomic) id storage; @@ -84,7 +84,7 @@ NS_ASSUME_NONNULL_BEGIN - (nullable NSObject *)internetIsUp:(void (^)(BOOL isUp))cb; -#if TARGET_OS_IOS +#if TARGET_SUPPORTS_APNS - (void)setupLocalDevice_nosync; - (void)resetLocalDevice_nosync; diff --git a/Source/SocketRocket/Internal/Proxy/ARTSRProxyConnect.m b/Source/SocketRocket/Internal/Proxy/ARTSRProxyConnect.m index 5aa3da901..8f93a5e5c 100644 --- a/Source/SocketRocket/Internal/Proxy/ARTSRProxyConnect.m +++ b/Source/SocketRocket/Internal/Proxy/ARTSRProxyConnect.m @@ -239,7 +239,7 @@ - (void)_fetchPAC:(NSURL *)PACurl withProxySettings:(NSDictionary *)proxySetting __weak typeof(self) wself = self; NSURLRequest *request = [NSURLRequest requestWithURL:PACurl]; NSURLSessionConfiguration *config = [NSURLSessionConfiguration ephemeralSessionConfiguration]; -#if TARGET_OS_MACCATALYST // if (@available(iOS 13.0, macCatalyst 13.0, ... doesn't help +#if TARGET_OS_MACCATALYST || TARGET_OS_VISION // if (@available(iOS 13.0, macCatalyst 13.0, ... doesn't help config.TLSMinimumSupportedProtocolVersion = tls_protocol_version_TLSv12; #else if (@available(iOS 13.0, macOS 10.15, tvOS 13.0, *)) { diff --git a/Source/SocketRocket/Internal/Security/ARTSRPinningSecurityPolicy.m b/Source/SocketRocket/Internal/Security/ARTSRPinningSecurityPolicy.m index f6890cfe2..1c4f798f7 100644 --- a/Source/SocketRocket/Internal/Security/ARTSRPinningSecurityPolicy.m +++ b/Source/SocketRocket/Internal/Security/ARTSRPinningSecurityPolicy.m @@ -49,25 +49,26 @@ - (instancetype)initWithCertificates:(NSArray *)pinnedCertificates logger:(nulla - (BOOL)evaluateServerTrust:(SecTrustRef)serverTrust forDomain:(NSString *)domain { - ARTSRDebugLog(self.logger, @"Pinned cert count: %lu", (unsigned long)self.pinnedCertificates.count); - NSUInteger requiredCertCount = self.pinnedCertificates.count; - - NSUInteger validatedCertCount = 0; - CFIndex serverCertCount = SecTrustGetCertificateCount(serverTrust); - for (CFIndex i = 0; i < serverCertCount; i++) { - SecCertificateRef cert = SecTrustGetCertificateAtIndex(serverTrust, i); - NSData *data = CFBridgingRelease(SecCertificateCopyData(cert)); - for (id ref in self.pinnedCertificates) { - SecCertificateRef trustedCert = (__bridge SecCertificateRef)ref; - // TODO: (nlutsenko) Add caching, so we don't copy the data for every pinned cert all the time. - NSData *trustedCertData = CFBridgingRelease(SecCertificateCopyData(trustedCert)); - if ([trustedCertData isEqualToData:data]) { - validatedCertCount++; - break; - } - } - } - return (requiredCertCount == validatedCertCount); +// ARTSRDebugLog(self.logger, @"Pinned cert count: %lu", (unsigned long)self.pinnedCertificates.count); +// NSUInteger requiredCertCount = self.pinnedCertificates.count; +// +// NSUInteger validatedCertCount = 0; +// CFIndex serverCertCount = SecTrustGetCertificateCount(serverTrust); +// for (CFIndex i = 0; i < serverCertCount; i++) { +// SecCertificateRef cert = SecTrustGetCertificateAtIndex(serverTrust, i); +// NSData *data = CFBridgingRelease(SecCertificateCopyData(cert)); +// for (id ref in self.pinnedCertificates) { +// SecCertificateRef trustedCert = (__bridge SecCertificateRef)ref; +// // TODO: (nlutsenko) Add caching, so we don't copy the data for every pinned cert all the time. +// NSData *trustedCertData = CFBridgingRelease(SecCertificateCopyData(trustedCert)); +// if ([trustedCertData isEqualToData:data]) { +// validatedCertCount++; +// break; +// } +// } +// } +// return (requiredCertCount == validatedCertCount); + return false; } @end diff --git a/Source/SocketRocket/Internal/Utilities/ARTSRURLUtilities.m b/Source/SocketRocket/Internal/Utilities/ARTSRURLUtilities.m index 3a33fe106..92996fa1d 100644 --- a/Source/SocketRocket/Internal/Utilities/ARTSRURLUtilities.m +++ b/Source/SocketRocket/Internal/Utilities/ARTSRURLUtilities.m @@ -80,7 +80,7 @@ extern BOOL ARTSRURLRequiresSSL(NSURL *url) networkServiceType = NSStreamNetworkServiceTypeVoice; break; -#if !TARGET_OS_MACCATALYST +#if !(TARGET_OS_MACCATALYST || TARGET_OS_VISION) case NSURLNetworkServiceTypeVoIP: networkServiceType = NSStreamNetworkServiceTypeVoIP; break; diff --git a/Source/include/Ably/ARTPush.h b/Source/include/Ably/ARTPush.h index fd5154d0c..b3e002381 100644 --- a/Source/include/Ably/ARTPush.h +++ b/Source/include/Ably/ARTPush.h @@ -9,7 +9,7 @@ NS_ASSUME_NONNULL_BEGIN -#if TARGET_OS_IOS +#if TARGET_SUPPORTS_APNS /** The interface for handling Push activation/deactivation-related actions. @@ -62,7 +62,7 @@ NS_ASSUME_NONNULL_BEGIN /// :nodoc: - (instancetype)init NS_UNAVAILABLE; -#if TARGET_OS_IOS +#if TARGET_SUPPORTS_APNS // Push Registration token diff --git a/Source/include/Ably/ARTRealtime.h b/Source/include/Ably/ARTRealtime.h index f6cdc8686..6eb66704b 100644 --- a/Source/include/Ably/ARTRealtime.h +++ b/Source/include/Ably/ARTRealtime.h @@ -29,7 +29,7 @@ NS_ASSUME_NONNULL_BEGIN */ @protocol ARTRealtimeInstanceMethodsProtocol -#if TARGET_OS_IOS +#if TARGET_SUPPORTS_APNS /** * Retrieves a `ARTLocalDevice` object that represents the current state of the device as a target for push notifications. */ diff --git a/Source/include/Ably/ARTRest.h b/Source/include/Ably/ARTRest.h index bcae9405f..293e87168 100644 --- a/Source/include/Ably/ARTRest.h +++ b/Source/include/Ably/ARTRest.h @@ -65,7 +65,7 @@ NS_ASSUME_NONNULL_BEGIN callback:(ARTPaginatedStatsCallback)callback error:(NSError *_Nullable *_Nullable)errorPtr; -#if TARGET_OS_IOS +#if TARGET_SUPPORTS_APNS /** * Retrieves an `ARTLocalDevice` object that represents the current state of the device as a target for push notifications. */ diff --git a/Source/include/Ably/ARTTypes.h b/Source/include/Ably/ARTTypes.h index 3c40d6dc1..b36f22a9a 100644 --- a/Source/include/Ably/ARTTypes.h +++ b/Source/include/Ably/ARTTypes.h @@ -3,6 +3,12 @@ #import #import +#if TARGET_OS_IPHONE || TARGET_OS_IOS // TARGET_OS_IPHONE is true for visionOS (__is_target_os(xros)) + #define TARGET_SUPPORTS_APNS 1 +#else + #define TARGET_SUPPORTS_APNS 0 +#endif + @class ARTStatus; @class ARTHttpResponse; @class ARTErrorInfo; diff --git a/Test/Ably-visionOS.xctestplan b/Test/Ably-visionOS.xctestplan new file mode 100644 index 000000000..9d76eddcf --- /dev/null +++ b/Test/Ably-visionOS.xctestplan @@ -0,0 +1,26 @@ +{ + "configurations" : [ + { + "id" : "A936E4FC-59F0-4655-BB9B-E323F94EA52B", + "name" : "Configuration 1", + "options" : { + + } + } + ], + "defaultOptions" : { + "codeCoverage" : false, + "language" : "en", + "region" : "US" + }, + "testTargets" : [ + { + "target" : { + "containerPath" : "container:Ably.xcodeproj", + "identifier" : "84B3FC732DB69F9C00037368", + "name" : "Ably-visionOS-Tests" + } + } + ], + "version" : 1 +} diff --git a/Test/Info-visionOS.plist b/Test/Info-visionOS.plist new file mode 100644 index 000000000..ac35265c6 --- /dev/null +++ b/Test/Info-visionOS.plist @@ -0,0 +1,24 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + BNDL + CFBundleShortVersionString + 1.0 + CFBundleVersion + 1 + NSPrincipalClass + Ably_visionOS_Tests.AblyTestsConfiguration + + diff --git a/Test/Test Utilities/TestUtilities.swift b/Test/Test Utilities/TestUtilities.swift index dba82abbc..57ba4a528 100644 --- a/Test/Test Utilities/TestUtilities.swift +++ b/Test/Test Utilities/TestUtilities.swift @@ -29,7 +29,7 @@ class AblyTestsConfiguration: NSObject, XCTestObservation { // framework, was inside a `configuration.beforeSuite` hook, // which means it runs just before the execution of the first // test case. - AsyncDefaults.timeout = testTimeout + PollingDefaults.timeout = testTimeout } } @@ -46,7 +46,7 @@ let appSetupModel: TestAppSetup = { } }() -let testTimeout = DispatchTimeInterval.seconds(20) +let testTimeout = NimbleTimeInterval.seconds(20) let testResourcesPath = "ably-common/test-resources/" let echoServerAddress = "https://echo.ably.io/createJWT" @@ -257,7 +257,7 @@ class AblyTests { } } - class func waitFor(timeout: DispatchTimeInterval, file: FileString = #file, line: UInt = #line, f: @escaping (@escaping (T?) -> Void) -> Void) throws -> T { + class func waitFor(timeout: NimbleTimeInterval, file: FileString = #file, line: UInt = #line, f: @escaping (@escaping (T?) -> Void) -> Void) throws -> T { var value: T? waitUntil(timeout: timeout, file: file, line: line) { done in f() { v in @@ -271,7 +271,7 @@ class AblyTests { return value } - class func wait(for expectations: [XCTestExpectation], timeout dispatchInterval: DispatchTimeInterval = testTimeout, file: Nimble.FileString = #file, line: UInt = #line) { + class func wait(for expectations: [XCTestExpectation], timeout dispatchInterval: NimbleTimeInterval = testTimeout, file: Nimble.FileString = #file, line: UInt = #line) { let result = XCTWaiter.wait( for: expectations, timeout: dispatchInterval.toTimeInterval(), @@ -1834,9 +1834,9 @@ extension ARTPresenceAction : CustomStringConvertible { // MARK: - Custom Nimble Matchers /// A Nimble matcher that succeeds when two dates are quite the same. -public func beCloseTo(_ expectedValue: Date) -> Nimble.Predicate { +public func beCloseTo(_ expectedValue: Date) -> Nimble.Matcher { let errorMessage = "be close to <\(expectedValue)> (within 0.5)" - return Predicate.simple(errorMessage) { actualExpression in + return Matcher.simple(errorMessage) { actualExpression in guard let actualValue = try actualExpression.evaluate() else { return .fail } @@ -1848,9 +1848,9 @@ public func beCloseTo(_ expectedValue: Date) -> Nimble.Predicate { } /// A Nimble matcher that succeeds when a param exists. -public func haveParam(_ key: String, withValue expectedValue: String? = nil) -> Nimble.Predicate { +public func haveParam(_ key: String, withValue expectedValue: String? = nil) -> Nimble.Matcher { let errorMessage = "param <\(key)=\(expectedValue ?? "nil")> exists" - return Predicate.simple(errorMessage) { actualExpression in + return Matcher.simple(errorMessage) { actualExpression in guard let actualValue = try actualExpression.evaluate() else { return .fail } @@ -1866,9 +1866,9 @@ public func haveParam(_ key: String, withValue expectedValue: String? = nil) -> } /// A Nimble matcher that succeeds when a param value starts with a particular string. -public func haveParam(_ key: String, hasPrefix expectedValue: String) -> Nimble.Predicate { +public func haveParam(_ key: String, hasPrefix expectedValue: String) -> Nimble.Matcher { let errorMessage = "param <\(key)> has prefix \(expectedValue)" - return Predicate.simple(errorMessage) { actualExpression in + return Matcher.simple(errorMessage) { actualExpression in guard let actualValue = try actualExpression.evaluate() else { return .fail } @@ -2041,6 +2041,56 @@ extension DispatchTimeInterval { } } +extension NimbleTimeInterval { + /// Convert dispatch time interval to older style time interval for use with XCTest APIs. + func toTimeInterval() -> TimeInterval { + // Based on: https://stackoverflow.com/a/47716381/392847 + switch self { + case .seconds(let value): + return Double(value) + case .milliseconds(let value): + return Double(value) * 0.001 + case .microseconds(let value): + return Double(value) * 0.000001 + case .nanoseconds(let value): + return Double(value) * 0.000000001 + } + } + + /// Return a new dispatch time interval computed from this one, multipled by the supplied amount. + func multiplied(by multiplier: Double) -> NimbleTimeInterval { + switch self { + case .seconds(let value): + return .seconds(Int(Double(value) * multiplier)) + case .milliseconds(let value): + return .milliseconds(Int(Double(value) * multiplier)) + case .microseconds(let value): + return .microseconds(Int(Double(value) * multiplier)) + case .nanoseconds(let value): + return .nanoseconds(Int(Double(value) * multiplier)) + } + } + + /// Return a new dispatch time interval computed from this one, incremented by the supplied amount, to no less than millisecond precision. + func incremented(by interval: TimeInterval) -> NimbleTimeInterval { + // interval is a TimeInterval which is a Double which is in SECONDS + switch self { + case .seconds(let value): + // rounding to millisecond precision, which is fine for the purposes of our test needs + return .milliseconds(Int(1000.0 * (Double(value) + interval))) + case .milliseconds(let value): + let millisecondIncrement = interval * 1000.0 + return .milliseconds(Int(Double(value) + millisecondIncrement)) + case .microseconds(let value): + let microsecondIncrement = interval * 1000000.0 + return .microseconds(Int(Double(value) + microsecondIncrement)) + case .nanoseconds(let value): + let nanosecondIncrement = interval * 1000000000.0 + return .nanoseconds(Int(Double(value) + nanosecondIncrement)) + } + } +} + extension ARTErrorCode { var intValue: NSInteger { diff --git a/Test/Tests/AuthTests.swift b/Test/Tests/AuthTests.swift index a5a9cd7ca..67f204f3b 100644 --- a/Test/Tests/AuthTests.swift +++ b/Test/Tests/AuthTests.swift @@ -19,7 +19,9 @@ private func testStopsClientWithOptions(caseSetter: (ARTClientOptions) -> Void) let options = ARTClientOptions() caseSetter(options) - expect { ARTRest(options: options) }.to(raiseException()) + XCTAssertNotNil(tryInObjC { + _ = ARTRest(options: options) + }) } private let currentClientId = "client_string" @@ -77,8 +79,9 @@ class AuthTests: XCTestCase { let test = Test() let clientOptions = try AblyTests.commonAppSetup(for: test) clientOptions.tls = false - - expect { ARTRest(options: clientOptions) }.to(raiseException()) + XCTAssertNotNil(tryInObjC { + _ = ARTRest(options: clientOptions) + }) } // RSA11 @@ -946,8 +949,12 @@ class AuthTests: XCTestCase { let test = Test() let options = try AblyTests.commonAppSetup(for: test) options.clientId = "*" - expect { ARTRest(options: options) }.to(raiseException()) - expect { ARTRealtime(options: options) }.to(raiseException()) + XCTAssertNotNil(tryInObjC { + _ = ARTRest(options: options) + }) + XCTAssertNotNil(tryInObjC { + _ = ARTRealtime(options: options) + }) } // RSA15b @@ -1356,7 +1363,9 @@ class AuthTests: XCTestCase { let clientOptions = try AblyTests.commonAppSetup(for: test) clientOptions.clientId = "*" - expect { ARTRest(options: clientOptions) }.to(raiseException()) + XCTAssertNotNil(tryInObjC { + _ = ARTRest(options: clientOptions) + }) } // RSA8 @@ -4472,7 +4481,7 @@ class AuthTests: XCTestCase { let rest = ARTRest(options: options) XCTAssertNil(rest.auth.clientId) - #if TARGET_OS_IOS + #if TARGET_SUPPORTS_APNS XCTAssertNil(rest.device.clientId) #endif let testHttpExecutor = TestProxyHTTPExecutor(logger: .init(clientOptions: options)) diff --git a/Test/Tests/ClientInformationTests.swift b/Test/Tests/ClientInformationTests.swift index 3e3c808fa..a591118da 100644 --- a/Test/Tests/ClientInformationTests.swift +++ b/Test/Tests/ClientInformationTests.swift @@ -19,6 +19,8 @@ final class ClientInformationTests: XCTestCase { XCTAssertTrue(agents.keys.contains("watchOS")) #elseif os(macOS) XCTAssertTrue(agents.keys.contains("macOS")) + #elseif os(visionOS) + XCTAssertTrue(agents.keys.contains("visionOS")) #else #error("Building for unknown OS") #endif diff --git a/Test/Tests/CryptoTests.swift b/Test/Tests/CryptoTests.swift index 706a5885b..2404421ee 100644 --- a/Test/Tests/CryptoTests.swift +++ b/Test/Tests/CryptoTests.swift @@ -20,8 +20,9 @@ class CryptoTests: XCTestCase { // RSE1a, RSE1b func test__001__Crypto__getDefaultParams__returns_a_complete_CipherParams_instance__using_the_default_values_for_any_field_not_supplied() { - expect { ARTCrypto.getDefaultParams(["nokey": "nokey"]) }.to(raiseException()) - + XCTAssertNotNil(tryInObjC { + _ = ARTCrypto.getDefaultParams(["nokey": "nokey"]) + }) var params: ARTCipherParams = ARTCrypto.getDefaultParams([ "key": key, ]) @@ -69,9 +70,11 @@ class CryptoTests: XCTestCase { // RSE1e func test__003__Crypto__getDefaultParams__should_check_that_keyLength_is_valid_for_algorithm() { - expect { ARTCrypto.getDefaultParams([ - "key": binaryKey.subdata(in: 0 ..< 10), - ]) }.to(raiseException()) + XCTAssertNotNil(tryInObjC { + _ = ARTCrypto.getDefaultParams([ + "key": binaryKey.subdata(in: 0 ..< 10), + ]) + }) } // RSE2 diff --git a/Test/Tests/PushTests.swift b/Test/Tests/PushTests.swift index 8470e28be..9b97096c3 100644 --- a/Test/Tests/PushTests.swift +++ b/Test/Tests/PushTests.swift @@ -212,7 +212,9 @@ class PushTests: XCTestCase { // https://github.com/ably/ably-cocoa/issues/888 func test__007__activation__should_not_sync_the_local_device_dispatched_in_internal_queue() { - expect { ARTPush.didRegisterForRemoteNotifications(withDeviceToken: TestDeviceToken.tokenData, rest: rest) }.toNot(raiseException()) + XCTAssertNil(tryInObjC { + ARTPush.didRegisterForRemoteNotifications(withDeviceToken: TestDeviceToken.tokenData, rest: rest) + }) } // RSH8 diff --git a/Test/Tests/RealtimeClientConnectionTests.swift b/Test/Tests/RealtimeClientConnectionTests.swift index 66b0c6a8f..820d86c58 100644 --- a/Test/Tests/RealtimeClientConnectionTests.swift +++ b/Test/Tests/RealtimeClientConnectionTests.swift @@ -290,7 +290,7 @@ class RealtimeClientConnectionTests: XCTestCase { break } } - expect(connected).toEventually(beTrue(), timeout: DispatchTimeInterval.seconds(10), description: "Can't connect automatically") + expect(connected).toEventually(beTrue(), timeout: NimbleTimeInterval.seconds(10), description: "Can't connect automatically") } func test__002__Connection__should_connect_manually() throws { @@ -727,7 +727,7 @@ class RealtimeClientConnectionTests: XCTestCase { let numClients = 50 let numMessages = 5 let channelName = "chat" - let testTimeout = DispatchTimeInterval.seconds(60) + let testTimeout = NimbleTimeInterval.seconds(60) defer { for client in disposable { @@ -1728,7 +1728,7 @@ class RealtimeClientConnectionTests: XCTestCase { } expect(start).toEventuallyNot(beNil(), timeout: testTimeout) - expect(end).toEventuallyNot(beNil(), timeout: DispatchTimeInterval.milliseconds(Int(1000.0 * ARTDefault.realtimeRequestTimeout()))) + expect(end).toEventuallyNot(beNil(), timeout: NimbleTimeInterval.milliseconds(Int(1000.0 * ARTDefault.realtimeRequestTimeout()))) if states.count != 2 { fail("Invalid number of connection states. Expected CLOSING and CLOSE states") @@ -2289,7 +2289,7 @@ class RealtimeClientConnectionTests: XCTestCase { client.connect() - let observedStateChanges = try retrySequenceDataGatherer.waitForData(timeout: testTimeout.multiplied(by: 3)) + let observedStateChanges = try retrySequenceDataGatherer.waitForData(timeout: testTimeout.dispatchTimeInterval.multiplied(by: 3)) // We expect to get INITIALIZED -> CONNECTING, and then, repeated: CONNECTING -> DISCONNECTED, DISCONNECTED -> CONNECTING, and then finally CONNECTING -> SUSPENDED. @@ -4174,7 +4174,7 @@ class RealtimeClientConnectionTests: XCTestCase { client.connect() defer { client.dispose(); client.close() } - let data = try dataGatherer.waitForData(timeout: testTimeout) + let data = try dataGatherer.waitForData(timeout: testTimeout.dispatchTimeInterval) // We expect the first connection attempt to fail due to the .fakeNetworkResponse configured above. This error does not meet the criteria for trying a fallback host, and so should not provoke the use of a fallback host. Hence the connection should transition to DISCONNECTED, and then subsequently retry, transitioning back to CONNECTING. We should see that there were two connection attempts, both to the primary host. diff --git a/Test/Tests/RealtimeClientPresenceTests.swift b/Test/Tests/RealtimeClientPresenceTests.swift index 13ddebd3b..41aee4f63 100644 --- a/Test/Tests/RealtimeClientPresenceTests.swift +++ b/Test/Tests/RealtimeClientPresenceTests.swift @@ -93,7 +93,7 @@ private func attachAndWaitForInitialPresenceSyncToComplete(client: ARTRealtime, class RealtimeClientPresenceTests: XCTestCase { override func setUp() { super.setUp() - AsyncDefaults.timeout = testTimeout + PollingDefaults.timeout = testTimeout } // XCTest invokes this method before executing the first test in the test suite. We use it to ensure that the global variables are initialized at the same moment, and in the same order, as they would have been when we used the Quick testing framework. diff --git a/Test/Tests/RestClientChannelTests.swift b/Test/Tests/RestClientChannelTests.swift index d9ad0ac21..8bed641ee 100644 --- a/Test/Tests/RestClientChannelTests.swift +++ b/Test/Tests/RestClientChannelTests.swift @@ -1306,7 +1306,9 @@ class RestClientChannelTests: XCTestCase { invalidCases.forEach { caseItem in waitUntil(timeout: testTimeout) { done in - expect { channel.publish(nil, data: caseItem, callback: nil) }.toNot(raiseException()) + XCTAssertNil(tryInObjC { + channel.publish(nil, data: caseItem, callback: nil) + }) done() } } diff --git a/Test/Tests/RestClientChannelsTests.swift b/Test/Tests/RestClientChannelsTests.swift index 2356fed95..4776c0b95 100644 --- a/Test/Tests/RestClientChannelsTests.swift +++ b/Test/Tests/RestClientChannelsTests.swift @@ -17,11 +17,11 @@ extension ARTRestChannels: Sequence { } #endif -private func beAChannel(named expectedValue: String) -> Nimble.Predicate { - return Predicate.define("be a channel with name \"\(expectedValue)\"") { actualExpression, msg -> PredicateResult in +private func beAChannel(named expectedValue: String) -> Nimble.Matcher { + return Matcher.define("be a channel with name \"\(expectedValue)\"") { actualExpression, msg -> MatcherResult in let actualValue = try actualExpression.evaluate() let m = msg.appended(details: "\"\(actualValue?.name ?? "nil")\" instead") - return PredicateResult(status: PredicateStatus(bool: actualValue?.name == expectedValue), message: m) + return MatcherResult(status: MatcherStatus(bool: actualValue?.name == expectedValue), message: m) } } diff --git a/Test/Tests/RestClientTests.swift b/Test/Tests/RestClientTests.swift index 48ef8933d..e13eade55 100644 --- a/Test/Tests/RestClientTests.swift +++ b/Test/Tests/RestClientTests.swift @@ -184,7 +184,9 @@ class RestClientTests: XCTestCase { } func test__016__RestClient__initializer__should_throw_when_provided_an_invalid_key() { - expect { ARTRest(key: "invalid_key") }.to(raiseException()) + XCTAssertNotNil(tryInObjC { + _ = ARTRest(key: "invalid_key") + }) } func test__017__RestClient__initializer__should_result_in_error_status_when_provided_a_bad_key() { @@ -876,16 +878,24 @@ class RestClientTests: XCTestCase { let options = ARTClientOptions(key: "xxxx:xxxx") XCTAssertNil(options.fallbackHosts) XCTAssertFalse(options.fallbackHostsUseDefault) + + XCTAssertNil(tryInObjC { + options.fallbackHosts = [] + }) - expect { options.fallbackHosts = [] }.toNot(raiseException()) - - expect { options.fallbackHostsUseDefault = true }.to(raiseException(named: ARTFallbackIncompatibleOptionsException)) + XCTAssertEqual(tryInObjC { + options.fallbackHosts = [] + }?.name.rawValue, ARTFallbackIncompatibleOptionsException) options.fallbackHosts = nil - - expect { options.fallbackHostsUseDefault = true }.toNot(raiseException()) - - expect { options.fallbackHosts = ["fake.ably.io"] }.to(raiseException(named: ARTFallbackIncompatibleOptionsException)) + + XCTAssertNil(tryInObjC { + options.fallbackHostsUseDefault = true + }) + + XCTAssertEqual(tryInObjC { + options.fallbackHosts = ["fake.ably.io"] + }?.name.rawValue, ARTFallbackIncompatibleOptionsException) } // RSC15b diff --git a/Test/Tests/UtilitiesTests.swift b/Test/Tests/UtilitiesTests.swift index 6eb4daf8b..cc320cbe4 100644 --- a/Test/Tests/UtilitiesTests.swift +++ b/Test/Tests/UtilitiesTests.swift @@ -161,7 +161,9 @@ class UtilitiesTests: XCTestCase { fail("Should not receive any message") } var result: AnyObject? - expect { result = realtime.internal.transport?.receive(with: data as Data) }.toNot(raiseException()) + XCTAssertNil(tryInObjC { + result = realtime.internal.transport?.receive(with: data as Data) + }) XCTAssertNil(result) done() } @@ -383,7 +385,7 @@ class UtilitiesTests: XCTestCase { fail("onTimeout callback shouldn't have been called") }).startTimer() eventEmitter.off() - waitUntil(timeout: DispatchTimeInterval.milliseconds(300)) { done in + waitUntil(timeout: NimbleTimeInterval.milliseconds(300)) { done in AblyTests.queue.asyncAfter(deadline: .now() + 0.15) { done() } @@ -396,7 +398,7 @@ class UtilitiesTests: XCTestCase { weak var timer = listenerFoo1!.setTimer(0.2, onTimeout: { fail("onTimeout callback shouldn't have been called") }) - waitUntil(timeout: DispatchTimeInterval.seconds(1)) { done in + waitUntil(timeout: NimbleTimeInterval.seconds(1)) { done in timer?.startTimer() eventEmitter.emit("foo", with: 123 as AnyObject?) AblyTests.queue.asyncAfter(deadline: .now() + 0.3) { @@ -415,7 +417,7 @@ class UtilitiesTests: XCTestCase { calledOnTimeout = true expect(NSDate()).to(beCloseTo(beforeEmitting.addingTimeInterval(0.3), within: 0.2)) }).startTimer() - waitUntil(timeout: DispatchTimeInterval.milliseconds(500)) { done in + waitUntil(timeout: NimbleTimeInterval.milliseconds(500)) { done in AblyTests.queue.asyncAfter(deadline: .now() + 0.35) { XCTAssertTrue(calledOnTimeout) eventEmitter.emit("foo", with: 123 as AnyObject?) diff --git a/fastlane/Fastfile b/fastlane/Fastfile index ac9d57275..357824841 100644 --- a/fastlane/Fastfile +++ b/fastlane/Fastfile @@ -24,6 +24,7 @@ platform :ios do LANE_CONFIGS = [ LaneConfig.new(:test_iOS17_2, "Ably-iOS", ["iPhone 15 (17.2)"]), LaneConfig.new(:test_tvOS17_2, "Ably-tvOS", ["Apple TV (17.2)"]), + LaneConfig.new(:test_visionOS_1_0, "Ably-visionOS", ["Apple Vision Pro"]), LaneConfig.new(:test_macOS, "Ably-macOS") ]