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

この記事からわかること

  • SwiftCore Data × Share Extension活用する方法
  • データ共有する定義方法

index

[open]

\ アプリをリリースしました /

みんなの誕生日

友達や家族の誕生日をメモ!通知も届く-みんなの誕生日-

posted withアプリーチ

環境

参考文献: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リポジトリクラスなどを作成することで両者でデータを共有することができるようになります。

まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。

ご覧いただきありがとうございました。

searchbox

スポンサー

ProFile

ame

趣味:読書,プログラミング学習,サイト制作,ブログ

IT嫌いを克服するためにITパスを取得しようと勉強してからサイト制作が趣味に変わりました笑
今はCMSを使わずこのサイトを完全自作でサイト運営中〜

New Article

index