主要观点:几年前在开发 Agenda 应用的协作功能时,面临在本地-first 模式下处理共享数据的挑战,后意识到 Git 的方法可用于合并数据,于是创建了BranchedFile
类。2024 年初参加 Local-First Conf 后,受启发将BranchedFile
类型变得更通用,变成了名为Forked的 Swift 新框架,它使用结构体、支持分支和 3 路合并、可存储Codable
数据、支持高级合并算法、可通过 iCloud 等同步、不仅用于同步还可用于单设备内的子系统,代码简单且融合效果好,如在Forkers
示例应用中,通过@ForkedModel
和@Merged
属性实现了结构体的合并,还能与 Swift 6 结构化并发配合避免竞态条件,添加 CloudKit 同步也很简单,仅需几行代码。
关键信息:
- Agenda 是本地-first 应用,协作功能需处理共享数据且保持一致性。
- 借鉴 Git 方法创建
BranchedFile
类实现数据合并。 - 2024 年初推出[Forked]框架,具有多种特性。
@ForkedModel
和@Merged
属性用于结构体的合并处理。- 与 Swift 6 结构化并发配合及添加 CloudKit 同步的代码示例。
重要细节:
BranchedFile
要支持分支、保留足够数据版本用于 3 路合并。Forked
框架的结构体融合方式及@Merged
属性可添加自定义合并逻辑。- 示例中
Forkers
结构体的各个属性及合并效果。 - 通过
QuickFork
隔离变化集并合并以避免竞态条件。 - 用
ForkedResource
和CloudKitExchange
实现 CloudKit 同步的代码。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。