新しいバージョンのXcodeで追加された新デバイスのSimulatorを旧バージョンXcodeでサクっと試す

# こんな時にやりたくなるよね
* とりあえず新デバイスで問題なく現行アプリが動いてるのか確認したい
* 新デバイスに対応した修正の動作確認をしたい
とかとか

# 今回のケース
* Xcode9
* iOS12
* iPhone XS Max

この条件でビルドして表示確認したい！とする

# 対応方法
1. Xcode10でビルドできるようにする（Swift4.2でソースマイグレーションする）
2. Xcode10でビルドできるようにする（Swift4.1.2でソースマイグレーションしない）
3. Xcode9で新デバイスのSimulatorを使えるようにする

基本は①がベターですが近々で新デバイスの動作確認をしなくてはいけない状況に（不可抗力で）遭遇することもあるのがエンジニアというもの🤔

今回のケースではパパっと動作確認（表示確認）したいので①、②はちょっと時間がかかる（ここは、ソースや使用ライブラリ、ライブラリ管理方法によっても工数感は変わるのでケースバイケースです）ので、渋々③でいくことに😕

# 対応手順
大まかな要件（課題）はこんな感じ

* 旧Xcodeで新しいOSバージョン環境向けにビルドしたい
※今回はXcode9でiOS12を指定してビルドするケースを想定

* 旧Xcodeで新Xcode（のSimulator）で追加された新デバイスを指定できるようにする
※今回はXcode9でXcode10で追加されたiPhone XS MaxのSimulatorを指定してビルドするケースを想定

こんな感じでしょうか。
まずはOSバージョンのIssueについて。

## 新しいOSバージョン環境向けにビルドできるようにする
1. 新バージョンのXcodeを用意する
今回はタイミング的にXcode 10 GM Seedを用意する感じでした。
※言わずもがなApple のDeveloperページからダウンロードしましょう

2. 新バージョンは今使っているバージョンとは別のアプリケーション名に変えて管理する
※今回はXcode_10_GMって名前つけておきました。

3. Finderなりで

```
⁨アプリケーション⁩ ▸ ⁨Xcode_10_GM⁩ ▸ ⁨Contents⁩ ▸ ⁨Developer⁩ ▸ ⁨Platforms⁩ ▸ ⁨iPhoneOS.platform⁩
```

下に入ってる新しいバージョンのナンバリングのフォルダをコピーする
![image.png](https://qiita-image-store.s3.amazonaws.com/0/60892/ebab4a7e-a952-b6ac-4922-b619f527b0c5.png)

※今回はiOS12を動かしたしので`12.0(16A366)`をコピー

4. 今度は旧バージョン側のiPhoneOS.platform下を参照する

```
⁩⁨アプリケーション⁩ ▸ ⁨Xcode⁩ ▸ ⁨Contents⁩ ▸ ⁨Developer⁩ ▸ ⁨Platforms⁩ ▸ ⁨iPhoneOS.platform⁩
```

欲しかった12用のフォルダをこちら側にペーストする
![image.png](https://qiita-image-store.s3.amazonaws.com/0/60892/fa9526bf-3706-369e-24d4-90f5c28b6dc3.png)

これで、実機 or SimulatorでiOS12が動くようになる。

## 旧Xcodeで新デバイスを指定したビルドをできるようにする
次は、旧Xcodeでビルド先のSimulatorを本来は無い新デバイスでビルドできるようにします。
※今回はXcode9でXcode10のSimulatorに含まれるiPhone XS MaxのSimulatorを指定してビルドできる環境を目指します。

1. 新バージョンのXcodeを起動する
※今回はXcode10 GM Seedを起動

2. スキームを選択するここのところをクリック（なんて言うんだろう）
![image.png](https://qiita-image-store.s3.amazonaws.com/0/60892/87d53cef-03cc-3039-2c2d-f6d67ee5f545.png)

3. 表示されるプルダウンメニューの最下部辺りにある
![image.png](https://qiita-image-store.s3.amazonaws.com/0/60892/779f49ed-6157-fe9c-1398-2cca4cc61498.png)

`Add Additional Simulators…`をクリック

4. `Simulators`タブを選択して`＋`ボタンをクリック
![image.png](https://qiita-image-store.s3.amazonaws.com/0/60892/da3d9907-55aa-3c2d-5ab7-3f2876864d77.png)

5. 適当に任意の設定でデバイスを追加して、追加したデバイスを指定します。
※今回はiPhone XS Max / iOS12で検証したかったのでその設定で適当な名前をつけて追加しました。（既存のものでよければ追加しないで選択するだけでOK）

6. この状態で一回`Run`させてSimulatorを起動させます。（起動させるだけでOK）

7. 新バージョンのXcodeはここまで。閉じましょう。
※Simulatorは閉じなくていいですが、閉じてもOKです。

以上で準備は整いました。

# 旧バージョンXcodeから新デバイスを指定してビルドしてみよう
機は熟した。Xcode9からiPhone XS MaxのSimulatorで動作確認をしてみよう。

1. Simulatorを起動します（起動している場合はSkip）
Simulatorの単体起動は以下のコマンドを実行しますが、新バージョンのXcodeに紐づいたSimulatorを指定する点に留意します。

```
$ open /Applications/Xcode_10_GM.app/Contents/Developer/Applications/iOS\ Simulator.app
```
※僕は新バージョンのXcodeをXcode_10_GMとリネームしていますが、ここは各自適当なものに変更しましょう

![image.png](https://qiita-image-store.s3.amazonaws.com/0/60892/27110db6-3c83-953e-f53e-614a43647d94.png)

目的のSimulatorは起動しましたか？

2. 旧バージョンのXcodeを起動します
※今回はXcode9を起動

3. 例のところから選択できるようになっているはずです

![image.png](https://qiita-image-store.s3.amazonaws.com/0/60892/2aa34023-da7c-d03b-8913-3da32f3f8179.png)

選択してビルドをしてみましょう。

どうでしょうか、旧バージョンのXcodeで新デバイスの動作確認ができるようになりましたか？

# さいごに
今回の対応はあくまで奥の手です。
基本は計画的に新しい開発環境、OS、デバイスに事前に対応していくことが大切です。

また、今回動作確認した環境は
旧バージョン：Xcode 9.4.1（iOS11）
新バージョン：Xcode 10.0（iOS12）
で行なっています。

例外は常にあると思うのでできるかは分かりませんし、この確認方法が確実に新デバイスの動作環境と同様かは確実とは限りません。

理解の上で確認作業をしてみましょう。

そして、なるべく早いタイミングに新バージョンでのビルド環境を整え、ソースのマイグレーションやライブラリのバージョンの見直しなどしていきましょう。