自Xcode 13 / iOS15以来获得"Custom zones are not allowed in public DB"



这里的第一个帖子,迫切需要帮助。

我在开发一个使用CloudKit公共数据库的应用程序时遇到了一个问题。我对此还比较陌生,我可能做错了什么。我已经提炼出这个问题,只使用iCloud应用程序创建新核心数据时附带的模板应用程序,并详细介绍了以下步骤。可能是我在做傻事。

这在iOS 14中运行,iOS 15和XCode 13一出现,它就停止了。我正在使用SwiftUI。

简而言之,同步到公共数据库只适用于应用程序的首次运行。停止并重新启动应用程序似乎会引发错误,并导致镜像代理失败。

感谢所有协助/建议。以下步骤重新创建问题:

  1. 在ICloud中使用核心数据和主机创建应用程序-界面为SWiftUI

  2. 在项目签署和功能添加iCloud和背景模式

  3. 在新出现的iCloud部分启用Cloudkit并选择或创建容器

  4. 在新出现的后台模式部分启用远程通知

  5. 在持久性中。swift添加:

导入CloudKit

  1. 仍然存在。swift添加以下内容:
guard let description = container.persistentStoreDescriptions.first else
{
fatalError("Something bad happened")
}
description.cloudKitContainerOptions?.databaseScope = .public

我在下面的行之前添加了这个:

container.loadPersistentStores(completionHandler: { (storeDescription, error) in
  1. 在模式模型中,突出显示默认配置并检查数据模型检查器;使用cloudkit";检查

  2. 运行应用程序并点击+几次以添加一些记录。

  3. 在步骤3中选择/创建的容器中的公共数据库中检查Cloudkit Dashboard。您需要在__recordID和__modTime上创建索引才能查看记录。

您应该看到大约一分钟后的记录都出现在公共数据库中。Xcode的控制台窗口中未报告任何错误。

  1. 停止并重新启动应用程序。

  2. 这一次,当点击加号按钮时,记录不会上传到公共数据库,控制台会报告类似于以下的错误消息:

CoreData:CloudKit:CoreData+CloudKit:-NSCloudKitMirroringDelegate_finishedRequest:withResult::Finished request:<NSCloudKitMirroringExport请求:0x283666bb0>9F190C45-7713-4ACE-96DB-867D99FF62ED,结果:<NSCloudKitMirroringResult:0x2838b9e20>成功:0作出更改:0错误:错误域=NSCocoaErrorDomain代码=134406";请求"9F190C45-7713-4ACE-96DB-867D99FF62ED"已中止,因为由于以下错误,镜像委托从未成功初始化:<CKError 0x2836aba50:";部分失效";(2/1011)"未能修改某些记录区域";;uuid=3F399390-1F10-4198-BBBF-F3BD76E9591;容器ID=";iCloud.askeit.com.WTBA";;部分错误:{com.apple.coredata.cloudkit.zone:defaultOwner=<CK错误0x2836a5290:";服务器拒绝请求";(15/2027);服务器消息=";在公共数据库"中不允许使用自定义区域;;op=943153DA6AC169A1;uuid=XXXXXXXXXXXXXXXXXXXXXXXXXXXX>}>quot;UserInfo={NSLocalizedFailureReason=请求"9F190C45-7713-4ACE-96DB-867D99FF62ED"已中止,因为镜像代理从未成功初始化,原因是出现以下错误:<CKError 0x2836aba50:"部分失败"(2/1011);"无法修改某些记录区域";uuid=3F399390-1F10-4198-BBBF-F3BD76E999591;容器ID="iCloud.askeit.com.WTBA";部分错误:{com.apple.coredata.cloudkit.zone:defaultOwner=<CK错误0x2836a5290:";服务器拒绝请求";(15/2027);服务器消息=";在公共数据库"中不允许使用自定义区域;;op=943153DA6AC169A1;uuid=XXXXXXXXXXXXXXXXXXXXXXXXXXXX>}>}

所以基本上:

a) 我在做傻事吗或b) 代码在其他地方工作-所以我的设置一定有问题或c) 这是一种意想不到的行为,我将不得不等待苹果公司来解决。

提前感谢您提供的一切帮助。

干杯,

Ian

对于那些偶然发现这个问题的人来说,这个问题现在似乎在iOS 15.1中得到了解决。我首先安装了Xcode 13.1,这并没有解决问题,但当我升级我的测试设备时,它起了作用。无论是iOS 15.1还是两者的结合,我都不能确定。

后续行动。我仍然不相信这是100%正确的。我的代码再次正常工作,然后似乎恶化了,然后完全停止了工作。我已经能够让它重新开始。它似乎链接到Cloudkit模式。仅对模式进行初始化似乎是不够的。我很确定这是以前的事,因为我会进行初始化,然后手动创建索引来查看我的记录。若要使此操作再次生效,我必须预先创建索引,因为我收到错误消息,称镜像委托由于错误而未成功初始化"无效参数"(2015年12月);服务器消息=";字段"recordName"未标记为可查询";所以recordID需要一个可查询的索引,modTime需要可查询和可排序。我还注意到Cloudkit Dashboard中似乎有一个小故障,如果您同时添加modTime的两个索引,其中一个将不会出现。所以一定要检查一下。如果这种情况持续困扰我一个多月,我会添加一个更新。如果有人发现我犯了一个新手错误,请留言告诉我。

相关内容

最新更新