Skip to content

Clean up the public API for 2.0: deletions, renames, internal HTTP client, no ART prefix in Swift - #2287

Merged
maratal merged 10 commits into
split/drop-core-productfrom
api/public-surface
Sep 18, 2026
Merged

maratal merged 10 commits into
split/drop-core-productfrom
api/public-surface

Conversation

@maratal

@maratal maratal commented Sep 16, 2026 •

Copy link
Copy Markdown
Contributor

Stacked on #2285. PDR-091d decided on 2026-09-14 that the new major takes the renamed public surface and drops the deprecated one, on the grounds that the new packages are "new artifacts with a new major version and no existing consumers… free of backward-compatibility obligation".

Ten commits, each of which builds on its own. 322 files.

Deleted

The three members the headers marked for removal: ARTClientOptions.fallbackHostsUseDefault, ARTConnection.recoveryKey (a straight alias for createRecoveryKey) and ARTStats.intervalGranularity. This follows 091d's rule — "anything already marked deprecated in the current release is a deletion candidate by default; keeping it requires the SDK owner to say why".

ARTFallbackIncompatibleOptionsException went with them. It was public but raised only by the two guards against combining the removed flag with a custom fallback-host list, so nothing can raise it now. Flagging it because it was not itself marked deprecated.

Eight tests covered the removed property and are gone. A ninth nearly went with them and shouldn't have: RSL1k4's idempotent-publishing test only set the flag to make fallback hosts available, so it now sets fallbackHosts directly.

On the spec. Removing fallbackHostsUseDefault also removes RTN17b3's unconditional fallback retry. That clause no longer specifies anything — features.md:638 reads "(RTN17b3) This clause has been replaced by RSC17h as of specification version 4.0.0" — and the spec's preamble says support for the option "is optional. Client libraries that have no requirement for backwards compatibility with these options (for example, new SDKs) may omit support for them entirely." So no deviation needs recording.

One behaviour change worth a second look. The custom setFallbackHosts: existed only for one of those guards. Removing it lets the compiler synthesise the setter, which honours the property's copy attribute — the hand-written one assigned without copying.

Renamed

ARTRest → ARTHttpClient, ARTRestChannel(s) → ARTHttpChannel(s), ARTRestPresence → ARTHttpPresence, ARTRestAnnotations → ARTHttpAnnotations, with their internal counterparts, protocols, the sixteen files carrying those names, and the seven test suites that exercise them.

ARTRealtime → ARTRealtimeClient, together with its internal companion ARTRealtimeInternal → ARTRealtimeClientInternal. ARTRealtimeChannel, ARTRealtimeChannels, ARTRealtimePresence and ARTRealtimeAnnotations keep their names, which the spec also uses.

The stated rationale for that one does not apply here. 091d justifies it as consistency with a createRealtimeClient(…) factory, and per 091b2 this SDK has no such factory — ably-cocoa is device-only, with PubSubDevice.createClient(options) as its one door. What carries it instead: the spec already names the interface RealtimeClient (features.md:2140), so this moves toward the spec rather than away; and it restores the pair with ARTHttpClient, since both top-level entry objects now say what they are.

Separately, the private HTTP executor was ARTHttp, which said nothing about its job and sat one word from ARTHttpClient after the rename. It becomes ARTHTTPExecutor, and the protocol it implements becomes ARTHTTPExecuting.

No longer public

The HTTP client family. ARTHttpClient, ARTHttpChannel, ARTHttpChannels, ARTHttpPresence and ARTHttpAnnotations move from AblyPublic.h to AblyInternal.h, and ARTHttpClient's initializers move to ARTHttpClient+Private.h. Two shared query types were declared inside HTTP headers that public realtime headers had to import for them — ARTPresenceQuery and ARTAnnotationsQuery — so they move to ARTPresence.h and ARTAnnotation.h and stay documented.

ARTPushProtocol declared four class methods taking a rest: parameter of that type — the remote- and location-notification registration callbacks — each with a realtime: twin. An application has no way to obtain the argument any more, so those four are removed, along with the wrapper proxy's implementations of them. The realtime: twins are what an app uses; Examples/AblyPush/App.swift calls them. ARTPushInternal keeps its own rest: set, which is what the push tests call.

Construction. ARTRealtimeClient's three initializers move to a Construction category in ARTRealtimeClient+Private.h, and the six NS_SWIFT_UNAVAILABLE class factories on both top-level classes go entirely. An application builds a client through PubSubDevice.createClient(options:), which declares that the client runs on an end user's device; a client built any other way carries no such declaration. The class itself stays public, since the factory returns one, and tests reach the initializers through the Private submodule.

The internal status types. ARTState, ARTStatus, ARTException and ARTClientCodeError are internal machinery that nothing outside Source/ uses, and no public declaration names them — ARTStatusCallback and two ARTStatus forward declarations had no use in the repository at all. They move to private headers. The public header keeps the error model and is renamed ARTErrorInfo.h after the class it declares.

Naming where the internals come from. Moving those types exposed something worth fixing on its own: twelve test files and five implementation files used SDK internals without importing the header or submodule that declares them. They compiled because neither Clang nor Swift enforces that strictly — a transitive include in Objective-C, and in Swift one import AblyPubSubDevice.Private anywhere in a module resolving the name everywhere in it. The last commit makes each of those files say what it depends on.

No ART prefix in Swift

186 declarations in the public headers gain an NS_SWIFT_NAME without the prefix, so Swift now writes RealtimeClient, ClientOptions, ErrorInfo and Message. Objective-C is unchanged, and so is the private module: Swift that reaches internals through import AblyPubSubDevice.Private still writes ARTProtocolMessage.

Two things to know before approving this part.

Annotation and Cancellable collide with SwiftUI and Combine. Neither breaks anything — a caller disambiguates with AblyPubSubDevice.Annotation — but a SwiftUI file that writes the bare name gets an ambiguity error. ARTState would have been worse, because it shadows SwiftUI's property wrapper and would have broken every view in a file importing both; it is internal now, so the question does not arise.

Inside this repository, three names need a module qualifier, because _AblyPluginSupportPrivate already spells its mirror protocols without a prefix: RealtimeChannel in two LiveObjects files, RealtimeChannel and RealtimeChannelState in PluginAPITests, and AblyLiveObjects' own internal PublishResult in two test helpers. A consumer never sees this, since that module is not a product.

Through the device door

The README, the LiveObjects README, the SPM example, Examples/AblyPush, the LiveObjects example app and the DocC example on AblyLiveObjects.Plugin all built clients with the initializer that is now internal. They use PubSubDevice.createClient(options:) instead, in the same commit that makes the initializer internal, so no commit in the stack leaves an example unbuildable.

Deliberately not here

Test/UTS keeps its rest directories: that layout mirrors the uts modules in ably/specification (objects, realtime, rest), which Test/UTS/README.md keeps in sync with the Kotlin module. Test method names still carry the old vocabulary, since they encode the suite path — only the handful naming a renamed symbol were changed. Folding ARTHttpClient into ARTHttpClientInternal is a separate change, and so is doing anything about ARTState and ARTClientCodeError being non-spec error-code spaces that leak into ARTErrorInfo.code.

Verification

Every one of the ten commits builds under swift build --build-tests. At the tip: clean under -warnings-as-errors; build-for-testing succeeds on iOS and tvOS simulators; Examples/SPM tests, AblyPushExample and the LiveObjects example app all build on every platform their CI jobs use; LiveObjects' sortImports lint is clean; EditorConfig rules hold across the changed files. Tests pass locally against the sandbox.

The iOS build-for-testing leg is the one that matters for the push changes: PushTests.swift sits entirely inside #if os(iOS), so a macOS-only check never compiles it.

Scripts/set-version.sh lists one renamed test file by path with no existence check, so it is updated in step; otherwise every make bump_* would have hit a missing file.

@coderabbitai

coderabbitai Bot commented Sep 16, 2026 •

Copy link
Copy Markdown

Important

Review skipped

Too many files!

This PR contains 322 files, which is 222 over the limit of 100.

To get a review, reduce the PR to 100 files or fewer by splitting it into smaller PRs or changing its base branch.

Upgrade to a paid plan to raise the limit.

Usage-priced reviews support at most 300 files.

⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Advanced

Run ID: 985b5520-012f-498d-9460-167cb87055a0

📥 Commits

Reviewing files that changed from the base of the PR and between c6c83a5 and 3bbf750.

