字节笔记本

2026年2月22日

如何停止 SwiftData 与 CloudKit 的自动同步

本文介绍如何在 SwiftData 中禁用与 CloudKit 的自动同步功能。当你启用 CloudKit 支持后,SwiftData 默认会自动将本地数据同步到 iCloud,但某些场景下你可能希望手动控制同步行为。

问题背景

当你为应用启用 CloudKit 支持后,SwiftData 会自动开始将本地数据与 iCloud 同步。如果你不希望这种自动同步行为——比如你想使用 CKSyncEngine 或类似工具手动处理同步——理论上你可以创建一个自定义的模型配置来禁用自动同步。

但需要注意的是:在作者测试时,这种方法实际上并不奏效。截至文章撰写时,启用 iCloud 支持后无法阻止 SwiftData 自动同步数据。

理论上的解决方案

如果这个问题得到解决,以下代码应该可以禁用 iCloud 同步:

swift
do {
    let config = ModelConfiguration(cloudKitDatabase: .none)
    container = try ModelContainer(for: Restaurant.self, configurations: config)
} catch {
    fatalError("Failed to create model container.")
}

这段代码将 CloudKit 数据库设置为 .none,意味着不应该发生自动同步。

当前状况

再次强调,截至文章撰写时,上述方法实际上无法工作。希望苹果能在未来的更新中修复这个问题,让开发者能够更灵活地控制 SwiftData 的同步行为。

相关阅读


原文作者:Paul Hudson (@twostraws) 发布日期:2023年9月30日 更新版本:Xcode 16.4

分享: