koogawa log

iOS、Android、foursquareに関する話題

【Apple Watch】アプリ固有の設定を定義する

※この記事は一般に公開されている範囲で書いております

2015/2/3(日本時間)、Xcode 8.2 Beta 5がリリースされました。 このバージョンからApple WatchでもSettings bundleを利用できるようになりました。

Settings bundles are now supported for WatchKit extensions running in iOS Simulator. The Apple Watch app displays the controls you specify in your settings bundle. To learn how to create a settings bundle for your WatchKit extension, see Settings in Apple Watch Programming Guide.

Settings bundleというのは、iPhone標準の設定アプリに各アプリ固有の設定項目を置けるアレのことです。

settings_myapp.jpg

Implementing an iOS Settings Bundle より引用)

実装手順

  1. Xcode から File > New > File を選択します
  2. 左の「Apple Watch」セクションから「WatchKit Settings Bundle」を選択して次へ進みます
  3. Settings-Watch.bundle という名前でSetting bundleを作成し、それをiOSアプリのターゲットに追加します(Settings-Watch.bundleという名前は、iOSアプリのSettings bundleと分けるためだそうです)

すると、次のようなツリー構造でSettings Bundleが追加されているはずです。

Settings-Watch.bundle/
   Root.plist
   en.lproj/
      Root.strings

Root.plist にあらかじめサンプル設定が記載されているので、そちらを参考にするとよいでしょう。

ここまで実装できればApple Watchの設定画面に Root.plist で記載した項目が表示されるようになります。設定画面がどの場所に表示されるか?についてはNDAに抵触する可能性があるため解説を自粛しておきます。

設定された値にアクセスできるようにする

Settings Bundleで保存される値は、iOSアプリとWatchKit extensionの両方からアクセス出来る必要があります。なぜなら、Settings Bundleで保存される値はApple Watch側ではなく、iOSアプリ側に保存されるからです。

そのためには App Groups の仕組みを利用します。事前に設定したApp groupsのIdentifierを Root.plistApplicationGroupContainerIdentifier に記載しておきましょう。

設定された値にアクセスする

設定された値にアクセスするには NSUserDefaults を使います。

NSUserDefaults *defaults = [[NSUserDefaults alloc] initWithSuiteName:@"group.example.MyWatchKitApp"];
BOOL enabled = [defaults boolForKey:@"enabled_preference"];

NSUserDefaultsについてさらに詳しく知りたい場合は NSUserDefaults Class Reference を参照してください。

参考資料