字节笔记本
2026年2月21日
如何停止 SwiftData 与 CloudKit 的自动同步
本文介绍如何在 SwiftData 中禁用与 CloudKit 的自动同步功能。当你启用 CloudKit 支持后,SwiftData 默认会自动将本地数据同步到 iCloud,但某些场景下你可能希望手动控制同步行为。
问题背景
当你为应用启用 CloudKit 支持后,SwiftData 会自动开始将本地数据与 iCloud 同步。如果你不希望这种自动同步行为,比如你想使用 CKSyncEngine 或类似工具手动处理同步,理论上你可以创建一个自定义的模型配置来禁用自动同步。
但需要注意的是:在作者测试时,这种方法实际上并不奏效。截至文章撰写时,启用 iCloud 支持后无法阻止 SwiftData 自动同步数据。
理论上的解决方案
如果这个问题得到解决,以下代码应该可以禁用 iCloud 同步:
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
在 AI 技术快速迭代的今天,保持持续学习的能力比掌握任何特定的技术都更重要。理解底层原理可以帮助你在遇到新技术时更快地上手,可以在不同的技术方案之间做出更明智的选择。建议开发者建立自己的技术框架,而不是追逐每一个新的工具和框架。实践是最好的学习方式,在真实项目中应用新学到的技术,遇到问题并解决,这种经历比任何教程都更有价值。定期整理和复盘也是很好的习惯。将学到的知识归档整理,形成自己的知识库。当需要用到某个技术时,可以直接从自己的知识库中找到相关的参考,而不是从零开始搜索。
技术的价值不在于它有多前沿,而在于它能在多大程度上解决实际问题。AI 技术的快速迭代不是用来追赶的潮流,而是用来解决业务痛点的工具箱。在实际应用中,有时候简单的方案反而最有效。一个 RAG 系统用了最复杂的检索策略但文档处理没做好,效果不如一个文档处理完善但检索策略简单的系统。一个 Agent 系统用了最贵的模型但 prompt 设计粗糙,效果不如一个精心设计 prompt 的普通模型。建议在追求技术先进性之前,先把基础工作做扎实。文档清洗、数据标注、评测体系、监控告警,这些看似基础的工作,往往是决定 AI 项目成败的关键。