首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >生产中的NSPersistentCloudKitContainer

生产中的NSPersistentCloudKitContainer
EN

Stack Overflow用户
提问于 2019-10-03 20:12:52
回答 2查看 1.6K关注 0票数 6

我最近发布了一个使用NSPersistentCloudKitContainer的应用程序。在开发中,我的数据库按预期跨设备同步,但在生产中,我的数据库根本不同步。一旦我调试了情况,我意识到我必须将iCloud模式发布到生产环境中。但即使这样做了,我的应用程序也不能在生产中的设备之间同步。

有没有人经历过这种情况?要让NSPersistentCloudKitContainer在生产环境中工作,我还需要做些什么吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-11-08 06:04:16

我想我已经弄清楚是怎么回事了,因为我也有同样的问题,尽管我遵循了苹果NSPersistentCloudKitContainer文档中的所有步骤。

为了确保您的核心数据实体都在开发环境中正确创建,在部署到生产环境之前,他们建议在您的NSPersistentCloudKitContainer上运行(一次) .shouldInitializeSchema

问题是,这已经有几个月没有生效了(参见下面的更多...)因此,另一种方法--我也是这样做的--是动态创建我的所有数据,保存到核心数据,核心数据通过NSPersistentCloudKitContainer在开发环境中创建模式。然后,当它在我的设备上运行良好时,我将其部署到生产环境中。

虽然它对我的数据工作得很好,但对于现实世界中使用我的App Store版本的应用程序的任何用户来说,它都不起作用。这真让人摸不着头脑。

事实证明,在我的核心数据模型的CloudKit模式中的一个或两个自定义类型中,有一些缺少的自定义字段-这些属性存在于我的模型中,但我不再使用(其中一个只是一个空字符串,我从未使用过)。

问题是,NSPersistentCloudKitContainer不喜欢这样,即使NSManagedObject具有您不使用的属性,这些属性也必须存在于CloudKit模式中才能正常工作。似乎需要一个自定义字段来精确匹配Core数据模型中的每个属性。

它在我的设备上工作的原因可能与这样一个事实有关,即在过去的某个时候,这些自定义类型和自定义字段在重置之前都存在于开发环境中,在这个阶段,我的设备已经在iCloud中为它们准备好了一切。

自定义类型(如您的CloudKit仪表板中所示)需要具有与相应实体的每个核心数据属性匹配的自定义字段,以及每个“一对一”关系的自定义字段(我也缺少其中一个)。它们都是由NSPersistentCloudKitContainer自动生成的以CD_开头的字段。

这种“多对多”的关系似乎存储在其他地方。

在苹果的帮助下,他们建议运行.shouldInitializeSchema替代initializeCloudKitSchema(options:) (还没有出现在他们的文档中!)在容器上(只需一次)来填充所有的间隙。

当我这样做时,我注意到它实际上根本没有添加任何缺少的自定义字段,当我“部署到生产环境”时,没有任何更改需要进行,当它仍然在我的设备上工作时,生产设备不工作。在进一步的分析中,遗漏的字段没有被添加...

因此,取而代之的是,我确保向我的测试设备中写入了所有这些缺失属性的数据&“一对一”关系,然后重试。

我可以看到,它们现在都出现在我部署到生产环境中的Development Schema中。更改中列出了所有缺少的自定义类型和自定义字段。

它现在对我的用户都有效!

这是一个多么复杂的过程。一部分是我的错,一部分是苹果的错。

票数 16
EN

Stack Overflow用户

发布于 2019-10-26 23:04:45

我也遇到了同样的问题,在我的例子中,问题是我只激活了"Debug“部分中的功能,因为它是在选择"Signing & Capabilities”时默认打开的选项卡。

仔细检查您是否也在"Release“部分激活了所需的功能。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58218874

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档