はじめに
iOS 13 に対応した Xcode 11 がリリースされたのでアップデートしたところ、iOS 12.4 のシミュレータが使えない(追加ダウンロードできない)問題に遭遇したのでどうにか使えるようにする方法をめとめた。
手順
概要
Xcode 10.3 のアーカイブをダウンロードして展開し、アプリ内埋め込みの iOS 12.4 シミュレータを取り出してローカルの追加シミュレータ置き場にコピー。
詳細
Xcode 10.3をダウンロード
More Downloads for Apple Developersより Xcode 10.3 (Xcode_10.3.xip
) をダウンロード
Xcode_10.3.xip
を展開
Finder で Xcode_10.3.xip
を開くと Xcode.app
が作成される。
下記はコマンドで展開する場合。
$ xip --expand Xcode_10.3.xip
$ du -sh Xcode.app # サイズを見てみる
6.4G Xcode.app
Xcode 10.3 埋め込みのシミュレータ(iOS 12.4)を追加シミュレータ置き場にコピー
Xcode 10.3 埋め込みのシミュレータの場所:
Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/CoreSimulator/Profiles/Runtimes/iOS.simruntime
追加シミュレータ置き場:
/Library/Developer/CoreSimulator/Profiles/Runtimes/
iOS 12.4のシミュレータの配置先:
/Library/Developer/CoreSimulator/Profiles/Runtimes/iOS 12.4.simruntime
下記コマンド(環境によってはかなり時間がかかる場合あり)
$ du -sh Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/CoreSimulator/Profiles/Runtimes/iOS.simruntime # サイズを見てみる
2.7G Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/CoreSimulator/Profiles/Runtimes/iOS.simruntime
$ sudo ditto -V Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/CoreSimulator/Profiles/Runtimes/iOS.simruntime '/Library/Developer/CoreSimulator/Profiles/Runtimes/iOS 12.4.simruntime'
処理進捗の可視化(おまけ)
上記コピー処理にかなり時間がかかるので、どうにか進捗を見る方法がないかについて検討。
pvコマンド(PipViewer)をインストール(brew install pv
, 要Homebrew)しておけば、dittoコマンドのログ出力からおおよその進捗を表示させることができた。
$ srcsim=Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/CoreSimulator/Profiles/Runtimes/iOS.simruntime
$ dstsim='/Library/Developer/CoreSimulator/Profiles/Runtimes/iOS 12.4.simruntime'
$ filecount=$(find ${srcsim} -type f -o -type l | wc -l)
$ linecount=$(expr ${filecount} \* 2 + 1)
$ sudo ditto -V ${srcsim} ${dstsim} 2>&1 >/dev/null | pv -l -s ${linecount} > /dev/null
備考
- コピー元のファイル(またはシンボリックリンク)の合計数をfilecountとする
- dittoのログ出力は1つのファイル(またはシンボリックリンク)について2行出るので、filecountの2倍(プラス1は最初の1行)を最終的な行数として算出してlinecountとする
- dittoのログ出力はstderrに出されるのでstdoutにリダイレクトしてからpvにパイプ
- pvのstdoutは不要なので捨てる
- (課題) 最初sudoのパスワード入力待ちプロンプトとpvの進捗出力が重なる場合があるので見栄えが悪い
コピーしたiOS 12.4シミュレータのオーナー/グループの修正(任意)
前項でコピーしたシミュレータ(iOS 12.4)のディレクトリ・ファイル郡は、Xcodeをダウンロードしたユーザーのオーナー/グループとなっているので
他のシミュレータと合わせておく。
なお修正しなくてもシミュレータの起動には支障がなさそうだったので任意とした。
$ sudo chown -R root:admin '/Library/Developer/CoreSimulator/Profiles/Runtimes/iOS 12.4.simruntime'
iOSシミュレータを起動して iOS 12.4 が使えることを確認
シミューレータのメニューの Hardware > Device > iOS 12.4 が表示されてその下のデバイスが選べるようになっていることを確認。
※注: 過去に Xcode 10.3 で一度でも iOS 12.4 のデバイスを使っていたことがある環境が前提のため、
完全に新規にXcode 11を入れた環境だとシミュレータデバイスがリストに無い可能性がある。
その際は Xcodeのメニューの Window > Devices and Simulators にて、iOS 12.4 のシミューレータデバイスを手動で追加。
さいごに
Xcodeの今後のアップデート正式に追加(ダウンロード)できるようになれそれを使ったほうが良いと思うので、
その際は、下記コマンドのように削除した後にXcode側から追加(ダウンロード)する。
$ sudo rm -rf '/Library/Developer/CoreSimulator/Profiles/Runtimes/iOS 12.4.simruntime'