CloudKit 可以创建共享私有容器吗?

Can CloudKit create shared private containers?

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

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

2) 如果我在 public 容器中创建所有数据并简单地过滤掉谁可以在应用程序上看到什么,public 容器数据是否会 viewable/hackable 给任何人? (我问这个是因为可能涉及稍微敏感的数据)。有人可以做相当于 "SELECT ALL" 的操作并查看所有内容吗?

非常感谢,

乔希

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

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

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

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

回答您的问题 #1:CloudKit 共享是在 WWDC 2016 上引入的。这允许在一组已知用户之间共享私有数据库记录,这听起来像是您正在寻找的。

"What's new in CloudKit" session 中有一个很好的概述:https://developer.apple.com/videos/play/wwdc2016/226/