App Group を使った情報共有方法(準備)
さて、 App Groupを使うためには、まず iOS Dev Centerで App GroupのGroup IDを登録します。
「group.com.example.mygroup」というように、Bundle Identifierと同じようにドメイン名などから生成した一意な文字列の先頭に「group」をつけるのがいいでしょう。
Dec Centerでの設定が終わったら、共有したいアプリをXcodeで開きます。
ProjectファイルのCapability タブを開き、 App Groupの設定をonにします。
App Groupの機能をonにすると、さきほど iOS Dev Centerで設定した Group IDが表示されるので、チェックボックスをonにします。
すると、プロジェクトにEntitlementファイルが追加されます。
共有をしたいアプリやExtensionのすべてについてこの設定を行ってください。
App Group を使った情報共有 – shared userdefaults
ProjectファイルのApp Groupの設定が完了したら、アプリ間で共通につかえるデータ領域が確保されます。
まずは、共通の設定領域、shared userdefaultsから試してみましょう。
まずは設定した Group IDを使って、NSUserDefaultsのインスタンスを生成します。
あとは、通常のNSUserDefaults処理と同じように使えます。
// Save to sharedDefaults
NSUserDefaults *sharedDefaults = [[NSUserDefaults alloc] initWithSuiteName:@"group.com.example.mygroup"];
[sharedDefaults setObject:@"Kaoru" forKey:@"MyName"];
[sharedDefaults synchronize];
shared userdefaultsからの読み込みもほぼ同様です。
// Load from sharedDefaults
NSUserDefaults *sharedDefaults = [[NSUserDefaults alloc] initWithSuiteName:@"group.com.example.mygroup"];
NSString* strValue = [sharedDefaults objectForKey:@"MyName"];
NSLog(@"strValue is %@",strValue);
App Group を使った情報共有 shared container
さて、次はNSFileManagerを使って、共通領域、shared container のファイルを読み書きしてみましょう。
NSFileManagerのcontainerURLForSecurityApplicationGroupIdentifierを使い、Group IDを指定して shared container のパスへのNSURLを取得します。
そのパスにファイル名を付加して、あとは通常通りにsave/loadをすれば大丈夫です。
// Save to sharedContainer
NSURL *fileURL = [[NSFileManager defaultManager] containerURLForSecurityApplicationGroupIdentifier:@"group.com.example.mygroup"];
fileURL = [fileURL URLByAppendingPathComponent:@"data.plist"];
NSDictionary* dict = @{ @"place":@"Tokyo", @"tel":@"03-1234-5678"};
[dict writeToURL:fileURL atomically:YES];
shared containerからの読み出しも同様です。
// Load from sharedContainer
NSURL *fileURL = [[NSFileManager defaultManager] containerURLForSecurityApplicationGroupIdentifier:@"group.com.example.mygroup"];
fileURL = [fileURL URLByAppendingPathComponent:@"data.plist"];
NSDictionary* dict = [[NSDictionary alloc] initWithContentsOfURL:fileURL];
NSString* strPlace = [dict valueForKey:@"place"];
NSLog(@"strPlace is %@",strPlace);
App Groupで保存された情報
さて、これで複数のアプリから、同じ領域のNSUserDefautlsやファイルにアクセスできるようになりました。
ただ、App Group機能については、まだまだ詳細な情報は少ないです。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/08/28 07:12