代码之家  ›  专栏  ›  技术社区  ›  fs_tigre

如何在应用程序发布到AppStore后更新CloudKit架构

  •  0
  • fs_tigre  · 技术社区  · 4 年前

    我最近的一个生产应用程序出现问题,该应用程序使用 Core Data 和 CloudKit 在设备之间数据不同步的情况下,经过一点研究,我发现私有CloudKit容器中的模式需要初始化;我从来没有做过。

    我仍然不能100%确定何时运行 initializeCloudKitSchema 方法。我看到苹果建议在测试时使用 #if DEBUG 但是你真的想每次用Xcode编译时都运行它吗?

    以下是我在这一点上的理解。。。

    1. 应用程序发布,呼叫 initializeCloudKitSchema() 以匹配 核心数据 和 CloudKit 。
    2. 添加或删除和属性,调用 initializeCloudKitSchema() 更新 CloudKit 架构。
    3. 重命名了属性,调用 initializeCloudKitSchema() 更新 CloudKit 架构。 等

    如果我上面的假设是正确的,请调用 initializeCloudKitSchema() 方法将在中更新模式 CloudKit 在AppStore中发布新的应用程序版本之前,因此会给使用以前版本的应用程序的现有用户带来问题,因为他们将没有最新的代码,但将使用包含新属性的最新架构。

    有人能在中分享他们处理架构更新的方法吗 CloudKit 在应用程序发布到AppStore之后?

    代码:

    do {
        try container.initializeCloudKitSchema()
    } catch {
        print(error)
    }
    
    0 回复  |  直到 4 年前
        1
  •  2
  •   fs_tigre    4 年前

    就我而言,我甚至不需要运行 initializeCloudKitSchema() 方法以下是我所做的对我有用的事情。

    1. 我用两台设备进行了本地测试,并确保一切都按预期同步。当然,这是在沙箱环境中的Xcode中使用测试登录帐户完成的。

    2. 然后我去开发 CloudKit 容器,然后单击 Deploy Schema Changes 。

    3. 最后,我使用生产/常规用户帐户直接从应用商店在两个不同的设备上下载了该应用程序,并对其进行了测试。一切都如预期。

    4. 完成

    理论上,一旦您对模式和测试环境中的结果感到满意,您就需要通过执行以上操作或 可能地 调用 initializeCloudKitSchema() 我没有尝试。

    附带说明:看起来一旦将架构部署到Production CloudKit容器,就不能再删除或重命名实体或属性。此外,每次更新核心数据模式时都必须执行上述操作。请记住,如果在核心数据中添加或删除实体或属性,则必须创建新版本的核心数据容器才能执行所谓的轻度迁移。