watchOS の概要

Note

最新機能の概要については、「watchOS 3 の概要」を参照してください。

watchOS について

watchOS アプリ ソリューションには、以下の 3 つのプロジェクトがあります。

  • watch 拡張機能 – watch アプリのコードを含むプロジェクト。
  • watch アプリ – ユーザー インターフェイスのストーリーボードとリソースを含みます。
  • iOS 親アプリ – このアプリは通常の iPhone アプリです。 watch アプリと拡張機能は、ユーザーのウォッチへの配信のために iPhone アプリへとバンドルされます。

watchOS 1 アプリでは、拡張機能のコードは iPhone 上で実行され、Apple Watch は実質的に外部ディスプレイとなります。 watchOS 2 と 3 のアプリは、完全に Apple Watch 上で実行されます。 この違いを以下の図に示します。

watchOS 1 と watchOS 2 (以降) の違いを次の図に示します

ターゲットとする watchOS のバージョンに関係なく、Visual Studio for Mac の Solution Pad において、完全なソリューションは以下のようになります。

Solution Pad

watchOS ソリューションの "親アプリ" は、通常の iOS アプリです。 これは、スマートフォン上で表示できるソリューション内の唯一のプロジェクトです。 このアプリのユース ケースには、チュートリアル、管理画面、中間層フィルター処理、キャッシュなどが含まれることになります。しかし、ユーザーが親アプリを一度も開かずに watch アプリ/拡張機能をインストールして実行することは可能であるため、1 回限りの初期化または管理のために親アプリを実行する必要がある場合は、watch アプリ/拡張機能がユーザーにそのことを通知するようにプログラムする必要があります。

親アプリは watch アプリと拡張機能の提供を行いますが、これらは異なるサンドボックスで実行されます。

watchOS 1 では、これらは、共有アプリ グループを介して、または親アプリの AppDelegateUIApplicationDelegate.HandleWatchKitExtensionRequest メソッドをトリガーする静的関数 WKInterfaceController.OpenParentApplication を介してデータを共有することができます (「親アプリの操作」を参照してください)。

watchOS 2 以降では、WCSession クラスを使用して親アプリと通信するために Watch Connectivity フレームワークが使用されます。

アプリケーションのライフサイクル

watch 拡張機能では、ストーリーボード シーンごとに WKInterfaceController クラスのサブクラスが作成されます。

これらの WKInterfaceController クラスは、iOS プログラミングにおける UIViewController オブジェクトに似ていますが、持っているビューへのアクセス権のレベルは同じではありません。 たとえば、UI にコントロールを動的に追加したり、UI を再構築したりすることはできません。 ただし、コントロールの表示と非表示の切り替えは可能で、一部のコントロールでは、サイズ、透明度、外観のオプションを変更できます。

WKInterfaceController オブジェクトのライフサイクルには、以下の呼び出しが関係します。

  • Awake : 初期化の大部分はこのメソッド内で実行する必要があります。
  • WillActivate : watch アプリがユーザーに表示される直前に呼び出されます。 このメソッドを使用して、最後の初期化、アニメーションの開始などを実行します。
  • この時点で、watch アプリが表示され、拡張機能がユーザーによる入力への応答と、アプリケーション ロジックに従う watch アプリの表示の更新を開始します。
  • DidDeactivate watch アプリがユーザーによって閉じられた後、このメソッドが呼び出されます。 このメソッドが return した後は、WillActivate が次に呼び出されるまで、ユーザー インターフェイス コントロールは変更できません。 このメソッドは、iPhone への接続が切断された場合にも呼び出されます。
  • 拡張機能が非アクティブ化されると、プログラムは拡張機能にアクセスできなくなります。 保留中の非同期関数は呼び出されません。 Watch Kit 拡張機能は、バックグラウンド処理モードを使用しない場合があります。 プログラムがユーザーによって再アクティブ化されたにも関わらず、アプリがオペレーティング システムによってまだ終了されていない場合、呼び出される最初のメソッドは WillActivate になります。

