CloudKit Sharing Issue: "Unknown client: ChoreOrganizer"

I'm experiencing a persistent issue with CloudKit sharing in my iOS application. When attempting to present a UICloudSharingController, I receive the error message "Unknown client: ChoreOrganizer" in the console. App Configuration Details:

  • App Name: ChoreOrganizer
  • Bundle ID: com.ProgressByBits.ChoreOrganizer
  • CloudKit Container ID: iCloud.com.ProgressByBits.ChoreOrganizer
  • Core Data Model Name: ChoreOrganizer.xcdatamodeld
  • Core Data Entity: Chore

Error Details:

The error "Unknown client: ChoreOrganizer" occurs when I present the UICloudSharingController This happens only on the first attempt to share; subsequent attempts during the same app session don't show the error but sharing still doesn't work All my code executes successfully without errors until UICloudSharingController is presented

Implementation Details: I'm using NSPersistentCloudKitContainer for Core Data synchronization and UICloudSharingController for sharing. My implementation creates a custom CloudKit zone, saves both a record and a CKShare in that zone, and then presents the sharing controller. Here's the relevant code:

@MainActor
func presentSharing(from viewController: UIViewController) async throws {
    // Create CloudKit container
    let container = CKContainer(identifier: containerIdentifier)
    let database = container.privateCloudDatabase
    
    // Define custom zone ID
    let zoneID = CKRecordZone.ID(zoneName: "SharedChores", ownerName: CKCurrentUserDefaultName)
    
    do {
        // Check if zone exists, create if necessary
        do {
            _ = try await database.recordZone(for: zoneID)
        } catch {
            let newZone = CKRecordZone(zoneID: zoneID)
            _ = try await database.save(newZone)
        }
        
        // Create record in custom zone
        let recordID = CKRecord.ID(recordName: "SharedChoresRoot", zoneID: zoneID)
        let rootRecord = CKRecord(recordType: "ChoreRoot", recordID: recordID)
        rootRecord["name"] = "Shared Chores Root" as CKRecordValue
        
        // Create share
        let share = CKShare(rootRecord: rootRecord)
        share[CKShare.SystemFieldKey.title] = "Shared Tasks" as CKRecordValue
        
        // Save both record and share in same operation
        let recordsToSave: [CKRecord] = [rootRecord, share]
        _ = try await database.modifyRecords(saving: recordsToSave, deleting: [])
        
        // Present sharing controller
        let sharingController = UICloudSharingController(share: share, container: container)
        sharingController.delegate = shareDelegate
        
        // Configure popover
        if let popover = sharingController.popoverPresentationController {
            popover.sourceView = viewController.view
            popover.sourceRect = CGRect(
                x: viewController.view.bounds.midX,
                y: viewController.view.bounds.midY,
                width: 1, height: 1
            )
            popover.permittedArrowDirections = []
        }
        
        viewController.present(sharingController, animated: true)
    } catch {
        throw error
    }
}

Steps I've already tried:

  • Verified correct bundle ID and container ID match in all places (code, entitlements file, Developer Portal)
  • Added NSUbiquitousContainers configuration to Info.plist
  • Ensured proper entitlements in the app
  • Created and configured proper provisioning profiles
  • Tried both default zone and custom zone for sharing
  • Various ways of saving the record and share (separate operations, same operation)
  • Cleaned build folder, deleted derived data, reinstalled the app
  • Tried on both simulator and physical device
  • Confirmed CloudKit container exists in CloudKit Dashboard with correct schema
  • Verified iCloud is properly signed in on test devices

Console Output:

1. Starting sharing process
2. Created CKContainer with ID: iCloud.com.ProgressByBits.ChoreOrganizer
3. Using zone: SharedChores
4. Checking if zone exists
5. Zone exists
7. Created record with ID: <CKRecordID: 0x3033ebd80; recordName=SharedChoresRoot, zoneID=SharedChores:__defaultOwner__>
8. Created share with ID: <CKRecordID: 0x3033ea920; recordName=Share-C4701F43-7591-4436-BBF4-6FA8AF3DF532, zoneID=SharedChores:__defaultOwner__>
9. About to save record and share
10. Records saved successfully
11. Creating UICloudSharingController
12. About to present UICloudSharingController
13. UICloudSharingController presented
Unknown client: ChoreOrganizer

Additional Information: When accessing the CloudKit Dashboard, I can see that data is being properly synced to the cloud, indicating that the basic CloudKit integration is working. The issue appears to be specific to the sharing functionality. I would greatly appreciate any insights or solutions to resolve this persistent "Unknown client" error. Thank you for your assistance.

Environment Details:

  • macOS Version: 15.3.1
  • iOS Version (device): 18.3
  • Xcode Version: 16.2
  • Swift Version: 6.0.3
  • Device(s) Tested: iPad Air (fourth gen)

Would you mind to try with the Sharing Core Data objects between iCloud users sample, which uses ShareLink to for initial sharing, to see if it reproduces the issue? If yes, please share the steps, and I'd take a look.

I would also like to mention that we recommend using ShareLink (or UIActivityViewController / NSSharingServicePicker for UIKit / AppKit apps) to start a new sharing and send the invitation, as demonstrated in the sample.

Best,
——
Ziqiao Chen
 Worldwide Developer Relations.

CloudKit Sharing Issue: "Unknown client: ChoreOrganizer"
 
 
Q