Skip to content

Instantly share code, notes, and snippets.

@stanlemon
Last active January 29, 2023 18:23
Show Gist options
  • Save stanlemon/0ea042d084799c9d5acfc3aefa07b428 to your computer and use it in GitHub Desktop.
Save stanlemon/0ea042d084799c9d5acfc3aefa07b428 to your computer and use it in GitHub Desktop.
Attempting to create a zone share for a CoreData object via just CloudKit
func createShareV2(_ object: NSManagedObject, title: String) async -> CKShare? {
Logger.shared.notice("Creating share for object")
guard let record = persistentCloudKitContainer.record(for: object.objectID) else {
Logger.shared.info("Could not find CKRecord for object to share")
return nil
}
let container = CKContainer.default()
let database = container.privateCloudDatabase
let zoneID = record.recordID.zoneID
let zone = CKRecordZone(zoneID: zoneID)
guard let existingShare = zone.share else {
let share = CKShare(recordZoneID: zone.zoneID)
share[CKShare.SystemFieldKey.title] = title
_ = try? await database.modifyRecords(saving: [share], deleting: [])
Logger.shared.info("Creating new share")
return share
}
guard let share = try? await database.record(for: existingShare.recordID) as? CKShare else {
Logger.shared.error("Unable to find existing share")
return nil
}
Logger.shared.info("Share found \(share)")
return share
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment