将CoreData存储在iCloud中

时间:2017-11-23 14:27:31

标签: swift core-data icloud cloudkit ensembles

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

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

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

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

  • CloudKit为全球数据提供数据存储(例如,我想存储客户数据)
  • 是否有可能将CoreData发布到每个客户的iCloud帐户?
  • 如果可以通过CloudKit实现这一点,还是必须使用像Ensembles这样的第三方库? (那里提到有一个2016年的主题,说苹果驳回了通过iCloud使用CoreData的可能性,但只有像Ensemble这样的第三方库才会工作)

有人可以告诉我他的经历吗?

谢谢

1 个答案:

答案 0 :(得分:3)

CloudKit非常广泛。它提供三种类型的数据库:

  1. 公开,每个人都可以共享。
  2. 私有,特定于一个iCloud帐户。
  3. 共享,这是某人的私人数据库,但您已获得访问权限。
  4. 这为您提供了大量选项,您询问的情况是,单个iCloud用户的设备之间共享数据,非常适合私有数据库。换句话说,CloudKit可以很好地为您服务。

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

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

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

    简而言之,你可以自己做,但我不推荐它。如果你想要核心数据同步,我推荐Ensembles,或者看看Seam之类的其他库(我没有使用它,但它似乎很受欢迎)。

    如果您未与Core Data结婚,则可以查看RealmFirebase等选项,这些选项可以有效地处理同步问题和客户端API。