しめ鯖日記

swift, iPhoneアプリ開発, ruby on rails等のTipsや入門記事書いてます

AppleWatchとiPhoneでデータを共有する方法

今回はApp Groupという機能を使った共有方法を利用しました。
App Groupとはアプリ間でデータのやり取りができる機能で、ウィジェットアプリにデータを渡す時にも利用します。

App Groupの設定

最初にApp Groupを使う為の設定をします。
まずは下記の画面でApp GroupをOnにします。

f:id:llcc:20150517231910p:plain

設定をOnにした後はApp Groupsの追加します。
AppGroupsの中にある+ボタンを押下してAppGroupsの名前を追加します。
今回は試しにgroup.datasという名前で登録しました。

f:id:llcc:20150517234409p:plain

設定通常アプリのTargetとAppleWatchのExtensionのTargetの2箇所に設定する必要があるので注意が必要です。
それとProvisioningProfileもAppGroupの設定を反映したものを再取得する必要があるので、そちらも気をつけないといけません。

使い方

使い方はとても簡単で、下のように先ほど設定した名前でUserDefaultsを作って値をセットするだけです。
これで両方で値の受け渡しをする事ができます。
それとNSString以外は渡せないようなので注意が必要です。

// iPhone側で値をセットする
NSUserDefaults *defaults = [[NSUserDefaults alloc] initWithSuiteName:@"group.datas"];
[defaults setObject:@"test" forKey:@"userInput"];
[defaults synchronize];
// AppleWatch側で値を取得する
NSUserDefaults *defaults = [[NSUserDefaults alloc] initWithSuiteName:@"group.datas"];
NSString *text = [defaults stringForKey:@"userInput"];

AppleWatch側からiPhoneへの全く同じ方法で値を渡す事ができます。

その他のiPhone/AppleWatch間の値の渡し方

App Groupを使えばファイルの受け渡しも可能です。
試してはいないのですが、ファイルの受け渡しを利用してCoredataの共有もできるようです。

App Group以外でも、通知を使ったデータのやりとりができるようです。
そちらも機会あれば試してみたいと思います。