第一次在这里发帖,急需帮助。
我在开发使用 CloudKit Public DB 的应用程序时遇到了问题。我对此比较陌生,我可能做错了什么。我已经提炼了这个问题,只使用当您使用 iCloud 应用程序创建新的 Core Data 时出现的模板应用程序,并详细说明了以下步骤。可能是我在做一些愚蠢的事情。
这在 iOS 14 中有效,一旦 iOS 15 和 XCode 13 出现,它就停止了。我正在使用 SwiftUI。
简而言之,同步到公共数据库仅适用于应用程序的首次运行。停止和重新启动应用程序似乎会引发错误并导致镜像委托失败。
感谢所有帮助/建议。以下步骤重新创建问题:
使用 ICloud 中的核心数据和主机创建应用程序 - 界面是 SWiftUI
在项目签名和功能中添加 iCloud 和后台模式
在新出现的 iCloud 部分启用 Cloudkit 并选择或创建一个容器
在新出现的背景模式部分启用远程通知
在 persistence.swift 添加:
导入 CloudKit
- 仍然在 persistence.swift 添加以下内容:
guard let description = container.persistentStoreDescriptions.first else
{
fatalError("Something bad happened")
}
description.cloudKitContainerOptions?.databaseScope = .public
我在以下行之前添加了这个:
container.loadPersistentStores(completionHandler: { (storeDescription, error) in
在模式模型中,突出显示默认配置并在数据模型检查器中检查“使用 cloudkit”是否被选中
运行应用程序并点击 + 几次以添加一些记录。
检查在步骤 3 中选择/创建的容器中的公共数据库中的 Cloudkit Dashboard。您需要在 __recordID 和 __modTime 上创建索引才能查看记录。
您应该会看到大约一分钟后的记录都出现在公共数据库中。Xcode 的控制台窗口中不会报告任何错误。
停止并重新启动应用程序。
这次单击加号按钮时,记录不会上传到公共数据库,控制台会报告类似于以下的错误消息:
CoreData:CloudKit:CoreData + CloudKit:-NSCloudKitMirroringDelegate _finishedRequest:withResult::完成请求:<NSCloudKitMirroringExportRequest:0x283666bb0> 9F190C45-7713-4ACE-96DB-867D99FF62ED 结果:<NSCloudKitMirroringResult:0x2838b9e20>成功:0 madeChanges:0错误:错误域=NSCocoaErrorDomain Code=134406 "请求 '9F190C45-7713-4ACE-96DB-867D99FF62ED' 被中止,因为镜像委托由于错误而从未成功初始化:<CKError 0x2836aba50: "部分失败" (2/1011); "修改一些失败记录区域”;uuid = 3F399390-1F10-4198-BBBF-F3BD76E99591;容器 ID =“iCloud.askeit.com.WTBA”;部分错误:{ com.apple.coredata.cloudkit.zone: defaultOwner= <CKError 0x2836a5290:“服务器拒绝请求”(15/2027);server message = "公共数据库中不允许自定义区域"; 操作 = 943153DA6AC169A1;uuid = XXXXXXXXXXXXXXXXXXXXXXXX> }>" UserInfo={NSLocalizedFailureReason=Request '9F190C45-7713-4ACE-96DB-867D99FF62ED' 被中止,因为镜像委托由于错误而从未成功初始化:<CKError 0x2836aba50: "Partial Failure" (2/1011) ; "修改部分记录区失败"; uuid = 3F399390-1F10-4198-BBBF-F3BD76E99591; 容器ID = "iCloud.askeit.com.WTBA"; 部分错误: { com.apple.coredata.cloudkit.zone: defaultOwner = <CKError 0x2836a5290:“服务器拒绝请求”(15/2027);服务器消息=“公共数据库中不允许自定义区域”;操作 = 943153DA6AC169A1;uuid = XXXXXXXXXXXXXXXXXXXXXXXXX> }>}
所以基本上:
a)我是在做一些愚蠢的事情还是 b)代码在其他地方工作 - 所以必须是我的设置或 c)这是意外行为,我将不得不等待 Apple 对其进行排序。
预先感谢您提供的所有帮助。
干杯,
伊恩