【Swift】Core Data × Share Extension!データを共有する方法

この記事からわかること
- SwiftでCore Data × Share Extensionを活用する方法
- データを共有する定義方法
index
[open]
\ アプリをリリースしました /
環境
- Xcode:15.0.1
- iOS:17.0
- Swift:5.9
- macOS:Sonoma 14.1
参考文献:Core Data and App extensions: Sharing a single database
Core Data × Share Extensionでデータを共有する方法
Core Dataで保存しているデータをShare Extension側からも参照したい場合はCore Dataの保存先をAppGroupsで使用する領域に生成する必要があるようです。
App Groupsで共有コンテナーを作成する方法などは以下の記事を参考にしてください。
おすすめ記事:【Swift UI】App GroupsでWidgetやアプリ間でデータを共有する方法!
Core Dataでは保存先のURLをカスタマイズすることができるのでそれを共有コンテナー領域に設定します。共有コンテナー領域はFileManager
クラスのcontainerURL(forSecurityApplicationGroupIdentifier:)
メソッドでグループ名を指定することで取得することができます。
let container = NSPersistentContainer(name: "TestAppName")
guard let fileContainer = FileManager.default.containerURL(forSecurityApplicationGroupIdentifier: "group.com.XXXXX") else {
fatalError("共有ファイルコンテナを作成できませんでした。")
}
let storeURL = fileContainer.appendingPathComponent("TestAppName.sqlite")
let storeDescription = NSPersistentStoreDescription(url: storeURL)
container.persistentStoreDescriptions = [storeDescription]
container.loadPersistentStores(completionHandler: { (storeDescription, error) in
if let error = error as NSError? {
fatalError("Unresolved error \(error), \(error.userInfo)")
}
})
あとはiOSアプリ側とShare Extension側で共有のCore Dataリポジトリクラスなどを作成することで両者でデータを共有することができるようになります。
まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。
ご覧いただきありがとうございました。