ios - CloudKit 可以创建共享私有(private)容器吗?

标签 ios icloud cloudkit

我正在构建一个需要在家庭成员之间同步数据的应用程序(如共享购物 list ),我正在考虑使用 CloudKit。我的理解是,我既可以拥有对所有人公开的表格,也可以拥有仅对一个个人/iCloud 帐户公开的表格。我需要的是两者的混合体。所以两个问题:

1)有没有办法在妈妈和爸爸之间私下共享数据,并且只有他们(实际上是共享的私有(private)容器)?

2)如果我在公共(public)容器中创建所有数据并简单地过滤掉谁可以看到应用程序上的内容,那么公共(public)容器数据是否对任何人都是可见/可破解的? (我问这个是因为可能涉及稍微敏感的数据)。有人可以做相当于“全选”的操作并查看所有内容吗?

非常感谢,

乔什

最佳答案

有几种方法可以实现这样的目标。在所有情况下,它归结为:

添加一个 CKReference 字段,该字段将填充您要与之共享的用户的 ID。
确保您的谓词将过滤 ID 属于您的 CKReference 字段(与您共享)
您存储 CKReference 的位置和方式取决于您想要共享的方式。

如果您只想与一个人共享,那么只需将该 CKReference 字段包含到您的主记录类型中。不要像您在问题中所说的那样将其添加到消息中。添加一个额外的字段。
如果你想分享给有限数量的人,那么你可以在你的 recordType 中添加一个字段,它是一个 CKReference 列表。
如果您想与一大群人共享,那么您可以添加一个组记录类型,该组记录类型将具有一个 groupID 和一个 groupMembers 记录类型,您将在其中存储作为该组成员的所有用户 CKReference id。
在所有情况下,解决方案都是安全的。这一切都取决于您在应用程序中定义的谓词。如果您的谓词过滤器之一不正确,则可能有人看到不适合他的东西。

EVCloudKitDao 的演示应用程序中是一个基于 CloudKit 的聊天应用程序。它使用便利库 EVCloudKitDao,但共享内容的结构类似。

关于ios - CloudKit 可以创建共享私有(private)容器吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35850665/

相关文章:

ios - 如何在 iOS 9 的 Swift 2 中调用 CloudKit 中的完成 block ?

swift - CloudKit 查询操作仅返回 300 个结果

ios11 - CKModifyBadgeOperation 在 iOS 11 中已弃用。有人知道替代方法吗?

ios - swift ios9 : Trying to start MapKit location updates without prompting for location authorization

ios - 自动布局不适用于 iOS7 和 Xcode 6

ios - CloudKit:CKFetchRecordChangesOperation、CKServerChangeToken 和 Delta 下载

ios - 在 CloudKit 中保存修改后的数据

ios - 开始3d游戏开发

ios - 在 cellForItemAtIndexPath 中的 UICollectionViewCell 中更改 UIView 的框架

swift - 如何将 AVCaptureMovieFileOutput 保存到 iCloud