📒 Files selected for processing (322)
  • .claude/skills/uts-to-swift/SKILL.md
  • .claude/skills/uts-to-swift/references/objects-mapping.md
  • .github/workflows/uts.yaml
  • CLAUDE.md
  • CONTRIBUTING.md
  • Docs/tools-for-investigating-test-failures.md
  • Examples/AblyPush/AblyPushExample/AblyHelper.swift
  • Examples/AblyPush/AblyPushExample/App.swift
  • Examples/AblyPush/AblyPushExample/ContentView.swift
  • Examples/SPM/Sources/SPMIntegration/main.swift
  • Examples/SPM/Tests/SPMTests/SPMTests.swift
  • LiveObjects/CONTRIBUTING.md
  • LiveObjects/Example/AblyLiveObjectsExample/AblyLiveObjectsExampleApp.swift
  • LiveObjects/Example/AblyLiveObjectsExample/ContentView.swift
  • LiveObjects/Example/AblyLiveObjectsExample/ViewModels/LiveCounterViewModel.swift
  • LiveObjects/Example/AblyLiveObjectsExample/ViewModels/TaskBoardViewModel.swift
  • LiveObjects/README.md
  • LiveObjects/Sources/AblyLiveObjects/Internal/ARTClientOptions+Objects.swift
  • LiveObjects/Sources/AblyLiveObjects/Internal/ChannelConfigGuards.swift
  • LiveObjects/Sources/AblyLiveObjects/Internal/CoreSDK.swift
  • LiveObjects/Sources/AblyLiveObjects/Internal/DefaultInternalPlugin.swift
  • LiveObjects/Sources/AblyLiveObjects/Internal/InternalDefaultLiveCounter.swift
  • LiveObjects/Sources/AblyLiveObjects/Internal/InternalDefaultLiveMap.swift
  • LiveObjects/Sources/AblyLiveObjects/Internal/InternalDefaultRealtimeObjects.swift
  • LiveObjects/Sources/AblyLiveObjects/Internal/LiveObjectMutableState.swift
  • LiveObjects/Sources/AblyLiveObjects/Internal/ObjectCreationHelpers.swift
  • LiveObjects/Sources/AblyLiveObjects/Path Based API/Default/DefaultLiveCounterInstance.swift
  • LiveObjects/Sources/AblyLiveObjects/Path Based API/Default/DefaultLiveCounterPathObject.swift
  • LiveObjects/Sources/AblyLiveObjects/Path Based API/Default/DefaultLiveMapInstance.swift
  • LiveObjects/Sources/AblyLiveObjects/Path Based API/Default/DefaultLiveMapPathObject.swift
  • LiveObjects/Sources/AblyLiveObjects/Path Based API/Default/DefaultPathObject.swift
  • LiveObjects/Sources/AblyLiveObjects/Path Based API/Default/DefaultPrimitiveInstance.swift
  • LiveObjects/Sources/AblyLiveObjects/Path Based API/Default/DefaultPrimitivePathObject.swift
  • LiveObjects/Sources/AblyLiveObjects/Path Based API/Public/Channel+Object.swift
  • LiveObjects/Sources/AblyLiveObjects/Path Based API/Public/Instance.swift
  • LiveObjects/Sources/AblyLiveObjects/Path Based API/Public/PathObject.swift
  • LiveObjects/Sources/AblyLiveObjects/Path Based API/Public/RealtimeObject.swift
  • LiveObjects/Sources/AblyLiveObjects/Protocol/ObjectMessage.swift
  • LiveObjects/Sources/AblyLiveObjects/Protocol/SyncCursor.swift
  • LiveObjects/Sources/AblyLiveObjects/Protocol/WireObjectMessage.swift
  • LiveObjects/Sources/AblyLiveObjects/Public/Plugin.swift
  • LiveObjects/Sources/AblyLiveObjects/Public/Public Proxy Objects/PublicDefaultRealtimeObject.swift
  • LiveObjects/Sources/AblyLiveObjects/Public/Public Proxy Objects/PublicObjectsStore.swift
  • LiveObjects/Sources/AblyLiveObjects/Utility/Data+Extensions.swift
  • LiveObjects/Sources/AblyLiveObjects/Utility/Errors.swift
  • LiveObjects/Sources/AblyLiveObjects/Utility/JSONValue.swift
  • LiveObjects/Sources/AblyLiveObjects/Utility/MarkerProtocolHelpers.swift
  • LiveObjects/Sources/AblyLiveObjects/Utility/NSNumber+Extensions.swift
  • LiveObjects/Sources/AblyLiveObjects/Utility/WireCodable.swift
  • LiveObjects/Sources/AblyLiveObjects/Utility/WireValue.swift
  • LiveObjects/Tests/AblyLiveObjectsTests/Helpers/Ably+Concurrency.swift
  • LiveObjects/Tests/AblyLiveObjectsTests/Helpers/ClientHelper.swift
  • LiveObjects/Tests/AblyLiveObjectsTests/Helpers/Sandbox.swift
  • LiveObjects/Tests/AblyLiveObjectsTests/Integration/AblyLiveObjectsTests.swift
  • LiveObjects/Tests/AblyLiveObjectsTests/Integration/ObjectLifetimesTests.swift
  • LiveObjects/Tests/AblyLiveObjectsTests/JS Integration Tests/TestProxyTransport.swift
  • LiveObjects/Tests/AblyLiveObjectsTests/Unit/DefaultInstanceTests.swift
  • LiveObjects/Tests/AblyLiveObjectsTests/Unit/DefaultInternalPluginTests.swift
  • LiveObjects/Tests/AblyLiveObjectsTests/Unit/DefaultPathObjectTests.swift
  • LiveObjects/Tests/AblyLiveObjectsTests/Unit/InternalDefaultLiveCounterTests.swift
  • LiveObjects/Tests/AblyLiveObjectsTests/Unit/InternalDefaultLiveMapTests.swift
  • LiveObjects/Tests/AblyLiveObjectsTests/Unit/InternalDefaultRealtimeObjectsTests.swift
  • LiveObjects/Tests/AblyLiveObjectsTests/Unit/LiveObjectMutableStateTests.swift
  • LiveObjects/Tests/AblyLiveObjectsTests/Unit/ObjectMessageTests.swift
  • LiveObjects/Tests/AblyLiveObjectsTests/Unit/PathObjectSubscriptionTests.swift
  • LiveObjects/Tests/AblyLiveObjectsTests/Unit/PublicRealtimeObjectTests.swift
  • LiveObjects/Tests/AblyLiveObjectsTests/Unit/WireObjectMessageSizeTests.swift
  • README.md
  • Scripts/set-version.sh
  • Source/ARTAuth.m
  • Source/ARTAuthOptions.m
  • Source/ARTBaseMessage.m
  • Source/ARTChannel.m
  • Source/ARTChannelStateChangeParams.m
  • Source/ARTChannels.m
  • Source/ARTClientOptions.m
  • Source/ARTConnection.m
  • Source/ARTCrypto.m
  • Source/ARTDataEncoder.m
  • Source/ARTErrorChecker.m
  • Source/ARTErrorInfo.m
  • Source/ARTEventEmitter.m
  • Source/ARTFallback.m
  • Source/ARTFallbackHosts.m
  • Source/ARTHTTPExecutor.m
  • Source/ARTHTTPPaginatedResponse.m
  • Source/ARTHttpAnnotations.m
  • Source/ARTHttpChannel.m
  • Source/ARTHttpChannels.m
  • Source/ARTHttpClient.m
  • Source/ARTHttpPresence.m
  • Source/ARTJsonEncoder.m
  • Source/ARTJsonLikeEncoder.m
  • Source/ARTLog.m
  • Source/ARTMessageSendStatus.m
  • Source/ARTNSError+ARTUtils.m
  • Source/ARTNSMutableRequest+ARTHttpClient.m
  • Source/ARTPaginatedResult.m
  • Source/ARTPluginAPI.m
  • Source/ARTPresenceMessage.m
  • Source/ARTProtocolMessage.m
  • Source/ARTPubSubDevice.m
  • Source/ARTPush.m
  • Source/ARTPushActivationState.m
  • Source/ARTPushActivationStateMachine.m
  • Source/ARTPushAdmin.m
  • Source/ARTPushChannel.m
  • Source/ARTPushChannelSubscriptions.m
  • Source/ARTPushDeviceRegistrations.m
  • Source/ARTRealtimeAnnotations.m
  • Source/ARTRealtimeChannel.m
  • Source/ARTRealtimeChannels.m
  • Source/ARTRealtimeClient.m
  • Source/ARTRealtimePresence.m
  • Source/ARTRealtimeTransportFactory.m
  • Source/ARTStats.m
  • Source/ARTStatus.m
  • Source/ARTWebSocketTransport.m
  • Source/ARTWrapperSDKProxyPush.m
  • Source/ARTWrapperSDKProxyRealtime.m
  • Source/PrivateHeaders/Ably/ARTAuth+Private.h
  • Source/PrivateHeaders/Ably/ARTBaseMessage+Private.h
  • Source/PrivateHeaders/Ably/ARTChannel+Private.h
  • Source/PrivateHeaders/Ably/ARTChannel.h
  • Source/PrivateHeaders/Ably/ARTChannelStateChangeParams.h
  • Source/PrivateHeaders/Ably/ARTChannels+Private.h
  • Source/PrivateHeaders/Ably/ARTClientOptions+TestConfiguration.h
  • Source/PrivateHeaders/Ably/ARTConnectRetryState.h
  • Source/PrivateHeaders/Ably/ARTConnection+Private.h
  • Source/PrivateHeaders/Ably/ARTConnectionStateChangeParams.h
  • Source/PrivateHeaders/Ably/ARTCrypto+Private.h
  • Source/PrivateHeaders/Ably/ARTDataEncoder.h
  • Source/PrivateHeaders/Ably/ARTErrorInfo+Private.h
  • Source/PrivateHeaders/Ably/ARTEventEmitter+Private.h
  • Source/PrivateHeaders/Ably/ARTHTTPExecutor+Private.h
  • Source/PrivateHeaders/Ably/ARTHTTPExecutor.h
  • Source/PrivateHeaders/Ably/ARTHTTPPaginatedResponse+Private.h
  • Source/PrivateHeaders/Ably/ARTHttpAnnotations+Private.h
  • Source/PrivateHeaders/Ably/ARTHttpChannel+Private.h
  • Source/PrivateHeaders/Ably/ARTHttpChannels+Private.h
  • Source/PrivateHeaders/Ably/ARTHttpClient+Private.h
  • Source/PrivateHeaders/Ably/ARTHttpPresence+Private.h
  • Source/PrivateHeaders/Ably/ARTJsonLikeEncoder.h
  • Source/PrivateHeaders/Ably/ARTLocalDevice+Private.h
  • Source/PrivateHeaders/Ably/ARTMessageSendStatus.h
  • Source/PrivateHeaders/Ably/ARTNSMutableRequest+ARTHttpClient.h
  • Source/PrivateHeaders/Ably/ARTPaginatedResult+Private.h
  • Source/PrivateHeaders/Ably/ARTPush+Private.h
  • Source/PrivateHeaders/Ably/ARTPushActivationStateMachine+Private.h
  • Source/PrivateHeaders/Ably/ARTPushActivationStateMachine.h
  • Source/PrivateHeaders/Ably/ARTPushAdmin+Private.h
  • Source/PrivateHeaders/Ably/ARTPushChannel+Private.h
  • Source/PrivateHeaders/Ably/ARTPushChannelSubscriptions+Private.h
  • Source/PrivateHeaders/Ably/ARTPushDeviceRegistrations+Private.h
  • Source/PrivateHeaders/Ably/ARTRealtimeAnnotations+Private.h
  • Source/PrivateHeaders/Ably/ARTRealtimeChannel+Private.h
  • Source/PrivateHeaders/Ably/ARTRealtimeChannels+Private.h
  • Source/PrivateHeaders/Ably/ARTRealtimeClient+Private.h
  • Source/PrivateHeaders/Ably/ARTRealtimeTransport.h
  • Source/PrivateHeaders/Ably/ARTRealtimeTransportFactory.h
  • Source/PrivateHeaders/Ably/ARTRestAnnotations+Private.h
  • Source/PrivateHeaders/Ably/ARTRestChannels+Private.h
  • Source/PrivateHeaders/Ably/ARTStatus.h
  • Source/PrivateHeaders/Ably/ARTTestClientOptions.h
  • Source/PrivateHeaders/Ably/ARTThrowingLocalDeviceStorage.h
  • Source/PrivateHeaders/Ably/ARTWebSocketTransport.h
  • Source/PrivateHeaders/Ably/ARTWrapperSDKProxyRealtime+Private.h
  • Source/include/AblyPubSubDevice/ARTAnnotation.h
  • Source/include/AblyPubSubDevice/ARTAuth.h
  • Source/include/AblyPubSubDevice/ARTAuthDetails.h
  • Source/include/AblyPubSubDevice/ARTAuthOptions.h
  • Source/include/AblyPubSubDevice/ARTBaseMessage.h
  • Source/include/AblyPubSubDevice/ARTChannelOptions.h
  • Source/include/AblyPubSubDevice/ARTChannelProtocol.h
  • Source/include/AblyPubSubDevice/ARTChannels.h
  • Source/include/AblyPubSubDevice/ARTClientInformation.h
  • Source/include/AblyPubSubDevice/ARTClientOptions.h
  • Source/include/AblyPubSubDevice/ARTConnection.h
  • Source/include/AblyPubSubDevice/ARTCrypto.h
  • Source/include/AblyPubSubDevice/ARTDataQuery.h
  • Source/include/AblyPubSubDevice/ARTDefault.h
  • Source/include/AblyPubSubDevice/ARTDeviceDetails.h
  • Source/include/AblyPubSubDevice/ARTDeviceIdentityTokenDetails.h
  • Source/include/AblyPubSubDevice/ARTDevicePushDetails.h
  • Source/include/AblyPubSubDevice/ARTErrorInfo.h
  • Source/include/AblyPubSubDevice/ARTEventEmitter.h
  • Source/include/AblyPubSubDevice/ARTHTTPPaginatedResponse.h
  • Source/include/AblyPubSubDevice/ARTHttpAnnotations.h
  • Source/include/AblyPubSubDevice/ARTHttpChannel.h
  • Source/include/AblyPubSubDevice/ARTHttpChannels.h
  • Source/include/AblyPubSubDevice/ARTHttpClient.h
  • Source/include/AblyPubSubDevice/ARTHttpPresence.h
  • Source/include/AblyPubSubDevice/ARTLocalDevice.h
  • Source/include/AblyPubSubDevice/ARTLog.h
  • Source/include/AblyPubSubDevice/ARTMessage.h
  • Source/include/AblyPubSubDevice/ARTMessageAnnotations.h
  • Source/include/AblyPubSubDevice/ARTMessageOperation.h
  • Source/include/AblyPubSubDevice/ARTMessageVersion.h
  • Source/include/AblyPubSubDevice/ARTOutboundAnnotation.h
  • Source/include/AblyPubSubDevice/ARTPaginatedResult.h
  • Source/include/AblyPubSubDevice/ARTPresence.h
  • Source/include/AblyPubSubDevice/ARTPresenceMessage.h
  • Source/include/AblyPubSubDevice/ARTPubSubDevice.h
  • Source/include/AblyPubSubDevice/ARTPublishResult.h
  • Source/include/AblyPubSubDevice/ARTPublishResultSerial.h
  • Source/include/AblyPubSubDevice/ARTPush.h
  • Source/include/AblyPubSubDevice/ARTPushAdmin.h
  • Source/include/AblyPubSubDevice/ARTPushChannel.h
  • Source/include/AblyPubSubDevice/ARTPushChannelSubscription.h
  • Source/include/AblyPubSubDevice/ARTPushChannelSubscriptions.h
  • Source/include/AblyPubSubDevice/ARTPushDeviceRegistrations.h
  • Source/include/AblyPubSubDevice/ARTRealtimeAnnotations.h
  • Source/include/AblyPubSubDevice/ARTRealtimeChannel.h
  • Source/include/AblyPubSubDevice/ARTRealtimeChannelOptions.h
  • Source/include/AblyPubSubDevice/ARTRealtimeChannels.h
  • Source/include/AblyPubSubDevice/ARTRealtimeClient+WrapperSDKProxy.h
  • Source/include/AblyPubSubDevice/ARTRealtimeClient.h
  • Source/include/AblyPubSubDevice/ARTRealtimePresence.h
  • Source/include/AblyPubSubDevice/ARTStats.h
  • Source/include/AblyPubSubDevice/ARTStringifiable.h
  • Source/include/AblyPubSubDevice/ARTSummaryTypes.h
  • Source/include/AblyPubSubDevice/ARTTokenDetails.h
  • Source/include/AblyPubSubDevice/ARTTokenParams.h
  • Source/include/AblyPubSubDevice/ARTTokenRequest.h
  • Source/include/AblyPubSubDevice/ARTTypes.h
  • Source/include/AblyPubSubDevice/ARTUpdateDeleteResult.h
  • Source/include/AblyPubSubDevice/ARTWrapperSDKProxyOptions.h
  • Source/include/AblyPubSubDevice/ARTWrapperSDKProxyPush.h
  • Source/include/AblyPubSubDevice/ARTWrapperSDKProxyPushAdmin.h
  • Source/include/AblyPubSubDevice/ARTWrapperSDKProxyPushChannel.h
  • Source/include/AblyPubSubDevice/ARTWrapperSDKProxyPushChannelSubscriptions.h
  • Source/include/AblyPubSubDevice/ARTWrapperSDKProxyPushDeviceRegistrations.h
  • Source/include/AblyPubSubDevice/ARTWrapperSDKProxyRealtime.h
  • Source/include/AblyPubSubDevice/ARTWrapperSDKProxyRealtimeAnnotations.h
  • Source/include/AblyPubSubDevice/ARTWrapperSDKProxyRealtimeChannel.h
  • Source/include/AblyPubSubDevice/ARTWrapperSDKProxyRealtimeChannels.h
  • Source/include/AblyPubSubDevice/ARTWrapperSDKProxyRealtimePresence.h
  • Source/include/AblyPubSubDevice/AblyInternal.h
  • Source/include/AblyPubSubDevice/AblyPublic.h
  • Source/include/module.modulemap
  • Test/AblyLiveObjectsTesting/Helpers/MockCoreSDK.swift
  • Test/AblyLiveObjectsTesting/Helpers/MockRealtimeObjects.swift
  • Test/AblyLiveObjectsTesting/Internals/ARTErrorInfo+TestsOnly.swift
  • Test/AblyLiveObjectsTesting/Internals/ARTRealtimeChannel+TestsOnly.swift
  • Test/AblyLiveObjectsTesting/Internals/InternalDefaultRealtimeObjects+TestsOnly.swift
  • Test/AblyLiveObjectsTesting/README.md
  • Test/AblySoakTests/SoakTest.swift
  • Test/AblySoakTests/SoakTestURLSession.swift
  • Test/AblySoakTests/SoakTestWebSocket.swift
  • Test/AblyTesting/MockInternalLogCore.swift
  • Test/AblyTests/Test Utilities/MockDeviceStorage.swift
  • Test/AblyTests/Test Utilities/MockErrorChecker.swift
  • Test/AblyTests/Test Utilities/MockVersion2Log.swift
  • Test/AblyTests/Test Utilities/TestProxyTransportFactory.swift
  • Test/AblyTests/Test Utilities/TestUtilities.swift
  • Test/AblyTests/Tests/ARTDefaultTests.swift
  • Test/AblyTests/Tests/AuthTests.swift
  • Test/AblyTests/Tests/BackoffRetryDelayCalculatorTests.swift
  • Test/AblyTests/Tests/ChannelOptionsTests.swift
  • Test/AblyTests/Tests/ClientInformationTests.swift
  • Test/AblyTests/Tests/CryptoTests.swift
  • Test/AblyTests/Tests/DefaultErrorCheckerTests.swift
  • Test/AblyTests/Tests/DefaultInternalLogCoreTests.swift
  • Test/AblyTests/Tests/DeltaCodecTests.swift
  • Test/AblyTests/Tests/HttpAnnotationsTests.swift
  • Test/AblyTests/Tests/HttpClientChannelTests.swift
  • Test/AblyTests/Tests/HttpClientChannelsTests.swift
  • Test/AblyTests/Tests/HttpClientPresenceTests.swift
  • Test/AblyTests/Tests/HttpClientStatsTests.swift
  • Test/AblyTests/Tests/HttpClientTests.swift
  • Test/AblyTests/Tests/HttpPaginatedTests.swift
  • Test/AblyTests/Tests/LocalDeviceStorageTests.swift
  • Test/AblyTests/Tests/LogAdapterTests.swift
  • Test/AblyTests/Tests/MessageUpdatesDeletesTests.swift
  • Test/AblyTests/Tests/ObjectLifetimesTests.swift
  • Test/AblyTests/Tests/PluginAPITests.swift
  • Test/AblyTests/Tests/PubSubDeviceTests.swift
  • Test/AblyTests/Tests/PushActivationStateMachineTests.swift
  • Test/AblyTests/Tests/PushAdminTests.swift
  • Test/AblyTests/Tests/PushChannelTests.swift
  • Test/AblyTests/Tests/PushTests.swift
  • Test/AblyTests/Tests/RealtimeAnnotationsTests.swift
  • Test/AblyTests/Tests/RealtimeClientChannelTests.swift
  • Test/AblyTests/Tests/RealtimeClientChannelsTests.swift
  • Test/AblyTests/Tests/RealtimeClientConnectionTests.swift
  • Test/AblyTests/Tests/RealtimeClientPresenceTests.swift
  • Test/AblyTests/Tests/RealtimeClientTests.swift
  • Test/AblyTests/Tests/StatsTests.swift
  • Test/AblyTests/Tests/StringifiableTests.swift
  • Test/AblyTests/Tests/SummaryTypesTests.swift
  • Test/AblyTests/Tests/UtilitiesTests.swift
  • Test/AblyTests/Tests/WrapperSDKProxyTests.swift
  • Test/AblyTestsObjC/ARTArchiveTests.m
  • Test/AblyTestsObjC/ARTPubSubDeviceTests.m
  • Test/UTS/README.md
  • Test/UTS/deviations.md
  • Test/UTS/infra/Side.swift
  • Test/UTS/infra/SideSeamTests.swift
  • Test/UTS/infra/Utils.swift
  • Test/UTS/infra/integration/IntegrationTestCase.swift
  • Test/UTS/infra/integration/proxy/ProxySession.swift
  • Test/UTS/infra/integration/proxy/ProxyTestCase.swift
  • Test/UTS/infra/unit/CapturingLog.swift
  • Test/UTS/infra/unit/MockHTTPClient.swift
  • Test/UTS/infra/unit/MockWebSocket.swift
  • Test/UTS/infra/unit/ProtocolMessage.swift
  • Test/UTS/infra/unit/UTSTestCase.swift
  • Test/UTS/integration/proxy/objects/ObjectsFaultsTests.swift
  • Test/UTS/integration/proxy/realtime/AuthReauthTests.swift
  • Test/UTS/integration/standard/objects/ObjectsSyncTests.swift
  • Test/UTS/integration/standard/objects/helpers/ObjectsIntegrationHelpers.swift
  • Test/UTS/integration/standard/realtime/ChannelHistoryTests.swift
  • Test/UTS/integration/standard/realtime/TokenRequestTests.swift
  • Test/UTS/integration/standard/rest/HistoryTests.swift
  • Test/UTS/integration/standard/rest/PresenceTests.swift
  • Test/UTS/integration/standard/rest/PublishTests.swift
  • Test/UTS/unit/objects/InternalLiveCounterApiTests.swift
  • Test/UTS/unit/objects/ObjectsUTSHelpers.swift
  • Test/UTS/unit/objects/PathObjectMutationsTests.swift
  • Test/UTS/unit/objects/RealtimeObjectTests.swift
  • Test/UTS/unit/rest/TimeTests.swift
  • _AblyPluginSupportPrivate/include/APRealtimeClient.h

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Changes recommended

One or more issues must be addressed before approval.

Get a fresh assessment by requesting another Copilot review.

Pull request overview

This PR prepares ably-cocoa’s 2.0 public API by removing deprecated members, renaming client types, internalizing HTTP APIs, and adopting prefix-free Swift names.

Changes:

  • Deletes deprecated fallback, recovery, stats, and exception APIs.
  • Renames realtime/HTTP classes and updates internal references.
  • Updates headers, tests, examples, documentation, and LiveObjects usage.
File summaries
File Description
Test/UTS/unit/rest/TimeTests.swift Updated as part of this pull request.
Test/UTS/unit/objects/PathObjectMutationsTests.swift Updated as part of this pull request.
Test/UTS/unit/objects/InternalLiveCounterApiTests.swift Updated as part of this pull request.
Test/UTS/integration/standard/realtime/TokenRequestTests.swift Updated as part of this pull request.
Test/UTS/integration/standard/realtime/ChannelHistoryTests.swift Updated as part of this pull request.
Test/UTS/integration/standard/objects/ObjectsSyncTests.swift Updated as part of this pull request.
Test/UTS/integration/standard/objects/helpers/ObjectsIntegrationHelpers.swift Updated as part of this pull request.
Test/UTS/integration/proxy/realtime/AuthReauthTests.swift Updated as part of this pull request.
Test/UTS/integration/proxy/objects/ObjectsFaultsTests.swift Updated as part of this pull request.
Test/UTS/infra/Utils.swift Updated as part of this pull request.
Test/UTS/infra/unit/ProtocolMessage.swift Updated as part of this pull request.
Test/UTS/infra/unit/MockWebSocket.swift Updated as part of this pull request.
Test/UTS/infra/unit/MockHTTPClient.swift Updated as part of this pull request.
Test/UTS/infra/unit/CapturingLog.swift Updated as part of this pull request.
Test/UTS/infra/SideSeamTests.swift Updated as part of this pull request.
Test/UTS/infra/Side.swift Updated as part of this pull request.
Test/UTS/infra/integration/proxy/ProxyTestCase.swift Updated as part of this pull request.
Test/UTS/infra/integration/proxy/ProxySession.swift Updated as part of this pull request.
Test/UTS/infra/integration/IntegrationTestCase.swift Updated as part of this pull request.
Test/UTS/deviations.md Updated as part of this pull request.
Test/AblyTestsObjC/ARTPubSubDeviceTests.m Updated as part of this pull request.
Test/AblyTestsObjC/ARTArchiveTests.m Updated as part of this pull request.
Test/AblyTests/Tests/LogAdapterTests.swift Updated as part of this pull request.
Test/AblyTests/Tests/HttpPaginatedTests.swift Updated as part of this pull request.
Test/AblyTests/Tests/DefaultInternalLogCoreTests.swift Updated as part of this pull request.
Test/AblyTests/Tests/DefaultErrorCheckerTests.swift Updated as part of this pull request.
Test/AblyTests/Tests/ClientInformationTests.swift Updated as part of this pull request.
Test/AblyTests/Tests/ChannelOptionsTests.swift Updated as part of this pull request.
Test/AblyTests/Tests/ARTDefaultTests.swift Updated as part of this pull request.
Test/AblyTests/Test Utilities/TestProxyTransportFactory.swift Updated as part of this pull request.
Test/AblyTests/Test Utilities/MockVersion2Log.swift Updated as part of this pull request.
Test/AblyTests/Test Utilities/MockErrorChecker.swift Updated as part of this pull request.
Test/AblyTesting/MockInternalLogCore.swift Updated as part of this pull request.
Test/AblySoakTests/SoakTestURLSession.swift Updated as part of this pull request.
Test/AblyLiveObjectsTesting/README.md Updated as part of this pull request.
Test/AblyLiveObjectsTesting/Internals/InternalDefaultRealtimeObjects+TestsOnly.swift Updated as part of this pull request.
Test/AblyLiveObjectsTesting/Internals/ARTRealtimeChannel+TestsOnly.swift Updated as part of this pull request.
Test/AblyLiveObjectsTesting/Internals/ARTErrorInfo+TestsOnly.swift Updated as part of this pull request.
Test/AblyLiveObjectsTesting/Helpers/MockRealtimeObjects.swift Updated as part of this pull request.
Source/PrivateHeaders/Ably/ARTWrapperSDKProxyRealtime+Private.h Updated as part of this pull request.
Source/PrivateHeaders/Ably/ARTWebSocketTransport.h Updated as part of this pull request.
Source/PrivateHeaders/Ably/ARTThrowingLocalDeviceStorage.h Updated as part of this pull request.
Source/PrivateHeaders/Ably/ARTTestClientOptions.h Updated as part of this pull request.
Source/PrivateHeaders/Ably/ARTStatus.h Updated as part of this pull request.
Source/PrivateHeaders/Ably/ARTRestChannels+Private.h Updated as part of this pull request.
Source/PrivateHeaders/Ably/ARTRestAnnotations+Private.h Updated as part of this pull request.
Source/PrivateHeaders/Ably/ARTRealtimeTransportFactory.h Updated as part of this pull request.
Source/PrivateHeaders/Ably/ARTRealtimeTransport.h Updated as part of this pull request.
Source/PrivateHeaders/Ably/ARTRealtimeChannels+Private.h Updated as part of this pull request.
Source/PrivateHeaders/Ably/ARTRealtimeChannel+Private.h Updated as part of this pull request.
Source/PrivateHeaders/Ably/ARTRealtimeAnnotations+Private.h Updated as part of this pull request.
Source/PrivateHeaders/Ably/ARTPushDeviceRegistrations+Private.h Updated as part of this pull request.
Source/PrivateHeaders/Ably/ARTPushChannelSubscriptions+Private.h Updated as part of this pull request.
Source/PrivateHeaders/Ably/ARTPushChannel+Private.h Updated as part of this pull request.
Source/PrivateHeaders/Ably/ARTPushAdmin+Private.h Updated as part of this pull request.
Source/PrivateHeaders/Ably/ARTPushActivationStateMachine+Private.h Updated as part of this pull request.
Source/PrivateHeaders/Ably/ARTPushActivationStateMachine.h Updated as part of this pull request.
Source/PrivateHeaders/Ably/ARTPush+Private.h Updated as part of this pull request.
Source/PrivateHeaders/Ably/ARTPaginatedResult+Private.h Updated as part of this pull request.
Source/PrivateHeaders/Ably/ARTNSMutableRequest+ARTHttpClient.h Updated as part of this pull request.
Source/PrivateHeaders/Ably/ARTMessageSendStatus.h Updated as part of this pull request.
Source/PrivateHeaders/Ably/ARTLocalDevice+Private.h Updated as part of this pull request.
Source/PrivateHeaders/Ably/ARTJsonLikeEncoder.h Updated as part of this pull request.
Source/PrivateHeaders/Ably/ARTHttpPresence+Private.h Updated as part of this pull request.
Source/PrivateHeaders/Ably/ARTHTTPPaginatedResponse+Private.h Updated as part of this pull request.
Source/PrivateHeaders/Ably/ARTHTTPExecutor+Private.h Updated as part of this pull request.
Source/PrivateHeaders/Ably/ARTHTTPExecutor.h Updated as part of this pull request.
Source/PrivateHeaders/Ably/ARTHttpChannels+Private.h Updated as part of this pull request.
Source/PrivateHeaders/Ably/ARTHttpChannel+Private.h Updated as part of this pull request.
Source/PrivateHeaders/Ably/ARTHttpAnnotations+Private.h Updated as part of this pull request.
Source/PrivateHeaders/Ably/ARTEventEmitter+Private.h Updated as part of this pull request.
Source/PrivateHeaders/Ably/ARTErrorInfo+Private.h Updated as part of this pull request.
Source/PrivateHeaders/Ably/ARTDataEncoder.h Updated as part of this pull request.
Source/PrivateHeaders/Ably/ARTCrypto+Private.h Updated as part of this pull request.
Source/PrivateHeaders/Ably/ARTConnectRetryState.h Updated as part of this pull request.
Source/PrivateHeaders/Ably/ARTConnectionStateChangeParams.h Updated as part of this pull request.
Source/PrivateHeaders/Ably/ARTConnection+Private.h Updated as part of this pull request.
Source/PrivateHeaders/Ably/ARTClientOptions+TestConfiguration.h Updated as part of this pull request.
Source/PrivateHeaders/Ably/ARTChannelStateChangeParams.h Updated as part of this pull request.
Source/PrivateHeaders/Ably/ARTChannels+Private.h Updated as part of this pull request.
Source/PrivateHeaders/Ably/ARTChannel+Private.h Updated as part of this pull request.
Source/PrivateHeaders/Ably/ARTChannel.h Updated as part of this pull request.
Source/PrivateHeaders/Ably/ARTBaseMessage+Private.h Updated as part of this pull request.
Source/PrivateHeaders/Ably/ARTAuth+Private.h Updated as part of this pull request.
Source/include/AblyPubSubDevice/ARTWrapperSDKProxyRealtimePresence.h Updated as part of this pull request.
Source/include/AblyPubSubDevice/ARTWrapperSDKProxyRealtimeChannels.h Updated as part of this pull request.
Source/include/AblyPubSubDevice/ARTWrapperSDKProxyRealtimeChannel.h Updated as part of this pull request.
Source/include/AblyPubSubDevice/ARTWrapperSDKProxyRealtimeAnnotations.h Updated as part of this pull request.
Source/include/AblyPubSubDevice/ARTWrapperSDKProxyRealtime.h Updated as part of this pull request.
Source/include/AblyPubSubDevice/ARTWrapperSDKProxyPushDeviceRegistrations.h Updated as part of this pull request.
Source/include/AblyPubSubDevice/ARTWrapperSDKProxyPushChannelSubscriptions.h Updated as part of this pull request.
Source/include/AblyPubSubDevice/ARTWrapperSDKProxyPushChannel.h Updated as part of this pull request.
Source/include/AblyPubSubDevice/ARTWrapperSDKProxyPushAdmin.h Updated as part of this pull request.
Source/include/AblyPubSubDevice/ARTWrapperSDKProxyPush.h Updated as part of this pull request.
Source/include/AblyPubSubDevice/ARTWrapperSDKProxyOptions.h Updated as part of this pull request.
Source/include/AblyPubSubDevice/ARTUpdateDeleteResult.h Updated as part of this pull request.
Source/include/AblyPubSubDevice/ARTTokenRequest.h Updated as part of this pull request.
Source/include/AblyPubSubDevice/ARTTokenParams.h Updated as part of this pull request.
Source/include/AblyPubSubDevice/ARTTokenDetails.h Updated as part of this pull request.
Source/include/AblyPubSubDevice/ARTStringifiable.h Updated as part of this pull request.
Source/include/AblyPubSubDevice/ARTRealtimePresence.h Updated as part of this pull request.
Source/include/AblyPubSubDevice/ARTRealtimeClient+WrapperSDKProxy.h Updated as part of this pull request.
Source/include/AblyPubSubDevice/ARTRealtimeClient.h Updated as part of this pull request.
Source/include/AblyPubSubDevice/ARTRealtimeChannels.h Updated as part of this pull request.
Source/include/AblyPubSubDevice/ARTRealtimeChannelOptions.h Updated as part of this pull request.
Source/include/AblyPubSubDevice/ARTRealtimeChannel.h Updated as part of this pull request.
Source/include/AblyPubSubDevice/ARTRealtimeAnnotations.h Updated as part of this pull request.
Source/include/AblyPubSubDevice/ARTPushDeviceRegistrations.h Updated as part of this pull request.
Source/include/AblyPubSubDevice/ARTPushChannelSubscriptions.h Updated as part of this pull request.
Source/include/AblyPubSubDevice/ARTPushChannelSubscription.h Updated as part of this pull request.
Source/include/AblyPubSubDevice/ARTPushChannel.h Updated as part of this pull request.
Source/include/AblyPubSubDevice/ARTPushAdmin.h Updated as part of this pull request.
Source/include/AblyPubSubDevice/ARTPubSubDevice.h Updated as part of this pull request.
Source/include/AblyPubSubDevice/ARTPublishResultSerial.h Updated as part of this pull request.
Source/include/AblyPubSubDevice/ARTPublishResult.h Updated as part of this pull request.
Source/include/AblyPubSubDevice/ARTPresenceMessage.h Updated as part of this pull request.
Source/include/AblyPubSubDevice/ARTPresence.h Updated as part of this pull request.
Source/include/AblyPubSubDevice/ARTPaginatedResult.h Updated as part of this pull request.
Source/include/AblyPubSubDevice/ARTOutboundAnnotation.h Updated as part of this pull request.
Source/include/AblyPubSubDevice/ARTMessageVersion.h Updated as part of this pull request.
Source/include/AblyPubSubDevice/ARTMessageOperation.h Updated as part of this pull request.
Source/include/AblyPubSubDevice/ARTMessageAnnotations.h Updated as part of this pull request.
Source/include/AblyPubSubDevice/ARTMessage.h Updated as part of this pull request.
Source/include/AblyPubSubDevice/ARTLog.h Updated as part of this pull request.
Source/include/AblyPubSubDevice/ARTLocalDevice.h Updated as part of this pull request.
Source/include/AblyPubSubDevice/ARTHttpPresence.h Updated as part of this pull request.
Source/include/AblyPubSubDevice/ARTHTTPPaginatedResponse.h Updated as part of this pull request.
Source/include/AblyPubSubDevice/ARTHttpChannels.h Updated as part of this pull request.
Source/include/AblyPubSubDevice/ARTHttpChannel.h Updated as part of this pull request.
Source/include/AblyPubSubDevice/ARTHttpAnnotations.h Updated as part of this pull request.
Source/include/AblyPubSubDevice/ARTEventEmitter.h Updated as part of this pull request.
Source/include/AblyPubSubDevice/ARTDevicePushDetails.h Updated as part of this pull request.
Source/include/AblyPubSubDevice/ARTDeviceIdentityTokenDetails.h Updated as part of this pull request.
Source/include/AblyPubSubDevice/ARTDeviceDetails.h Updated as part of this pull request.
Source/include/AblyPubSubDevice/ARTDefault.h Updated as part of this pull request.
Source/include/AblyPubSubDevice/ARTDataQuery.h Updated as part of this pull request.
Source/include/AblyPubSubDevice/ARTCrypto.h Updated as part of this pull request.
Source/include/AblyPubSubDevice/ARTConnection.h Updated as part of this pull request.
Source/include/AblyPubSubDevice/ARTClientOptions.h Updated as part of this pull request.
Source/include/AblyPubSubDevice/ARTClientInformation.h Updated as part of this pull request.
Source/include/AblyPubSubDevice/ARTChannels.h Updated as part of this pull request.
Source/include/AblyPubSubDevice/ARTChannelProtocol.h Updated as part of this pull request.
Source/include/AblyPubSubDevice/ARTChannelOptions.h Updated as part of this pull request.
Source/include/AblyPubSubDevice/ARTBaseMessage.h Updated as part of this pull request.
Source/include/AblyPubSubDevice/ARTAuthOptions.h Updated as part of this pull request.
Source/include/AblyPubSubDevice/ARTAuthDetails.h Updated as part of this pull request.
Source/include/AblyPubSubDevice/ARTAuth.h Updated as part of this pull request.
Source/include/AblyPubSubDevice/ARTAnnotation.h Updated as part of this pull request.
Source/include/AblyPubSubDevice/AblyPublic.h Updated as part of this pull request.
Source/include/AblyPubSubDevice/AblyInternal.h Updated as part of this pull request.
Source/ARTWrapperSDKProxyRealtime.m Updated as part of this pull request.
Source/ARTWrapperSDKProxyPush.m Updated as part of this pull request.
Source/ARTWebSocketTransport.m Updated as part of this pull request.
Source/ARTStats.m Updated as part of this pull request.
Source/ARTRealtimeTransportFactory.m Updated as part of this pull request.
Source/ARTRealtimePresence.m Updated as part of this pull request.
Source/ARTRealtimeChannels.m Updated as part of this pull request.
Source/ARTRealtimeChannel.m Updated as part of this pull request.
Source/ARTRealtimeAnnotations.m Updated as part of this pull request.
Source/ARTPushDeviceRegistrations.m Updated as part of this pull request.
Source/ARTPushChannelSubscriptions.m Updated as part of this pull request.
Source/ARTPushChannel.m Updated as part of this pull request.
Source/ARTPushAdmin.m Updated as part of this pull request.
Source/ARTPushActivationStateMachine.m Updated as part of this pull request.
Source/ARTPushActivationState.m Updated as part of this pull request.
Source/ARTPubSubDevice.m Updated as part of this pull request.
Source/ARTProtocolMessage.m Updated as part of this pull request.
Source/ARTPresenceMessage.m Updated as part of this pull request.
Source/ARTPluginAPI.m Updated as part of this pull request.
Source/ARTNSMutableRequest+ARTHttpClient.m Updated as part of this pull request.
Source/ARTNSError+ARTUtils.m Updated as part of this pull request.
Source/ARTLog.m Updated as part of this pull request.
Source/ARTJsonLikeEncoder.m Updated as part of this pull request.
Source/ARTJsonEncoder.m Updated as part of this pull request.
Source/ARTHttpPresence.m Updated as part of this pull request.
Source/ARTHTTPPaginatedResponse.m Updated as part of this pull request.
Source/ARTHTTPExecutor.m Updated as part of this pull request.
Source/ARTHttpAnnotations.m Updated as part of this pull request.
Source/ARTFallbackHosts.m Updated as part of this pull request.
Source/ARTFallback.m Updated as part of this pull request.
Source/ARTEventEmitter.m Updated as part of this pull request.
Source/ARTErrorChecker.m Updated as part of this pull request.
Source/ARTDataEncoder.m Updated as part of this pull request.
Source/ARTCrypto.m Updated as part of this pull request.
Source/ARTConnection.m Updated as part of this pull request.
Source/ARTClientOptions.m Updated as part of this pull request.
Source/ARTChannels.m Updated as part of this pull request.
Source/ARTChannel.m Updated as part of this pull request.
Source/ARTBaseMessage.m Updated as part of this pull request.
Source/ARTAuthOptions.m Updated as part of this pull request.
Source/ARTAuth.m Updated as part of this pull request.
Scripts/set-version.sh Updated as part of this pull request.
README.md Updated as part of this pull request.
LiveObjects/Tests/AblyLiveObjectsTests/Unit/WireObjectMessageSizeTests.swift Updated as part of this pull request.
LiveObjects/Tests/AblyLiveObjectsTests/Unit/PublicRealtimeObjectTests.swift Updated as part of this pull request.
LiveObjects/Tests/AblyLiveObjectsTests/Unit/PathObjectSubscriptionTests.swift Updated as part of this pull request.
LiveObjects/Tests/AblyLiveObjectsTests/Unit/ObjectMessageTests.swift Updated as part of this pull request.
LiveObjects/Tests/AblyLiveObjectsTests/Unit/LiveObjectMutableStateTests.swift Updated as part of this pull request.
LiveObjects/Tests/AblyLiveObjectsTests/Unit/InternalDefaultLiveMapTests.swift Updated as part of this pull request.
LiveObjects/Tests/AblyLiveObjectsTests/Unit/InternalDefaultLiveCounterTests.swift Updated as part of this pull request.
LiveObjects/Tests/AblyLiveObjectsTests/Unit/DefaultInternalPluginTests.swift Updated as part of this pull request.
LiveObjects/Tests/AblyLiveObjectsTests/Unit/DefaultInstanceTests.swift Updated as part of this pull request.
LiveObjects/Tests/AblyLiveObjectsTests/Integration/ObjectLifetimesTests.swift Updated as part of this pull request.
LiveObjects/Tests/AblyLiveObjectsTests/Helpers/Sandbox.swift Updated as part of this pull request.
LiveObjects/Tests/AblyLiveObjectsTests/Helpers/ClientHelper.swift Updated as part of this pull request.
LiveObjects/Sources/AblyLiveObjects/Utility/WireValue.swift Updated as part of this pull request.
LiveObjects/Sources/AblyLiveObjects/Utility/NSNumber+Extensions.swift Updated as part of this pull request.
LiveObjects/Sources/AblyLiveObjects/Utility/JSONValue.swift Updated as part of this pull request.
LiveObjects/Sources/AblyLiveObjects/Utility/Data+Extensions.swift Updated as part of this pull request.
LiveObjects/Sources/AblyLiveObjects/Public/Public Proxy Objects/PublicObjectsStore.swift Updated as part of this pull request.
LiveObjects/Sources/AblyLiveObjects/Public/Public Proxy Objects/PublicDefaultRealtimeObject.swift Updated as part of this pull request.
LiveObjects/Sources/AblyLiveObjects/Public/Plugin.swift Updated as part of this pull request.
LiveObjects/Sources/AblyLiveObjects/Protocol/SyncCursor.swift Updated as part of this pull request.
LiveObjects/Sources/AblyLiveObjects/Path Based API/Public/RealtimeObject.swift Updated as part of this pull request.
LiveObjects/Sources/AblyLiveObjects/Path Based API/Public/Channel+Object.swift Updated as part of this pull request.
LiveObjects/Sources/AblyLiveObjects/Path Based API/Default/DefaultPrimitivePathObject.swift Updated as part of this pull request.
LiveObjects/Sources/AblyLiveObjects/Path Based API/Default/DefaultPrimitiveInstance.swift Updated as part of this pull request.
LiveObjects/Sources/AblyLiveObjects/Path Based API/Default/DefaultLiveCounterPathObject.swift Updated as part of this pull request.
LiveObjects/Sources/AblyLiveObjects/Path Based API/Default/DefaultLiveCounterInstance.swift Updated as part of this pull request.
LiveObjects/Sources/AblyLiveObjects/Internal/ObjectCreationHelpers.swift Updated as part of this pull request.
LiveObjects/Sources/AblyLiveObjects/Internal/LiveObjectMutableState.swift Updated as part of this pull request.
LiveObjects/Sources/AblyLiveObjects/Internal/ARTClientOptions+Objects.swift Updated as part of this pull request.
LiveObjects/README.md Updated as part of this pull request.
LiveObjects/Example/AblyLiveObjectsExample/ViewModels/TaskBoardViewModel.swift Updated as part of this pull request.
LiveObjects/Example/AblyLiveObjectsExample/ViewModels/LiveCounterViewModel.swift Updated as part of this pull request.
LiveObjects/Example/AblyLiveObjectsExample/ContentView.swift Updated as part of this pull request.
LiveObjects/Example/AblyLiveObjectsExample/AblyLiveObjectsExampleApp.swift Updated as part of this pull request.
LiveObjects/CONTRIBUTING.md Updated as part of this pull request.
Examples/SPM/Tests/SPMTests/SPMTests.swift Updated as part of this pull request.
Examples/SPM/Sources/SPMIntegration/main.swift Updated as part of this pull request.
Examples/AblyPush/AblyPushExample/ContentView.swift Updated as part of this pull request.
Examples/AblyPush/AblyPushExample/App.swift Updated as part of this pull request.
Docs/tools-for-investigating-test-failures.md Updated as part of this pull request.
CONTRIBUTING.md Updated as part of this pull request.
CLAUDE.md Updated as part of this pull request.
.github/workflows/uts.yaml Updated as part of this pull request.
_AblyPluginSupportPrivate/include/APRealtimeClient.h Updated as part of this pull request.
Review details

