今天的 iCloud + 核心数据(2015 年 7 月 10 日)

iCloud + Core Data today (10th july 2015)

几年前,Apple 发布了 Core Data 应用程序的 iCloud 同步。然后我使用新的 Apple 机制为 iPad / iPhone / MAC 发布了一个共享模型的应用程序。 事情并没有像预期的那样发展。同步机制有时不起作用。例如,在过去的几个月里,就我而言,同步很少通过我的 3 台设备顺利结束。上传对象一般工作正常。但是新的或删除的对象的下载过程通常会崩溃。 Apple 前段时间发布了一种强制设备重新下载模型的所有对象 (NSPersistentStoreRebuildFromUbiquitousContentOption) 的方法,该方法通常有效,但不是可接受的解决方案。

我的问题:是否有人完成了让 iCloud + Core Data 正常工作的工作? 运行 iOS 9 + El capitan 下的iCloud+CD 有什么经验吗?

我正在评估迁移到新 CloudKIT API 但我不喜欢在设备离线时自行管理对象上传的想法。指示模型更改的推送通知新机制是否正常工作?

谢谢

这是我这几个月一直在深入研究的问题,恐怕没有一个确定的答案。

以下是我可以根据我的经验告诉你的:

  1. 如果您像我一样不想从头开始 CloudKit,它工作可靠但需要您手动处理大部分同步工作以及将 CKRecords 转换为ManagedObjects,给 Ensembles.io 一个机会:它对我来说工作得很好,核心数据和 iCloud 之间的层在我的情况下确实有效,而 CD+iCloud 没有。 我使用的是 1.0 版本,它是开源的,支持 iCloud 作为其可能的后端之一(而 2.0 版本,付费,支持更多);几天后,我得到了与自动 de-duplication 的可靠同步(你必须提供一个 uniqueIdentifier 属性 才能让它工作,但我已经有了一些东西......)。 我还没有弄清楚的唯一问题是:有时(我会说十分之一)object 在编辑或删除时不会立即同步,但它总是会在另一台设备上同步添加、编辑或删除了另一个 object:当发生这些延迟时,没有丢失任何内容,并且已经为我处理了所有内容 "automatically",但是,我仍然希望所有内容始终立即同步。 Ensembles 也有一个很好的调试日志记录,你会喜欢来自 vanilla CD+iCloud 的东西。 如果您想尝试一下,您应该看看这些资源:

  2. 如果你绝对确定你不想要 Core Data 和 iCloud 之间的层/第三方代码(我自己也这么认为,但是当我意识到我失去了三个时我改变了主意我生命中的几个月,在 return 中一无所获),我在网上找到的 Core Data + iCloud 的实现看起来更有希望是这些:

我自己还没有尝试过这最后两个解决方案,因为我最后的攻击计划是尝试 Ensembles,如果它对我不起作用,则采用这些方法。由于 Ensembles 对我来说非常好,所以我不需要尝试它们,但它们看起来还是很可靠。

最后一个想法困扰着我:在 2015 年的 WWDC 会议中,没有提到 Core Data + iCloud。对我来说,这意味着我们选择的同步解决方案注定要失败。

希望对您有所帮助。