Post

Replies

Boosts

Views

Activity

Reply to CloudKit how do I check for access level (public read, public write, private)
to determine if a user is signed into iCloud, use CKContainer.accountStatus { … } https://developer.apple.com/documentation/cloudkit/ckcontainer/1399180-accountstatuswithcompletionhandl Going further, record types in CloudKit can have various read and write permissions using security roles. CloudKit Security Roles are not well documented. See this thread for more https://stackoverflow.com/questions/31369181/how-do-the-cloudkit-security-roles-and-permissions-work
Jan ’23
Reply to In-app storage/sync strategy for shared objects
How important is user privacy? How important is security? How are you planning to pay for cloud services like FireBase or AppWrite? I choose CloudKit (and CoreData), time and again, because, user data is private and secure by default, the capability to share between users is built in on top of that privacy and security, and users pay for their own cloud storage, not me. In 2019, Apple introduced a sync system between the CloudKit and CoreData, called NSPersistentCloudKitContainer, which might server you well. If you want more control, check out CloudCore. And for Android, check out cloudkit_flutter. fwiw
Jan ’23
Reply to CKError 429 from CloudKit, using CKDiscoverAllUserIdentitiesOperation
if there is a question here, the answer is to do what it says "Retry after X seconds". The actual time is included in the info dictionary of the error. Here's a snippet from CloudCore, an open-source sync engine, that shows how it retrieves this info… private func handle(error: Error, …) { guard let cloudError = error as? CKError else { … return } switch cloudError.code { case .requestRateLimited, .zoneBusy, .serviceUnavailable: if let number = cloudError.userInfo[CKErrorRetryAfterKey] as? NSNumber { let pauseUntil = Date(timeIntervalSinceNow: number.doubleValue) } … } }
Dec ’22