IceCream 2.0.4

IceCream 2.0.4

测试测试
语言语言 SwiftSwift
许可证 MIT
发布最新发布2021年9月
SPM支持SPM

Yue Cai维护。



IceCream 2.0.4

IceCream

CI Status Version Carthage compatible License Platform

contributions welcome

IceCream帮助您将Realm数据库与CloudKit同步。

它就像魔法一样工作!

功能

  • Realm数据库

    • 离线优先
    • 线程安全
    • 响应式编程
    • 针对移动应用优化
    • 迁移时易于使用
  • 苹果云Kit

    • 自动认证
    • 静默推送
    • 免费(带限制:私有数据库消耗用户的iCloud配额)
  • 增量更新

  • 可访问性(支持长期操作)

  • 强大的错误处理

  • 自动同步

  • 支持多个对象模型

  • 支持公有/私有数据库

  • 大数据同步

  • 支持手动同步

  • 关系(一对一/一对多)支持

  • 在所有Apple平台上可用(iOS/macOS/tvOS/watchOS)

  • 支持自然类型列表的Realm

  • 完整的文档

先决条件

  1. 确保已加入苹果开发者计划
  2. 在设置中打开iCloud,并在能力中选择CloudKit
  3. 打开后台模式并检查后台获取远程通知

使用说明

基础知识

  1. 准备你的王国对象(例如:狗、猫...)
class Dog: Object {
    @objc dynamic var id = NSUUID().uuidString
    @objc dynamic var name = ""
    @objc dynamic var age = 0
    @objc dynamic var isDeleted = false

    static let AVATAR_KEY = "avatar"
    @objc dynamic var avatar: CreamAsset?

    @objc dynamic var owner: Person? // to-one relationships must be optional

    override class func primaryKey() -> String? {
        return "id"
    }
}
  1. 做一些这样的事情
extension Dog: CKRecordConvertible & CKRecordRecoverable {
    // Leave it blank is all
}

很简单吗?协议扩展就完成了这个技巧。

  1. 启动引擎!
var syncEngine: SyncEngine?
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    ...
    syncEngine = SyncEngine(objects: [
            SyncObject(type: Dog.self),
            SyncObject(type: Cat.self),
            SyncObject(type: Person.self)
        ])
    application.registerForRemoteNotifications()
    ...
}
  1. 监听远程通知

AppDelegate中的示例代码将是一个很好的参考。

这就需要你做的全部事情!每当你向王国写入内容时,SyncEngine都会得到通知并处理同步事宜!

更多详情,请克隆项目查看源代码。

对象删除

是的,我们强烈建议你使用软删除。这就是为什么我们在CKRecordConvertible协议中添加了一个isDeleted属性的原因。

当你想要删除一个对象时,只需要将其isDeleted属性设置为true,其他一切都已处理。

你也不必担心清理问题。这已经考虑到了。

同步资产怎么办?

幸运的是,我们有一个完美的解决方案来同步资产。当然,你也可以将你的图片或其他资源存储为Data类型,一切照常工作。但Realm对数据属性有16MB的限制,而CloudKit鼓励我们在要分配给字段的数据超过几个千字节时使用CKAsset。因此,考虑到上述两点,我们建议您使用CreamAsset属性来保存数据。CreamAsset会在文件系统中存储本地数据,并且在王国中只保存文件路径,这都是自动完成的。然后我们会将所有东西包装起来上传为CKAsset

提供了一个示例项目,你可以查看详细用法。

关系

自2.0版本起,IceCream正式支持Realm关系(一对一和一对多)。

特别是,对于一对多的关系支持,你必须将列表的元素类型传递给SyncObject初始化方法参数。例如:

syncEngine = SyncEngine(objects: [
            SyncObject(type: Dog.self),
            SyncObject(type: Cat.self),
            SyncObject(type: Person.self, uListElementType: Cat.self) // if Person model has a List<Cat> property
        ])

需求

  • iOS 10.0+ / macOS 10.12+ / tvOS 10.0+ / watchOS 3.0+
  • Swift 5

