向 iCloud 生产发布新的核心数据架构

ap1*_*123 6 core-data core-data-migration icloud cloudkit nspersistentcloudkitcontainer

我在应用程序商店中有一个应用程序,我正在进行轻量级迁移(添加新属性和新实体,而不是删除任何内容)。通过广泛的研究,我知道我需要为本地版本的数据模型添加当前核心数据模型的新版本。任何更新应用程序且仅使用本地数据的人都会自动迁移。

但是,我无法找到有关更新 iCloud 架构(来自 icloud.developer.apple.com)时发生的情况的任何信息。主要是,我担心使用旧版本应用程序并使用 iCloud 的用户。当我更新 iCloud 网站中的架构时,旧版本应用程序上的用户是否会丢失当前数据或无法同步其数据,因为他们的本地架构与 iCloud 架构不同?

另外,我正在使用NSPersistentCloudKitContainerCloudKit 来同步核心数据。

非常感谢任何帮助,因为我不想弄乱任何人的数据!

Vik*_*lov 7

不会,他们的数据仍然在 iCloud 上,他们可以继续使用您的应用程序。

当您的架构部署到生产环境时,您无法更改记录类型或删除它们,因此所有更改只会在当前架构设置之外进行,并且不会影响尚未更新应用程序的用户。

我之前也有过类似的问题,并且对更新我的应用程序架构感到非常焦虑,但一切都很顺利 - 用户没有遇到任何问题,也没有丢失任何数据。

不要忘记从应用程序初始化新方案并将更改部署到 iCloud 仪表板上的 Production。NSPersistentCloudKitContainer当您使用以下代码初始化您的 AppDelegate 时,您可以在 AppDelegate 中初始化您的方案:

let options = NSPersistentCloudKitContainerSchemaInitializationOptions()
try? container.initializeCloudKitSchema(options: options)
Run Code Online (Sandbox Code Playgroud)

之后,您可以注释掉这些行,直到核心数据模型的下一次更新。

您可以通过单击“部署架构更改”来检查所有更改是否已上传到 iCloud 仪表板中- 您将看到一个确认窗口,其中包含对将部署的模型的所有更改。也可以直接在 iCloud 仪表板中更改您的方案,但不太方便(除非您只需要添加一种记录类型)。

由于架构中的更改不会影响现有用户,因此我通常在提交应用程序进行审核之前将它们移至生产环境,但在完成与新记录类型相关的所有测试后,我不打算更改任何内容。