現在使用している Core Data のデータファイルを、App Group で共有するためのフォルダ (shared container) へ移動する必要があります。
手順
- App Groupでアプリ間データ共有 などを参考に App Group を有効にする
- Core Data のデータファイルを shared container へ移動
-
NSPersistentStoreCoordinator
のメソッドmigratePersistentStore:toURL:options:withType:error:
で移動 - 移動したら元のファイルは消しておく
-
データファイル移動の実装例
func migrate(from: NSURL, to: NSURL) {
// すでに移動されているかチェック
guard let path = from.path where NSFileManager.defaultManager().fileExistsAtPath(path) else { return }
let managedObjectModel = NSManagedObjectModel(contentsOfURL: NSBundle.mainBundle().URLForResource("xxxxx", withExtension: "momd")!)!
let persistentStoreCoordinator = NSPersistentStoreCoordinator(managedObjectModel: managedObjectModel)
let options = [NSMigratePersistentStoresAutomaticallyOption: true, NSInferMappingModelAutomaticallyOption: true]
let oldPersistentStore = try! persistentStoreCoordinator.addPersistentStoreWithType(NSSQLiteStoreType, configuration: nil, URL: from, options: options)
try! persistentStoreCoordinator.migratePersistentStore(oldPersistentStore, toURL: to, options: nil, withType: NSSQLiteStoreType)
try! NSFileManager.defaultManager().removeItemAtPath(path)
}
let oldStoreUrl = xxxxx
let newStoreUrl = NSFileManager.defaultManager().containerURLForSecurityApplicationGroupIdentifier("group.com.xxxxx")!.URLByAppendingPathComponent("xxxxx.sqlite")
migrate(oldStoreUrl, to: newStoreUrl)
環境
Xcode 7.3
Swift 2.2