价格

项目总览

相关源文件

本页面内容基于以下源文件生成:

IceCream 是一个开源的 Swift 库,旨在实现 Realm 数据库与 Apple CloudKit 之间的无缝同步。该项目通过封装复杂的同步逻辑,让开发者能够以声明式的方式定义数据模型,并自动获得离线优先、跨设备同步的能力。其核心价值在于将 CloudKit 的远程存储能力与 Realm 的本地数据库优势相结合,为 iOS、macOS、tvOS 和 watchOS 应用提供开箱即用的数据同步解决方案。

项目简介与核心功能

IceCream 的核心定位是连接 Realm Database 与 CloudKit,使本地持久化数据能够自动同步到 iCloud。根据项目描述,该库"像魔法一样工作",强调其易用性和透明性(README.md:13-16)。

核心特性矩阵

特性类别具体能力实现状态
Realm 数据库离线优先架构✅ 已实现
线程安全✅ 已实现
响应式编程支持✅ 已实现
移动端优化✅ 已实现
迁移友好✅ 已实现
CloudKit 集成自动认证✅ 已实现
静默推送通知✅ 已实现
免费额度(私有数据库消耗用户 iCloud 配额)✅ 已实现
同步机制增量更新✅ 已实现
网络可达性(支持长生命周期操作)✅ 已实现
自动同步✅ 已实现
手动同步支持✅ 已实现
数据模型多对象模型支持✅ 已实现
公有/私有数据库支持✅ 已实现
大数据量同步✅ 已实现
To-One/To-Many 关系支持✅ 已实现
Realm 基础类型列表支持✅ 已实现
平台覆盖iOS / macOS / tvOS / watchOS✅ 已实现
文档完整文档❌ 待完善

上述特性列表完整展示了项目的功能边界(README.md:17-42)。其中"离线优先"意味着应用在网络不可用时仍可正常读写数据,待网络恢复后自动同步;"增量更新"确保只传输变更部分,减少网络开销和电池消耗。

适用场景

IceCream 特别适合以下应用场景:

  1. 个人数据同步应用:如笔记、待办事项、记账类应用,需要跨设备同步用户私有数据
  2. 协作型应用:利用 CloudKit 公有数据库实现多用户数据共享
  3. 离线优先架构:网络不稳定环境下仍需保持核心功能可用的应用
  4. 快速原型开发:希望快速实现云同步功能而无需搭建后端服务的项目

技术架构与依赖

技术栈概览