Suppressed comments (2)

.github/workflows/uts.yaml:37

  • This workflow comment uses the Objective-C spelling for a Swift constructor. After the new NS_SWIFT_NAME, the core test leg uses RealtimeClient(options:); ARTRealtimeClient(options:) is not the Swift API and makes this CI documentation misleading.
    Source/include/AblyPubSubDevice/AblyInternal.h:7
  • These imports are still re-exported by a normal import AblyPubSubDevice: the module's umbrella imports AblyInternal.h from AblyPubSubDevice.h (line 16). Moving the HTTP headers from AblyPublic.h to this file therefore only hides them from Jazzy, not consumers, so HttpClient and the HTTP channel types remain importable despite the stated internal-only surface. Remove this re-export from the public umbrella and import it explicitly only for SDK-authored targets, or otherwise keep the internal module separate.
  • Files reviewed: 296/318 changed files
  • Comments generated: 5
  • Review effort level: Lite

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment thread Source/ARTHttpClient.m
Comment thread Source/include/AblyPubSubDevice/ARTPush.h Outdated
Comment thread LiveObjects/Sources/AblyLiveObjects/Public/Plugin.swift Outdated
Comment thread Source/include/AblyPubSubDevice/ARTPubSubDevice.h Outdated
Comment thread Source/include/AblyPubSubDevice/ARTRealtimeAnnotations.h Outdated
Comment thread Source/include/AblyPubSubDevice/ARTRealtimeChannel.h Outdated
Comment thread Source/include/AblyPubSubDevice/ARTStats.h Outdated
Comment thread Source/ARTHttpClient.m
Comment thread CLAUDE.md Outdated

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Changes recommended

