2014/10/20

App GroupsとNSUserDefaultsでiOSアプリ間のデータを共有する

App Extensionを作ったりしていると、本体アプリのデータを利用したくなることがあります。

そのための手段のひとつに、App GroupsとNSUserDefaultsを利用する方法があります。 同一デベロッパID上でのアプリ間のデータ共有を行うことができます。

利用するための手順は、次のように非常にシンプルです。

  1. XcodeでApp Groupsを取得する
  2. 共有したいアプリ同士に同じApp Groupsを追加する
  3. NSUserDefaults initWithSuiteName:でデータを保存/取得するコードを書く

App Groupsの取得

Xcode上の各ターゲットのCapabilitiesにApp Groupsという項目がありますので、それをONにします。

すると、プロビジョニングで利用するチームを選択するように言われるので選択します。

続いて、App Group名を登録します。一意の名前にするために、DNS風に書くほうがよいみたいです。

無事追加されました。

なお、App Groupを設定したアプリには「<ターゲット名>.entitlements」というplistファイルが生成されています。

アプリへのApp Groupsの追加

データを共有したい他のアプリでもApp GroupsをONにして、App Groupを追加します。

NSUserDefaults initWithSuiteName:

設定したApp Groupsを利用して、NSUserDefaultsを使います。

initWithSuiteName:suitenameにはApp Groupの名前を指定して、新規オブジェクトを生成しましょう。

NSUserDefaults* sharedDefaults = [[NSUserDefaults alloc] initWithSuiteName:@"group.com.blogspot.safxdev.miodashboard"];

あとは、通常のNSUserDefaultsと同じように利用するだけです。

// データの保存
[sharedDefaults setObject:userName forKey:@"userName"];

// データの取得
NSString* userName = [sharedDefaults objectForKey:@"userName"];

関連リンク

0 件のコメント:

コメントを投稿

注: コメントを投稿できるのは、このブログのメンバーだけです。