LoginSignup
2
3

More than 5 years have passed since last update.

Swift3でCoreDataをApp Extension間で共有する

Last updated at Posted at 2017-08-31

もうiOS11が出そうな時期だというのに、未だにiOS10がうまく使えていない。
Share Extensionを使うアプリを作っていて詰まったところが解決できたのでメモ。

Core DataとかApp Extensionとかいうワードで検索しても、iOS9までの方法しか見つけらんなくて大変困った。
NSPersistentContainerとかSQLiteとかそういうワードでの検索が必要だったようだ。

AppExtensionを使うアプリでCoreDataを使う時、XCODEが自動生成してくれるやつのままだと、ExtensionごとにSQLiteのデータベースファイルを作ってしまうので共有できない。
保存先ディレクトリを指定できればいい。

defaultDirectoryURL()を上書きするとよいらしい。
https://developer.apple.com/documentation/coredata/nspersistentcontainer/1640597-defaultdirectoryurl

他のやり方でも出来たが、たぶんこれが正着かと

class MyPersistentContainer: NSPersistentContainer {
    override class func defaultDirectoryURL() -> URL {
        return FileManager.default.containerURL(forSecurityApplicationGroupIdentifier: "group.XXXXXXX")!
    }
}
2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3