Xamarin.iOS で Apple Watch を触ってみる（ "Add New Project..." から Build まで）

# 前提
この記事は以下の前提がありまーす。

## 環境

+ _OS X El Capitan 10.11.1_
+ _Xamarin Studio Version 5.10.3 (build 26)_
+ _Apple Developer Tools Xcode 7.2.1 (9548.1)_
+ _Xamarin.iOS Version: 9.4.2.27 (Business Edition)_
+ _2016/03時点でのDeveloper Member Center及びDeveloper登録_

## 備考

+ 自分用のメモ
+ コーディングはなし

**そして現在のXamarin.iOSではWatch OS1しか開発できません。**
https://developer.xamarin.com/guides/ios/watch/

なので今更感もありますが、自分の勉強のために作っています。あしからず

以上。

# 本題
[ここ](https://developer.xamarin.com/guides/ios/watch/deployment/)に書いてあることをやっています。
個人的には公式のDocumentよりはわかりやすい！
そしてこれ以上に説明することがない！けど備忘録の代わりでもあります。

## Develop Member Centerにて
Watch用のApp IDは自動的に作られるわけでもないので独自のルールに沿って作りましょう。

+ `com.myapp.ayasesh` → `group.com.myapp.ayasesh`
+ `com.myapp.ayasesh.watchkitextension` → `group.com.myapp.ayasesh`
+ `com.myapp.ayasesh.watchkitapp`

### 注意点
`GroupID`を`AppID`の後に作っているので
`AppID`から`GroupID`へのひも付けを忘れないようにしましょう。
そしてひも付けが必要なのは`iOSApp`と`WatchExtension`で、`Watch App`はしないでください。
(このあたりはWatchOS1の仕様のまま？XamarinでOS2のアプリが作れるようになったら変わる可能性大)


ローカルで実機テストしたい場合は、
上記のAppIDsとGroupIdを作った後、AppleWatchのidentifierを追加しましょう。
自分の環境だとここで登録して作らないとデプロイは無理でした。
(途中までゲージが伸びて落ちるを繰り返す)

ID作成とDevice登録が終わりましたら、ID毎に`provisioning profile`を作ればおｋ。

## Xamarin Studioにて
### プロジェクト作成
いつもと同じ通りに New Solution... から　
Apple Watchのプロジェクトは直接作れませんので iOSプロジェクトもしくはCros-PlatformのAppから作ります。
Organizationは上記のIDを考慮した方が楽です。
今は`git init`と`.gitignore`を作ってくれるのがいいですね。

プロジェクトができたら、ソリューションを右クリックして Add -> Add New Project... を選択
iOS -> Extension -> Apple Watch -> WatchKit Appで
![newProject.png](https://qiita-image-store.s3.amazonaws.com/0/64093/d23503e1-f5eb-a78b-3d7a-894320f5fa1e.png)

その後は対象のAppを選択します。間違えることはないですねｗ
![newProject2.png](https://qiita-image-store.s3.amazonaws.com/0/64093/30de25fc-ffa2-ccb4-7f84-5836bbf77752.png)

### シミュレーター起動
一応このままでもビルドとシミュレーターへのビルドは出来ます。
早速やってみましょう。

WatchKitExtensionのプロジェクト(長いので移行WKEで)を`Set As Startup Project`してみましょう。
左上の実行できるシミュレーターの数が少なくなったのがわかると思います。
![スクリーンショット 2016-03-15 16.51.10.png](https://qiita-image-store.s3.amazonaws.com/0/64093/d82a2b5a-2243-02dd-585a-f6a9b0df9b86.png)

きな臭くなってきましたがWatchOS2では開発できないからだと思います。
では適当に選択して実行を押してみましょう。

**... 実行できましたか？**

#### 実行できない場合

``` console:ApplicationOutput
Starting iPhone 6
error MT0000: Unexpected error - Please file a bug report at http://bugzilla.xamarin.com
error HE0020: Could not find a paired Watch device for the iOS device 'iPhone 6'.
```

この場合はXcodeのバグらしいです。
ただ起動したiPhoneのシミュレーターにWatchのシミュレーターがペアリングされてないのでペアリングしましょう。
Xcodeを開いて　Window->Devices 下の+からAdd Simulator　deviceとos、Pair用のサイズを選択してください。
注意点はXamarinが対応できるOSとiPhoneを選ぶことです。OSは良いのですが、Deviceは iPhone6にしておきましょう。

### info.plistとEntitlements.plistの設定
何も設定していない場合はこんな感じだと思います。
![WKAinfo.png](https://qiita-image-store.s3.amazonaws.com/0/64093/ee13c4d0-055a-52a0-4671-40b0495c39e7.png)
![WKEinfo.png](https://qiita-image-store.s3.amazonaws.com/0/64093/5e0208a7-abc2-b51a-9f97-4a040843f007.png)
変更点はしいて言えばApplication Nameぐらい。
表示されるのはWKAのApplicationNameなのでそちらを変更しておきましょう

EntitlementsはiOSとWKEのプロジェクトで以下の変更が必要です。
![Entitlements.png](https://qiita-image-store.s3.amazonaws.com/0/64093/81993742-1e72-51b7-9d72-81d0f2cfef2f.png)

### 証明書の設定
もともとAutomaticになっているので設定いらずです。
ですが確認のために項目が表示されているかはみたほうが良いと思います。

各々のプロジェクトの Option -> Build -> iOS Bundle Signing
順番があるかわかりませんが iOSプロジェクトからやると問題ないと思います。
Xamarin Studioは起動時に証明書のロードしていると思います。
なので表示されない場合は、落ち着いてXSを一度再起動する、またはXcodeからProvisioning Profilesを確認しましょう。

# おしまい
自分の環境では上記のやり方でXamarinStudioで実機デプロイまで出来ました。
抜け漏れがありましたらコメントいただけると嬉しいです。

もしくはこれでも出来ないという人もお手伝いできると思いますのでコメントください:)

次はコーディングの予定！
ありがとうございました。

（XFのgestureは諦めた！）