RealmファイルをApp Groupで共有 / 削除

  • 13
    Like
  • 0
    Comment
More than 1 year has passed since last update.

App Extension等使っているとApp GroupでRealmファイルを共有したい場合があるかと思います。その手順をメモ。

まずは App GroupのコンテナのURLを取得

NSURL *containerPath = [[NSFileManager defaultManager] containerURLForSecurityApplicationGroupIdentifier:@"group.com.test"];

Realmのファイルパスを作る
好みによって、フォルダわけしてもいいかもしれない (Realm DBを消す際にフォルダ単位で消せるため )

[containerPath URLByAppendingPathComponent:@"test.realm"]

後は、用意したURLをRMLRealmConfigurationの+ (void)setDefaultConfiguration: でセットしてあげるだけ。以下、全コード

- (void)setupDB
{
    NSURL *containerPath = [[[NSFileManager defaultManager]
                            containerURLForSecurityApplicationGroupIdentifier:@"group.com.test"]
                            URLByAppendingPathComponent:@"test.realm"];

    RLMRealmConfiguration *config = [RLMRealmConfiguration defaultConfiguration];
    config.path = containerPath.path;

    NSLog(@"Realm file path: %@", config.path);

    [RLMRealmConfiguration setDefaultConfiguration:config];
}

もちろん、他の箇所で[RLMRealm defaultRealm]を呼び出す前に呼んでください。


追記. Realmの削除

上記、Realmをフォルダにした場合は以下の方法で削除が可能です。 ( 公式のDocumentよりも簡単っぽい )。
[self realmFolderURL] はRealmフォルダのパスを示しています。

- (void)dropDB
{
    NSFileManager *manager = [NSFileManager defaultManager];
    NSError *error = nil;

    [manager removeItemAtURL:[self realmFolderURL] error:&error];

    if (error) {
        // error handling
        NSLog(@"error: %@", error);
    }
}

ちなみに、普通に削除する場合は公式を見ればよい