-
Notifications
You must be signed in to change notification settings - Fork 6
Edu 1959 Improves Chat Swift Readme #298
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
WalkthroughThe README.md file was significantly overhauled, shifting from detailed usage instructions and embedded code samples to a concise overview with badges, platform support, and links to external documentation and demos. Most in-depth guidance, installation steps, and code examples were removed or replaced with references to official resources. Changes
Sequence Diagram(s)No sequence diagram is generated as the changes are limited to documentation restructuring. Assessment against linked issues
Assessment against linked issues: Out-of-scope changesNo out-of-scope changes found. Possibly related PRs
Suggested reviewers
Poem
✨ Finishing Touches🧪 Generate unit tests
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. 🪧 TipsChatThere are 3 ways to chat with CodeRabbit:
SupportNeed help? Create a ticket on our support page for assistance with any issues or questions. Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments. CodeRabbit Commands (Invoked using PR comments)
Other keywords and placeholders
CodeRabbit Configuration File (
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 1
🧹 Nitpick comments (6)
README.md (6)
14-21
: Optional: Include minimal Quick Start code snippet
The current "Getting started" section relies entirely on external links, which may interrupt developer flow. Consider embedding a one–block Quick Start example to allow immediate validation of the SDK:
36-38
: Remove blank lines inside blockquotes
Blank lines within blockquotes break Markdown rendering. Collapse the NOTE:-> [!NOTE] -> -> Xcode v16.1 or later is required. +> [!NOTE] Xcode v16.1 or later is required.Repeat for the IMPORTANT blockquote as well.
39-41
: Fix extra spacing before version number
There are two spaces before1.2.24
. Normalize to one space:-> SDK versions < 1.2.24 will be deprecated... +> SDK versions < 1.2.24 will be deprecated...
44-47
: Use absolute GitHub link for CHANGELOG
Relative paths beginning with/
can break outside GitHub. Switch to the full URL for consistency:-The [CHANGELOG.md](/ably/ably-chat-swift/blob/main/CHANGELOG.md) contains details... +The [CHANGELOG.md](https://github.com/ably/ably-chat-swift/blob/main/CHANGELOG.md) contains details...
50-53
: Consolidate feedback link in Contribute section
The "Share feedback or request a new feature" link is duplicated below. Consider referencing it once to avoid redundancy.
54-59
: Streamline support and feature-request links
Merge or clearly separate technical support vs. feature requests to improve clarity and reduce duplication.
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
⛔ Files ignored due to path filters (3)
Images/SwiftChatSDK-github.png
is excluded by!**/*.png
images/ably-chat-github-header.png
is excluded by!**/*.png
images/unit-tests-test-plan-screenshot.png
is excluded by!**/*.png
📒 Files selected for processing (1)
README.md
(1 hunks)
🧰 Additional context used
🪛 LanguageTool
README.md
[style] ~39-~39: Using many exclamation marks might seem excessive (in this case: 5 exclamation marks for a text that’s 2202 characters long)
Context: ...> Xcode v16.1 or later is required. > [!IMPORTANT] > SDK versions < 1.2.24 will...
(EN_EXCESSIVE_EXCLAMATION)
[style] ~46-~46: This adverb was used twice in the sentence. Consider removing one of them or replacing them with a synonym.
Context: ...so view all Ably releases on changelog.ably.com. --- ...
(ADVERB_REPETITION_PREMIUM)
🪛 markdownlint-cli2 (0.17.2)
README.md
38-38: Blank line inside blockquote
null
(MD028, no-blanks-blockquote)
🪛 GitHub Actions: Check
README.md
[warning] 1-1: Prettier formatting check failed. Code style issues found. Run 'prettier --write' to fix.
🔇 Additional comments (2)
README.md (2)
24-35
: Verify supported platforms list
Ensure all supported Apple platforms are listed (e.g., watchOS) or explicitly note unsupported ones. If watchOS is supported, add:| watchOS | >= 7.0 |
1-59
: Run Prettier to fix formatting
Prettier checks are failing on this file. Please execute:prettier --write README.md
to resolve styling and formatting issues flagged by the pipeline.
f1cb94a
to
2fbc9a8
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 0
♻️ Duplicate comments (1)
README.md (1)
2-3
: Broken / misleading badge URLs – still point to the wrong package & repoBoth the Swift-Package-Index and License badges reference unrelated projects (
ably-cocoa
and3scale/saas-operator
). Click-throughs are therefore incorrect and the shields display misleading data.-[](https://swiftpackageindex.com/ably/ably-chat-swift) -[](https://github.com/3scale/saas-operator/blob/master/LICENSE) +[](https://swiftpackageindex.com/ably/ably-chat-swift) +[](https://github.com/ably/ably-chat-swift/blob/main/LICENSE)Please verify the Pod name / other distribution channels before adding additional shields to avoid a repeat of this issue.
🧹 Nitpick comments (1)
README.md (1)
36-37
: GitHub doesn’t render[!NOTE]
call-outsThe
[!NOTE]
Markdown extension is an Azure-Docs feature and will be displayed verbatim on GitHub. Consider a plain blockquote for portability:> **Note:** Xcode 16.1 or later is required.
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
⛔ Files ignored due to path filters (3)
Images/SwiftChatSDK-github.png
is excluded by!**/*.png
Images/unit-tests-test-plan-screenshot.png
is excluded by!**/*.png
images/ably-chat-github-header.png
is excluded by!**/*.png
📒 Files selected for processing (1)
README.md
(1 hunks)
🧰 Additional context used
🧠 Learnings (2)
📓 Common learnings
Learnt from: maratal
PR: ably/ably-chat-swift#165
File: Sources/AblyChat/Reaction.swift:14-14
Timestamp: 2024-12-10T01:59:02.065Z
Learning: For the 'ably-chat-swift' repository, documentation-only PRs should focus exclusively on public methods and properties. Avoid suggesting changes to internal comments or private methods in such PRs.
Learnt from: maratal
PR: ably/ably-chat-swift#165
File: Sources/AblyChat/Rooms.swift:31-39
Timestamp: 2024-12-10T01:58:37.020Z
Learning: When reviewing PRs that only address documentation comments to public methods and properties, focus review comments on documentation changes and avoid pointing out code logic issues unrelated to documentation.
Learnt from: maratal
PR: ably/ably-chat-swift#165
File: docs-coverage-report:5-8
Timestamp: 2024-12-10T01:59:12.404Z
Learning: In the AblyChat Swift project, documentation coverage should focus on public methods and properties. Private and internal entities do not require documentation.
README.md (18)
Learnt from: maratal
PR: ably/ably-chat-swift#165
File: Sources/AblyChat/Reaction.swift:14-14
Timestamp: 2024-12-10T01:59:02.065Z
Learning: For the 'ably-chat-swift' repository, documentation-only PRs should focus exclusively on public methods and properties. Avoid suggesting changes to internal comments or private methods in such PRs.
Learnt from: maratal
PR: ably/ably-chat-swift#165
File: docs-coverage-report:5-8
Timestamp: 2024-12-10T01:59:12.404Z
Learning: In the AblyChat Swift project, documentation coverage should focus on public methods and properties. Private and internal entities do not require documentation.
Learnt from: maratal
PR: ably/ably-chat-swift#293
File: Sources/AblyChat/Message.swift:163-175
Timestamp: 2025-06-14T21:58:57.802Z
Learning: In the AblyChat Swift SDK, the JSON key "reactions" is used for parsing reaction summaries in the Chat SDK layer, while "summary" is used in the ably-cocoa layer. Reactions can be sourced from either the realtime message's summary property or directly from the "reactions" dictionary in the JSON.
Learnt from: maratal
PR: ably/ably-chat-swift#286
File: Sources/AblyChat/DefaultOccupancy.swift:10-13
Timestamp: 2025-05-12T21:01:14.109Z
Learning: The `Occupancy` protocol in the Ably Chat Swift SDK is annotated with `@MainActor`, making all conforming types like `DefaultOccupancy` automatically main actor-isolated without requiring explicit annotations on their methods.
Learnt from: maratal
PR: ably/ably-chat-swift#293
File: Package.swift:21-24
Timestamp: 2025-06-14T15:14:10.298Z
Learning: In Swift Package Manager dependencies (Package.swift), do not flag branch-based dependencies as reproducibility issues. The user maratal prefers to ignore concerns about branch-based dependencies affecting build reproducibility.
Learnt from: maratal
PR: ably/ably-chat-swift#262
File: Tests/AblyChatTests/DefaultRoomReactionsTests.swift:0-0
Timestamp: 2025-05-23T16:29:39.712Z
Learning: The ably-chat-swift project uses Swift Testing framework (`#expect` macros) rather than XCTest for test assertions.
Learnt from: maratal
PR: ably/ably-chat-swift#262
File: Tests/AblyChatTests/DefaultRoomReactionsTests.swift:0-0
Timestamp: 2025-05-23T16:29:39.712Z
Learning: The ably-chat-swift project uses Swift Testing framework (`#expect` macros) rather than XCTest for test assertions.
Learnt from: maratal
PR: ably/ably-chat-swift#286
File: Sources/AblyChat/SubscriptionHandleStorage.swift:37-40
Timestamp: 2025-05-12T21:02:28.274Z
Learning: In the AblyChat Swift codebase, the `SubscriptionHandle` struct has an `unsubscribe()` method for terminating subscriptions, not a `cancel()` method.
Learnt from: maratal
PR: ably/ably-chat-swift#286
File: Example/AblyChatExample/Mocks/MockClients.swift:0-0
Timestamp: 2025-05-16T21:04:26.244Z
Learning: In the ably-chat-swift project, mock implementations (like those in MockClients.swift) are intentionally kept simple, sometimes omitting parameter-based filtering behavior for testing simplicity.
Learnt from: maratal
PR: ably/ably-chat-swift#262
File: Tests/AblyChatTests/DefaultRoomReactionsTests.swift:0-0
Timestamp: 2025-05-23T16:29:39.712Z
Learning: In the ably-chat-swift project, MockRealtimeChannel processes messages synchronously when subscribe is called, immediately delivering the configured messages to the callback.
Learnt from: maratal
PR: ably/ably-chat-swift#262
File: Tests/AblyChatTests/DefaultRoomReactionsTests.swift:0-0
Timestamp: 2025-05-23T16:29:39.712Z
Learning: In the ably-chat-swift project, MockRealtimeChannel processes messages synchronously when subscribe is called, immediately delivering the configured messages to the callback.
Learnt from: maratal
PR: ably/ably-chat-swift#286
File: Example/AblyChatExample/ContentView.swift:203-209
Timestamp: 2025-05-12T21:11:08.937Z
Learning: In the AblyChat Swift codebase, SubscriptionHandle doesn't need to be retained/stored to keep subscriptions active. The subscription continues to work even if the handle is not stored, as the underlying services maintain references to the callbacks until explicitly unsubscribed via the handle's unsubscribe() method.
Learnt from: maratal
PR: ably/ably-chat-swift#286
File: Example/AblyChatExample/ContentView.swift:203-209
Timestamp: 2025-05-12T21:11:08.937Z
Learning: In the AblyChat Swift codebase, SubscriptionHandle doesn't need to be retained/stored to keep subscriptions active. The subscription callbacks continue to work even when the handle is not stored, as the underlying services maintain their own storage of callbacks that remain registered until explicitly unsubscribed via the handle's unsubscribe() method.
Learnt from: maratal
PR: ably/ably-chat-swift#293
File: Tests/AblyChatTests/Mocks/MockRealtime.swift:41-47
Timestamp: 2025-06-14T15:18:17.427Z
Learning: In the MockRealtime class in Tests/AblyChatTests/Mocks/MockRealtime.swift, the body parameter in the request method is constrained to dictionary or array types, but currently only dictionary types are used. Arrays are not yet used for this method, so the current implementation assumes dictionary-only for simplicity.
Learnt from: maratal
PR: ably/ably-chat-swift#286
File: Sources/AblyChat/RoomLifecycleManager.swift:611-624
Timestamp: 2025-05-22T20:57:48.147Z
Learning: In AblyChat Swift, when using continuations with subscription callbacks, the continuation object is captured directly by the closure and doesn't depend on `self`. Even with `[weak self]` capture, the continuation will still be resumed properly.
Learnt from: maratal
PR: ably/ably-chat-swift#286
File: Sources/AblyChat/DefaultTyping.swift:131-138
Timestamp: 2025-05-12T21:04:36.263Z
Learning: In the AblyChat Swift codebase, SubscriptionHandle closures should capture self weakly with `[weak self]` to avoid potential retain cycles, particularly when calling channel.unsubscribe() within the closure.
Learnt from: maratal
PR: ably/ably-chat-swift#249
File: Tests/AblyChatTests/DefaultMessagesTests.swift:45-48
Timestamp: 2025-05-22T19:17:21.392Z
Learning: The `let doIt = {}` closures in DefaultMessagesTests.swift are temporary workarounds for compiler crashes (related to issue #233) and will be removed once Xcode 16.3 is released, so they should not be flagged for missing async/throws annotations.
Learnt from: maratal
PR: ably/ably-chat-swift#293
File: Example/AblyChatExample/ContentView.swift:94-99
Timestamp: 2025-06-14T21:47:20.509Z
Learning: In the Ably Chat Swift example app, using fatalError for missing clientID is intentional and appropriate since it represents a programmer error rather than a recoverable runtime condition. The clientID is considered an essential configuration requirement.
🪛 LanguageTool
README.md
[style] ~36-~36: Using many exclamation marks might seem excessive (in this case: 3 exclamation marks for a text that’s 1968 characters long)
Context: ... | | tvOS | >= 14.0 | > [!NOTE] > Xcode 16.1 or later is required....
(EN_EXCESSIVE_EXCLAMATION)
[style] ~43-~43: This adverb was used twice in the sentence. Consider removing one of them or replacing them with a synonym.
Context: ...so view all Ably releases on changelog.ably.com. --- ...
(ADVERB_REPETITION_PREMIUM)
⏰ Context from checks skipped due to timeout of 90000ms (29)
- GitHub Check: Xcode, iOS (Xcode 16.2)
- GitHub Check: Xcode,
release
configuration, iOS (Xcode 16.3) - GitHub Check: Xcode, macOS (Xcode 16.3)
- GitHub Check: Xcode, tvOS (Xcode 16.2)
- GitHub Check: Xcode, tvOS (Xcode 16.1)
- GitHub Check: Xcode, iOS (Xcode 16.3)
- GitHub Check: Xcode, macOS (Xcode 16.2)
- GitHub Check: Xcode, tvOS (Xcode 16.3)
- GitHub Check: Xcode,
release
configuration, macOS (Xcode 16.2) - GitHub Check: Xcode, iOS (Xcode 16.1)
- GitHub Check: Xcode, macOS (Xcode 16.1)
- GitHub Check: Xcode,
release
configuration, tvOS (Xcode 16.2) - GitHub Check: Xcode,
release
configuration, tvOS (Xcode 16.3) - GitHub Check: Xcode,
release
configuration, macOS (Xcode 16.1) - GitHub Check: Example app, tvOS (Xcode 16.1)
- GitHub Check: Example app, iOS (Xcode 16.2)
- GitHub Check: Xcode,
release
configuration, tvOS (Xcode 16.1) - GitHub Check: Xcode,
release
configuration, iOS (Xcode 16.1) - GitHub Check: Example app, macOS (Xcode 16.3)
- GitHub Check: Example app, tvOS (Xcode 16.3)
- GitHub Check: Xcode,
release
configuration, macOS (Xcode 16.3) - GitHub Check: Example app, iOS (Xcode 16.3)
- GitHub Check: Example app, macOS (Xcode 16.2)
- GitHub Check: Xcode,
release
configuration, iOS (Xcode 16.2) - GitHub Check: Example app, iOS (Xcode 16.1)
- GitHub Check: Example app, macOS (Xcode 16.1)
- GitHub Check: SPM (Xcode 16.2)
- GitHub Check: SPM,
release
configuration (Xcode 16.2) - GitHub Check: Generate code coverage
1d9a7fa
to
948f2c6
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 0
♻️ Duplicate comments (1)
README.md (1)
2-3
: Fix incorrect badge targetsBoth badges point at the wrong repositories / packages:
- SPM badge still targets
ably-cocoa
instead ofably-chat-swift
.- License badge points to
3scale/saas-operator
instead ofably/ably-chat-swift
.Update as follows and verify URLs render valid shields:
-[](https://swiftpackageindex.com/ably/ably-chat-swift) -[](https://github.com/3scale/saas-operator/blob/master/LICENSE) +[](https://swiftpackageindex.com/ably/ably-chat-swift) +[](https://github.com/ably/ably-chat-swift/blob/main/LICENSE)
🧹 Nitpick comments (1)
README.md (1)
49-53
: Minor copy edit – sentence reads awkwardlyCurrent:
“Read the CONTRIBUTING … to contribute to Ably or share feedback or request a new feature”Consider removing the duplicate “or” for clarity:
-Read the [CONTRIBUTING.md](./CONTRIBUTING.md) guidelines to contribute to Ably or [share feedback or request a new feature](https://forms.gle/mBw9M53NYuCBLFpMA). +Read the [CONTRIBUTING.md](./CONTRIBUTING.md) guidelines to contribute to Ably, [share feedback](https://forms.gle/mBw9M53NYuCBLFpMA), or request a new feature.
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
⛔ Files ignored due to path filters (3)
Images/SwiftChatSDK-github.png
is excluded by!**/*.png
Images/unit-tests-test-plan-screenshot.png
is excluded by!**/*.png
images/ably-chat-github-header.png
is excluded by!**/*.png
📒 Files selected for processing (1)
README.md
(1 hunks)
🧰 Additional context used
🧠 Learnings (2)
📓 Common learnings
Learnt from: maratal
PR: ably/ably-chat-swift#165
File: Sources/AblyChat/Reaction.swift:14-14
Timestamp: 2024-12-10T01:59:02.065Z
Learning: For the 'ably-chat-swift' repository, documentation-only PRs should focus exclusively on public methods and properties. Avoid suggesting changes to internal comments or private methods in such PRs.
Learnt from: maratal
PR: ably/ably-chat-swift#165
File: Sources/AblyChat/Rooms.swift:31-39
Timestamp: 2024-12-10T01:58:37.020Z
Learning: When reviewing PRs that only address documentation comments to public methods and properties, focus review comments on documentation changes and avoid pointing out code logic issues unrelated to documentation.
Learnt from: maratal
PR: ably/ably-chat-swift#165
File: docs-coverage-report:5-8
Timestamp: 2024-12-10T01:59:12.404Z
Learning: In the AblyChat Swift project, documentation coverage should focus on public methods and properties. Private and internal entities do not require documentation.
README.md (19)
Learnt from: maratal
PR: ably/ably-chat-swift#165
File: Sources/AblyChat/Reaction.swift:14-14
Timestamp: 2024-12-10T01:59:02.065Z
Learning: For the 'ably-chat-swift' repository, documentation-only PRs should focus exclusively on public methods and properties. Avoid suggesting changes to internal comments or private methods in such PRs.
Learnt from: maratal
PR: ably/ably-chat-swift#165
File: docs-coverage-report:5-8
Timestamp: 2024-12-10T01:59:12.404Z
Learning: In the AblyChat Swift project, documentation coverage should focus on public methods and properties. Private and internal entities do not require documentation.
Learnt from: maratal
PR: ably/ably-chat-swift#293
File: Sources/AblyChat/Message.swift:163-175
Timestamp: 2025-06-14T21:58:57.802Z
Learning: In the AblyChat Swift SDK, the JSON key "reactions" is used for parsing reaction summaries in the Chat SDK layer, while "summary" is used in the ably-cocoa layer. Reactions can be sourced from either the realtime message's summary property or directly from the "reactions" dictionary in the JSON.
Learnt from: maratal
PR: ably/ably-chat-swift#286
File: Example/AblyChatExample/Mocks/MockClients.swift:0-0
Timestamp: 2025-05-16T21:04:26.244Z
Learning: In the ably-chat-swift project, mock implementations (like those in MockClients.swift) are intentionally kept simple, sometimes omitting parameter-based filtering behavior for testing simplicity.
Learnt from: maratal
PR: ably/ably-chat-swift#286
File: Sources/AblyChat/DefaultOccupancy.swift:10-13
Timestamp: 2025-05-12T21:01:14.109Z
Learning: The `Occupancy` protocol in the Ably Chat Swift SDK is annotated with `@MainActor`, making all conforming types like `DefaultOccupancy` automatically main actor-isolated without requiring explicit annotations on their methods.
Learnt from: maratal
PR: ably/ably-chat-swift#293
File: Package.swift:21-24
Timestamp: 2025-06-14T15:14:10.298Z
Learning: In Swift Package Manager dependencies (Package.swift), do not flag branch-based dependencies as reproducibility issues. The user maratal prefers to ignore concerns about branch-based dependencies affecting build reproducibility.
Learnt from: maratal
PR: ably/ably-chat-swift#262
File: Tests/AblyChatTests/DefaultRoomReactionsTests.swift:0-0
Timestamp: 2025-05-23T16:29:39.712Z
Learning: The ably-chat-swift project uses Swift Testing framework (`#expect` macros) rather than XCTest for test assertions.
Learnt from: maratal
PR: ably/ably-chat-swift#262
File: Tests/AblyChatTests/DefaultRoomReactionsTests.swift:0-0
Timestamp: 2025-05-23T16:29:39.712Z
Learning: The ably-chat-swift project uses Swift Testing framework (`#expect` macros) rather than XCTest for test assertions.
Learnt from: maratal
PR: ably/ably-chat-swift#286
File: Sources/AblyChat/SubscriptionHandleStorage.swift:37-40
Timestamp: 2025-05-12T21:02:28.274Z
Learning: In the AblyChat Swift codebase, the `SubscriptionHandle` struct has an `unsubscribe()` method for terminating subscriptions, not a `cancel()` method.
Learnt from: maratal
PR: ably/ably-chat-swift#286
File: Example/AblyChatExample/ContentView.swift:203-209
Timestamp: 2025-05-12T21:11:08.937Z
Learning: In the AblyChat Swift codebase, SubscriptionHandle doesn't need to be retained/stored to keep subscriptions active. The subscription continues to work even if the handle is not stored, as the underlying services maintain references to the callbacks until explicitly unsubscribed via the handle's unsubscribe() method.
Learnt from: maratal
PR: ably/ably-chat-swift#262
File: Tests/AblyChatTests/DefaultRoomReactionsTests.swift:0-0
Timestamp: 2025-05-23T16:29:39.712Z
Learning: In the ably-chat-swift project, MockRealtimeChannel processes messages synchronously when subscribe is called, immediately delivering the configured messages to the callback.
Learnt from: maratal
PR: ably/ably-chat-swift#262
File: Tests/AblyChatTests/DefaultRoomReactionsTests.swift:0-0
Timestamp: 2025-05-23T16:29:39.712Z
Learning: In the ably-chat-swift project, MockRealtimeChannel processes messages synchronously when subscribe is called, immediately delivering the configured messages to the callback.
Learnt from: maratal
PR: ably/ably-chat-swift#286
File: Example/AblyChatExample/ContentView.swift:203-209
Timestamp: 2025-05-12T21:11:08.937Z
Learning: In the AblyChat Swift codebase, SubscriptionHandle doesn't need to be retained/stored to keep subscriptions active. The subscription callbacks continue to work even when the handle is not stored, as the underlying services maintain their own storage of callbacks that remain registered until explicitly unsubscribed via the handle's unsubscribe() method.
Learnt from: maratal
PR: ably/ably-chat-swift#293
File: Tests/AblyChatTests/Mocks/MockRealtime.swift:41-47
Timestamp: 2025-06-14T15:18:17.427Z
Learning: In the MockRealtime class in Tests/AblyChatTests/Mocks/MockRealtime.swift, the body parameter in the request method is constrained to dictionary or array types, but currently only dictionary types are used. Arrays are not yet used for this method, so the current implementation assumes dictionary-only for simplicity.
Learnt from: maratal
PR: ably/ably-chat-swift#286
File: Sources/AblyChat/RoomLifecycleManager.swift:611-624
Timestamp: 2025-05-22T20:57:48.147Z
Learning: In AblyChat Swift, when using continuations with subscription callbacks, the continuation object is captured directly by the closure and doesn't depend on `self`. Even with `[weak self]` capture, the continuation will still be resumed properly.
Learnt from: maratal
PR: ably/ably-chat-swift#286
File: Sources/AblyChat/DefaultTyping.swift:131-138
Timestamp: 2025-05-12T21:04:36.263Z
Learning: In the AblyChat Swift codebase, SubscriptionHandle closures should capture self weakly with `[weak self]` to avoid potential retain cycles, particularly when calling channel.unsubscribe() within the closure.
Learnt from: maratal
PR: ably/ably-chat-swift#249
File: Tests/AblyChatTests/DefaultMessagesTests.swift:45-48
Timestamp: 2025-05-22T19:17:21.392Z
Learning: The `let doIt = {}` closures in DefaultMessagesTests.swift are temporary workarounds for compiler crashes (related to issue #233) and will be removed once Xcode 16.3 is released, so they should not be flagged for missing async/throws annotations.
Learnt from: maratal
PR: ably/ably-chat-swift#286
File: Sources/AblyChat/SubscriptionAsyncSequence.swift:36-41
Timestamp: 2025-06-29T16:02:43.988Z
Learning: In the AblyChat Swift codebase, the fatalError in SubscriptionAsyncSequence.swift's mock async sequence handling (around line 39) is intentional and should not be flagged. This fatalError catches programmer errors when a throwing AsyncSequence is incorrectly passed to the mock initializer, which is meant for testing/development purposes.
Learnt from: maratal
PR: ably/ably-chat-swift#293
File: Example/AblyChatExample/ContentView.swift:94-99
Timestamp: 2025-06-14T21:47:20.509Z
Learning: In the Ably Chat Swift example app, using fatalError for missing clientID is intentional and appropriate since it represents a programmer error rather than a recoverable runtime condition. The clientID is considered an essential configuration requirement.
🪛 LanguageTool
README.md
[style] ~36-~36: Using many exclamation marks might seem excessive (in this case: 3 exclamation marks for a text that’s 1976 characters long)
Context: ... | | tvOS | >= 14.0 | > [!NOTE] > Xcode 16.1 or later is required....
(EN_EXCESSIVE_EXCLAMATION)
[style] ~43-~43: This adverb was used twice in the sentence. Consider removing one of them or replacing them with a synonym.
Context: ...so view all Ably releases on changelog.ably.com. --- ...
(ADVERB_REPETITION_PREMIUM)
⏰ Context from checks skipped due to timeout of 90000ms (30)
- GitHub Check: Example app, tvOS (Xcode 16.1)
- GitHub Check: Example app, macOS (Xcode 16.3)
- GitHub Check: Xcode,
release
configuration, macOS (Xcode 16.3) - GitHub Check: Example app, tvOS (Xcode 16.3)
- GitHub Check: Xcode,
release
configuration, macOS (Xcode 16.1) - GitHub Check: Xcode, tvOS (Xcode 16.3)
- GitHub Check: Xcode,
release
configuration, tvOS (Xcode 16.2) - GitHub Check: Xcode,
release
configuration, macOS (Xcode 16.2) - GitHub Check: Xcode,
release
configuration, tvOS (Xcode 16.1) - GitHub Check: Example app, iOS (Xcode 16.3)
- GitHub Check: Example app, iOS (Xcode 16.2)
- GitHub Check: Example app, tvOS (Xcode 16.2)
- GitHub Check: Example app, iOS (Xcode 16.1)
- GitHub Check: Example app, macOS (Xcode 16.1)
- GitHub Check: Xcode,
release
configuration, tvOS (Xcode 16.3) - GitHub Check: Xcode,
release
configuration, iOS (Xcode 16.3) - GitHub Check: Xcode,
release
configuration, iOS (Xcode 16.1) - GitHub Check: Example app, macOS (Xcode 16.2)
- GitHub Check: Xcode,
release
configuration, iOS (Xcode 16.2) - GitHub Check: SPM,
release
configuration (Xcode 16.2) - GitHub Check: Xcode, macOS (Xcode 16.2)
- GitHub Check: Xcode, iOS (Xcode 16.3)
- GitHub Check: Xcode, iOS (Xcode 16.2)
- GitHub Check: Xcode, tvOS (Xcode 16.1)
- GitHub Check: Xcode, iOS (Xcode 16.1)
- GitHub Check: Xcode, tvOS (Xcode 16.2)
- GitHub Check: Xcode, macOS (Xcode 16.1)
- GitHub Check: Xcode, macOS (Xcode 16.3)
- GitHub Check: SPM,
release
configuration (Xcode 16.3) - GitHub Check: Generate code coverage
🔇 Additional comments (1)
README.md (1)
1-1
: Image path verifiedThe file
Images/SwiftChatSDK-github.png
exists with the exact casing, so the reference in README.md is correct and no changes are needed.
948f2c6
to
7ee3e3d
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 0
♻️ Duplicate comments (1)
README.md (1)
2-3
: Broken badge targets still reference the wrong packages and repository – update URLsThe Swift Package Index and license badges still point at
ably-cocoa
and3scale/saas-operator
, so they render misleading information.
Fix the targets to reference the actualably-chat-swift
package and repo.-[](https://swiftpackageindex.com/ably/ably-chat-swift) -[](https://github.com/3scale/saas-operator/blob/master/LICENSE) +[](https://swiftpackageindex.com/ably/ably-chat-swift) +[](https://github.com/ably/ably-chat-swift/blob/main/LICENSE)
🧹 Nitpick comments (1)
README.md (1)
36-37
: Use a GitHub-friendly note call-outGitHub doesn’t render the Docs-style
[!NOTE]
admonition. A plain blockquote keeps the intent while displaying nicely.-> [!NOTE] -> Xcode 16.1 or later is required. +> **Note:** Xcode 16.1 or later is required.
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
⛔ Files ignored due to path filters (3)
Images/SwiftChatSDK-github.png
is excluded by!**/*.png
Images/unit-tests-test-plan-screenshot.png
is excluded by!**/*.png
images/ably-chat-github-header.png
is excluded by!**/*.png
📒 Files selected for processing (1)
README.md
(1 hunks)
🧰 Additional context used
🧠 Learnings (2)
📓 Common learnings
Learnt from: maratal
PR: ably/ably-chat-swift#165
File: Sources/AblyChat/Reaction.swift:14-14
Timestamp: 2024-12-10T01:59:02.065Z
Learning: For the 'ably-chat-swift' repository, documentation-only PRs should focus exclusively on public methods and properties. Avoid suggesting changes to internal comments or private methods in such PRs.
Learnt from: maratal
PR: ably/ably-chat-swift#165
File: Sources/AblyChat/Rooms.swift:31-39
Timestamp: 2024-12-10T01:58:37.020Z
Learning: When reviewing PRs that only address documentation comments to public methods and properties, focus review comments on documentation changes and avoid pointing out code logic issues unrelated to documentation.
Learnt from: maratal
PR: ably/ably-chat-swift#165
File: docs-coverage-report:5-8
Timestamp: 2024-12-10T01:59:12.404Z
Learning: In the AblyChat Swift project, documentation coverage should focus on public methods and properties. Private and internal entities do not require documentation.
README.md (19)
Learnt from: maratal
PR: ably/ably-chat-swift#165
File: Sources/AblyChat/Reaction.swift:14-14
Timestamp: 2024-12-10T01:59:02.065Z
Learning: For the 'ably-chat-swift' repository, documentation-only PRs should focus exclusively on public methods and properties. Avoid suggesting changes to internal comments or private methods in such PRs.
Learnt from: maratal
PR: ably/ably-chat-swift#165
File: docs-coverage-report:5-8
Timestamp: 2024-12-10T01:59:12.404Z
Learning: In the AblyChat Swift project, documentation coverage should focus on public methods and properties. Private and internal entities do not require documentation.
Learnt from: maratal
PR: ably/ably-chat-swift#293
File: Sources/AblyChat/Message.swift:163-175
Timestamp: 2025-06-14T21:58:57.802Z
Learning: In the AblyChat Swift SDK, the JSON key "reactions" is used for parsing reaction summaries in the Chat SDK layer, while "summary" is used in the ably-cocoa layer. Reactions can be sourced from either the realtime message's summary property or directly from the "reactions" dictionary in the JSON.
Learnt from: maratal
PR: ably/ably-chat-swift#286
File: Sources/AblyChat/DefaultOccupancy.swift:10-13
Timestamp: 2025-05-12T21:01:14.109Z
Learning: The `Occupancy` protocol in the Ably Chat Swift SDK is annotated with `@MainActor`, making all conforming types like `DefaultOccupancy` automatically main actor-isolated without requiring explicit annotations on their methods.
Learnt from: maratal
PR: ably/ably-chat-swift#293
File: Package.swift:21-24
Timestamp: 2025-06-14T15:14:10.298Z
Learning: In Swift Package Manager dependencies (Package.swift), do not flag branch-based dependencies as reproducibility issues. The user maratal prefers to ignore concerns about branch-based dependencies affecting build reproducibility.
Learnt from: maratal
PR: ably/ably-chat-swift#262
File: Tests/AblyChatTests/DefaultRoomReactionsTests.swift:0-0
Timestamp: 2025-05-23T16:29:39.712Z
Learning: The ably-chat-swift project uses Swift Testing framework (`#expect` macros) rather than XCTest for test assertions.
Learnt from: maratal
PR: ably/ably-chat-swift#262
File: Tests/AblyChatTests/DefaultRoomReactionsTests.swift:0-0
Timestamp: 2025-05-23T16:29:39.712Z
Learning: The ably-chat-swift project uses Swift Testing framework (`#expect` macros) rather than XCTest for test assertions.
Learnt from: maratal
PR: ably/ably-chat-swift#286
File: Sources/AblyChat/SubscriptionHandleStorage.swift:37-40
Timestamp: 2025-05-12T21:02:28.274Z
Learning: In the AblyChat Swift codebase, the `SubscriptionHandle` struct has an `unsubscribe()` method for terminating subscriptions, not a `cancel()` method.
Learnt from: maratal
PR: ably/ably-chat-swift#286
File: Example/AblyChatExample/Mocks/MockClients.swift:0-0
Timestamp: 2025-05-16T21:04:26.244Z
Learning: In the ably-chat-swift project, mock implementations (like those in MockClients.swift) are intentionally kept simple, sometimes omitting parameter-based filtering behavior for testing simplicity.
Learnt from: maratal
PR: ably/ably-chat-swift#286
File: Example/AblyChatExample/ContentView.swift:203-209
Timestamp: 2025-05-12T21:11:08.937Z
Learning: In the AblyChat Swift codebase, SubscriptionHandle doesn't need to be retained/stored to keep subscriptions active. The subscription continues to work even if the handle is not stored, as the underlying services maintain references to the callbacks until explicitly unsubscribed via the handle's unsubscribe() method.
Learnt from: maratal
PR: ably/ably-chat-swift#262
File: Tests/AblyChatTests/DefaultRoomReactionsTests.swift:0-0
Timestamp: 2025-05-23T16:29:39.712Z
Learning: In the ably-chat-swift project, MockRealtimeChannel processes messages synchronously when subscribe is called, immediately delivering the configured messages to the callback.
Learnt from: maratal
PR: ably/ably-chat-swift#262
File: Tests/AblyChatTests/DefaultRoomReactionsTests.swift:0-0
Timestamp: 2025-05-23T16:29:39.712Z
Learning: In the ably-chat-swift project, MockRealtimeChannel processes messages synchronously when subscribe is called, immediately delivering the configured messages to the callback.
Learnt from: maratal
PR: ably/ably-chat-swift#286
File: Example/AblyChatExample/ContentView.swift:203-209
Timestamp: 2025-05-12T21:11:08.937Z
Learning: In the AblyChat Swift codebase, SubscriptionHandle doesn't need to be retained/stored to keep subscriptions active. The subscription callbacks continue to work even when the handle is not stored, as the underlying services maintain their own storage of callbacks that remain registered until explicitly unsubscribed via the handle's unsubscribe() method.
Learnt from: maratal
PR: ably/ably-chat-swift#293
File: Tests/AblyChatTests/Mocks/MockRealtime.swift:41-47
Timestamp: 2025-06-14T15:18:17.427Z
Learning: In the MockRealtime class in Tests/AblyChatTests/Mocks/MockRealtime.swift, the body parameter in the request method is constrained to dictionary or array types, but currently only dictionary types are used. Arrays are not yet used for this method, so the current implementation assumes dictionary-only for simplicity.
Learnt from: maratal
PR: ably/ably-chat-swift#286
File: Sources/AblyChat/RoomLifecycleManager.swift:611-624
Timestamp: 2025-05-22T20:57:48.147Z
Learning: In AblyChat Swift, when using continuations with subscription callbacks, the continuation object is captured directly by the closure and doesn't depend on `self`. Even with `[weak self]` capture, the continuation will still be resumed properly.
Learnt from: maratal
PR: ably/ably-chat-swift#286
File: Sources/AblyChat/DefaultTyping.swift:131-138
Timestamp: 2025-05-12T21:04:36.263Z
Learning: In the AblyChat Swift codebase, SubscriptionHandle closures should capture self weakly with `[weak self]` to avoid potential retain cycles, particularly when calling channel.unsubscribe() within the closure.
Learnt from: maratal
PR: ably/ably-chat-swift#249
File: Tests/AblyChatTests/DefaultMessagesTests.swift:45-48
Timestamp: 2025-05-22T19:17:21.392Z
Learning: The `let doIt = {}` closures in DefaultMessagesTests.swift are temporary workarounds for compiler crashes (related to issue #233) and will be removed once Xcode 16.3 is released, so they should not be flagged for missing async/throws annotations.
Learnt from: maratal
PR: ably/ably-chat-swift#286
File: Sources/AblyChat/SubscriptionAsyncSequence.swift:36-41
Timestamp: 2025-06-29T16:02:43.988Z
Learning: In the AblyChat Swift codebase, the fatalError in SubscriptionAsyncSequence.swift's mock async sequence handling (around line 39) is intentional and should not be flagged. This fatalError catches programmer errors when a throwing AsyncSequence is incorrectly passed to the mock initializer, which is meant for testing/development purposes.
Learnt from: maratal
PR: ably/ably-chat-swift#293
File: Example/AblyChatExample/ContentView.swift:94-99
Timestamp: 2025-06-14T21:47:20.509Z
Learning: In the Ably Chat Swift example app, using fatalError for missing clientID is intentional and appropriate since it represents a programmer error rather than a recoverable runtime condition. The clientID is considered an essential configuration requirement.
🪛 LanguageTool
README.md
[style] ~36-~36: Using many exclamation marks might seem excessive (in this case: 3 exclamation marks for a text that’s 1976 characters long)
Context: ... | | tvOS | >= 14.0 | > [!NOTE] > Xcode 16.1 or later is required....
(EN_EXCESSIVE_EXCLAMATION)
[style] ~43-~43: This adverb was used twice in the sentence. Consider removing one of them or replacing them with a synonym.
Context: ...so view all Ably releases on changelog.ably.com. --- ...
(ADVERB_REPETITION_PREMIUM)
⏰ Context from checks skipped due to timeout of 90000ms (4)
- GitHub Check: spec-coverage
- GitHub Check: check-documentation
- GitHub Check: lint
- GitHub Check: Generate code coverage
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 0
♻️ Duplicate comments (1)
README.md (1)
2-3
: Incorrect badge URLs still point toably-cocoa
& unrelated license repositoryThe SPM badge still requests metadata for
ably-cocoa
, and the license badge links to3scale/saas-operator
. Both issues were raised previously and remain unresolved. Please update the badges to referenceably/ably-chat-swift
(or remove them until available) and the correct license path.
🧹 Nitpick comments (1)
README.md (1)
36-37
:[!NOTE]
admonition is not rendered on GitHubGitHub flavoured Markdown treats
[!NOTE]
as literal text. Replace with a regular blockquote or bold text to ensure the note is visually distinct:-> [!NOTE] -> Xcode 16.1 or later is required. +> **Note** +> Xcode 16.1 or later is required.
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (1)
README.md
(1 hunks)
🧰 Additional context used
🧠 Learnings (2)
📓 Common learnings
Learnt from: maratal
PR: ably/ably-chat-swift#165
File: Sources/AblyChat/Reaction.swift:14-14
Timestamp: 2024-12-10T01:59:02.065Z
Learning: For the 'ably-chat-swift' repository, documentation-only PRs should focus exclusively on public methods and properties. Avoid suggesting changes to internal comments or private methods in such PRs.
Learnt from: maratal
PR: ably/ably-chat-swift#165
File: Sources/AblyChat/Rooms.swift:31-39
Timestamp: 2024-12-10T01:58:37.020Z
Learning: When reviewing PRs that only address documentation comments to public methods and properties, focus review comments on documentation changes and avoid pointing out code logic issues unrelated to documentation.
Learnt from: maratal
PR: ably/ably-chat-swift#165
File: docs-coverage-report:5-8
Timestamp: 2024-12-10T01:59:12.404Z
Learning: In the AblyChat Swift project, documentation coverage should focus on public methods and properties. Private and internal entities do not require documentation.
README.md (19)
Learnt from: maratal
PR: ably/ably-chat-swift#165
File: Sources/AblyChat/Reaction.swift:14-14
Timestamp: 2024-12-10T01:59:02.065Z
Learning: For the 'ably-chat-swift' repository, documentation-only PRs should focus exclusively on public methods and properties. Avoid suggesting changes to internal comments or private methods in such PRs.
Learnt from: maratal
PR: ably/ably-chat-swift#165
File: docs-coverage-report:5-8
Timestamp: 2024-12-10T01:59:12.404Z
Learning: In the AblyChat Swift project, documentation coverage should focus on public methods and properties. Private and internal entities do not require documentation.
Learnt from: maratal
PR: ably/ably-chat-swift#293
File: Sources/AblyChat/Message.swift:163-175
Timestamp: 2025-06-14T21:58:57.802Z
Learning: In the AblyChat Swift SDK, the JSON key "reactions" is used for parsing reaction summaries in the Chat SDK layer, while "summary" is used in the ably-cocoa layer. Reactions can be sourced from either the realtime message's summary property or directly from the "reactions" dictionary in the JSON.
Learnt from: maratal
PR: ably/ably-chat-swift#286
File: Sources/AblyChat/DefaultOccupancy.swift:10-13
Timestamp: 2025-05-12T21:01:14.109Z
Learning: The `Occupancy` protocol in the Ably Chat Swift SDK is annotated with `@MainActor`, making all conforming types like `DefaultOccupancy` automatically main actor-isolated without requiring explicit annotations on their methods.
Learnt from: maratal
PR: ably/ably-chat-swift#293
File: Package.swift:21-24
Timestamp: 2025-06-14T15:14:10.298Z
Learning: In Swift Package Manager dependencies (Package.swift), do not flag branch-based dependencies as reproducibility issues. The user maratal prefers to ignore concerns about branch-based dependencies affecting build reproducibility.
Learnt from: maratal
PR: ably/ably-chat-swift#262
File: Tests/AblyChatTests/DefaultRoomReactionsTests.swift:0-0
Timestamp: 2025-05-23T16:29:39.712Z
Learning: The ably-chat-swift project uses Swift Testing framework (`#expect` macros) rather than XCTest for test assertions.
Learnt from: maratal
PR: ably/ably-chat-swift#262
File: Tests/AblyChatTests/DefaultRoomReactionsTests.swift:0-0
Timestamp: 2025-05-23T16:29:39.712Z
Learning: The ably-chat-swift project uses Swift Testing framework (`#expect` macros) rather than XCTest for test assertions.
Learnt from: maratal
PR: ably/ably-chat-swift#286
File: Sources/AblyChat/SubscriptionHandleStorage.swift:37-40
Timestamp: 2025-05-12T21:02:28.274Z
Learning: In the AblyChat Swift codebase, the `SubscriptionHandle` struct has an `unsubscribe()` method for terminating subscriptions, not a `cancel()` method.
Learnt from: maratal
PR: ably/ably-chat-swift#286
File: Example/AblyChatExample/Mocks/MockClients.swift:0-0
Timestamp: 2025-05-16T21:04:26.244Z
Learning: In the ably-chat-swift project, mock implementations (like those in MockClients.swift) are intentionally kept simple, sometimes omitting parameter-based filtering behavior for testing simplicity.
Learnt from: maratal
PR: ably/ably-chat-swift#286
File: Example/AblyChatExample/ContentView.swift:203-209
Timestamp: 2025-05-12T21:11:08.937Z
Learning: In the AblyChat Swift codebase, SubscriptionHandle doesn't need to be retained/stored to keep subscriptions active. The subscription continues to work even if the handle is not stored, as the underlying services maintain references to the callbacks until explicitly unsubscribed via the handle's unsubscribe() method.
Learnt from: maratal
PR: ably/ably-chat-swift#262
File: Tests/AblyChatTests/DefaultRoomReactionsTests.swift:0-0
Timestamp: 2025-05-23T16:29:39.712Z
Learning: In the ably-chat-swift project, MockRealtimeChannel processes messages synchronously when subscribe is called, immediately delivering the configured messages to the callback.
Learnt from: maratal
PR: ably/ably-chat-swift#262
File: Tests/AblyChatTests/DefaultRoomReactionsTests.swift:0-0
Timestamp: 2025-05-23T16:29:39.712Z
Learning: In the ably-chat-swift project, MockRealtimeChannel processes messages synchronously when subscribe is called, immediately delivering the configured messages to the callback.
Learnt from: maratal
PR: ably/ably-chat-swift#286
File: Example/AblyChatExample/ContentView.swift:203-209
Timestamp: 2025-05-12T21:11:08.937Z
Learning: In the AblyChat Swift codebase, SubscriptionHandle doesn't need to be retained/stored to keep subscriptions active. The subscription callbacks continue to work even when the handle is not stored, as the underlying services maintain their own storage of callbacks that remain registered until explicitly unsubscribed via the handle's unsubscribe() method.
Learnt from: maratal
PR: ably/ably-chat-swift#293
File: Tests/AblyChatTests/Mocks/MockRealtime.swift:41-47
Timestamp: 2025-06-14T15:18:17.427Z
Learning: In the MockRealtime class in Tests/AblyChatTests/Mocks/MockRealtime.swift, the body parameter in the request method is constrained to dictionary or array types, but currently only dictionary types are used. Arrays are not yet used for this method, so the current implementation assumes dictionary-only for simplicity.
Learnt from: maratal
PR: ably/ably-chat-swift#286
File: Sources/AblyChat/RoomLifecycleManager.swift:611-624
Timestamp: 2025-05-22T20:57:48.147Z
Learning: In AblyChat Swift, when using continuations with subscription callbacks, the continuation object is captured directly by the closure and doesn't depend on `self`. Even with `[weak self]` capture, the continuation will still be resumed properly.
Learnt from: maratal
PR: ably/ably-chat-swift#286
File: Sources/AblyChat/DefaultTyping.swift:131-138
Timestamp: 2025-05-12T21:04:36.263Z
Learning: In the AblyChat Swift codebase, SubscriptionHandle closures should capture self weakly with `[weak self]` to avoid potential retain cycles, particularly when calling channel.unsubscribe() within the closure.
Learnt from: maratal
PR: ably/ably-chat-swift#249
File: Tests/AblyChatTests/DefaultMessagesTests.swift:45-48
Timestamp: 2025-05-22T19:17:21.392Z
Learning: The `let doIt = {}` closures in DefaultMessagesTests.swift are temporary workarounds for compiler crashes (related to issue #233) and will be removed once Xcode 16.3 is released, so they should not be flagged for missing async/throws annotations.
Learnt from: maratal
PR: ably/ably-chat-swift#286
File: Sources/AblyChat/SubscriptionAsyncSequence.swift:36-41
Timestamp: 2025-06-29T16:02:43.988Z
Learning: In the AblyChat Swift codebase, the fatalError in SubscriptionAsyncSequence.swift's mock async sequence handling (around line 39) is intentional and should not be flagged. This fatalError catches programmer errors when a throwing AsyncSequence is incorrectly passed to the mock initializer, which is meant for testing/development purposes.
Learnt from: maratal
PR: ably/ably-chat-swift#293
File: Example/AblyChatExample/ContentView.swift:94-99
Timestamp: 2025-06-14T21:47:20.509Z
Learning: In the Ably Chat Swift example app, using fatalError for missing clientID is intentional and appropriate since it represents a programmer error rather than a recoverable runtime condition. The clientID is considered an essential configuration requirement.
🪛 LanguageTool
README.md
[style] ~36-~36: Using many exclamation marks might seem excessive (in this case: 3 exclamation marks for a text that’s 1976 characters long)
Context: ... | | tvOS | >= 14.0 | > [!NOTE] > Xcode 16.1 or later is required....
(EN_EXCESSIVE_EXCLAMATION)
[style] ~43-~43: This adverb was used twice in the sentence. Consider removing one of them or replacing them with a synonym.
Context: ...so view all Ably releases on changelog.ably.com. --- ...
(ADVERB_REPETITION_PREMIUM)
⏰ Context from checks skipped due to timeout of 90000ms (3)
- GitHub Check: Generate code coverage
- GitHub Check: lint
- GitHub Check: check-documentation
🔇 Additional comments (1)
README.md (1)
1-1
: Verify header image path/case sensitivityThe image path uses the
Images/
directory with an uppercase “I”. Ensure the repository actually containsImages/SwiftChatSDK-github.png
; case mismatches will break the render on macOS-case-insensitive vs. Linux/GitHub-case-sensitive filesystems.
35da52e
to
81a27c0
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 0
♻️ Duplicate comments (1)
README.md (1)
2-3
: Incorrect badge targets – still pointing toably-cocoa
& wrong licence repoBoth the SPM compatibility badge and the licence badge reference unrelated packages/repos that break the rendered links.
This was flagged in an earlier review but hasn’t been fixed.-[](https://swiftpackageindex.com/ably/ably-chat-swift) -[](https://github.com/ably/ably-chat-kotlin/blob/main/LICENSE) +[](https://swiftpackageindex.com/ably/ably-chat-swift) +[](https://github.com/ably/ably-chat-swift/blob/main/LICENSE)Please update to avoid broken or misleading shields.
🧹 Nitpick comments (1)
README.md (1)
36-37
: Non-standard call-out syntax
>[!NOTE]
is an Azure-Docs extension and won’t render on GitHub.
Consider a plain Markdown blockquote to keep the note visible:-> [!NOTE] -> Xcode 16.1 or later is required. +> **Note:** Xcode 16.1 or later is required.
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
⛔ Files ignored due to path filters (3)
Images/SwiftChatSDK-github.png
is excluded by!**/*.png
Images/unit-tests-test-plan-screenshot.png
is excluded by!**/*.png
images/ably-chat-github-header.png
is excluded by!**/*.png
📒 Files selected for processing (1)
README.md
(1 hunks)
🧰 Additional context used
🧠 Learnings (2)
📓 Common learnings
Learnt from: maratal
PR: ably/ably-chat-swift#165
File: Sources/AblyChat/Reaction.swift:14-14
Timestamp: 2024-12-10T01:59:02.065Z
Learning: For the 'ably-chat-swift' repository, documentation-only PRs should focus exclusively on public methods and properties. Avoid suggesting changes to internal comments or private methods in such PRs.
Learnt from: maratal
PR: ably/ably-chat-swift#165
File: Sources/AblyChat/Rooms.swift:31-39
Timestamp: 2024-12-10T01:58:37.020Z
Learning: When reviewing PRs that only address documentation comments to public methods and properties, focus review comments on documentation changes and avoid pointing out code logic issues unrelated to documentation.
Learnt from: maratal
PR: ably/ably-chat-swift#165
File: docs-coverage-report:5-8
Timestamp: 2024-12-10T01:59:12.404Z
Learning: In the AblyChat Swift project, documentation coverage should focus on public methods and properties. Private and internal entities do not require documentation.
README.md (19)
Learnt from: maratal
PR: ably/ably-chat-swift#165
File: Sources/AblyChat/Reaction.swift:14-14
Timestamp: 2024-12-10T01:59:02.065Z
Learning: For the 'ably-chat-swift' repository, documentation-only PRs should focus exclusively on public methods and properties. Avoid suggesting changes to internal comments or private methods in such PRs.
Learnt from: maratal
PR: ably/ably-chat-swift#165
File: docs-coverage-report:5-8
Timestamp: 2024-12-10T01:59:12.404Z
Learning: In the AblyChat Swift project, documentation coverage should focus on public methods and properties. Private and internal entities do not require documentation.
Learnt from: maratal
PR: ably/ably-chat-swift#293
File: Sources/AblyChat/Message.swift:163-175
Timestamp: 2025-06-14T21:58:57.802Z
Learning: In the AblyChat Swift SDK, the JSON key "reactions" is used for parsing reaction summaries in the Chat SDK layer, while "summary" is used in the ably-cocoa layer. Reactions can be sourced from either the realtime message's summary property or directly from the "reactions" dictionary in the JSON.
Learnt from: maratal
PR: ably/ably-chat-swift#286
File: Example/AblyChatExample/Mocks/MockClients.swift:0-0
Timestamp: 2025-05-16T21:04:26.244Z
Learning: In the ably-chat-swift project, mock implementations (like those in MockClients.swift) are intentionally kept simple, sometimes omitting parameter-based filtering behavior for testing simplicity.
Learnt from: maratal
PR: ably/ably-chat-swift#286
File: Sources/AblyChat/DefaultOccupancy.swift:10-13
Timestamp: 2025-05-12T21:01:14.109Z
Learning: The `Occupancy` protocol in the Ably Chat Swift SDK is annotated with `@MainActor`, making all conforming types like `DefaultOccupancy` automatically main actor-isolated without requiring explicit annotations on their methods.
Learnt from: maratal
PR: ably/ably-chat-swift#293
File: Package.swift:21-24
Timestamp: 2025-06-14T15:14:10.298Z
Learning: In Swift Package Manager dependencies (Package.swift), do not flag branch-based dependencies as reproducibility issues. The user maratal prefers to ignore concerns about branch-based dependencies affecting build reproducibility.
Learnt from: maratal
PR: ably/ably-chat-swift#262
File: Tests/AblyChatTests/DefaultRoomReactionsTests.swift:0-0
Timestamp: 2025-05-23T16:29:39.712Z
Learning: The ably-chat-swift project uses Swift Testing framework (`#expect` macros) rather than XCTest for test assertions.
Learnt from: maratal
PR: ably/ably-chat-swift#262
File: Tests/AblyChatTests/DefaultRoomReactionsTests.swift:0-0
Timestamp: 2025-05-23T16:29:39.712Z
Learning: The ably-chat-swift project uses Swift Testing framework (`#expect` macros) rather than XCTest for test assertions.
Learnt from: maratal
PR: ably/ably-chat-swift#286
File: Sources/AblyChat/SubscriptionHandleStorage.swift:37-40
Timestamp: 2025-05-12T21:02:28.274Z
Learning: In the AblyChat Swift codebase, the `SubscriptionHandle` struct has an `unsubscribe()` method for terminating subscriptions, not a `cancel()` method.
Learnt from: maratal
PR: ably/ably-chat-swift#286
File: Example/AblyChatExample/ContentView.swift:203-209
Timestamp: 2025-05-12T21:11:08.937Z
Learning: In the AblyChat Swift codebase, SubscriptionHandle doesn't need to be retained/stored to keep subscriptions active. The subscription continues to work even if the handle is not stored, as the underlying services maintain references to the callbacks until explicitly unsubscribed via the handle's unsubscribe() method.
Learnt from: maratal
PR: ably/ably-chat-swift#262
File: Tests/AblyChatTests/DefaultRoomReactionsTests.swift:0-0
Timestamp: 2025-05-23T16:29:39.712Z
Learning: In the ably-chat-swift project, MockRealtimeChannel processes messages synchronously when subscribe is called, immediately delivering the configured messages to the callback.
Learnt from: maratal
PR: ably/ably-chat-swift#262
File: Tests/AblyChatTests/DefaultRoomReactionsTests.swift:0-0
Timestamp: 2025-05-23T16:29:39.712Z
Learning: In the ably-chat-swift project, MockRealtimeChannel processes messages synchronously when subscribe is called, immediately delivering the configured messages to the callback.
Learnt from: maratal
PR: ably/ably-chat-swift#286
File: Example/AblyChatExample/ContentView.swift:203-209
Timestamp: 2025-05-12T21:11:08.937Z
Learning: In the AblyChat Swift codebase, SubscriptionHandle doesn't need to be retained/stored to keep subscriptions active. The subscription callbacks continue to work even when the handle is not stored, as the underlying services maintain their own storage of callbacks that remain registered until explicitly unsubscribed via the handle's unsubscribe() method.
Learnt from: maratal
PR: ably/ably-chat-swift#293
File: Tests/AblyChatTests/Mocks/MockRealtime.swift:41-47
Timestamp: 2025-06-14T15:18:17.427Z
Learning: In the MockRealtime class in Tests/AblyChatTests/Mocks/MockRealtime.swift, the body parameter in the request method is constrained to dictionary or array types, but currently only dictionary types are used. Arrays are not yet used for this method, so the current implementation assumes dictionary-only for simplicity.
Learnt from: maratal
PR: ably/ably-chat-swift#286
File: Sources/AblyChat/RoomLifecycleManager.swift:611-624
Timestamp: 2025-05-22T20:57:48.147Z
Learning: In AblyChat Swift, when using continuations with subscription callbacks, the continuation object is captured directly by the closure and doesn't depend on `self`. Even with `[weak self]` capture, the continuation will still be resumed properly.
Learnt from: maratal
PR: ably/ably-chat-swift#286
File: Sources/AblyChat/DefaultTyping.swift:131-138
Timestamp: 2025-05-12T21:04:36.263Z
Learning: In the AblyChat Swift codebase, SubscriptionHandle closures should capture self weakly with `[weak self]` to avoid potential retain cycles, particularly when calling channel.unsubscribe() within the closure.
Learnt from: maratal
PR: ably/ably-chat-swift#249
File: Tests/AblyChatTests/DefaultMessagesTests.swift:45-48
Timestamp: 2025-05-22T19:17:21.392Z
Learning: The `let doIt = {}` closures in DefaultMessagesTests.swift are temporary workarounds for compiler crashes (related to issue #233) and will be removed once Xcode 16.3 is released, so they should not be flagged for missing async/throws annotations.
Learnt from: maratal
PR: ably/ably-chat-swift#286
File: Sources/AblyChat/SubscriptionAsyncSequence.swift:36-41
Timestamp: 2025-06-29T16:02:43.988Z
Learning: In the AblyChat Swift codebase, the fatalError in SubscriptionAsyncSequence.swift's mock async sequence handling (around line 39) is intentional and should not be flagged. This fatalError catches programmer errors when a throwing AsyncSequence is incorrectly passed to the mock initializer, which is meant for testing/development purposes.
Learnt from: maratal
PR: ably/ably-chat-swift#293
File: Example/AblyChatExample/ContentView.swift:94-99
Timestamp: 2025-06-14T21:47:20.509Z
Learning: In the Ably Chat Swift example app, using fatalError for missing clientID is intentional and appropriate since it represents a programmer error rather than a recoverable runtime condition. The clientID is considered an essential configuration requirement.
🪛 LanguageTool
README.md
[style] ~36-~36: Using many exclamation marks might seem excessive (in this case: 3 exclamation marks for a text that’s 1976 characters long)
Context: ... | | tvOS | >= 14.0 | > [!NOTE] > Xcode 16.1 or later is required....
(EN_EXCESSIVE_EXCLAMATION)
[style] ~43-~43: This adverb was used twice in the sentence. Consider removing one of them or replacing them with a synonym.
Context: ...so view all Ably releases on changelog.ably.com. --- ...
(ADVERB_REPETITION_PREMIUM)
⏰ Context from checks skipped due to timeout of 90000ms (4)
- GitHub Check: generate-matrices
- GitHub Check: check-documentation
- GitHub Check: Generate code coverage
- GitHub Check: lint
Fixed linting |
81a27c0
to
d32a567
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 0
♻️ Duplicate comments (1)
README.md (1)
2-3
: Fix incorrect badge targets (still pointing to other repos)
Both the SPM compatibility and license badges reference the wrong package/repository, so the shields are misleading / broken.-[](https://swiftpackageindex.com/ably/ably-chat-swift) -[](https://github.com/ably/ably-chat-kotlin/blob/main/LICENSE) +[](https://swiftpackageindex.com/ably/ably-chat-swift) +[](https://github.com/ably/ably-chat-swift/blob/main/LICENSE)
🧹 Nitpick comments (3)
README.md (3)
35-36
: Switch to GitHub-friendly call-out syntax
> [!NOTE]
is an Azure-Docs extension and renders verbatim on GitHub. Replace with a plain blockquote:-> [!NOTE] -> Xcode 16.1 or later is required. +> **Note:** Xcode 16.1 or later is required.
42-42
: Prefer relative link to CHANGELOG
Using an absolute path ties the link to one branch and repo fork; a relative link is simpler and fork-safe.-The [CHANGELOG.md](/ably/ably-chat-swift/blob/main/CHANGELOG.md) contains details of the latest releases for this SDK. +See the [CHANGELOG](./CHANGELOG.md) for details of recent releases.
48-48
: Tidy wording & link formatting
Minor copy-editing: keep the whole phrase in the link and drop the mid-sentence capitalisation.-Read the [CONTRIBUTING.md](./CONTRIBUTING.md) guidelines to contribute to Ably or [share feedback or request a new feature](https://forms.gle/mBw9M53NYuCBLFpMA). +Read the [CONTRIBUTING.md](./CONTRIBUTING.md) guidelines to contribute, or [share feedback and request new features](https://forms.gle/mBw9M53NYuCBLFpMA).
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
⛔ Files ignored due to path filters (3)
Images/SwiftChatSDK-github.png
is excluded by!**/*.png
Images/unit-tests-test-plan-screenshot.png
is excluded by!**/*.png
images/ably-chat-github-header.png
is excluded by!**/*.png
📒 Files selected for processing (1)
README.md
(1 hunks)
🧰 Additional context used
🧠 Learnings (2)
📓 Common learnings
Learnt from: maratal
PR: ably/ably-chat-swift#165
File: Sources/AblyChat/Reaction.swift:14-14
Timestamp: 2024-12-10T01:59:02.065Z
Learning: For the 'ably-chat-swift' repository, documentation-only PRs should focus exclusively on public methods and properties. Avoid suggesting changes to internal comments or private methods in such PRs.
Learnt from: maratal
PR: ably/ably-chat-swift#165
File: Sources/AblyChat/Rooms.swift:31-39
Timestamp: 2024-12-10T01:58:37.020Z
Learning: When reviewing PRs that only address documentation comments to public methods and properties, focus review comments on documentation changes and avoid pointing out code logic issues unrelated to documentation.
Learnt from: maratal
PR: ably/ably-chat-swift#165
File: docs-coverage-report:5-8
Timestamp: 2024-12-10T01:59:12.404Z
Learning: In the AblyChat Swift project, documentation coverage should focus on public methods and properties. Private and internal entities do not require documentation.
README.md (19)
Learnt from: maratal
PR: ably/ably-chat-swift#165
File: Sources/AblyChat/Reaction.swift:14-14
Timestamp: 2024-12-10T01:59:02.065Z
Learning: For the 'ably-chat-swift' repository, documentation-only PRs should focus exclusively on public methods and properties. Avoid suggesting changes to internal comments or private methods in such PRs.
Learnt from: maratal
PR: ably/ably-chat-swift#165
File: docs-coverage-report:5-8
Timestamp: 2024-12-10T01:59:12.404Z
Learning: In the AblyChat Swift project, documentation coverage should focus on public methods and properties. Private and internal entities do not require documentation.
Learnt from: maratal
PR: ably/ably-chat-swift#293
File: Sources/AblyChat/Message.swift:163-175
Timestamp: 2025-06-14T21:58:57.802Z
Learning: In the AblyChat Swift SDK, the JSON key "reactions" is used for parsing reaction summaries in the Chat SDK layer, while "summary" is used in the ably-cocoa layer. Reactions can be sourced from either the realtime message's summary property or directly from the "reactions" dictionary in the JSON.
Learnt from: maratal
PR: ably/ably-chat-swift#286
File: Sources/AblyChat/DefaultOccupancy.swift:10-13
Timestamp: 2025-05-12T21:01:14.109Z
Learning: The `Occupancy` protocol in the Ably Chat Swift SDK is annotated with `@MainActor`, making all conforming types like `DefaultOccupancy` automatically main actor-isolated without requiring explicit annotations on their methods.
Learnt from: maratal
PR: ably/ably-chat-swift#293
File: Package.swift:21-24
Timestamp: 2025-06-14T15:14:10.298Z
Learning: In Swift Package Manager dependencies (Package.swift), do not flag branch-based dependencies as reproducibility issues. The user maratal prefers to ignore concerns about branch-based dependencies affecting build reproducibility.
Learnt from: maratal
PR: ably/ably-chat-swift#262
File: Tests/AblyChatTests/DefaultRoomReactionsTests.swift:0-0
Timestamp: 2025-05-23T16:29:39.712Z
Learning: The ably-chat-swift project uses Swift Testing framework (`#expect` macros) rather than XCTest for test assertions.
Learnt from: maratal
PR: ably/ably-chat-swift#262
File: Tests/AblyChatTests/DefaultRoomReactionsTests.swift:0-0
Timestamp: 2025-05-23T16:29:39.712Z
Learning: The ably-chat-swift project uses Swift Testing framework (`#expect` macros) rather than XCTest for test assertions.
Learnt from: maratal
PR: ably/ably-chat-swift#286
File: Sources/AblyChat/SubscriptionHandleStorage.swift:37-40
Timestamp: 2025-05-12T21:02:28.274Z
Learning: In the AblyChat Swift codebase, the `SubscriptionHandle` struct has an `unsubscribe()` method for terminating subscriptions, not a `cancel()` method.
Learnt from: maratal
PR: ably/ably-chat-swift#286
File: Example/AblyChatExample/Mocks/MockClients.swift:0-0
Timestamp: 2025-05-16T21:04:26.244Z
Learning: In the ably-chat-swift project, mock implementations (like those in MockClients.swift) are intentionally kept simple, sometimes omitting parameter-based filtering behavior for testing simplicity.
Learnt from: maratal
PR: ably/ably-chat-swift#286
File: Example/AblyChatExample/ContentView.swift:203-209
Timestamp: 2025-05-12T21:11:08.937Z
Learning: In the AblyChat Swift codebase, SubscriptionHandle doesn't need to be retained/stored to keep subscriptions active. The subscription continues to work even if the handle is not stored, as the underlying services maintain references to the callbacks until explicitly unsubscribed via the handle's unsubscribe() method.
Learnt from: maratal
PR: ably/ably-chat-swift#262
File: Tests/AblyChatTests/DefaultRoomReactionsTests.swift:0-0
Timestamp: 2025-05-23T16:29:39.712Z
Learning: In the ably-chat-swift project, MockRealtimeChannel processes messages synchronously when subscribe is called, immediately delivering the configured messages to the callback.
Learnt from: maratal
PR: ably/ably-chat-swift#262
File: Tests/AblyChatTests/DefaultRoomReactionsTests.swift:0-0
Timestamp: 2025-05-23T16:29:39.712Z
Learning: In the ably-chat-swift project, MockRealtimeChannel processes messages synchronously when subscribe is called, immediately delivering the configured messages to the callback.
Learnt from: maratal
PR: ably/ably-chat-swift#286
File: Example/AblyChatExample/ContentView.swift:203-209
Timestamp: 2025-05-12T21:11:08.937Z
Learning: In the AblyChat Swift codebase, SubscriptionHandle doesn't need to be retained/stored to keep subscriptions active. The subscription callbacks continue to work even when the handle is not stored, as the underlying services maintain their own storage of callbacks that remain registered until explicitly unsubscribed via the handle's unsubscribe() method.
Learnt from: maratal
PR: ably/ably-chat-swift#293
File: Tests/AblyChatTests/Mocks/MockRealtime.swift:41-47
Timestamp: 2025-06-14T15:18:17.427Z
Learning: In the MockRealtime class in Tests/AblyChatTests/Mocks/MockRealtime.swift, the body parameter in the request method is constrained to dictionary or array types, but currently only dictionary types are used. Arrays are not yet used for this method, so the current implementation assumes dictionary-only for simplicity.
Learnt from: maratal
PR: ably/ably-chat-swift#286
File: Sources/AblyChat/RoomLifecycleManager.swift:611-624
Timestamp: 2025-05-22T20:57:48.147Z
Learning: In AblyChat Swift, when using continuations with subscription callbacks, the continuation object is captured directly by the closure and doesn't depend on `self`. Even with `[weak self]` capture, the continuation will still be resumed properly.
Learnt from: maratal
PR: ably/ably-chat-swift#286
File: Sources/AblyChat/DefaultTyping.swift:131-138
Timestamp: 2025-05-12T21:04:36.263Z
Learning: In the AblyChat Swift codebase, SubscriptionHandle closures should capture self weakly with `[weak self]` to avoid potential retain cycles, particularly when calling channel.unsubscribe() within the closure.
Learnt from: maratal
PR: ably/ably-chat-swift#249
File: Tests/AblyChatTests/DefaultMessagesTests.swift:45-48
Timestamp: 2025-05-22T19:17:21.392Z
Learning: The `let doIt = {}` closures in DefaultMessagesTests.swift are temporary workarounds for compiler crashes (related to issue #233) and will be removed once Xcode 16.3 is released, so they should not be flagged for missing async/throws annotations.
Learnt from: maratal
PR: ably/ably-chat-swift#286
File: Sources/AblyChat/SubscriptionAsyncSequence.swift:36-41
Timestamp: 2025-06-29T16:02:43.988Z
Learning: In the AblyChat Swift codebase, the fatalError in SubscriptionAsyncSequence.swift's mock async sequence handling (around line 39) is intentional and should not be flagged. This fatalError catches programmer errors when a throwing AsyncSequence is incorrectly passed to the mock initializer, which is meant for testing/development purposes.
Learnt from: maratal
PR: ably/ably-chat-swift#293
File: Example/AblyChatExample/ContentView.swift:94-99
Timestamp: 2025-06-14T21:47:20.509Z
Learning: In the Ably Chat Swift example app, using fatalError for missing clientID is intentional and appropriate since it represents a programmer error rather than a recoverable runtime condition. The clientID is considered an essential configuration requirement.
🪛 LanguageTool
README.md
[style] ~35-~35: Using many exclamation marks might seem excessive (in this case: 3 exclamation marks for a text that’s 1950 characters long)
Context: ... | >= 11.0 | | tvOS | >= 14.0 | > [!NOTE] > Xcode 16.1 or later is required....
(EN_EXCESSIVE_EXCLAMATION)
[style] ~42-~42: This adverb was used twice in the sentence. Consider removing one of them or replacing them with a synonym.
Context: ...so view all Ably releases on changelog.ably.com. --- ...
(ADVERB_REPETITION_PREMIUM)
⏰ Context from checks skipped due to timeout of 90000ms (5)
- GitHub Check: check-documentation
- GitHub Check: Generate code coverage
- GitHub Check: generate-matrices
- GitHub Check: spec-coverage
- GitHub Check: lint
- Add new header image and shields - Rewrite introduction and overview - Update supported platforms section - Remove requirements, install, features, usage, and example app sections - Add releases and contribute sections - Improve support section - Address reviewer feedback - Update and rename images as needed
d32a567
to
7a7c55b
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 0
♻️ Duplicate comments (1)
README.md (1)
2-3
: Broken & misleading badge links still unresolvedThe SPM compatibility badge still points at
ably-cocoa
, and the licence badge references3scale/saas-operator
. Both URLs are wrong for this repo and will mis-lead readers.-[](https://swiftpackageindex.com/ably/ably-chat-swift) -[](https://github.com/ably/ably-chat-kotlin/blob/main/LICENSE) +[](https://swiftpackageindex.com/ably/ably-chat-swift) +[](https://github.com/ably/ably-chat-swift/blob/main/LICENSE)
🧹 Nitpick comments (4)
README.md (4)
35-37
: Use a GitHub-friendly note style
> [!NOTE]
renders literally on GitHub. Prefer a plain Markdown call-out:-> [!NOTE] -> Xcode 16.1 or later is required. +> **Note:** Xcode 16.1 or later is required.
48-49
: Minor copy-edit of “Contribute” sentence-Read the [CONTRIBUTING.md](./CONTRIBUTING.md) guidelines to contribute to Ably or [share feedback or request a new feature](https://forms.gle/mBw9M53NYuCBLFpMA). +Read the [CONTRIBUTING.md](./CONTRIBUTING.md) guidelines to contribute to Ably, or [share feedback or request a new feature](https://forms.gle/mBw9M53NYuCBLFpMA).
52-52
: Capitalisation & hyphenation-You can also view the [community reported Github issues](https://github.com/ably/ably-chat-swift/issues) or raise one yourself. +You can also view the [community-reported GitHub issues](https://github.com/ably/ably-chat-swift/issues) or raise one yourself.
42-42
: Prefer a relative link to CHANGELOG
Keeps the link working in forks and mirrors.-The [CHANGELOG.md](/ably/ably-chat-swift/blob/main/CHANGELOG.md) contains details of the latest releases for this SDK. +See [CHANGELOG.md](./CHANGELOG.md) for details of the latest releases.
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
⛔ Files ignored due to path filters (3)
Images/SwiftChatSDK-github.png
is excluded by!**/*.png
Images/unit-tests-test-plan-screenshot.png
is excluded by!**/*.png
images/ably-chat-github-header.png
is excluded by!**/*.png
📒 Files selected for processing (1)
README.md
(1 hunks)
🧰 Additional context used
🧠 Learnings (2)
📓 Common learnings
Learnt from: maratal
PR: ably/ably-chat-swift#165
File: Sources/AblyChat/Reaction.swift:14-14
Timestamp: 2024-12-10T01:59:02.065Z
Learning: For the 'ably-chat-swift' repository, documentation-only PRs should focus exclusively on public methods and properties. Avoid suggesting changes to internal comments or private methods in such PRs.
Learnt from: maratal
PR: ably/ably-chat-swift#165
File: Sources/AblyChat/Rooms.swift:31-39
Timestamp: 2024-12-10T01:58:37.020Z
Learning: When reviewing PRs that only address documentation comments to public methods and properties, focus review comments on documentation changes and avoid pointing out code logic issues unrelated to documentation.
Learnt from: maratal
PR: ably/ably-chat-swift#165
File: docs-coverage-report:5-8
Timestamp: 2024-12-10T01:59:12.404Z
Learning: In the AblyChat Swift project, documentation coverage should focus on public methods and properties. Private and internal entities do not require documentation.
README.md (19)
Learnt from: maratal
PR: ably/ably-chat-swift#165
File: Sources/AblyChat/Reaction.swift:14-14
Timestamp: 2024-12-10T01:59:02.065Z
Learning: For the 'ably-chat-swift' repository, documentation-only PRs should focus exclusively on public methods and properties. Avoid suggesting changes to internal comments or private methods in such PRs.
Learnt from: maratal
PR: ably/ably-chat-swift#165
File: docs-coverage-report:5-8
Timestamp: 2024-12-10T01:59:12.404Z
Learning: In the AblyChat Swift project, documentation coverage should focus on public methods and properties. Private and internal entities do not require documentation.
Learnt from: maratal
PR: ably/ably-chat-swift#293
File: Sources/AblyChat/Message.swift:163-175
Timestamp: 2025-06-14T21:58:57.802Z
Learning: In the AblyChat Swift SDK, the JSON key "reactions" is used for parsing reaction summaries in the Chat SDK layer, while "summary" is used in the ably-cocoa layer. Reactions can be sourced from either the realtime message's summary property or directly from the "reactions" dictionary in the JSON.
Learnt from: maratal
PR: ably/ably-chat-swift#286
File: Example/AblyChatExample/Mocks/MockClients.swift:0-0
Timestamp: 2025-05-16T21:04:26.244Z
Learning: In the ably-chat-swift project, mock implementations (like those in MockClients.swift) are intentionally kept simple, sometimes omitting parameter-based filtering behavior for testing simplicity.
Learnt from: maratal
PR: ably/ably-chat-swift#286
File: Sources/AblyChat/DefaultOccupancy.swift:10-13
Timestamp: 2025-05-12T21:01:14.109Z
Learning: The `Occupancy` protocol in the Ably Chat Swift SDK is annotated with `@MainActor`, making all conforming types like `DefaultOccupancy` automatically main actor-isolated without requiring explicit annotations on their methods.
Learnt from: maratal
PR: ably/ably-chat-swift#293
File: Package.swift:21-24
Timestamp: 2025-06-14T15:14:10.298Z
Learning: In Swift Package Manager dependencies (Package.swift), do not flag branch-based dependencies as reproducibility issues. The user maratal prefers to ignore concerns about branch-based dependencies affecting build reproducibility.
Learnt from: maratal
PR: ably/ably-chat-swift#262
File: Tests/AblyChatTests/DefaultRoomReactionsTests.swift:0-0
Timestamp: 2025-05-23T16:29:39.712Z
Learning: The ably-chat-swift project uses Swift Testing framework (`#expect` macros) rather than XCTest for test assertions.
Learnt from: maratal
PR: ably/ably-chat-swift#262
File: Tests/AblyChatTests/DefaultRoomReactionsTests.swift:0-0
Timestamp: 2025-05-23T16:29:39.712Z
Learning: The ably-chat-swift project uses Swift Testing framework (`#expect` macros) rather than XCTest for test assertions.
Learnt from: maratal
PR: ably/ably-chat-swift#286
File: Sources/AblyChat/SubscriptionHandleStorage.swift:37-40
Timestamp: 2025-05-12T21:02:28.274Z
Learning: In the AblyChat Swift codebase, the `SubscriptionHandle` struct has an `unsubscribe()` method for terminating subscriptions, not a `cancel()` method.
Learnt from: maratal
PR: ably/ably-chat-swift#262
File: Tests/AblyChatTests/DefaultRoomReactionsTests.swift:0-0
Timestamp: 2025-05-23T16:29:39.712Z
Learning: In the ably-chat-swift project, MockRealtimeChannel processes messages synchronously when subscribe is called, immediately delivering the configured messages to the callback.
Learnt from: maratal
PR: ably/ably-chat-swift#286
File: Example/AblyChatExample/ContentView.swift:203-209
Timestamp: 2025-05-12T21:11:08.937Z
Learning: In the AblyChat Swift codebase, SubscriptionHandle doesn't need to be retained/stored to keep subscriptions active. The subscription continues to work even if the handle is not stored, as the underlying services maintain references to the callbacks until explicitly unsubscribed via the handle's unsubscribe() method.
Learnt from: maratal
PR: ably/ably-chat-swift#262
File: Tests/AblyChatTests/DefaultRoomReactionsTests.swift:0-0
Timestamp: 2025-05-23T16:29:39.712Z
Learning: In the ably-chat-swift project, MockRealtimeChannel processes messages synchronously when subscribe is called, immediately delivering the configured messages to the callback.
Learnt from: maratal
PR: ably/ably-chat-swift#286
File: Example/AblyChatExample/ContentView.swift:203-209
Timestamp: 2025-05-12T21:11:08.937Z
Learning: In the AblyChat Swift codebase, SubscriptionHandle doesn't need to be retained/stored to keep subscriptions active. The subscription callbacks continue to work even when the handle is not stored, as the underlying services maintain their own storage of callbacks that remain registered until explicitly unsubscribed via the handle's unsubscribe() method.
Learnt from: maratal
PR: ably/ably-chat-swift#293
File: Tests/AblyChatTests/Mocks/MockRealtime.swift:41-47
Timestamp: 2025-06-14T15:18:17.427Z
Learning: In the MockRealtime class in Tests/AblyChatTests/Mocks/MockRealtime.swift, the body parameter in the request method is constrained to dictionary or array types, but currently only dictionary types are used. Arrays are not yet used for this method, so the current implementation assumes dictionary-only for simplicity.
Learnt from: maratal
PR: ably/ably-chat-swift#286
File: Sources/AblyChat/RoomLifecycleManager.swift:611-624
Timestamp: 2025-05-22T20:57:48.147Z
Learning: In AblyChat Swift, when using continuations with subscription callbacks, the continuation object is captured directly by the closure and doesn't depend on `self`. Even with `[weak self]` capture, the continuation will still be resumed properly.
Learnt from: maratal
PR: ably/ably-chat-swift#286
File: Sources/AblyChat/DefaultTyping.swift:131-138
Timestamp: 2025-05-12T21:04:36.263Z
Learning: In the AblyChat Swift codebase, SubscriptionHandle closures should capture self weakly with `[weak self]` to avoid potential retain cycles, particularly when calling channel.unsubscribe() within the closure.
Learnt from: maratal
PR: ably/ably-chat-swift#286
File: Sources/AblyChat/SubscriptionAsyncSequence.swift:36-41
Timestamp: 2025-06-29T16:02:43.988Z
Learning: In the AblyChat Swift codebase, the fatalError in SubscriptionAsyncSequence.swift's mock async sequence handling (around line 39) is intentional and should not be flagged. This fatalError catches programmer errors when a throwing AsyncSequence is incorrectly passed to the mock initializer, which is meant for testing/development purposes.
Learnt from: maratal
PR: ably/ably-chat-swift#249
File: Tests/AblyChatTests/DefaultMessagesTests.swift:45-48
Timestamp: 2025-05-22T19:17:21.392Z
Learning: The `let doIt = {}` closures in DefaultMessagesTests.swift are temporary workarounds for compiler crashes (related to issue #233) and will be removed once Xcode 16.3 is released, so they should not be flagged for missing async/throws annotations.
Learnt from: maratal
PR: ably/ably-chat-swift#293
File: Example/AblyChatExample/ContentView.swift:94-99
Timestamp: 2025-06-14T21:47:20.509Z
Learning: In the Ably Chat Swift example app, using fatalError for missing clientID is intentional and appropriate since it represents a programmer error rather than a recoverable runtime condition. The clientID is considered an essential configuration requirement.
🪛 LanguageTool
README.md
[grammar] ~1-~1: Use correct spacing
Context: ...Header](Images/SwiftChatSDK-github.png)
--- # Ably Chat Swift SDK Ably Chat is a set...
(QB_NEW_EN_OTHER_ERROR_IDS_5)
[grammar] ~7-~7: Use correct spacing
Context: ...b/main/LICENSE) --- # Ably Chat Swift SDK Ably Chat is a set of purpose-built API...
(QB_NEW_EN_OTHER_ERROR_IDS_5)
[grammar] ~9-~9: There might be a mistake here.
Context: ...f purpose-built APIs for a host of chat features enabling you to create 1:1, 1:Many, Man...
(QB_NEW_EN_OTHER)
[grammar] ~9-~9: Correctly pair commas and coordinating conjunctions
Context: ...es enabling you to create 1:1, 1:Many, Many:1 and Many:Many chat rooms for any scale....
(QB_NEW_EN_OTHER_ERROR_IDS_14)
[grammar] ~9-~9: Use correct spacing
Context: ...omplex details to enable efficient chat architectures. --- ## Getting started Everything you need to...
(QB_NEW_EN_OTHER_ERROR_IDS_5)
[grammar] ~13-~13: Use correct spacing
Context: ...nt chat architectures. --- ## Getting started Everything you need to get started with...
(QB_NEW_EN_OTHER_ERROR_IDS_5)
[grammar] ~15-~15: Use correct spacing
Context: ...Everything you need to get started with Ably: - Learn [about Ably Chat.](https://ably.c...
(QB_NEW_EN_OTHER_ERROR_IDS_5)
[grammar] ~17-~17: There might be a mistake here.
Context: ...need to get started with Ably: - Learn about Ably Chat....
(QB_NEW_EN_OTHER)
[grammar] ~19-~19: There might be a problem here.
Context: ...swift) - Play with the livestream chat demo. --- ## Supported platforms Ably aims to suppo...
(QB_NEW_EN_MERGED_MATCH)
[grammar] ~23-~23: Use correct spacing
Context: ...at-demo.vercel.app/) --- ## Supported platforms Ably aims to support a wide range of pl...
(QB_NEW_EN_OTHER_ERROR_IDS_5)
[grammar] ~25-~25: Use correct spacing
Context: ...ssue in the repository or contact Ably support. This SDK supports the following platfor...
(QB_NEW_EN_OTHER_ERROR_IDS_5)
[grammar] ~27-~27: Use correct spacing
Context: ...port). This SDK supports the following platforms: | Platform | Support | | -------- | ---...
(QB_NEW_EN_OTHER_ERROR_IDS_5)
[grammar] ~33-~33: Use correct spacing
Context: ...cOS | >= 11.0 | | tvOS | >= 14.0 | > [!NOTE] > Xcode 16.1 or later is requir...
(QB_NEW_EN_OTHER_ERROR_IDS_5)
[style] ~35-~35: Using many exclamation marks might seem excessive (in this case: 3 exclamation marks for a text that’s 1950 characters long)
Context: ... | >= 11.0 | | tvOS | >= 14.0 | > [!NOTE] > Xcode 16.1 or later is required....
(EN_EXCESSIVE_EXCLAMATION)
[grammar] ~36-~36: There might be a problem here.
Context: ...0 | > [!NOTE] > Xcode 16.1 or later is required. --- ## Releases The [CHANGELOG.md](/ably/ably-chat-swif...
(QB_NEW_EN_MERGED_MATCH)
[grammar] ~42-~42: Use correct spacing
Context: ... You can also view all Ably releases on changelog.ably.com. --- ## Contribute Read the [CONTRIBUTING.md](...
(QB_NEW_EN_OTHER_ERROR_IDS_5)
[grammar] ~46-~46: Use correct spacing
Context: ...](https://changelog.ably.com). --- ## Contribute Read the [CONTRIBUTING.md](./CONTRIBUTI...
(QB_NEW_EN_OTHER_ERROR_IDS_5)
[grammar] ~48-~48: Use correct spacing
Context: ...bly or share feedback or request a new feature. ## Support, feedback and troubleshooting ...
(QB_NEW_EN_OTHER_ERROR_IDS_5)
[grammar] ~50-~50: Add a comma
Context: ...ms.gle/mBw9M53NYuCBLFpMA). ## Support, feedback and troubleshooting For help or techni...
(QB_NEW_EN_OTHER_ERROR_IDS_22)
[grammar] ~50-~50: Use correct spacing
Context: ...3NYuCBLFpMA). ## Support, feedback and troubleshooting For help or technical support, visit Ab...
(QB_NEW_EN_OTHER_ERROR_IDS_5)
[grammar] ~52-~52: Use hyphens correctly
Context: ...bly.com/support). You can also view the [community reported Github issues](https://github.c...
(QB_NEW_EN_OTHER_ERROR_IDS_29)
[grammar] ~52-~52: Use proper capitalization
Context: ...u can also view the [community reported Github issues](https://github.com/ably/ably-ch...
(QB_NEW_EN_OTHER_ERROR_IDS_6)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (34)
- GitHub Check: Example app, tvOS (Xcode 16.1)
- GitHub Check: Example app, iOS (Xcode 16.2)
- GitHub Check: Xcode,
release
configuration, iOS (Xcode 16.3) - GitHub Check: Example app, tvOS (Xcode 16.3)
- GitHub Check: Xcode,
release
configuration, tvOS (Xcode 16.3) - GitHub Check: Example app, macOS (Xcode 16.2)
- GitHub Check: Example app, iOS (Xcode 16.3)
- GitHub Check: Xcode,
release
configuration, macOS (Xcode 16.2) - GitHub Check: Example app, macOS (Xcode 16.3)
- GitHub Check: Example app, iOS (Xcode 16.1)
- GitHub Check: Xcode,
release
configuration, macOS (Xcode 16.3) - GitHub Check: Example app, tvOS (Xcode 16.2)
- GitHub Check: Xcode,
release
configuration, tvOS (Xcode 16.1) - GitHub Check: Xcode,
release
configuration, macOS (Xcode 16.1) - GitHub Check: Example app, macOS (Xcode 16.1)
- GitHub Check: Xcode,
release
configuration, iOS (Xcode 16.2) - GitHub Check: Xcode,
release
configuration, iOS (Xcode 16.1) - GitHub Check: Xcode,
release
configuration, tvOS (Xcode 16.2) - GitHub Check: Xcode, iOS (Xcode 16.3)
- GitHub Check: Xcode, tvOS (Xcode 16.2)
- GitHub Check: Xcode, tvOS (Xcode 16.3)
- GitHub Check: Xcode, macOS (Xcode 16.3)
- GitHub Check: Xcode, tvOS (Xcode 16.1)
- GitHub Check: Xcode, iOS (Xcode 16.2)
- GitHub Check: Xcode, macOS (Xcode 16.1)
- GitHub Check: SPM,
release
configuration (Xcode 16.1) - GitHub Check: SPM,
release
configuration (Xcode 16.2) - GitHub Check: Xcode, macOS (Xcode 16.2)
- GitHub Check: SPM,
release
configuration (Xcode 16.3) - GitHub Check: SPM (Xcode 16.3)
- GitHub Check: Xcode, iOS (Xcode 16.1)
- GitHub Check: SPM (Xcode 16.2)
- GitHub Check: SPM (Xcode 16.1)
- GitHub Check: Generate code coverage
This PR streamlines and refocuses the content of README.md to improve readability, simplify navigation, and make ongoing maintenance easier.
Commits
EDU-1957: Adds header and shield
EDU-1959: Rewrites introduction and overview
EDU-1959: Rewrites supported platforms section
EDU-1959: Removes requirements section
EDU-1959: Removes install section
EDU-1959: Removes features section
EDU-1959: Removes usage section
EDU-1959: Removes example app section
EDU-1959: Adds releases section
EDU-1959: Adds contribute section
EDU-1959: Improves support section
EDU-1959: EDU-1959: Address reviewer feedback
Jira
https://ably.atlassian.net/browse/EDU-1959
Summary by CodeRabbit