对于我的 iOS 笔记应用程序来说,这是最好的 iCloud 方法,其中包含文本、照片、音频和绘图笔记。我应该选择文档存储还是 CloudKit?

Posted

技术标签:

【中文标题】对于我的 iOS 笔记应用程序来说,这是最好的 iCloud 方法,其中包含文本、照片、音频和绘图笔记。我应该选择文档存储还是 CloudKit?【英文标题】:Which is the best iCloud approach for my iOS notes app with text, photo, audio & drawing notes. Should I choose document storage or CloudKit? 【发布时间】:2018-11-21 09:31:33 【问题描述】:

我正在开发一个 ios 笔记应用程序,用户可以在其中添加图像、文本、音频和绘图笔记。我想在多个设备之间实现 iCloud 同步。在 3 个选项(键值、文档存储、CloudKit)中,我应该选择哪一个?我也想实现用户之间的笔记共享(协作)。我目前正在使用核心数据作为我的数据库。

【问题讨论】:

文档存储是什么意思?存储在 iCloud Drive 中? Apple 提供以下 iCloud 存储 API - 1) 键值存储 2) iCloud 文档存储(主要用于基于文档的应用程序)3) CloudKit 存储。见链接developer.apple.com/library/archive/documentation/General/…。该链接指定了三个选项的区别。 我试用了 iCloud 的键值存储选项。它不适合寻求设备之间即时同步的应用程序,因为我们无法手动获取数据,因此我不推荐该选项。如果您不介意用户可以直接访问文件,iCloud Drive(用户可见的文档存储)可能是合适的。但是,对于许多文件,这可能会变得非常混乱。从用户体验的角度来看,我也不建议这样做。对 CloudKit 不以为然,但它是唯一的选择。或者:使用您自己的服务器和数据库。这是您拥有的最灵活的选择,但需要付出最大的努力。 非常感谢您的回复!如果我使用 iCloud Drive(带有 iCloud 的文档存储),如果用户离线或退出 iCloud 帐户,事情将如何运作? 不客气。对此我不确定。您必须自己尝试或进行更多研究。对不起。 【参考方案1】:

key-value 存储是不可能的,因为对于您的目标来说太有限了,仅当您需要将文档作为一个整体来处理和存储时,才建议使用文档存储。由于您已经将CoreData 用于本地存储,因此只有将常规CloudKit 用于云存储和共享才有意义。

CoreDataCloudKit 的同步可能很困难。我个人使用的是 RxCoreDataRxCloudKit 库的组合,它们在同步方面提供了一些缓解,也提供了一些语法糖。

提前说明唯一性约束:对于CoreData,您可以根据键或所有值的散列来定义它们,对于CloudKit,只有CKRecord 键才有可能(也是必需的) , 尽我所知。所以最好从一开始就照顾好它。

【讨论】:

感谢您的回复!这很有帮助。您能否还介绍一下使用文件协调(NSFileCoordinator)的 iCloud 文档存储方法?通过文件协调,可以在很大程度上自动处理冲突,而在 CloudKit 中,所有冲突都需要手动处理。【参考方案2】:

恕我直言,CloudKit 是唯一的意见 :)

我有一个名为 marknote 的笔记应用程序。一开始我使用 iCloud 文档存储。它有时工作,但不稳定。最糟糕的是,何时以及是否可以同步您的文档是您无法控制的,而是依赖于 Apple 的守护程序服务。当您的文档有点大(例如几兆字节)时,情况会变得更糟。 所以在奋斗了一段时间后,我改用了CloudKit。正如@maxim-volgin 已经指出的那样,CloudKit 同步的实现很困难,但它是可靠的。切换到 CloudKit 后,所有的头痛都消失了。

【讨论】:

同步问题是否已排序,文档是否同步完美?

以上是关于对于我的 iOS 笔记应用程序来说,这是最好的 iCloud 方法,其中包含文本、照片、音频和绘图笔记。我应该选择文档存储还是 CloudKit?的主要内容,如果未能解决你的问题,请参考以下文章

这可能是迄今最好的正则表达式学习笔记

Linux磁盘IO调度算法

对于使用 Web 服务的序列密钥激活来说,这是一个好的概念吗?

SVM学习笔记-线性支撑向量机

Java程序员:这是一个最好的时代,也是一个最坏的时代

您的 Xcode 版本可能对于您的 iOS 版本来说太旧了