【问题标题】:Releasing new Core Data Schema to iCloud production向 iCloud 生产发布新的 Core Data Schema
【发布时间】:2021-10-16 23:43:27
【问题描述】:

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

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

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

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

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

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

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

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

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

    【讨论】:

    • 太棒了!只是为了确保我理解 100%:1)通过“从应用程序初始化你的新方案”,只是制作核心数据模型的新版本(转到“编辑器”->“添加模型版本......” ),还是我需要做另一个步骤? 2) 当我将应用程序提交到 App Store Connect 时,我应该只将新的更改部署到生产环境吗?非常感谢您的帮助!
    • 我已经更新了答案,因为第 1 部分需要一些代码
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多