Che*_*eng 5 core-data ios icloud cloudkit
我有一个可用的 CoreData 应用程序(本地存储)。
我想让它可以与 iCloudKit 一起使用。
从 迁移NSPersistentContainer
到NSPersistentCloudKitContainer
(CoreDataStack.swift,第 21 行)后,我希望能够在接下来的测试中取得成功。
但是,我陷入了步骤 2。经过多次尝试,我仍然收到以下与 iCloud 相关的错误。
这是完整的错误日志。
CoreData: debug: CoreData+CloudKit: -[PFCloudKitOptionsValidator validateOptions:andStoreOptions:error:](36): Validating options: <NSCloudKitMirroringDelegateOptions: 0x600001c0d050> containerIdentifier:iCloud.com.yocto.xxx databaseScope:Private ckAssetThresholdBytes:<null> operationMemoryThresholdBytes:<null> useEncryptedStorage:NO useDeviceToDeviceEncryption:NO automaticallyDownloadFileBackedFutures:NO automaticallyScheduleImportAndExportOperations:YES skipCloudKitSetup:NO preserveLegacyRecordMetadataBehavior:NO useDaemon:YES apsConnectionMachServiceName:<null> containerProvider:<PFCloudKitContainerProvider: 0x600002c08770> storeMonitorProvider:<PFCloudKitStoreMonitorProvider: 0x600002c08730> metricsClient:<PFCloudKitMetricsClient: 0x600002c087d0> metadataPurger:<PFCloudKitMetadataPurger: 0x600002c08790> scheduler:<null> notificationListener:<null> containerOptions:<null> defaultOperationConfiguration:<null> progressProvider:<NSPersistentCloudKitContainer: 0x600003b00b00> test_useLegacySavePolicy:YES archivingUtilities:<PFCloudKitArchivingUtilities: 0x600002c08800>
storeOptions: {
NSInferMappingModelAutomaticallyOption = 1;
NSMigratePersistentStoresAutomaticallyOption = 1;
NSPersistentCloudKitContainerOptionsKey = "<NSPersistentCloudKitContainerOptions: 0x60000204f0f0>";
NSPersistentHistoryTrackingKey = 1;
NSPersistentStoreMirroringOptionsKey = {
NSPersistentStoreMirroringDelegateOptionKey = "<NSCloudKitMirroringDelegate: 0x600001504a90>";
};
}
CoreData: debug: CoreData+CloudKit: -[NSCloudKitMirroringDelegate observeChangesForStore:inPersistentStoreCoordinator:](385): <NSCloudKitMirroringDelegate: 0x600001504a90>: Observing store: <NSSQLCore: 0x131e151a0> (URL: file:///Users/yccheok/Library/Developer/CoreSimulator/Devices/F1F59F93-1800-4D43-AAE7-FD942D440B10/data/Containers/Data/Application/54000F75-F12A-4FF2-A2A1-545ACE41A367/Library/Application%20Support/xxx.sqlite)
CoreData: CloudKit: CoreData+CloudKit: -[NSCloudKitMirroringDelegate _setUpCloudKitIntegration](530): <NSCloudKitMirroringDelegate: 0x600001504a90>: Successfully enqueued setup request.
CoreData: CloudKit: CoreData+CloudKit: -[NSCloudKitMirroringDelegate checkAndExecuteNextRequest](2928): <NSCloudKitMirroringDelegate: 0x600001504a90>: Checking for pending requests.
CoreData: CloudKit: CoreData+CloudKit: -[NSCloudKitMirroringDelegate checkAndExecuteNextRequest]_block_invoke(2941): <NSCloudKitMirroringDelegate: 0x600001504a90>: Executing: <NSCloudKitMirroringDelegateSetupRequest: 0x600003b51180> 428D83F5-B1E4-4BC6-B411-A9D0583983F0
success write Optional("title 0"), Optional("body 0")
2022-04-10 21:40:58.519262+0800 xxx[2918:70575] [error] error: CoreData+CloudKit: -[NSCloudKitMirroringDelegate _performSetupRequest:]_block_invoke(1106): <NSCloudKitMirroringDelegate: 0x600001504a90>: Failed to set up CloudKit integration for store: <NSSQLCore: 0x131e151a0> (URL: file:///Users/yccheok/Library/Developer/CoreSimulator/Devices/F1F59F93-1800-4D43-AAE7-FD942D440B10/data/Containers/Data/Application/54000F75-F12A-4FF2-A2A1-545ACE41A367/Library/Application%20Support/xxx.sqlite)
<CKError 0x6000020516e0: "Partial Failure" (2/1011); "Failed to modify some record zones"; uuid = 340ED591-A422-4E70-8BC1-EC300A8C34C2; container ID = "iCloud.com.yocto.xxx"; partial errors: {
com.apple.coredata.cloudkit.zone:__defaultOwner__ = <CKError 0x600002051b60: "Permission Failure" (10/2007); server message = "Invalid bundle ID for container"; op = 94EEBD82778D22EC; uuid = 340ED591-A422-4E70-8BC1-EC300A8C34C2>
}>
CoreData: error: CoreData+CloudKit: -[NSCloudKitMirroringDelegate _performSetupRequest:]_block_invoke(1106): <NSCloudKitMirroringDelegate: 0x600001504a90>: Failed to set up CloudKit integration for store: <NSSQLCore: 0x131e151a0> (URL: file:///Users/yccheok/Library/Developer/CoreSimulator/Devices/F1F59F93-1800-4D43-AAE7-FD942D440B10/data/Containers/Data/Application/54000F75-F12A-4FF2-A2A1-545ACE41A367/Library/Application%20Support/xxx.sqlite)
<CKError 0x6000020516e0: "Partial Failure" (2/1011); "Failed to modify some record zones"; uuid = 340ED591-A422-4E70-8BC1-EC300A8C34C2; container ID = "iCloud.com.yocto.xxx"; partial errors: {
com.apple.coredata.cloudkit.zone:__defaultOwner__ = <CKError 0x600002051b60: "Permission Failure" (10/2007); server message = "Invalid bundle ID for container"; op = 94EEBD82778D22EC; uuid = 340ED591-A422-4E70-8BC1-EC300A8C34C2>
}>
2022-04-10 21:40:58.519485+0800 xxx[2918:70575] [error] error: CoreData+CloudKit: -[NSCloudKitMirroringDelegate recoverFromError:](2115): <NSCloudKitMirroringDelegate: 0x600001504a90> - Attempting recovery from error: <CKError 0x6000020516e0: "Partial Failure" (2/1011); "Failed to modify some record zones"; uuid = 340ED591-A422-4E70-8BC1-EC300A8C34C2; container ID = "iCloud.com.yocto.xxx"; partial errors: {
com.apple.coredata.cloudkit.zone:__defaultOwner__ = <CKError 0x600002051b60: "Permission Failure" (10/2007); server message = "Invalid bundle ID for container"; op = 94EEBD82778D22EC; uuid = 340ED591-A422-4E70-8BC1-EC300A8C34C2>
}>
CoreData: error: CoreData+CloudKit: -[NSCloudKitMirroringDelegate recoverFromError:](2115): <NSCloudKitMirroringDelegate: 0x600001504a90> - Attempting recovery from error: <CKError 0x6000020516e0: "Partial Failure" (2/1011); "Failed to modify some record zones"; uuid = 340ED591-A422-4E70-8BC1-EC300A8C34C2; container ID = "iCloud.com.yocto.xxx"; partial errors: {
com.apple.coredata.cloudkit.zone:__defaultOwner__ = <CKError 0x600002051b60: "Permission Failure" (10/2007); server message = "Invalid bundle ID for container"; op = 94EEBD82778D22EC; uuid = 340ED591-A422-4E70-8BC1-EC300A8C34C2>
}>
2022-04-10 21:40:58.528209+0800 xxx[2918:70575] [error] error: CoreData+CloudKit: -[NSCloudKitMirroringDelegate _recoverFromPartialError:forStore:inMonitor:]_block_invoke(2464): <NSCloudKitMirroringDelegate: 0x600001504a90>: Found unknown error as part of a partial failure: <CKError 0x600002051b60: "Permission Failure" (10/2007); server message = "Invalid bundle ID for container"; op = 94EEBD82778D22EC; uuid = 340ED591-A422-4E70-8BC1-EC300A8C34C2; container ID = "iCloud.com.yocto.xxx">
CoreData: error: CoreData+CloudKit: -[NSCloudKitMirroringDelegate _recoverFromPartialError:forStore:inMonitor:]_block_invoke(2464): <NSCloudKitMirroringDelegate: 0x600001504a90>: Found unknown error as part of a partial failure: <CKError 0x600002051b60: "Permission Failure" (10/2007); server message = "Invalid bundle ID for container"; op = 94EEBD82778D22EC; uuid = 340ED591-A422-4E70-8BC1-EC300A8C34C2; container ID = "iCloud.com.yocto.xxx">
CoreData: CloudKit: CoreData+CloudKit: -[NSCloudKitMirroringDelegate _finishedRequest:withResult:](2959): Finished request: <NSCloudKitMirroringDelegateSetupRequest: 0x600003b51180> 428D83F5-B1E4-4BC6-B411-A9D0583983F0 with result: <NSCloudKitMirroringResult: 0x600002e6db00> success: 0 madeChanges: 0 error: <CKError 0x6000020516e0: "Partial Failure" (2/1011); "Failed to modify some record zones"; uuid = 340ED591-A422-4E70-8BC1-EC300A8C34C2; container ID = "iCloud.com.yocto.xxx"; partial errors: {
com.apple.coredata.cloudkit.zone:__defaultOwner__ = <CKError 0x600002051b60: "Permission Failure" (10/2007); server message = "Invalid bundle ID for container"; op = 94EEBD82778D22EC; uuid = 340ED591-A422-4E70-8BC1-EC300A8C34C2>
}>
CoreData: CloudKit: CoreData+CloudKit: -[NSCloudKitMirroringDelegate checkAndExecuteNextRequest](2928): <NSCloudKitMirroringDelegate: 0x600001504a90>: Checking for pending requests.
CoreData: CloudKit: CoreData+CloudKit: -[NSCloudKitMirroringDelegate checkAndExecuteNextRequest]_block_invoke(2944): <NSCloudKitMirroringDelegate: 0x600001504a90>: No more requests to execute.
Run Code Online (Sandbox Code Playgroud)
以下错误引起了我的注意
容器的捆绑包 ID 无效
我一步步检查,以确保我做对了。
com.yocto.xxx
iCloud.com.yocto.xxx
iCloud.com.yocto.xxx
是在 iCloudKit 控制台中创建的。Todo
有两列 - https://github.com/yccheok/xxx/blob/main/xxx/xxx.xcdatamodeld/xxx.xcdatamodel/contents这是我用于此测试的 Xcode
https://github.com/yccheok/xxx
中间出了什么问题,导致我不断收到容器的无效捆绑包 ID?我还可以尝试哪些其他步骤?
这就是我解决问题的方法。
我指的是这个答案 - CloudKit - “容器的捆绑包 ID 无效”
我做错的是
我从https://developer.apple.com/account/resources/identifiers/list中删除了我的应用程序 ID
我通过 Xcode 重新运行应用程序,并期望应用程序 ID 会自动创建。但事实并非如此。即使我从 Xcode 运行应用程序,应用程序 ID 也不会自动创建。
所以,我做对的事情是:
我使用新的应用程序 ID 创建一个新项目,并使用新的 iCloud 容器 ID。
我第一次启动该应用程序。
在https://developer.apple.com/account/resources/identifiers/list中,我单击应用程序 ID,如以下屏幕截图所示。
我取消选中并勾选 iCloud 复选框,单击Save右上角的按钮。
现在,我可以观察到数据正在保存到 iCloud。我已通过卸载应用程序、安装应用程序并执行读取进行验证。读取旧数据没有任何问题。
归档时间: |
|
查看次数: |
1119 次 |
最近记录: |