Public documentation still uses the now-private realtime initializer, and one CI comment uses the wrong Swift type name.

Get a fresh assessment by requesting another Copilot review.

Review details

Suppressed comments (2)

LiveObjects/Sources/AblyLiveObjects/Public/Plugin.swift:16

  • This public example calls an initializer that this PR moves to AblyPubSubDevice.Private, so application code copied from the generated documentation cannot compile and also bypasses the required device declaration. Use the public factory, consistent with the README examples.
    Source/include/AblyPubSubDevice/ARTPubSubDevice.h:15
  • This public documentation now points to initWithOptions:, but that initializer is removed from the public header by this PR. Avoid directing Objective-C consumers to an unavailable selector and describe the returned client without referencing private construction API.
  • Files reviewed: 296/318 changed files
  • Comments generated: 1
  • Review effort level: Balanced

Comment thread .github/workflows/uts.yaml Outdated
@@ -4,7 +4,7 @@ NS_ASSUME_NONNULL_BEGIN

/// The interface that plugins use to interact with a realtime client.
///
/// This exists so that plugins do not need to make use of the public `ARTRealtime` class, which allows the internal components of ably-cocoa to continue the (existing before we introduced plugins) pattern of also not making use of this public class.
/// This exists so that plugins do not need to make use of the public `ARTRealtimeClient` class, which allows the internal components of ably-cocoa to continue the (existing before we introduced plugins) pattern of also not making use of this public class.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The file is called APRealtimeClient.h ?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yes, not to confuse with another objc header - ARTRealtimeClient.h

