使用 CloudKit 设计 App

CloudKit 专为实现易管理性、灵活性和强大功能而设计。通过将 App 整理到容器中,CloudKit 可以确保每个 App 的孤立性,保证其数据不会与其他 App 混合在一起。借助专用的数据库和区域,你还可以按访问类型或功能来轻松地分隔 App 信息。加上高效的同步和共享功能,CloudKit 全面丰富的功能集定能助你更轻松地开发强大的云 App。

容器

CloudKit 使用称为容器的逻辑空间来整理数据。单个 CloudKit App 通常使用单个容器来存储所有生产数据,不过你可以将单个 App 配置为使用多个容器,多个 App 也可以使用单个容器。每个容器都代表 App 在 CloudKit 中的储存空间,用于确保 App 数据的孤立性。你可以在 App 的容器中管理 App 的架构。

数据库

容器中可以包含不同类型的数据库:公共、私有和共享数据库。每个容器都有一个公共数据库,供 App 的所有用户共享。此外,各个 App 用户可以独占访问自己的私有数据库以及使他们能够与其他用户共享信息的共享数据库 (见下文)。

通过有选择地使用这些数据库,你和你的用户可以控制数据访问,而无需实现复杂的访问控制列表 (ACL) 模型。例如,如果你想要向大量 App 用户公开数据,可以轻松配置 App 的公共数据库来提供此功能。如果用户希望确保数据只有自己可使用,则可以在私有数据库中发布数据。此外,要与其他用户明确共享部分数据,他们可以邀请特定用户查看和编辑共享数据库中的相应数据。

区域

CloudKit 的数据库包含区域,它们是分隔数据记录的逻辑空间。一个公共数据库只有一个区域,称为默认区域。每个私有数据库也都有一个默认区域,但是该数据库还可以分为多个自定区域。共享数据库没有默认区域 (见下文)。

将记录存储到公共数据库或私有数据库时,记录默认情况下会保存到该数据库的默认区域中。但是,你可以选择将记录保存在私有数据库的自定区域中。如果要将相关记录组合在一起以实现特定目的,自定区域特别有用。例如,如果你的私有数据库中具有不同类型的数据,而这些数据需要在设备上以不同的频率更新,则你可以根据类型将不同的数据集分组到不同的区域中,并在按区域同步所有更改。这样一来,你就无需一次同步所有区域,从而避免不必要的数据传输。

环境

CloudKit 为你的项目和 App 提供了单独的开发和生产环境。当项目仍处于开发阶段时,你将容器的架构和记录储存在沙盒环境中,这让你可以在将数据库架构提供给用户之前进行测试或试验。只有开发团队的成员才能访问沙盒环境。

完成架构的开发后,你可以通过称为“Promotion”(提升) 的流程将它迁移到生产环境中。提升后,只能以向前兼容的方式修改架构。这意味着你无法删除实体类型。你可以在实体中添加字段,但无法修改或移除字段。你通常无法控制客户端的更新频率,而这种方法有助于确保旧客户端兼容架构的更新。当你准备好分发你的 App 以进行测试时,请将开发架构迁移到生产环境,并拷贝其记录类型、字段和索引。在 App Store 中出售的 App 只能访问生产环境。

权限和访问控制

CloudKit 使用基于角色的访问控制 (RBAC) 来管理特权并控制对公共数据库中的数据的访问 (私有数据库是私有的)。借助 CloudKit,你可以为角色设置权限级别,然后将该角色分配给特定记录类型。

权限包括读取、写入和/或创建,这些权限是累加的。这意味着读取权限仅允许读取记录,写入权限允许对记录进行读取和写入,创建权限允许对记录进行读取和写入以及创建新记录。

角色包括“World”(全部)、“Authenticated”(已认证) 和“Creator”(创建者)。“World”(全部) 角色包括所有 iCloud 用户,无论他们是否通过认证。“Authenticated”(已认证) 角色包括所有已登录且已通过认证的 iCloud 用户。“Creator”(创建者) 角色仅包括创建了记录的已认证用户。

连通性

CloudKit 提供了高度一致的存储功能,让设备之间或多个用户之间的数据共享变得轻松简单。由于数据是共享的,你的 App 将需要让本地记录也保持同步。通过 CloudKit 的原生框架,你可以将 App 的数据储存在 CloudKit 容器中,以便用户在多台设备上进行访问。