字节笔记本

2026年2月22日

SwiftData 与 iCloud 同步完全指南

SwiftData 内置了对使用 CloudKit 进行 iCloud 同步的支持。它的使用非常简单——在某些情况下甚至不需要编写任何代码——但它不支持公共数据库或共享数据库。

重要提示

如果你需要使用公共或共享数据库,你需要使用 NSPersistentCloudKitContainer,可以单独使用,也可以与 SwiftData 共存。

配置 iCloud 同步

如果你想将应用数据同步到 iCloud,请按照以下步骤操作:

  1. 打开应用目标的 Signing & Capabilities 设置
  2. 添加 iCloud 功能
  3. 在选项中选择 CloudKit
  4. 点击 + 按钮添加新的 CloudKit 容器,或选择现有的容器
  5. 添加 Background Modes 功能
  6. 勾选 "Remote Notifications" 选项

完成以上配置后,你的应用就已经设置为将所有数据与 iCloud 同步了。

测试建议

虽然你可以在模拟器中测试 iCloud 支持,但我发现它很少能正常工作——最好在真实设备上进行测试。

CloudKit 模型要求

虽然配置已经完成,但你可能需要对 SwiftData 模型进行一些更改,因为 CloudKit 有一些非常具体的要求。需要注意的是,如果不遵循这些要求,iCloud 同步将会静默失败:

  • 不能使用唯一属性:不能在任何要同步到 CloudKit 的属性上使用 @Attribute(.unique)
  • 默认值或可选属性:所有属性必须具有默认值或在初始化器中标记为可选
  • 关系必须可选:所有关系必须标记为可选

只要对所有模型进行这些更改,它们就会自动同步到 CloudKit。如果用户稍后从设备中删除应用然后重新安装,SwiftData 会自动从 iCloud 获取他们的旧数据并同步到本地。

CloudKit Dashboard

在使用 CloudKit 时,你可能会发现 Apple 的 CloudKit Dashboard 是一个有用的资源,可以查看 CloudKit 如何存储你的数据。你可以在这里访问:https://icloud.developer.apple.com/dashboard

总结

SwiftData 的 iCloud 同步功能让数据持久化和跨设备同步变得异常简单。只需在项目中进行简单的功能配置,无需编写额外的同步代码,你的应用数据就能自动同步到用户的所有设备上。

分享: