我最近使用的一个生产应用程序遇到了问题Core Data
and CloudKit
当数据在设备之间不同步时,经过一些研究,我发现私有 CloudKit 容器中的架构需要初始化;我从来没有这样做过。
我仍然不能 100% 确定的是何时运行initializeCloudKitSchema
应用程序发布到AppStore后的方法。我看到苹果建议在测试时使用它来运行它#if DEBUG
,但是...您真的想每次在 Xcode 中编译时都运行它吗?
这是我目前的理解......
- 应用发布、调用
initializeCloudKitSchema()
匹配之间的模式Core Data
and CloudKit
.
- 添加或删除和属性、调用
initializeCloudKitSchema()
更新CloudKit
schema.
- 重命名属性,调用
initializeCloudKitSchema()
更新CloudKit
架构。
ETC。
如果我上面的假设是正确的,调用initializeCloudKitSchema()
开发过程中的方法将更新模式CloudKit
在新的应用程序版本在 AppStore 中发布之前,因此会给使用以前版本的应用程序的现有用户带来问题,因为他们不会拥有最新的代码,但将使用包含新属性的最新架构。
有人可以分享他们处理架构更新的方法吗CloudKit
应用程序发布到 AppStore 后?
Code:
do {
try container.initializeCloudKitSchema()
} catch {
print(error)
}
就我而言,我什至不需要运行initializeCloudKitSchema()
方法。这是我所做的对我有用的事情。
-
我使用两台设备进行本地测试,并确保一切都按预期同步。这当然是在沙盒环境中的 Xcode 中使用测试登录帐户完成的。
-
然后我就去开发了CloudKit
容器并单击Deploy Schema Changes
.
-
最后,我使用生产/普通用户帐户直接从 App Store 在两个不同的设备上下载了该应用程序并进行了测试。一切都按预期进行。
-
Done
理论上,一旦您对架构和测试环境中的结果感到满意,您就需要通过执行上述或possibly呼叫initializeCloudKitSchema()
我没有尝试过。
旁注:看起来一旦将架构部署到 Production CloudKit 容器,您就无法再删除或重命名实体或属性。此外,每次更新核心数据架构时,您都必须执行上述操作。请记住,如果您在核心数据中添加或删除实体或属性,则必须创建新版本的核心数据容器才能执行所谓的轻迁移。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)