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



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

我仍然不是100%确定的部分是什么时候运行initializeCloudKitSchema方法后,应用程序已发布到AppStore。我看到苹果建议在测试时使用#if DEBUG运行它,但是…你真的想每次在Xcode中编译时都运行它吗?

我是这样理解的……

  1. 应用发布,调用initializeCloudKitSchema()匹配Core DataCloudKit之间的schema
  2. 添加或删除和属性,调用initializeCloudKitSchema()更新CloudKit模式。
  3. 重命名属性,调用initializeCloudKitSchema()来更新CloudKit模式。等。

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

有人可以分享他们的方法处理模式更新后,CloudKit的应用程序已经发布到AppStore?

代码:

do {
try container.initializeCloudKitSchema()
} catch {
print(error)
}

在我的例子中,我甚至不需要运行initializeCloudKitSchema()方法。以下是我所做的对我有用的事情。

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

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

  3. 最后,我使用生产/普通用户帐户直接从两个不同的设备上的app Store下载了这款应用并进行了测试。

  4. 完成

理论上,一旦您对模式和测试环境中的结果感到满意,您就需要将模式部署到Production CloudKit容器中,方法是执行上述或者调用initializeCloudKitSchema()(我没有尝试过)。

旁注:看起来一旦你将模式部署到生产CloudKit容器中,你就不能再删除或重命名实体或属性了。此外,每次更新Core Data模式时都必须执行上述操作。请记住,如果您在Core Data中添加或删除实体或属性,您必须创建一个新版本的Core Data容器来执行所谓的轻迁移。

最新更新