@@ -4,7 +4,7 @@ NS_ASSUME_NONNULL_BEGIN

/// The interface that plugins use to interact with a realtime client.
///
/// This exists so that plugins do not need to make use of the public `ARTRealtime` class, which allows the internal components of ably-cocoa to continue the (existing before we introduced plugins) pattern of also not making use of this public class.
/// This exists so that plugins do not need to make use of the public `ARTRealtimeClient` class, which allows the internal components of ably-cocoa to continue the (existing before we introduced plugins) pattern of also not making use of this public class.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
/// This exists so that plugins do not need to make use of the public `ARTRealtimeClient` class, which allows the internal components of ably-cocoa to continue the (existing before we introduced plugins) pattern of also not making use of this public class.
/// This exists so that plugins do not need to make use of the public `RealtimeClient` class, which allows the internal components of ably-cocoa to continue the (existing before we introduced plugins) pattern of also not making use of this public class.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If we decided to remove ART from everywhere, then we should scan code for all ART prefixes and get rid of them. I can see ART prefix present at number of places

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

that's only true for swift sources, objc keeps this notation and would mislead reader without proper prefix

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@coderabbitai what do you think about this

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@sacOO7, I agree with @maratal.

This header declares an Objective-C protocol. In Objective-C, the public class name is ARTRealtimeClient. The current text is accurate.

