Xcode 12.x に iOS 10.x シミュレーターを追加#
背景#
筆者は昨日、ある問題に直面しました。ユーザーから、iOS 10.3.1 の携帯電話であるウェブページが白い画面で開くとのフィードバックがありました。しかし、問題は筆者の手元には 10.x バージョンの携帯電話がなかったため、シミュレーターをインストールして再現を試みることにしました。
しかし、筆者はコンピュータ上の Xcode のバージョンが 12.5.1 であり、iOS 10.3.1 のシミュレーターのダウンロードがサポートされていないことに気付きました。
手順#
iOS 10.3.1 シミュレーターのダウンロード#
その後、筆者は検索した結果、Xcode 12.4 は iOS 10.3.1 のシミュレーターのダウンロードをサポートしていることがわかりました。そこで、Xcode ダウンロードサイトに行き、Xcode 12.4 をダウンロードしました。そして、CMD + ,
で Xcode の環境設定を開き、Components タブで iOS 10.3.1 Simulator を見つけてダウンロードしました。以下の図のように。
iOS 10.3.1 シミュレーターの追加#
通常、シミュレーターを追加するには、Xcode を選択し、上部メニューの Window -> Device and Simulators を選択し、Simulators を選択して左下の + をクリックしてシミュレーターを追加します。以下の図のように。
iOS 10.3.1 シミュレーターをダウンロードしても、追加できないことがわかります。ダウンロードしたのに追加できません。
そこで筆者はさらに調査を続け、唯一の真理の記事在 Xcode 12 執行低版本的 iOS 模擬器が見つかりました。記事によると、シミュレーターの runtime バージョンの Framework 内の map ファイルに、各バージョンに対応する Mac OS システムの上限が設定されているため、追加できないとのことです。
解決方法は、シミュレーターの Info.plist 内の CFBundleIdentifier を変更し、map ファイルを回避することです。
具体的な手順は簡単です。シミュレーターと Xcode を閉じて、例えば 10.3 シミュレーターを強制的に実行したい場合、/Library/Developer/CoreSimulator/Profiles/Runtimes/iOS 10.3.simruntime/Contents/Info.plist を編集し、CFBundleIdentifier を com.apple.CoreSimulator.SimRuntime.iOS-10-3 から com.apple.CoreSimulator.SimRuntime.iOS-10-3-1 に変更します。-1 を追加することで、バージョン制限チェックの関数がその bundle name を見つけられなくなり、再び Xcode を開くと追加できるようになります!
筆者の実践経験:
- Plist を変更する際は、コピーしてから変更し、再度コピーして置き換えることができます。
- 変更後、確かに 10.3 のシミュレーターを追加でき、macOS 11.4 システムで正常に動作します。
- macOS 12.0 beta システム、つまり macOS Monterey では、変更後に追加に成功しても、実行できません。