ニッポンニンゲンという動物は見栄を張ってクソ高いiPhoneを買うのが大好きです。そしてアップル社はApp Storeからの収益を手放さないためにウェブアプリの普及を妨害しています。するといつかはその圧力に屈してiOS用にアプリを作らないといけないことになります。
iOS用にアプリを開発するにあたって、しかたなくマッキントッシュのマシンを使わされることになりますが、残念ながらマッキントッシュは開発者向けマシンではないため、開発者のUXは軽視されています。
今回はアップル社によるクソ開発者体験の1つである、Xcodeのシミュレーターのインストールをマシにする方法をまとめます。
まずXcodeがクソデカなのでクソみたいにインストールに時間を要しますが、さらに実際にiOS用にアプリを開発するためにはiOS用のシミュレーターをインストールしないといけません。しかしこのシミュレーターの追加パッケージの容量が7GB以上もあるため、安定したネットワーク回線がないとインストールに失敗します。しかもインストールに失敗すると途中からダウンロードを再開してくれません。何度も最初からやり直す必要があります。
ランタイムを別途インストールする
がんばってネット検索すると、実はシミュレーターのランタイムは開発者用のウェブサイトからダウンロードすることも可能だとわかります(公式ドキュメント)。
ただ、ダウンロードページはログインしないと閲覧できません。ダウンロード用URLをコピーしてもそのままでは使えないのです。
curlでダウンロードをマシにする
さて、ブラウザーからダウンロードしたら結局一緒です。7GBのクソデカファイルを安定してダウンロードする回線が必要になります。
UbuntuのOSイメージとかだったら3GBくらいでも公式にtorrentが用意されています。そういう当たり前のUX設計ができる会社になれるといいね!
仕方ないのでcurlコマンドを使いましょう。curlコマンドにはダウンロードを中断しても途中から再開する機能があります。マッキントッシュはいち早くマウスを取り入れたパソコンとしてのクソみたいなプライドがあってGUIばっかりゴリ押ししてきますが、やっぱりCLIは便利です。
もちろん、上述の通りログインしないとダウンロードできないという嫌がらせがされていますから、それを突破する必要があります。
ダウンロード用のコマンドを取得する
Google Chromeを開いてください。開発者ツールを開いた状態でダウンロードページにログインし、必要なシミュレーターランタイムをダウンロードします。
保存用プロンプトが表示されたらキャンセルして構いません。これで開発者ツールの「Network」タブにdmgファイルのダウンロード履歴が表示されました。該当の項目を右クリックして「Copy -> Copy as cURL」を選択しましょう。以下のような内容がコピーされます。
curl 'https://download.developer.apple.com/Developer_Tools/iOS_17.5_Simulator_Runtime/iOS_17.5_Simulator_Runtime.dmg' \
-H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7' \
-H 'Accept-Language: ja,en-US;q=0.9,en;q=0.8' \
-H 'Connection: keep-alive' \
-H 'Cookie: XID=xxxx; ......'
...
...
-H 'sec-ch-ua-platform: "Linux"'
ここに保存時のファイル名 --output <FILE> と中断時の再開用オプション -C - をつけます。
curl -C - 'https://download.developer.apple.com/Developer_Tools/iOS_17.5_Simulator_Runtime/iOS_17.5_Simulator_Runtime.dmg' \
--output ios17.dmg \
-H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7' \
-H 'Accept-Language: ja,en-US;q=0.9,en;q=0.8' \
-H 'Connection: keep-alive' \
-H 'Cookie: XID=xxxx; ......'
...
...
-H 'sec-ch-ua-platform: "Linux"'
途中でネットワークが遮断されてもまた同じコマンドを再実行するだけです。前回の続きからダウンロードしてくれます。
ダウンロードしたランタイムファイルを使ってインストール
あとは公式ドキュメントに書いてあるとおり、以下のようにシミュレーターをインストールすれば完了です🎉
$ xcrun simctl runtime add "~/Downloads/watchOS 9 beta Simulator ios17.dmg"