1

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

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

另外,我正在使用一个NSPersistentCloudKitContainer用于将核心数据与 CloudKit 同步。

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

4

1 回答 1

2

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

当您的 Schema 部署到生产环境时,您无法更改 Records 的类型或删除它们,因此您的所有更改将仅在当前 Schema 设置之外完成,并且不会影响尚未更新应用程序的用户。

我之前有一个类似的问题,并且非常担心更新我的应用程序架构,但一切都很顺利 - 用户没有问题,也没有数据丢失。

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

let options = NSPersistentCloudKitContainerSchemaInitializationOptions()
try? container.initializeCloudKitSchema(options: options)

之后,您可以注释掉这些行,直到 Core Data 模型的下一次更新。

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

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

于 2021-08-14T11:31:17.600 回答