I wrote a post a few months ago about sharing data between iOS apps and app extensions in which I recommended using NSFileCoordinator
and NSFilePresenter
. But I had to update the post to remove that portion when some helpful people pointed me to Apple Tech Note 2408, which read in part:
When you create a shared container for use by an app extension and its containing app in iOS 8, you are obliged to write to that container in a coordinated manner to avoid data corruption. However, you must not use file coordination APIs directly for this.
That basically meant that it was specifically unsafe to use these classes for what would seem to be one of their primary use cases. That sucked.
However last week the tech note was updated, and the above section now reads:
When you create a shared container for use by an app extension and its containing app in iOS 8.0 or later, you are obliged to write to that container in a coordinated manner to avoid data corruption. However, you must not use file coordination APIs directly for this in iOS 8.1.x and earlier. [emphasis mine]
That’s great! In iOS 8.2 or higher, the obvious approach should now be safe. I’ve updated the original post to restore (and somewhat expand) the original discussion of file coordination.