2

我目前正在创建一个将客户数据存储在 CoreData 数据库中的 macOS 应用程序。

现在我希望将这些数据存储在 iCloud 中。这个想法是每个用户在他的 iCloud 中都有自己的数据。如果他使用不止一台 Mac/iOS 设备,他可以访问他的数据。

所以我不是为所有客户集中数据存储,而是为每个客户分别存储数据。

我已经阅读了一些有关 CloudKit 的主题,但总体上对此感到困惑:

  • CloudKit 为全局数据提供数据存储(例如我想存储客户的数据)
  • 是否有可能将 CoreData 记录到每个客户的 iCloud 帐户?
  • 如果是这样,CloudKit 可以做到这一点,还是我必须使用像 Ensembles 这样的第三方库?(这提到有一个 2016 年的帖子说 Apple 拒绝了通过 iCloud 使用 CoreData 的可能性,但现在只有像 Ensemble 这样的第 3 方库可以工作)

有人可以给我他在这方面的经验吗?

谢谢

4

1 回答 1

3

CloudKit 相当广泛。它提供了三种类型的数据库:

  1. 公开的,每个人都可以共享。
  2. Private,特定于一个 iCloud 帐户。
  3. Shared,这是某人的私人数据库,但您已获得访问权限。

这为您提供了很多选择,并且您所询问的情况(在单个 iCloud 用户的设备之间共享数据的位置)非常适合私人数据库。换句话说,CloudKit 非常适合您。

正如其他人已经说过的,CloudKit 为您提供了在设备之间移动数据所需的在线存储,但它没有为此提供完整的机制。这就是像Ensembles这样的框架的用武之地;它们建立在 CloudKit 和其他服务之上,以处理使两台设备在时间和空间上保持同步所涉及的所有簿记。(免责声明:我是 Ensembles 框架的开发者。)

您不必使用像 Ensembles 这样的框架;您可以直接与 CloudKit 通信,但您不应低估开发与 Core Data 完全同步的应用程序需要多少时间和技能。根据您的数据集,可能会有很多问题。集成和类似的框架为您做了很多:

  • 确保在每台设备上以相同的顺序播放更改
  • 处理两个不同设备上的并发更改
  • 删除旧数据和冗余数据
  • 通过提供批处理来保持低内存使用率,这在 iOS 上非常重要

简而言之,你可以自己做,但我不推荐它。如果你想要 Core Data 同步,我推荐 Ensembles,或者看看像Seam这样的其他库(我没有使用过这个,但它似乎很受欢迎)。

如果你没有使用 Core Data,你可以看看RealmFirebase之类的选项,它们可以一键有效地处理同步问题和客户端 API。

于 2017-11-24T07:22:17.647 回答