TL;DR: 在为 Core Data 或 SwiftData 启用 CloudKit 同步时,禁止使用唯一性约束、非可选属性、未定义类型等限制。所有关系需设置为可选并包含逆向关系,模型调整只能使用轻量迁移,遵循“只增、不减不改”原则。
背景
在使用 Core Data 或 SwiftData 的云同步功能时,如果未在建模阶段充分考虑 CloudKit 的限制,可能在后期遇到模型调整的复杂性问题。以下是模型必须遵守的规则及注意事项,以确保顺利实现云同步功能。
数据模型必须遵守的规则
1. 唯一性约束
禁止使用:
- Core Data 中的
Unique constraints
- SwiftData 中的
@Attribute(.unique)
2. 属性要求
- 禁止设置为非可选值且没有默认值
- 允许的配置
- 可选
- 有默认值
- 可选 + 默认值
3. 类型限制
- 禁止使用 Core Data 的
Undefined
类型
4. 关系要求
-
所有
relationship
必须设置为可选(Optional
) -
所有
relationship
必须设置逆向(Inverse
)关系 -
禁止使用
Deny
删除规则
-
有序关系(
Ordered
)
注意事项
启用云同步功能后,模型调整只能使用轻量迁移。开发者需在模型设计初期充分考虑 CloudKit 的适配性,以减少未来改动的风险。以下为轻量迁移的关键限制:
模型调整原则
- 禁止删除 已存在的实体或属性
- 禁止重命名 已存在的实体或属性
建议
遵循 “只增、不减不改” 原则:仅添加新实体、新属性或新关系。