Apple Watchで実機検証する


Apple Watch用アプリ(WatchKitアプリ)を実機に転送して検証する際、新たに手順が増えてしまったようなので、メモも兼ねて掲載します。

WatchKitアプリの構成

WatchKitアプリは、母艦となるiOS端末のアプリ(iOS App)とApple Watch上のアプリ(WatchKit App)があり、その間をiOS App内のWatchKit Extensionで橋渡しするような構成になっています。

iOS Appに加えて、WatchKit用の2つのtargetがあるため、それらの設定も正しく行わないとWatchKitアプリは実機に転送できません。

wkAppArchitecture

Apple Watch Programming Guideより

 

プロジェクトの作成

まずはiOS Appのプロジェクトを作成します。

プロジェクト名は適当に”wktrial”としておきます。

 

createApp

 

このプロジェクトに、WatchKit用のtargetを追加します。

File > New >Target…

addTarget

 

Apple Watch > WatchKit App

addWkApp

 

WatchKit AppとWatchKit Extensionがプロジェクトに追加されます。

addDoneWKApp

 

追加された各Targetの情報を確認すると、それぞれのバンドルIDはiOS AppのバンドルIDにサフィックスが付与されたものなっています。

[5/27 追記]WatchKit Extension, WatchKit Appの各バンドルはiOS AppのバンドルIDにサフィックスが付与されていないもの(今回の例で言えば jp.riaxnp.watchkitextension など)に設定した場合、ビルド時にエラーとなるようです。

  • iOS App(バンドルIDは~.wktrial)

bundleOfiOSApp

 

  • WatchKit Extension(バンドル IDは~.wktrial.watchkitextension)

bundleOfWKExt

 

  • WatchKit App(バンドル IDは~.wktrial.watchkitapp)

bundleOfWKApp

 

Apple WatchをDev Centerに登録

Apple Watchにアプリを転送するには、iOS端末と同様に、Dev Centerに端末を登録する必要があります。

どうやら端末登録台数はiOS端末, Apple Watch合わせて100台のようなので、端末のやりくりについてはまた頭が痛くなりそうです…

Apple WatchのUDIDは、ペアリングしているiPhoneをMacに接続することで確認できます。

あとは、iPhoneのときと同様にUDIDをコピーしてDev Centerに登録します。

Window > Devices

showWatchUDID

 

Provisioning Profileの作成

先ほど登録したApple Watchと、母艦となるiOS端末を紐付けたProvisioning Profileを作成します。

3つのtargetそれぞれにApp ID/Provisioning Profileを作るのはかなり面倒なので、検証のみであればワイルドカードで十分です。

アプリを実行

iOS App, WatchKit Extension, WatchKit Appのそれぞれに、作成したProvisioning Profileを指定し、アプリをiOS端末に転送します。

アプリがiOS端末に転送されれば、ペアリングされているApple Watchにもアプリが転送されます。

  • iOS App

setProv2iOSApp

 

 

  • WatchKit Extension

setProv2WKExt

 

  • WatchKit App

setProv2WKApp

 

その他 メモ

試してみたところ、iOS AppのProvisioning Profileには、Apple Watchの端末情報は紐付けられていなくても問題ないようです。

 

各Target内のinfo.plist内で、お互いのバンドルIDを参照しているためか、各TargetのバンドルIDを同一にするのはNGのようです。

Push通知を使う場合などはワイルドカードが使用できないことので、この場合はApp IDやProvisioning Profileを分けて作る必要があります。

なので、端末台数のことも含めて、Apple Watch用のアプリを作る場合にはDev Center上での管理がまた面倒なことになりそうです。