[iOS][watchOS]シミュレータ用にビルドしたアプリを配布する

![スクリーンショット 2016-04-14 18.53.56.png](https://qiita-image-store.s3.amazonaws.com/0/39027/dbd37f35-8e66-9b7c-2b84-674773ff2147.png)

開発中アプリの配布といえばAdHocアプリをビルドしての配布がありますが、シミュレータ用にビルドしたアプリを配布する方法もあります。

実機で動作確認をする必要が無い場合や、プロビジョニングファイルの準備が面倒だったり、ソースコードを渡したくないエンジニアにアプリの動作を確認してもらうなどで有効かと思います。

シミュレータ用アプリを配布するまでと、アプリを受け取った側がシミュレータにアプリをインストールするまでの、できるだけ簡単な手順を作成しました。

※OS X El Capitan (10.11.4)とXcode 7.3での確認結果を基に記事を作成しています。

# シミュレータ用アプリのビルドと配布

## 1. アプリのビルド

Xcodeからシミュレータ用のアプリをビルドすると、下記のディレクトリ配下にアプリが作成されます。

```bash:シミュレータ用にビルドしたアプリが保存されるディレクトリ
~/Library/Developer/Xcode/DerivedData/*/Build/Products/*-iphonesimulator/
```

## 2. シミュレータ用にビルドされたアプリのパスを調べる

`ls`コマンドでシミュレータ用にビルドされた\*.appを表示しアプリのパスを調べます。

```bash:シミュレータ用にビルドされたアプリのパスを調べる　
$ cd ~
$ ls -dt Library/Developer/Xcode/DerivedData/*/Build/Products/*-iphonesimulator/*.app | head -1
Library/Developer/Xcode/DerivedData/DemoApp-dfhsvtzcrpubnsfdxlmkocxgrjst/Build/Products/Debug-iphonesimulator/DemoApp.app
```

`ls`の`-t`オプションはファイル更新時間の最新順にソートを行うオプションです。
`ls`コマンドの出力の1行目には、最後にビルドされたアプリのパスが出力されているはずなので`head -1`で最後にビルドされたアプリのパスを取得しています。

## 3. 配布用にアプリをzipファイルにする

作成された \*.app をそのまま配布すればOKですが、\*.appの実態はディレクトリなのでzipファイルにしてから配布するのが良いでしょう。

アプリが保存されているディレクトリを開き、\*.appからzipファイルを作成します。

```bash:appが保存されているディレクトリを開く
$ open Library/Developer/Xcode/DerivedData/DemoApp-dfhsvtzcrpubnsfdxlmkocxgrjst/Build/Products/Debug-iphonesimulator/DemoApp.app/..
```

![zip.png](https://qiita-image-store.s3.amazonaws.com/0/39027/a1776d66-3a34-407f-5f7c-bc29bc1d0b1b.png)

コマンドラインからzipファイルを作りたい場合は、下記の手順で作成できます。
配布を自動化したい場合は、コマンドラインからzipファイルの作成を行うのが良いですね。

```bash:appからzipファイルを作成
$ ditto -ck --sequesterRsrc --keepParent 【appのパス】 【保存するzipのパス】
```

配布用ファイルの作成手順は以上となります。

# シミュレータへのアプリのインストール手順

アプリを受け取った側は、下記の手順でシミュレータにアプリをインストールします。

## 1. シミュレータで利用できるデバイス一覧を表示

`xcrun instruments -s`コマンドで利用できるデバイスの一覧を表示します。

```bash:シミュレータで利用できるデバイス一覧を表示
$ xcrun instruments -s | grep Simulator
2016-04-13 23:02:12.902 instruments[33430:3069005] WebKit Threading Violation - initial use of WebKit from a secondary thread.
Apple TV 1080p (9.2) [65974E2D-13CD-4677-UDID-125F8E0CE635] (Simulator)
iPad 2 (8.4) [F0762704-BC53-4ED6-UDID-F3A87C74ADEC] (Simulator)
iPad 2 (9.3) [EC6FD2AD-01F4-4F99-UDID-6695AEEC0682] (Simulator)
iPad Air (8.4) [CECF346B-D124-47C6-UDID-C16D7802A96C] (Simulator)
iPad Air (9.3) [1B3F987C-36D6-4210-UDID-CD1E99FC1EDD] (Simulator)
iPad Air 2 (9.3) [2E54CC69-07B0-47DE-UDID-BDCEE48A22BB] (Simulator)
iPad Pro (9.3) [93F28197-6A1A-42F0-UDID-8BFBAC076D7B] (Simulator)
iPad Retina (8.4) [832F8347-CA45-4C8E-UDID-D3F162512FC1] (Simulator)
iPad Retina (9.3) [D81BF3F5-B564-4CE7-UDID-E06F1891D9E7] (Simulator)
iPhone 4s (8.4) [38A86D07-E4E4-433D-UDID-79BD0E6DC1C5] (Simulator)
iPhone 4s (9.3) [461D409F-E598-4795-UDID-F19D725A6FBF] (Simulator)
iPhone 5 (8.4) [88113205-6E0D-44B1-UDID-63DC85FF50C1] (Simulator)
iPhone 5 (9.3) [E221914E-6CC0-4D65-UDID-472843B379BF] (Simulator)
iPhone 5s (8.4) [03592F14-E1AE-464F-UDID-7400249037F4] (Simulator)
iPhone 5s (9.3) [54021DC5-4C11-4033-UDID-9C1A4CB0CF7B] (Simulator)
iPhone 6 (8.4) [B9330956-95AF-4C21-UDID-8B11886B2BF3] (Simulator)
iPhone 6 (9.3) [59EFC74E-F66C-4605-UDID-CEED74ABDD29] (Simulator)
iPhone 6 Plus (8.4) [52A8865F-4316-4431-UDID-EEA5F0E6D899] (Simulator)
iPhone 6 Plus (9.3) [D8A2F4F9-7D84-4A88-UDID-0323803583DE] (Simulator)
iPhone 6s (9.3) [2400D44E-55EB-43B4-UDID-1F0277E0DB6D] (Simulator)
iPhone 6s (9.3) + Apple Watch - 38mm (2.2) [A4953BF6-80D3-4226-UDID-22219D44CF15] (Simulator)
iPhone 6s Plus (9.3) [2B7AFC0F-B5EB-4939-UDID-3871D6A227E1] (Simulator)
iPhone 6s Plus (9.3) + Apple Watch - 42mm (2.2) [A69DFB85-558B-48EE-UDID-FCBB74FE7B5F] (Simulator)
```

`[ ]`で囲まれた部分がデバイスのUDIDとなります。
このUDIDを指定してシミュレータの起動やアプリのインストールを行います。

## 2. シミュレータの起動

利用したいデバイスのUDIDを指定しシミュレータを起動します。

```bash:シミュレータの起動
$ open -a Simulator --args -CurrentDeviceUDID 【UDID】
```

## 3. アプリのインストール

シミュレータが起動したら、アプリをインストールします。

```bash:UDIDを指定したアプリのインストール
$ xcrun simctl install 【UDID】 【アプリ名】.app
```

UDIDは`booted`に置き換えることが出来ます。
bootedを指定すると現在起動中のシミュレータにアプリがインストールされます。

```bash:bootedを指定したアプリのインストール
$ xcrun simctl install booted 【アプリ名】.app
```

無事にインストールが完了すると、シミュレータのホーム画面にアプリのアイコンが表示されます。

<img width="320" alt="Simulator Screen Shot 2016.04.14 18.22.22.png" src="https://qiita-image-store.s3.amazonaws.com/0/39027/ec684b7e-433d-e069-9639-fc0f78783e66.png">

以上です。