core-data - 将新的核心数据模式发布到 iCloud 生产

标签 core-data icloud cloudkit core-data-migration nspersistentcloudkitcontainer

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

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

此外,我正在使用 NSPersistentCloudKitContainer 将核心数据与 CloudKit 同步。

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

最佳答案

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

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

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

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

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

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

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

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

关于core-data - 将新的核心数据模式发布到 iCloud 生产,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68777137/

相关文章:

iphone - 将项目移至新项目的最佳方式

ios - 有谁知道这里发生了什么?核心数据/iCloud

ios - 应用程序将数据存储在 iCloud 中有哪些不同的方式,哪些方式可以从 iCloud 管理存储中看到

ios - 如何从 cloudkit 接收图像?

swift - 缓慢的 CloudKit 表格滚动 - 改变现有代码?

ios - cloudkit: validate a developer ID-signed application error: the archived application has entitlements that require Mac app store 分布

ios - 具有复杂谓词的 CKSubscription

ios - 我是否需要完全废弃我的应用程序才能添加核心数据?

swift - 从 Core Data 取数据只返回一个值

ios - 使核心数据线程安全