commit 34d5d0683648994eabd4a4fe65c8992f0603ac24
parent f3901ffa4c4c7ff29ab6b04825a6e8eb2e67c8d9
Author: Michael Camilleri <[email protected]>
Date: Fri, 24 Apr 2026 18:08:32 +0900
Make iCloud error recording asynchronous
Diffstat:
1 file changed, 13 insertions(+), 4 deletions(-)
diff --git a/Crossmate/Sync/SyncEngine.swift b/Crossmate/Sync/SyncEngine.swift
@@ -538,19 +538,28 @@ actor SyncEngine {
private func handleSentRecordZoneChanges(
_ event: CKSyncEngine.Event.SentRecordZoneChanges
- ) {
+ ) async {
+ var failureMessages: [String] = []
let ctx = persistence.container.newBackgroundContext()
ctx.performAndWait {
for record in event.savedRecords {
self.writeBackSystemFields(record: record, in: ctx)
}
for failure in event.failedRecordSaves {
- self.trace(
- "send: failed to save \(failure.record.recordID.recordName): \(failure.error.localizedDescription)"
+ let name = failure.record.recordID.recordName
+ let err = failure.error as NSError
+ let userInfo = err.userInfo
+ .map { "\($0.key)=\($0.value)" }
+ .joined(separator: " | ")
+ failureMessages.append(
+ "send: failed to save \(name) — domain=\(err.domain) code=\(err.code) \(err.localizedDescription) | userInfo: \(userInfo)"
)
}
if ctx.hasChanges { try? ctx.save() }
}
+ for message in failureMessages {
+ await trace(message)
+ }
}
private nonisolated func writeBackSystemFields(
@@ -624,7 +633,7 @@ extension SyncEngine: CKSyncEngineDelegate {
break
case .sentRecordZoneChanges(let e):
- handleSentRecordZoneChanges(e)
+ await handleSentRecordZoneChanges(e)
case .willFetchChanges, .didFetchChanges,
.willSendChanges, .didSendChanges: