// the find
caiyue1993/IceCream
Sync Realm Database with CloudKit
IceCream bridges Realm and CloudKit, handling the sync plumbing that would otherwise eat a few weeks of your life. It's for iOS/macOS indie developers who want offline-first local storage with iCloud sync without rolling their own CKSubscription/CKModifyRecordsOperation stack.
Protocol-based design means you add conformances to existing Realm objects rather than subclassing or restructuring your models. CreamAsset handles the CloudKit 1MB field limit vs Realm's 16MB data limit automatically, routing binary data through CKAsset. Soft-delete pattern is built into the protocol contract rather than left as an exercise, which avoids a classic CloudKit footgun where hard deletes don't propagate. Relationship sync (one-to-many via List) is supported, which most alternatives quietly skip.
CloudKit Shared Database support is explicitly listed as missing and has been sitting on the to-do list for years — if you need family sharing or collaborative documents, you're on your own. Documentation is marked incomplete in the README's own feature checklist, so debugging non-obvious sync failures means reading source and cross-referencing CloudKit WWDC sessions. The library hasn't tracked Realm's own evolution toward Swift concurrency; it still uses Realm's notification-based observation pattern, which creates friction in async/await codebases. Conflict resolution is CloudKit's last-write-wins by default with no hook to override it — fine for personal data, a real problem if you have any collaborative use case.