アプリケーション ライフサイクルの概要

ユーザー インターフェイスの種類

ユーザーが watch アプリと行える対話には 3 つの種類があります。 そのすべてが WKInterfaceController のカスタム サブクラスを使用してプログラムされるため、以下のように、前述のライフサイクル シーケンスは汎用的に適用されます (通知は、それ自体が WKInterfaceController のサブクラスである WKUserNotificationController のサブクラスを使用してプログラムされます)。

通常の対話

watch アプリ/拡張機能の対話の大部分は、watch アプリの Interface.storyboard 内のシーンに対応するように記述する WKInterfaceController のサブクラスとのものになります。 これについては、「インストール」と「概要」で詳しく説明されています。 次の図は、サンプルのストーリーボードの一部を示しています。 ここで示す各シーンに対して、対応するカスタムの WKInterfaceController (LabelDetailControllerButtonDetailControllerSwitchDetailControllerなど) が拡張機能プロジェクト内に存在します。

通常の相互作用の例

通知

通知は、Apple Watch にとっての主要なユース ケースです。 ローカル通知とリモート通知の両方がサポートされています。 通知での対話は、Short-Look と Long-Look と呼ばれる 2 つのステージで発生します。

Short Look の表示は短時間で、watch アプリ アイコン、その名前、(WKInterfaceController.SetTitle を使用して指定された) タイトルを表示します。

Long Look は、システムによって提供される sash 領域と [閉じる] ボタンを、カスタムのストーリーボードベース コンテンツと組み合わせます。

WKUserNotificationInterfaceController は、DidReceiveLocalNotification および DidReceiveRemoteNotification メソッドを使用して WKInterfaceController を拡張します。 通知イベントに対応するには、これらのメソッドをオーバーライドします。

通知 UI の設計の詳細については、「Apple Watch ヒューマン インターフェイス ガイドライン」を参照してください

サンプル通知

画面サイズ

Apple Watch の盤面のサイズには 38 mm と 42 mm の 2 つがあり、どちらも 5:4 のディスプレイ比で、Retina ディスプレイを備えています。 それぞれで使用できるサイズは以下のとおりです。

  • 38 mm: 136 x 170 論理ピクセル (272 x 340 物理ピクセル)
  • 42 mm: 156 x 195 論理ピクセル (312 x 390 物理ピクセル)。

watch アプリがどのディスプレイで実行されているかを特定するためには WKInterfaceDevice.ScreenBounds を使用します。

一般的には、より制限の大きい 38 mm ディスプレイでテキストとレイアウトの設計を行った後にスケールアップを行う方が簡単です。 大きい方の環境から始めると、スケールダウンによって醜いオーバーラップやテキストの切り捨てが発生する可能性があります。

画面サイズの扱い方」で詳細を確認してください。

watchOS の制限事項

watchOS には、以下に示すように、watchOS アプリを開発する際に注意すべきいくつかの制限事項があります。

  • Apple Watch デバイスのストレージは限られています。大きなファイル (オーディオ ファイルやムービー ファイルなど) をダウンロードする前に、利用可能な領域に注意してください。

  • 多くの watchOS コントロールは UIKit と類似していますが、クラスが異なり (UIButton ではなく WKInterfaceButtonUISwitch に対応する WKInterfaceSwitch など)、それぞれの UIKit の対応物と比較するとメソッドのセットが限られています。 さらに、watchOS には (日付と時刻を表示するための) WKInterfaceDate などの UIKit にはないコントロールが存在します。

    • 通知を Watch のみにルーティングすることも、iPhone のみにルーティングすることもできません (ユーザーがルーティングに対してどのような種類の制御を行っているかは、Apple によって発表されていません)。

その他の既知の制限事項/よく寄せられる質問:

  • Apple は、サードパーティ製のカスタム ウォッチ盤面を許可しません。

  • Watch が接続されているスマートフォン上の iTunes を制御できるようにする API は非公開です。

もっと読む

以下に示す Apple のドキュメントを確認してください。