NS_SWIFT_NAME(RealtimeClient) exposes the type as RealtimeClient to Swift. It does not rename the Objective-C class. Replacing ARTRealtimeClient with RealtimeClient would mislead Objective-C readers.

If the project removes ART from Objective-C public APIs, that should be a separate compatibility decision. It must include a complete API migration plan, not only documentation changes.

You are interacting with an AI system.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@coderabbitai do you think we should rename it to something else like LegacyRealtimeClient or something like that?

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@sacOO7, I would not use LegacyRealtimeClient.

Legacy normally identifies an obsolete API that remains for compatibility. This protocol is an internal abstraction for plugins. It is not a legacy version of ARTRealtimeClient.

Keep APRealtimeClient as the Objective-C protocol name. Keep ARTRealtimeClient in this documentation because it names the actual public Objective-C class.

If the text must describe the Swift API, add a separate sentence such as: “Swift exposes this protocol as RealtimeClient.”

You are interacting with an AI system.

2.0 drops the three members the headers marked for removal:

- ARTClientOptions.fallbackHostsUseDefault, whose attribute already said
  future releases would ignore any supplied value. Its two behaviours go
  with it: forcing the default fallback hosts in ARTFallbackHosts, and
  RTN17b3's unconditional fallback retry in ARTRealtime.
