@CloudStorage 属性包装器

通过 iCloud 键值存储同步设置。

这是什么?

类似于 iOS14 中的 @AppStorage@SceneStorage,这个 @CloudStorage 属性包装器可以将值持久化,即使在应用重启后也能保留。但它还使用 iCloud 键值存储在设备之间同步这些值。

用法

步骤 1:启用 iCloud "键值存储" 服务

  1. 在 Xcode 中选择您的项目文件,选择目标,然后点击 "Signing & Capabilities"
  2. 点击左上角的 "+ Capability" 按钮
  3. 搜索 "iCloud" 并添加该功能
  4. 启用 "键值存储" 服务
📺 观看此说明的屏幕录制

Screen recording

步骤 2:将此库添加为 SPM 依赖项

点击 File -> Add Packages... 并粘贴此 GitHub 仓库的 URL 以将其添加到您的项目中。

步骤 3:使用属性包装器

这些值将在您的应用用户的设备之间同步

@CloudStorage("readyForAction") var readyForAction: Bool = false
@CloudStorage("numberOfItems") var numberOfItems: Int = 0
@CloudStorage("orientation") var orientation: String?

另请参阅此存储库中的示例应用。

应该在什么情况下使用它?

与键值存储本身一样,存在相同的注意事项

键值存储适用于离散值,例如偏好设置、设置和简单的应用状态。

使用 iCloud 键值存储来存储少量数据:股票或天气信息、位置、书签、最近的文档列表、设置和偏好设置以及简单的游戏状态。提交到 App Store 或 Mac App Store 的每个应用程序都应利用键值存储。

摘自 Apple 关于选择正确的 iCloud 存储 API的文档

通常,键值存储并非旨在用作通用的同步服务。如果您需要任何高级功能来防止数据丢失,请考虑改用 CloudKit。

应用和扩展之间的同步

要在不同的应用(来自同一团队)之间,甚至在应用及其扩展之间同步相同的键值项,请按照以下步骤操作

  1. 将其中一个应用指定为主应用
  2. 在其他应用/扩展中,手动更改 iCloud 键值存储 ID,使其与主应用相同

例如,如果您的主应用的 bundle identifier 为 com.example.my-app,并且其 .entitlements 文件具有此条目

<key>com.apple.developer.ubiquity-kvstore-identifier</key>
<string>$(TeamIdentifierPrefix)$(CFBundleIdentifier)</string>

确保在其他应用或扩展中配置 .entitlements 文件,如下所示

<key>com.apple.developer.ubiquity-kvstore-identifier</key>
<string>$(TeamIdentifierPrefix)com.example.my-app</string>

另请参阅:为多个应用配置通用 iCloud 容器 (developer.apple.com)

作者

Nonstrict B.V., Tom Lokhorst & Mathijs Kadijk, 根据MIT 许可证发布