Xcode 7 付属のシミュレータに iOS 7.1 シミュレータを登録する

Xcode 7 ではシミュレータのサポートが iOS 8.1 以降となったため、Xcode 7 の環境に iOS 7.1 のシミュレータを入れた時のメモです。

# シミュレータにデバイスを登録する
## シミュレータの状態を調べる

```console
ukida-MBP:~ ukida$ xcrun simctl list
== Device Types ==
iPhone 4s (com.apple.CoreSimulator.SimDeviceType.iPhone-4s)
iPhone 5 (com.apple.CoreSimulator.SimDeviceType.iPhone-5)
iPhone 5s (com.apple.CoreSimulator.SimDeviceType.iPhone-5s)
iPhone 6 (com.apple.CoreSimulator.SimDeviceType.iPhone-6)
iPhone 6 Plus (com.apple.CoreSimulator.SimDeviceType.iPhone-6-Plus)
iPhone 6s (com.apple.CoreSimulator.SimDeviceType.iPhone-6s)
iPhone 6s Plus (com.apple.CoreSimulator.SimDeviceType.iPhone-6s-Plus)
iPad 2 (com.apple.CoreSimulator.SimDeviceType.iPad-2)
iPad Retina (com.apple.CoreSimulator.SimDeviceType.iPad-Retina)
iPad Air (com.apple.CoreSimulator.SimDeviceType.iPad-Air)
iPad Air 2 (com.apple.CoreSimulator.SimDeviceType.iPad-Air-2)
Apple Watch - 38mm (com.apple.CoreSimulator.SimDeviceType.Apple-Watch-38mm)
Apple Watch - 42mm (com.apple.CoreSimulator.SimDeviceType.Apple-Watch-42mm)
== Runtimes ==
iOS 7.1 (7.1 - 11D167) (com.apple.CoreSimulator.SimRuntime.iOS-7-1)
iOS 8.1 (8.1 - 12B411) (com.apple.CoreSimulator.SimRuntime.iOS-8-1)
iOS 8.2 (8.2 - 12D508) (com.apple.CoreSimulator.SimRuntime.iOS-8-2) (unavailable, failed to open liblaunch_sim.dylib)
iOS 8.3 (8.3 - 12F70) (com.apple.CoreSimulator.SimRuntime.iOS-8-3) (unavailable, failed to open liblaunch_sim.dylib)
iOS 8.4 (8.4 - 12H141) (com.apple.CoreSimulator.SimRuntime.iOS-8-4)
iOS 9.0 (9.0 - 13A340) (com.apple.CoreSimulator.SimRuntime.iOS-9-0)
watchOS 2.0 (2.0 - 13S343) (com.apple.CoreSimulator.SimRuntime.watchOS-2-0)
== Devices ==
-- iOS 7.1 --
    iPhone 4s (ECC83C23-0A6C-4A5B-9634-8A9806D60941) (Booted)
    iPhone 5 (D20A275A-095E-4CFC-8A4D-2904637F6168) (Shutdown)
-- iOS 8.1 --
-- iOS 8.2 --
-- iOS 8.3 --
-- iOS 8.4 --
    iPhone 4s (26A64560-2086-4EF2-93AA-3A4B2D9D7561) (Shutdown)
    iPhone 5 (F21E9BDD-DD9B-41CF-8F6D-F4C8828E6384) (Shutdown)
    iPhone 5s (E7670BB5-A4B5-4786-9AD5-6BBFCA80DC9A) (Shutdown)
    iPhone 6 (BC1B784F-37D3-4471-928A-BAAAA1B40351) (Shutdown)
    iPhone 6 Plus (76FC6AEB-57F7-4D22-922D-6A104D6F1C25) (Shutdown)
    iPad Retina (FDF68AFF-F288-484A-AE5F-2209D94520B9) (Shutdown)
    iPad Air (E3CE3ADE-674C-4EBD-9BDA-654F6F0C89EF) (Shutdown)
-- iOS 9.0 --
    iPhone 6s (28ADD6AF-424E-4A89-9DFC-03DD3C609161) (Shutdown)
    iPhone 6s Plus (1E0A6389-2BF4-486A-9311-A8324E2126C1) (Shutdown)
-- watchOS 2.0 --
== Device Pairs ==
```

### Devices
**Booted** か **Shutdown** の状態であれば使用可能な状態です。
ただし、Xcode 7 からでは iOS 7.1 は表示されないため、コンソールにてアプリをインストールする必要があります。詳細は後述します。

### Runtimes
このように、iOS 7.1 が表示されていれば iOS 7.1 のランタイムを使用可能な状態です。
ただし、iOS 8.2 のように **unavailable** と表示されていると使用することができません。

試してはいませんが、iOS 7.1 のランタイムを追加するには、[https://developer.apple.com/downloads/](https://developer.apple.com/downloads/) より、Xcode 6.4 をダウンロード・インストールし iOS 7.1 のシミュレータをインストールすることで使用可能な状態になるはずです。



## デバイスを登録する
デバイス名・デバイスタイプID・ランタイムID を指定し、デバイスを登録します。
新たに、iPhone 5s - iOS 7.1 を登録してみることにします。

```console
ukida-MBP:~ ukida$ xcrun simctl create "iPhone 5s" "com.apple.CoreSimulator.SimDeviceType.iPhone-5s" "com.apple.CoreSimulator.SimRuntime.iOS-7-1"
E8F6F92B-059C-495D-9F73-7766FABB69CE
```
正常に登録されると、デバイス ID が出力されます。

以降、デバイス ID は個々の環境で出力された内容に置き換えて読み取ってください。


# 追加したデバイスでアプリを動作させる
## シミュレータを起動する

アプリのインストールを行う際に、対象のデバイスでシミュレータが起動している必要があるため、予めシミュレータを起動しておきます。

`Xcode: Xcode > Open Developer Tool > Simulator` より、シミュレータを起動し、先ほど作成したデバイス `Simulator: Hardware > Device > iOS 7.1 > iPhone 5s` を選択します。


## アプリをインストールする
デバイス ID・シミュレータ用にビルドされたアプリのパスを指定し、シミュレータにアプリをインストールします。

```console
ukida-MBP:~ ukida$ xcrun simctl install "E8F6F92B-059C-495D-9F73-7766FABB69CE" "/Users/ukida/Library/Developer/Xcode/DerivedData/Example-dyzqjlqrblwfebaxfbztesvphmba/Build/Products/Debug-iphonesimulator/Example.app"
```

## ログを確認する
コンソール（Console.app）より確認ができます。

FILES セクションにある、`~/Library/Logs > CoreSimulator > E8F6F92B-059C-495D-9F73-7766FABB69CE > system.log` を選択します。

# 追記
## 2015/12/11

Mac OS を El Capitan に、Xcode を 7.2 へアップデートしたところ iOS 7.1 シミュレータは起動しなくなりました。

ログを見る限りでは `libcache.dylib` の互換性の問題のようなので、今回は諦めて実機での動作確認に切り替えようと思います。。


```
dyld: Symbol not found: __dispatch_source_type_memorypressure
	  Referenced from: /usr/lib/system/libcache.dylib (which was built for iOS 10.11)
	  Expected in: /Library/Developer/CoreSimulator/Profiles/Runtimes/iOS 7.1.simruntime/Contents/Resources/RuntimeRoot/usr/lib/system/libdispatch.dylib
	 in /usr/lib/system/libcache.dylib
```