- ARTConnection.recoveryKey, a straight alias for createRecoveryKey.
- ARTStats.intervalGranularity, an unused alias for the unit property.

ARTFallbackIncompatibleOptionsException goes too. It was raised only by
the two guards against combining fallbackHostsUseDefault with a custom
fallback host list, so nothing can raise it now.

The custom setFallbackHosts: setter existed only for one of those guards.
Removing it lets the compiler synthesise the setter, which honours the
property's `copy` attribute — the hand-written one assigned without
copying.

Eight tests covered the removed property and are gone. The ninth,
RSL1k4's idempotent-publishing test, only used it to make fallback hosts
available, so it now sets fallbackHosts directly.
The classes that speak HTTP are named for their transport rather than for
being "not realtime": ARTRest -> ARTHttpClient, ARTRestChannel(s) ->
ARTHttpChannel(s), ARTRestPresence -> ARTHttpPresence, ARTRestAnnotations
-> ARTHttpAnnotations. Their internal counterparts and protocols follow,
and the sixteen files carrying those names are renamed with them.

Swift sees the new names too: none of these classes carried NS_SWIFT_NAME,
so the Objective-C name is the Swift name.

ARTRealtime is untouched. Its replacement name is still undecided.

CHANGELOG.md keeps the old names, since it describes released 1.x.
The concrete NSURLSession-backed executor was ARTHttp, which said nothing
about its job and sat one word away from ARTHttpClient after the Rest
rename. It becomes ARTHTTPExecutor, and the protocol it implements becomes
ARTHTTPExecuting so the name is free.

Giving the class the protocol's old name would also have worked —
Objective-C keeps the two in separate namespaces — but Swift then imports
the protocol as ARTHTTPExecutorProtocol, which is the wrong name for the
seam tests substitute.

Both are private API, so consumers see no change.
The seven suites in Test/AblyTests that cover the HTTP client follow the
classes: RestClientTests -> HttpClientTests, RestClientChannelTests ->
HttpClientChannelTests, and so on. Files and class names move together.

Scripts/set-version.sh lists one of these files by path for its version
substitution, so it is updated in step.

Test/UTS keeps its `rest` directories. That layout is not named after this
SDK's classes: it mirrors the uts modules in ably/specification, which the
Test/UTS README keeps in sync with the Kotlin module so a reader can move
between SDKs.
The specification already calls this interface RealtimeClient, so the rename
brings the class into line with the spec rather than away from it, and it
restores the pair with ARTHttpClient: both top-level entry objects now say
what they are.

Note that PDR-091d justifies this rename as consistency with a
createRealtimeClient factory. That argument does not apply here — this SDK
is device-side only and its one door is PubSubDevice.createClient — so the
grounds above are what carry it.

Only the top-level class moves, together with its internal companion:
ARTRealtimeInternal becomes ARTRealtimeClientInternal. ARTRealtimeChannel,
ARTRealtimeChannels, ARTRealtimePresence and ARTRealtimeAnnotations keep
their names, which the spec also uses.
ARTHttpClient, ARTHttpChannel, ARTHttpChannels, ARTHttpPresence and
ARTHttpAnnotations move from AblyPublic.h to AblyInternal.h, the umbrella for
API that is public but intended for Ably-authored SDKs and excluded from the
generated documentation. ARTHttpClient's initializers move to
ARTHttpClient+Private.h and its three createWith* class factories go entirely.
An application reaches Ably through PubSubDevice's factory, so none of these is
documented and none can be built from outside the SDK.

ARTPushProtocol declared four class methods taking a rest: parameter of that
type, each with a realtime: twin. An application has no way to obtain the
argument any more, so the four go, along with the wrapper proxy's
implementations of them. ARTPushInternal keeps its own set, which is what the
push tests now call.

Three public realtime headers imported an HTTP header, and two were doing so
for a type declared inside it rather than for the HTTP class: ARTPresenceQuery
lived in ARTHttpPresence.h and ARTAnnotationsQuery in ARTHttpAnnotations.h,
while the public ARTRealtimePresenceQuery inherits from the first and
ARTRealtimeAnnotations takes the second. Both are shared query types, so they
move to ARTPresence.h and ARTAnnotation.h and stay documented. The realtime
headers now import what they use.

ARTHttpChannels.h imported ARTHttpClient.h without using it, and jazzy follows
imports from AblyPublic.h, so leaving it would have kept the class in the
documentation. Doc comments in ARTClientOptions, ARTRealtimeClient and ARTStats
named the class and now describe the HTTP client instead.

The generated API reference lists none of the five HTTP types and both query
types. Tests keep using these classes directly: the headers are still in the
module, and the initializers are in the Private submodule.
An application creates a client through PubSubDevice's factory, which declares
that the client runs on an end user's device. A client built any other way
carries no such declaration, so Ably classifies its traffic by default rules —
which is the thing the device package exists to prevent.

The three initializers move from the public ARTRealtimeProtocol to a
Construction category in ARTRealtimeClient+Private.h. The class itself stays
public, since the factory returns one. ARTPubSubDevice.m imports the private
header to build it, and tests keep calling the initializers through the Private
submodule.

The class factories go with them. +createWithOptions:, +createWithKey: and
+createWithToken: were NS_SWIFT_UNAVAILABLE convenience wrappers around the
initializers they each call, and nothing in the SDK, the tests or the examples
used them. ARTHttpClient lost its own set in the commit before this one.

Two doc comments in ARTClientOptions referred to the protocol initializer by
name and now describe creating a client instead. The README, the LiveObjects
README, the SPM example, Examples/AblyPush, the LiveObjects example app and the
documentation example on AblyLiveObjects.Plugin all built clients with the
initializer and now use PubSubDevice.createClient(options:).

ProxySession's usage example built one too. Clients in the UTS come from
makeRealtimeForSide(options:), which is what that example now shows.
Every class, protocol, enum, typedef, function and constant in the module's
public headers gets an NS_SWIFT_NAME without the prefix, so Swift now writes
RealtimeClient, ClientOptions, ErrorInfo and Message. Objective-C is unchanged,
and so is the private module: Swift code that reaches internals through
`import AblyPubSubDevice.Private` still writes ARTProtocolMessage.

ARTState is the one exception. `State` is SwiftUI's property-wrapper type, so a
view importing both modules could no longer write the State attribute. The
header says so next to the enum.

Three names now need a module qualifier in this repository, because
_AblyPluginSupportPrivate already spells its mirror protocols without a prefix:
RealtimeChannel in two LiveObjects files, RealtimeChannel and
RealtimeChannelState in PluginAPITests, and AblyLiveObjects' own internal
PublishResult in two test helpers. A consumer never sees this — that module is
not a product.

Annotation and Cancellable do collide with SwiftUI and Combine. Both are
resolvable with a module qualifier rather than breaking, unlike State.
ARTState, ARTStatus, ARTException and ARTClientCodeError are internal
machinery that nothing outside Source/ uses. They move to private headers and
lose their Swift names, so only the Private submodule sees them, prefix and
all. ARTState therefore no longer needs its hand-written exception for
shadowing SwiftUI's property wrapper.

The public header keeps the error model and is renamed ARTErrorInfo.h after
the class it declares; ARTStatus.m splits to match. ARTStatusCallback and two
ARTStatus forward declarations go too — none had a use in the repository.
Twelve test files reached SDK internals without naming the submodule they come
from — ARTProtocolMessage, ARTDataEncoder, the push storage keys and so on.
They compiled because Swift's importer does not enforce an explicit Clang
submodule per file: one import anywhere in a module makes its declarations
resolve everywhere in that module, and AblyTests has twenty-three other files
that do import it.

That is not a guarantee to build on, and it hides which files depend on
internals. Each of the twelve now imports AblyPubSubDevice.Private itself.
@maratal
maratal merged commit 356a206 into integration/v2 Sep 18, 2026
32 checks passed
@maratal
maratal deleted the api/public-surface branch September 18, 2026 19:26

This branch was successfully deployed

4 active deployments
staging/pull/2287/markdown-api-reference — 3bbf7503 Deployed Sep 18, 2026 by github-actions[bot]
staging/pull/2287/jazzydoc — 3bbf7503 Deployed Sep 18, 2026 by github-actions[bot]
staging/pull/2287/AblyLiveObjects — 3bbf7503 Deployed Sep 18, 2026 by github-actions[bot]
staging/pull/2287/features — 3bbf7503 Deployed Sep 18, 2026 by github-actions[bot]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Development

Successfully merging this pull request may close these issues.

4 participants