将 CoreData 存储在 iCloud 中
Store CoreData in iCloud
我目前正在创建一个将客户数据存储在 CoreData 数据库中的 macOs 应用程序。
现在我希望将这些数据存储在 iCloud 中。这个想法是每个用户在他的 iCloud 中都有自己的数据。如果他使用超过一台 Mac/iOS 设备,他可以访问他的数据。
所以我没有为所有客户集中存储数据,而是为每个客户单独存储数据。
我已经通读了一些关于 CloudKit 的主题,但总体上感到困惑:
- CloudKit为全局数据提供数据存储(比如我想存储客户的数据)
- 是否可以将 CoreData 存储到每个客户的 iCloud 帐户中?
- 如果可以,CloudKit 可以吗?还是我必须使用像 Ensembles 这样的第三方库? (这提到了 2016 年的一个帖子说苹果拒绝了通过 iCloud 使用 CoreData 的可能性,但现在只有像 Ensemble 这样的第 3 方库可以工作)
谁能告诉我他在这方面的经验?
谢谢
CloudKit 相当广泛。它提供了三种类型的数据库:
- Public,可以分享给大家
- 私有,特定于一个 iCloud 帐户。
- 共享,这是某人的私人数据库,但您已获得访问权限。
这为您提供了很多选择,而您询问的情况(数据在单个 iCloud 用户的设备之间共享)非常适合私有数据库。换句话说,CloudKit 很适合你。
正如其他人已经指出的那样,CloudKit 为您提供了在设备之间移动数据所需的在线存储,但它并未为此提供完整的机制。这就是像 Ensembles 这样的框架的用武之地;它们建立在 CloudKit 和其他服务之上,以处理所有涉及保持两个设备及时分离和 space 同步的簿记。 (免责声明:我是 Ensembles 框架的开发者。)
您不必使用像 Ensembles 这样的框架;你可以直接与 CloudKit 沟通,但你不应该低估开发一个与 Core Data 完全同步的应用程序需要多少时间和技能。根据您的数据集,可能会有很多陷阱。集成和类似框架可以为您做很多事情:
- 确保更改在每台设备上以相同的顺序回放
- 处理两个不同设备上的并发更改
- 删除旧数据和冗余数据
- 通过提供批处理来保持低内存使用率,这在 iOS
上非常重要
总之,你可以自己做,但我不推荐。如果你想要 Core Data 同步,我推荐 Ensembles,或者看看其他库,比如 Seam(我没有用过这个,但它似乎很受欢迎)。
如果您没有使用 Core Data,您可以查看像 Realm and Firebase 这样的选项,它可以有效地处理同步问题和客户端 API 一击。
我目前正在创建一个将客户数据存储在 CoreData 数据库中的 macOs 应用程序。
现在我希望将这些数据存储在 iCloud 中。这个想法是每个用户在他的 iCloud 中都有自己的数据。如果他使用超过一台 Mac/iOS 设备,他可以访问他的数据。
所以我没有为所有客户集中存储数据,而是为每个客户单独存储数据。
我已经通读了一些关于 CloudKit 的主题,但总体上感到困惑:
- CloudKit为全局数据提供数据存储(比如我想存储客户的数据)
- 是否可以将 CoreData 存储到每个客户的 iCloud 帐户中?
- 如果可以,CloudKit 可以吗?还是我必须使用像 Ensembles 这样的第三方库? (这提到了 2016 年的一个帖子说苹果拒绝了通过 iCloud 使用 CoreData 的可能性,但现在只有像 Ensemble 这样的第 3 方库可以工作)
谁能告诉我他在这方面的经验?
谢谢
CloudKit 相当广泛。它提供了三种类型的数据库:
- Public,可以分享给大家
- 私有,特定于一个 iCloud 帐户。
- 共享,这是某人的私人数据库,但您已获得访问权限。
这为您提供了很多选择,而您询问的情况(数据在单个 iCloud 用户的设备之间共享)非常适合私有数据库。换句话说,CloudKit 很适合你。
正如其他人已经指出的那样,CloudKit 为您提供了在设备之间移动数据所需的在线存储,但它并未为此提供完整的机制。这就是像 Ensembles 这样的框架的用武之地;它们建立在 CloudKit 和其他服务之上,以处理所有涉及保持两个设备及时分离和 space 同步的簿记。 (免责声明:我是 Ensembles 框架的开发者。)
您不必使用像 Ensembles 这样的框架;你可以直接与 CloudKit 沟通,但你不应该低估开发一个与 Core Data 完全同步的应用程序需要多少时间和技能。根据您的数据集,可能会有很多陷阱。集成和类似框架可以为您做很多事情:
- 确保更改在每台设备上以相同的顺序回放
- 处理两个不同设备上的并发更改
- 删除旧数据和冗余数据
- 通过提供批处理来保持低内存使用率,这在 iOS 上非常重要
总之,你可以自己做,但我不推荐。如果你想要 Core Data 同步,我推荐 Ensembles,或者看看其他库,比如 Seam(我没有用过这个,但它似乎很受欢迎)。
如果您没有使用 Core Data,您可以查看像 Realm and Firebase 这样的选项,它可以有效地处理同步问题和客户端 API 一击。