调试建议

诚然,调试CloudKit是艰难且繁琐的。但是,在面临难题时,我有一些小窍门可以供你们参考。

  • 你应该了解Realm和CloudKit的工作原理。
  • 使用GUI工具,例如Realm BrowserCloudKit控制台
  • 当你迷路且不记得自己身处何处时,我建议从头开始。在CloudKit控制台中,有“重置...”按钮可供使用。你还可以通过重新安装应用程序来清除本地数据库。
  • 默认情况下,IceCream只在DEBUG模式下向你的控制台打印一些日志。然而,如果你觉得这很麻烦,可以通过添加IceCream.shared.enableLogging = false来关闭它。
  • 保持冷静,继续前进!

警告:如果你打算将应用程序发布到App Store,别忘了将环境设置部署到生产环境中。你可以在CloudKit控制台中轻松完成此操作。还需要考虑读写权限。

另一个小技巧

如何在生产模式下调试CloudKit?参见这篇文章post

示例

要运行示例项目,请克隆存储库,然后打开Example/IceCream_Example.xcodeproj

安装指南

使用 Swift Package Manager,Carthage 或 CocoaPods。

Swift Package Manager

从 Xcode 11 开始,您可以使用 Swift Package Manager 将 IceCream 及其依赖项添加到项目中。

选择文件 > Swift 包 > 添加包依赖。在“选择包仓库”对话框中输入 https://github.com/caiyue1993/IceCream.git。在下一页中,指定版本解析规则为“至下一个主版本”,最早版本为“2.0.2”。在 Xcode 检出源并解决版本后,您可以选择“IceCream”库并将其添加到您的应用目标中。

如果您在将包添加到 Xcode 项目时遇到任何问题或有疑问,建议您阅读 Apple 的将包依赖项添加到您的应用指南文章。

Carthage

Carthage 是 Cocoa 应用的分布式依赖项管理器。

要使用 Carthage 将 IceCream 集成到您的 Xcode 项目中,请在您的 Cartfile 中指定它

github "caiyue1993/IceCream"

然后,运行以下命令以构建框架

carthage update

通常,您会得到 IceCreamRealmRealmSwift 框架。您需要手动设置您的 Xcode 项目以添加这 3 个框架。

在您的应用目标的 常规 设置选项卡中,在 链接的框架和库 部分,从磁盘上的 Carthage/Build 文件夹拖放要使用的每个框架。

在您的应用目标的 构建阶段 设置选项卡上,点击“+”图标并选择“新运行脚本阶段”。创建一个包含以下内容的运行脚本

/usr/local/bin/carthage copy-frameworks

并将您想使用的框架路径添加到“输入文件”(以 iOS 平台为例)

$(SRCROOT)/Carthage/Build/iOS/IceCream.framework
$(SRCROOT)/Carthage/Build/iOS/Realm.framework
$(SRCROOT)/Carthage/Build/iOS/RealmSwift.framework

有关如何使用 Carthage 的更多信息,请参阅其 项目页面

CocoaPods

可以通過CocoaPods安裝IceCream。要安裝它,只需將以下行添加到您的Podfile中:

pod 'IceCream'

如果您想將IceCream作為靜態框架建構,則需要CocoaPods 1.4.0+。

讓它更好

這是IceCream專案的待辦事項清單。您可以加入我們成為貢獻者。

  • CloudKit共享數據庫

參考CONTRIBUTING文件以了解貢獻指南。

動態演示

我的應用程序Sprint(一個輕量級的任務管理應用程序)正在使用IceCream。您可以下載它,並在您的多台設備上嘗試它,以看到這個魔法。

參考

貢獻者

該專案的存在要感謝所有貢獻者。

贊助

開源很棒,但維護它需要時間和精力。如果您能從經濟上支持IceCream的維護,那將非常感激,並將鼓勵我。您可以通过以下方式贊助此項目:

並感謝我們在Open Collective上的所有贊助者

许可协议

IceCream遵循MIT许可协议。有关更多信息,请参阅LICENSE文件。