SwiftData创建模型后,配置iCloud容器可以自动同步模型架构。每次运行项目,修改/删除的字段都会同步iCloud容器的测试环境。
可以在iCloud 开发环境,登陆开发者账号后,选择CloudKit Database – 对应容器 – Schema – Record Types 查看iCloud 容器架构中的字段。

基本概念
SwiftData模型:
@Model
class PiggyBank {
var name: String = "" // 存钱罐名称
var amount: Double = 0.0 // 初始化金额
}
CloudKit架构:
CD_PiggyBank
CD_name
CD_amount
SwiftData使用CoreData作为底层,会自动生成CloudKit Schema。
每个 @Model 类对应 CLoudKit Record Type(记录类型),每个属性对应 CloudKit Field(字段),CloudKit 字段名通常以 CD_ 为前缀。
CloudKit字段同步机制
1、CloudKit新增字段逻辑
当本地设备修改数据时,iCloud信息自动同步到iCloud容器中。
Xcode项目测试环境中,Preview预览以及模拟器不会将字段同步到iCloud容器。
只有在Xcode调试真机时,在应用内创建SwiftData对象时,数据字段会同步到iCloud容器,CloudKit会检测字段并新增/修改相应的字段。
例如:
@Model
class PiggyBank {
var name: String = ""
var amount: Double = 0.0
var date: Date? = Date() // 新增的日期字段
}
在SwiftData中新增一个可选的日期字段,使用Xcode调试真机时,如果没有创建PiggyBank对象,CloudKit不会修改数据库的字段架构。
注意:只有在真机中创建PiggyBank对象时,才会触发数据库字段架构的检测功能。
创建PiggyBank对象时,date为nil,CloudKit不会新增date字段。
创建PiggyBank对象并且date不为nil,CloudKit检测到该字段后,才会新增date字段。
2、CloudKit删除字段逻辑
如果删除Xcode项目中的SwiftData对象字段(前面提到的date字段),使用真机创建SwiftData对象,字段并不会在iCloud容器中被删除。
CloudKit只有在新增字段时,记录到Schema Change中。删除字段不会自动生成变化,因为CloudKit认为删除字段有数据丢失的风险。
解决方案:
1、忽略这个需要删除的字段,字段保留不动、不部署、不使用。
2、重置CloudKit容器(危险操作):
重置CloudKit容器的操作:选择CloudKit容器 – Development(开发环境),选择左下角的Reset Environment(重置开发环境)。
所有记录类型和安全角色都会恢复到生产环境中的版本,数据都会被删除!!!
注意事项
1、架构不匹配导致同步失败问题
// 旧版本 App (v1.0)
@Model
class PiggyBank {
var name: String
}
// 新版本 App (v1.1) - 添加了新字段
@Model
class PiggyBank {
var name: String
var amount: Double // 新增字段
}
如果修改CloudKit架构后,可能会出现以下几个情况:
用户A:应用升级到v1.1版本,本地迁移成功,CloudKit自动添加新字段。
用户B:仍然适用v1.0版本,无法识别CloudKit新字段,会忽略该字段。
用户A创建新数据后,v1.1版本的数据可能无法同步到v1.0版本的应用,也可能会忽略新字段的数据。
因此,CloudKit新增字段时,字段在初始化阶段必须提供默认值:
@Model
class PiggyBank {
var name: String
var amount: Double
init(name: String, amount: Double) {
self.anme = name
self.amount = amount // 明确初始化
}
}
这里Xcode也会要求用户必须对字段初始化,否则报错。
2、Deploy Schema Changes部署架构变更时机
CloudKit新增字段后,CloudKit容器 – Development – Deploy Schema Changes (部署架构变更)会提示开发环境和生成环境字段的不同。

在开发阶段中,可以不去修改CloudKit架构后,因为字段可能会变动,也可能会还原整个开发环境。
发布前同步容器架构顺序:
1、开发代码(新增字段)
2、开发环境测试
3、Deploy Schema Changes (部署架构变更)
4、TestFlight测试
5、提交AppStore审核
6、发布新版本
注意:不要在应用发布后,再同步容器架构,这样会导致用户数据同步失败,丢失数据,造成严重的产品BUG,该问题可以参考《iCloud生产环境无法同步数据问题》。
总结
每次修改SwiftData模型字段(新增、删除、修改类型)等操作,在真机上创建@Model对象时,iCloud容器架构的字段会同步新增、不会同步删除。
在应用上架前,需要到CloudKit网页端执行“Depoly Schema Changes”(部署架构变更)检查开发环境中的字段与生产环境字段情况,只有部署架构变更后,开发环境的字段才会同步到生产环境。
相关文章
1、CloudKit:https://icloud.developer.apple.com/
2、SwiftUI字段同步到iCloud:https://fangjunyu.com/2025/03/01/ios%e5%b0%86appstorage%e5%90%8c%e6%ad%a5%e5%88%b0icloud/
3、iCloud生产环境无法同步数据问题:https://fangjunyu.com/2025/02/24/icloud%e7%94%9f%e4%ba%a7%e7%8e%af%e5%a2%83%e6%97%a0%e6%b3%95%e5%90%8c%e6%ad%a5%e6%95%b0%e6%8d%ae%e9%97%ae%e9%a2%98/
4、SwiftData数据同步到iCloud:https://fangjunyu.com/2024/11/10/swiftdata%e6%95%b0%e6%8d%ae%e5%90%8c%e6%ad%a5%e5%88%b0icloud/
