字
字节笔记本
2026年2月22日
SwiftData 与 iCloud 同步完全指南
SwiftData 内置了对使用 CloudKit 进行 iCloud 同步的支持。它的使用非常简单——在某些情况下甚至不需要编写任何代码——但它不支持公共数据库或共享数据库。
重要提示
如果你需要使用公共或共享数据库,你需要使用 NSPersistentCloudKitContainer,可以单独使用,也可以与 SwiftData 共存。
配置 iCloud 同步
如果你想将应用数据同步到 iCloud,请按照以下步骤操作:
- 打开应用目标的 Signing & Capabilities 设置
- 添加 iCloud 功能
- 在选项中选择 CloudKit
- 点击 + 按钮添加新的 CloudKit 容器,或选择现有的容器
- 添加 Background Modes 功能
- 勾选 "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 同步功能让数据持久化和跨设备同步变得异常简单。只需在项目中进行简单的功能配置,无需编写额外的同步代码,你的应用数据就能自动同步到用户的所有设备上。
分享: