Core Data Automatic Migration for NSPersistentDocument requires saving in place, which won't work in a sandbox-enabled app (even with Read/Write for user selected files).
The solution is to add the following temporary entitlements:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>com.apple.security.app-sandbox</key> <true/> <key>com.apple.security.files.user-selected.read-write</key> <true/> <key>com.apple.security.temporary-exception.files.absolute-path.read-write</key> <string>/Volumes/</string> <key>com.apple.security.temporary-exception.files.home-relative-path.read-write</key> <string>/</string> </dict> </plist>
This allows the user to open and seamlessly migrate core data documents anywhere on the system (including mounted volumes).
After getting auto-migration working, log a bug with apple to encourage them to provide a better solution for working with Core Data in sandboxed apps: