意外と簡単、iOSアプリへAppleWatchアプリを繋ぎこみ!!

# はじめに
AppleWatchは発売からすでに5年が経過しようとしていますが、
アプリの作成に関する記事、事柄というのはまだあまり世の中に出回っていない認識です。
「今iOS向けに作成しているアプリに、AppleWatchのアプリを紐づけて配信したいけど、どんな手順が必要なんだろう？」
といったことでお困りの方も多いのではないかと多います。

本記事はそんな方向けに、**既存のiOSアプリへAppleWatchプロジェクトを紐づける際の手順・注意点を記載します。**

# 手順
  ※以下はすでにiOSアプリが存在する前提で話を進めていきますが、
   仮にAppleWatch単体で動くアプリを作りたい！という場合にも、概ね参考にはなるかと思います。

## AppleWatchプロジェクトの作成
 - なにはともあれ、まずはXCodeを開きます。
 - 次に、Xcode上部の `File → New → Target...` を選択します。  
   下記のようなウィンドウが開くので、[Watch App for iOS App] を選択し、[Next]を押下します。
   ※ちなみにここで[Watch App]を選択すると、**AppleWatch単体で動くアプリ**になりますのでご注意ください。
   ![スクリーンショット 2020-01-24 14.07.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/572537/26cb339f-cacb-dd74-9d87-0ec4355b1304.png)

 - 次の設定画面では、`Product Name` に対してAppleWatchAppの命名を行います。
 
    ``(iOSアプリの名称)WatchApp``などが一般的でしょうか？
    OrganizationNameは記憶上使ったことがない気がするので、**適当に入力すればいったんOK**です。
    → **project.pbxprojファイルにもこの名称は刻まれていなかったため、本当に不要かも・・・？**

    ちなみに下記画像にも現れている`Complication`というのは、
    **AppleWatchのホーム画面にアプリへのショートカットを配置するためのもの**です。
    少々設定/作成に難がありますが、あったら便利な機能ではあるのでこの段階でcheckを付けておくのもアリかと。
   ![スクリーンショット 2020-01-24 14.09.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/572537/eb6bf1dd-6a47-67b6-6aa9-e2dae1d22de0.png)
  
 - ここまでくると、TargetにWatchAppとWatchAppExtensionの**2つのTarget**が追加されたかと思います。
   これらは依存関係がありますので、AppleWatchのアプリを動かすのには2個セットが当たり前、と考えておいてもらってOKです。

    プロジェクトの作成自体はこれで完了です！:metal:

## ProvisionigProfileの追加
 - 今後AppStoreへ審査提出していく際には、 
   今までのiOSアプリに対してこれら２種のTargetが追加配布されるような形となります。 
   XCodeの `Signing & Capabilities`の欄をチラ見してしまった方はお気づきかもしれませんが、 
   つまり**新しいProvisioningProfileも２つ必要**ということです。

 - ここは特に難しい点はありませんが、iOSアプリ同様にApple Developer Programより、 
   **Identifierの登録×2**と**Provisioning Profileの登録×2**を行なってください。

 - Identifier登録時に必要なCapabilitiesの登録についても、AppleWatchだから、という特別な項目はありませんのでご安心を。

## WatchAppの中身を作っていく
 - ここは割愛。  
   最近ですとSwiftUIを用いてのUI作成もできるようなので、今後どんどんアプリ作成の幅が広がることを願います...!!!

## Buildして実機で動かしてみたい！
 - 通常のiOSアプリと同様です。 
   まずはAppleWatchとペアリングしたiPhoneを、PCに接続してください。 
   すると、接続中のDevice一覧に `iPhone + AppleWatch`といった形で表示されるかと思います。 
   TargetはiOSアプリのままでも、Buildすれば勝手にAppleWatchにインストールされます。 
   ただし、**AppleWatch側のデバッグを行いたい場合には**、TargetをAppleWatchアプリに設定する必要があります。

     ちなみにiOS同様、**シュミレーターで動かすことも**勿論可能です。
     操作性はかなり悪いですが。。。（笑）

# AppleWatchアプリならではの注意事項
 1. [ 審査提出について ] 
    iOSアプリ, WatchApp, WatchAppExtensionのそれぞれの**Version, Buildの値は同一**である必要があります。 
    これを守らないとArchive後のUploadフローで怒られてArchiveやり直しになるので注意が必要です。
    また当然ですが、AppleWatch用のアイコンを用意したり、AppStoreに掲載するためのスクリーンショットなどを撮る必要もあります。
    初めて提出する際は、実際の利用に際したビデオの作成であったり、アカウント情報を求められることもあるのでご注意を。
 
    詳しい仕様は下記URLで確認可能です。
    https://help.apple.com/app-store-connect/#/devd274dd925
 2. [ アプリインストールについて ]
    以下のすべての場合において、AppleWatchアプリは**iOSアプリをインストールすることにより自動で**インストールされます！
    - 実機デバッグ時
    - DeployGateなどのアプリインストールサービスを用いた際
    - TestFlight
    - 実際のAppStoreからのインストール  
    ※逆に「AppleWatchからのみアプリアンインストールしたい」みたいなケースでは、  
    iPhoneに備わっている[Watch]アプリから削除することが可能です。
 3. [ 審査自体について ]
    AppleWatchのアプリが追加されたからといって特段**審査が遅くなる、といったことはない**ように感じます。
 4. [ Targetの依存関係について ]
    XCodeのGUI上で、プロジェクトの`Build Phases`をみればわかりますが、
    各依存関係は以下のようになっています。
    `WatchAppExtension → WatchApp → iOSApp`

    少し奇妙ではありますが、`Embed`という形で逆向きの依存関係も持っています。
    これも`Build Phases`の`Embed Watch Content`, `Embed App Extensions`で確認可能です。
 5. [ Apple Watchへの通知ってどうなるの？ ]
    特に意識せずとも、**AppleWatchが勝手に制御**してくれます。
    iOSアプリへ通知があって、かつApple Watchを装着していれば振動とともに教えてくれます:sparkles:

# おわりに
たしかにAppleWatchの（特に日本向け）記事は少ないのですが、
こうまとめてみるとプロジェクトのスタートも、審査に必要なことも比較的明確でそれほど怖いものではありません。
Let's enjoy AppleWatch!