diff --git a/src/pages/docs/messages/updates-deletes.mdx b/src/pages/docs/messages/updates-deletes.mdx
index e557e64032..eabce81a6f 100644
--- a/src/pages/docs/messages/updates-deletes.mdx
+++ b/src/pages/docs/messages/updates-deletes.mdx
@@ -88,6 +88,40 @@ await channel.updateMessage(
{ description: 'reason for update' }
);
```
+
+```swift
+import Ably
+
+let realtime = ARTRealtime(key: "{{API_KEY}}")
+// This assumes there is an 'updates' namespace with a channel rule enabling updates and deletes
+let channel = realtime.channels.get("updates:example")
+
+// Publish the original message
+channel.publish([.init(name: "message-name", data: "original-data")]) { result, error in
+ if let error = error {
+ print("Failed to publish: \(error.message)")
+ return
+ }
+
+ // Get the serial from the published message
+ guard let serial = result.serials.first else {
+ print("No serial available")
+ return
+ }
+
+ // Publish an update using the serial
+ let messageUpdate = ARTMessage(name: nil, data: "updated-data")
+ messageUpdate.serial = serial
+
+ channel.update(messageUpdate, operation: .init(clientId: nil, descriptionText: "reason for update", metadata: nil), params: nil) { result, error in
+ if let error = error {
+ print("Failed to update message: \(error.message)")
+ return
+ }
+ print("Message updated")
+ }
+}
+```
#### Returns
@@ -182,6 +216,40 @@ await channel.deleteMessage(
{ description: 'reason for delete' }
);
```
+
+```swift
+import Ably
+
+let realtime = ARTRealtime(key: "{{API_KEY}}")
+// This assumes there is an 'updates' namespace with a channel rule enabling updates and deletes
+let channel = realtime.channels.get("updates:example")
+
+// Publish the original message
+channel.publish([.init(name: "message-name", data: "original-data")]) { result, error in
+ if let error = error {
+ print("Failed to publish: \(error.message)")
+ return
+ }
+
+ // Get the serial from the published message
+ guard let serial = result.serials.first else {
+ print("No serial available")
+ return
+ }
+
+ // Delete the message using the serial
+ let messageToDelete = ARTMessage(name: nil, data: "") // clear the previous data
+ messageToDelete.serial = serial
+
+ channel.delete(messageToDelete, operation: .init(clientId: nil, descriptionText: "reason for delete", metadata: nil), params: nil) { result, error in
+ if let error = error {
+ print("Failed to delete message: \(error.message)")
+ return
+ }
+ print("Message deleted")
+ }
+}
+```
#### Returns
@@ -279,6 +347,43 @@ channel.appendMessage({ serial, data: '!' });
// the message in history now has data: "Hello, World!"
```
+
+```swift
+import Ably
+
+let realtime = ARTRealtime(key: "{{API_KEY}}")
+// This assumes there is an 'updates' namespace with a channel rule enabling updates and deletes
+let channel = realtime.channels.get("updates:example")
+
+// Publish the original message
+channel.publish([.init(name: "message-name", data: "Hello")]) { result, error in
+ if let error = error {
+ print("Failed to publish: \(error.message)")
+ return
+ }
+
+ // Get the serial from the published message
+ guard let serial = result.serials.first else {
+ print("No serial available")
+ return
+ }
+
+ // Append to the message a few times (without needing to await each to finish
+ // before doing the next); the data will be concatenated
+ for fragment in [", ", "World", "!"] { // fragments to append
+ let messageAppend = ARTMessage(name: nil, data: fragment)
+ messageAppend.serial = serial
+
+ channel.append(messageAppend, operation: nil, params: nil) { result, error in
+ if let error = error {
+ print("Failed to append: \(error.message)")
+ return
+ }
+ print("Message appended with fragment: \(fragment)")
+ }
+ }
+}
+```
#### Returns
@@ -342,6 +447,25 @@ const channel = rest.channels.get('updates:example');
// message for a serial you have stored or passed around
const message = await channel.getMessage(msg);
```
+
+```swift
+import Ably
+
+let rest = ARTRest(key: "{{API_KEY}}")
+let channel = rest.channels.get("updates:example")
+
+let serial = "0123456789-001@abcdefghij:001" // example serial
+
+channel.getMessageWithSerial(serial) { message, error in
+ if let error = error {
+ print("Failed to get message: \(error.message)")
+ return
+ }
+ if let message = message {
+ print("Retrieved message: \(message.data, default: "")")
+ }
+}
+```
## Get message versions
@@ -366,6 +490,25 @@ const channel = rest.channels.get('updates:example');
const page = await channel.getMessageVersions(msg);
console.log(`Found ${page.items.length} versions`);
```
+
+```swift
+import Ably
+
+let rest = ARTRest(key: "{{API_KEY}}")
+let channel = rest.channels.get("updates:example")
+
+let serial = "0123456789-001@abcdefghij:001" // example serial
+
+channel.getMessageVersions(withSerial: serial) { page, error in
+ if let error = error {
+ print("Failed to get message versions: \(error.message)")
+ return
+ }
+ if let page = page {
+ print("Found \(page.items.count) versions")
+ }
+}
+```
## Message version structure