我目前正在创建一个 macOS 应用程序,将客户数据存储在 CoreData 数据库中。
现在我希望将该数据存储在 iCloud 中。这个想法是每个用户在他的 iCloud 中都有自己的数据。如果他使用不止一台 Mac/iOS 设备,他就可以访问他的数据。
因此,我不会为所有客户提供集中式数据存储,而是为每个客户单独存储数据。
我已经阅读了一些有关 CloudKit 的主题,但总体上对此感到困惑:
- CloudKit 为全局数据提供数据存储(例如我想存储客户的数据)
- 是否有可能将 CoreData 记录到每个客户的 iCloud 帐户?
- 如果是这样,CloudKit 可以实现这一点吗?还是我必须使用像 Ensembles 这样的第三方库? (其中提到 2016 年有一条线索称 Apple 驳回了通过 iCloud 使用 CoreData 的可能性,但现在只有像 Ensemble 这样的第 3 方库可以工作)
有人可以告诉我他在这方面的经验吗?
谢谢
最佳答案
CloudKit 相当广泛。它提供了三种类型的数据库:
- 公开,所有人都可以共享。
- 私有(private),特定于一个 iCloud 帐户。
- 共享,这是某人的私有(private)数据库,但您有权访问。
这为您提供了很多选择,并且您所询问的情况(数据在单个 iCloud 用户的设备之间共享)非常适合私有(private)数据库。换句话说,CloudKit 非常适合您。
正如其他人已经指出的那样,CloudKit 为您提供了在设备之间移动数据所需的在线存储,但它没有为此提供完整的机制。这就是 Ensembles 这样的框架的所在。进来;它们构建在 CloudKit 和其他服务之上,用于处理保持时间和空间上分离的两个设备同步所涉及的所有簿记工作。 (免责声明:我是 Ensembles 框架的开发者。)
您不必使用像 Ensembles 这样的框架;您可以直接与 CloudKit 进行通信,但您不应低估开发与 Core Data 完全同步的应用程序所需的时间和技能。根据您的数据集,可能会有很多问题。集成和类似的框架可以为您做很多事情:
- 确保更改在每台设备上以相同的顺序播放
- 处理两个不同设备上的并发更改
- 删除旧的和冗余的数据
- 通过提供批处理来保持较低的内存使用量,这在 iOS 上非常重要
总之,你可以自己做,但我不推荐这样做。如果您想要核心数据同步,我推荐 Ensembles,或者查看其他库,例如 Seam (我没有用过这个,但它似乎很受欢迎)。
如果您没有与 Core Data 结婚,您可以查看类似 Realm 的选项。和 Firebase ,一键有效解决同步问题和客户端 API。
关于swift - 将 CoreData 存储在 iCloud 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47457754/