技术组件版本要求说明
Swift5.0语言版本(IceCream.podspec:30
RealmSwift< 10.0.0核心依赖库(IceCream.podspec:32
iOS10.0+最低部署版本(IceCream.podspec:23
macOS10.12+最低部署版本(IceCream.podspec:24
tvOS10.0+最低部署版本(IceCream.podspec:25
watchOS3.0+最低部署版本(IceCream.podspec:26

包管理器支持

IceCream 提供三种主流包管理器支持:

CocoaPods 集成

ruby
1pod 'IceCream'

项目被配置为静态框架(static_framework = true),确保与 RealmSwift 的兼容性(IceCream.podspec:29)。

Swift Package Manager 集成

swift
1dependencies: [
2    .package(
3        url: "https://github.com/realm/realm-cocoa", 
4        from: "4.1.1"
5    )
6]

SPM 配置指定了源文件路径为 IceCream/Classes,并声明了对 RealmSwift 和 Realm 的依赖(Package.swift:14-25)。

Carthage:项目徽章显示 Carthage 兼容(README.md:5)。

核心模块架构图

正在加载图表渲染器...

架构要点说明

  1. SyncEngine 同步引擎:作为框架核心入口,负责协调本地 Realm 与远程 CloudKit 之间的双向同步。开发者通过初始化 SyncEngine 并传入同步对象列表来启动同步服务(README.md:90-94)。

  2. 协议扩展机制CKRecordConvertibleCKRecordRecoverable 协议通过 Swift 的协议扩展(Protocol Extension)实现默认行为,开发者只需声明 conform 无需实现任何方法即可获得同步能力(README.md:77-82)。

  3. CreamAsset 资产包装:用于处理二进制大对象(如图片)的同步,将文件资产与普通属性区分处理(README.md:64)。

  4. 系统服务集成:依赖 iOS 的远程通知和后台获取能力触发同步操作,确保数据变更能及时推送(README.md:48)。

基础使用方式

数据模型定义

IceCream 要求 Realm 对象模型遵循特定约定:

swift
1class Dog: Object {
2    @objc dynamic var id = NSUUID().uuidString
3    @objc dynamic var name = ""
4    @objc dynamic var age = 0
5    @objc dynamic var isDeleted = false
6
7    static let AVATAR_KEY = "avatar"
8    @objc dynamic var avatar: CreamAsset?
9
10    @objc dynamic var owner: Person? // to-one relationships must be optional
11
12    override class func primaryKey() -> String? {
13        return "id"
14    }
15}

关键约定说明README.md:54-72):

  1. 主键要求:每个同步对象必须定义主键(通常使用 UUID),CloudKit 使用此标识符匹配本地与远程记录。

  2. 软删除标记isDeleted 属性用于实现软删除机制,确保删除操作能正确同步到其他设备。

  3. 资产属性CreamAsset? 类型用于包装需要同步的文件资产(如图片、文档),与普通属性区分处理。

  4. 关系约束:To-One 关系必须声明为可选类型(Person?),以符合 CloudKit 的引用语义。

协议声明

通过协议扩展实现零代码同步能力:

swift
1extension Dog: CKRecordConvertible & CKRecordRecoverable {
2    // Leave it blank is all
3}

这一设计利用 Swift 的协议扩展特性,为所有符合要求的 Realm 对象提供默认的 CKRecord 转换和恢复逻辑(README.md:77-82)。开发者无需手动编写序列化/反序列化代码。

同步引擎初始化

在应用启动时初始化 SyncEngine:

swift
1var syncEngine: SyncEngine?
2func application(_ application: UIApplication, 
3                 didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
4    syncEngine = SyncEngine(objects: [
5        SyncObject(type: Dog.self),
6        SyncObject(type: Cat.self),
7        SyncObject(type: Person.self)
8    ])
9    application.registerForRemoteNotifications()
10    return true
11}

初始化要点README.md:84-98):

  1. SyncObject 配置:每个需要同步的 Realm 类型通过 SyncObject(type:) 注册到引擎。

  2. 生命周期管理:SyncEngine 实例必须被强引用(通常作为 AppDelegate 的属性),否则同步任务将被释放。

  3. 远程通知注册:必须调用 registerForRemoteNotifications() 以接收 CloudKit 变更通知。

同步流程时序图

正在加载图表渲染器...

流程要点说明

  1. 双向同步机制:SyncEngine 监听 Realm 的写入通知,同时订阅 CloudKit 的远程变更推送,实现双向数据流动。

  2. 增量同步策略:使用 CKFetchRecordChangesOperation 仅获取上次同步后的变更,避免全量下载。

  3. 冲突处理:CloudKit 的 lastUpdateTimeStamp 机制用于解决多设备并发写入冲突(具体实现需要确认源码)。

  4. 后台刷新:结合 Background Fetch 能力,在应用挂起时也能同步数据。

前置条件与配置

开发环境要求

使用 IceCream 前需完成以下配置(README.md:44-48):

  1. Apple Developer Program 注册:必须加入苹果开发者计划以使用 CloudKit 服务。

  2. iCloud 能力启用

    • 在 Xcode 项目的 Capabilities 标签页启用 iCloud
    • 选择 CloudKit 作为存储类型
  3. 后台模式配置

    • 启用 Background Modes
    • 勾选 "Background fetch"
    • 勾选 "Remote notification"

目录结构

基于 Package.swift 的源文件路径配置(Package.swift:24-25),项目核心代码位于以下结构:

IceCream/
├── Classes/                    # 核心实现代码
│   ├── SyncEngine.swift        # 同步引擎主类(需要确认)
│   ├── SyncObject.swift        # 同步对象配置(需要确认)
│   ├── CKRecordConvertible.swift  # 协议定义(需要确认)
│   ├── CKRecordRecoverable.swift  # 协议定义(需要确认)
│   └── CreamAsset.swift        # 资产包装器(需要确认)
├── IceCream.h                  # 公共头文件
└── IceCream.podspec           # CocoaPods 规范文件

注意:上述目录结构中的具体文件名需要通过查看 IceCream/Classes/ 目录内容确认。

报告阅读路线图

正在加载图表渲染器...

推荐阅读顺序

  1. 项目总览(当前章节):了解项目定位、技术栈和基础用法
  2. 架构设计:深入理解 SyncEngine、协议扩展等核心模块的设计原理
  3. 数据流分析:追踪本地写入到远程同步的完整数据路径
  4. API 设计:研究公开接口的设计决策与使用约定
  5. 数据模型:了解 Realm 对象与 CloudKit 记录的映射规则
  6. 核心特性:探索离线优先、增量同步等高级特性的实现
  7. 部署指南:获取生产环境部署的最佳实践

项目核心能力量化

指标数值说明
支持平台数4iOS、macOS、tvOS、watchOS(Package.swift:6-8
包管理器支持3CocoaPods、Carthage、Swift Package Manager
最低 iOS 版本10.0支持 2016 年及以后发布的设备(IceCream.podspec:23
Swift 版本5.0使用现代 Swift 语法特性(IceCream.podspec:30
核心协议数2CKRecordConvertible、CKRecordRecoverable(README.md:77
关系类型支持2To-One、To-Many(README.md:39
数据库类型支持2公有数据库、私有数据库(README.md:36

版本与许可

IceCream 当前版本为 2.1.0(IceCream.podspec:11),采用 MIT 开源许可证发布(IceCream.podspec:17)。项目源码托管于 GitHub,欢迎社区贡献(README.md:10)。