💡 数据模型适配 CloudKit 的规则与注意事项

为您每周带来有关 Swift 和 SwiftUI 的精选资讯!

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 的适配性,以减少未来改动的风险。以下为轻量迁移的关键限制:

模型调整原则

  • 禁止删除 已存在的实体或属性
  • 禁止重命名 已存在的实体或属性

建议

遵循 “只增、不减不改” 原则:仅添加新实体、新属性或新关系。

延伸阅读