Added CocoaRadio podcast and NSConference 2014 to online resources.
Removed an entry in library search path for tests which was not valid.
Changed queuing of activities in ensemble. Activities like leech, merge, and deleech are now always enqueued. No checks are done prior to enqueuing (other than that main thread is used).
This guarantees the order of completion is the same as the order of initiation, and makes it easier to queue up tasks and be certain that tasks are complete.
Eg. You can now call leechWithCompletion:, and then mergeWithCompletion:, without putting the second method in inside the completion block.
Added handling of unversioned models. The model version check was working on the assumption that the model URL was a directory. Now it handles individual model files.
Added foundation import to availability macros.
Updated podspec to version 1.1
Removed Ensembles from prefix header of Idiomatic, and added import to CDENodeCloudFileSystem.h
Fixed info in the README that implied that the default Cocoapods install would include optional backends. It doesn’t.
Changed a dispatch_sync to a dispatch_async for completion callbacks in CDEICloudFileSystem.
This could lead to deadlocks if a save occurred on the main thread, which uses performBlockAndWait: on the event store queue, while the iCloud file system was calling back to main.
Made adding a save event to the event store asynchronous.
It was possible to get a deadlock if a save and merge are happening at the same time, because creating the save event occurred in a performBlockAndWait:. If the merge creating needed to callback to the main thread, which seems to occur when the event store gets saved, it would cause a deadlock.
The fix is to make creation of the save event asynchronous, using performBlock: instead.
The downside is that you need to be sure that the event store is fully saved when terminating. You can use processPendingChanges or just do a merge, which also ensures the event store is saved.
Added link to NSConference video in the online resources document.
Added observer for iCloud download notifications in Idiomatic for iOS. Now triggers a sync.
Changed handling of data files. It was possible for a race condition to arise where files were deleted prematurely, because the event they belong to had not yet been imported.
Now, when they are downloaded, data blobs get put in a newdata directory. They won't get deleted from that unless the file is removed remotely.
When the content of a new file actually gets referenced by an event, the file is moved to the 'data' folder, and from then on, it is eligible for removal should all events referencing it be removed.
Changed the userInfo dictionary passed via the NSNotification in the did-save-merge-changes delegate method (and notification). It now contains NSManagedObjectIDs, rather than the objects themselves. Passing the objects seemed to cause crashes occasionally, probably due to accessing on the wrong thread. MOIDs should be safer.
Fixed test broken by using MOIDs instead of MOs in the notifications.
You can now pass persistent store options to the framework. These are used when setting up a new NSPersistentStoreEnsemble. Could be useful if you need to include special SQLite pragmas.
Be careful that these options are compatible with the ones you are using in your app, or corruption can arise.
Made the CDEEventStore flush: method asynchronous. It was using performBlockAndWait: and could sometimes deadlock if an event store operation was calling back to the main queue at the same time.
Fixed a potential deadlock. There was a synchronous performBlockAndWait in the contextDidSave: when creating global ids. If this was on the main thread, the notification that would be posted when saving the event store could deadlock, because it accesses the main thread.
Updated podspec to 1.1.1.
Update README.md