Peer-to-Peer sync of Core Data SQLite persistent stores
macOS, iOS, and tvOS
No server or web service necessary
Utilize free services like iCloud and Dropbox
Change service with ease. No vendor lock in
Only minor code changes required to start syncing
Peer-to-peer sync via Multipeer Connectivity
Develop custom backends to leverage your own servers or improve security
Robust and well-tested
Automatic migration and merging of data
Hooks to handle conflicts (if needed)
All features of Ensembles 1.x
Drop-in replacement for Ensembles 1.x
Much reduced memory usage on iOS
Cloud storage reduced by up to 50 times
Control over traversals of large stores
CloudKit backend, including multiuser sharing
Dropbox API v2 backend
WebDAV and other backends
To all intents and purposes, Ensembles is a peer-to-peer sync framework. Although a server is often involved, it is purely needed to transfer files, with all the complexities of sync handled in the framework on the client devices. It can even sync without a server, using the Multipeer Connectivity framework.
The decision to use lowest-common denominator web services has some very useful benefits. It means Ensembles can take advantage of existing services like iCloud and Dropbox, and can be extended to include other file storage services like FTP.
And it only takes a few hundred lines of Objective-C to develop a custom backend for your own company's server, or build a service on top of a service like Amazon's S3.
If you decide to implement sync by developing your own web service, you have to pay for hosting, which seems crazy given that your customers probably already have five different online storage solutions they are already paying for.
With Ensembles, you can leverage services like iCloud and Dropbox, and you can add support for others without too much trouble. Your customers are happy, because they don't have to sign up for yet another service nickel-and-diming for online storage, and you are happy because you don't have to pay a penny in hosting costs.
Do you worry that a company supplying you critical code will go out of business? We do too. Every developer does.
Ensembles 1.x is an open source project, and Ensembles 2 source code is available when purchasing a package, so you can have absolute confidence that if we throw in the towel, you won't have to.
Unfortunately, there have been quite a few well-publicized disasters in the world of app development when it comes to sync.
We were determined that that would not happen with Ensembles. So from the outset, Ensembles has included tests. Both unit tests, to exercise the code at a low level, and system tests which carry out full store synchronizations.
Testing the framework yourself is also made much easier by the inclusion of a local file system backend. You can setup two copies of your app on one Mac, and have them sync instantaneously via the local disk. No cloud necessary.
We learnt a lot from earlier attempts to develop sync frameworks for Core Data, and one of the things we learnt is that nobody will want to use your framework if it is too difficult to adopt.
Ensembles is a complex framework, but its API is simple. The test app included with the framework adds iCloud sync with less than 100 lines of code. You can usually have your app syncing in just a few hours.
There are services available that make implementing sync fairly straightforward, but there's a catch — you not only have to pay for the service, you are effectively locked-in to one vendor. You can't take your code and move to a different service without a complete rewrite.
Because Ensembles is backend-agnostic, moving from one service to another (e.g. iCloud to Dropbox), or supporting multiple services in your app, is no problem. You typically only need to change a handful of lines of code.