Macで古いiOSシミュレータランタイムを削除する方法
Xcode のシミュレータランタイムは数 GB を使い、仮想デバイスにはアプリやテストデータが蓄積します。削除前に、ランタイムとデバイスを分けて確認します。
Xcodeの容量は、ランタイム、シミュレータデバイス、DerivedData、DeviceSupport、Archivesに分かれます。近い場所にありますが、管理方法と復元コストが異なるため、削除前に測定します。
Xcodeストレージを先に一覧する
Appleは追加プラットフォームをXcodeのComponents設定で管理する方法を案内しています。利用不可デバイスの確認後に実行します。
xcrun simctl list runtimes
xcrun simctl list devices
| 種類 | 削除後のコスト | 保持する場合 |
|---|---|---|
| ランタイム | 再ダウンロードが必要で依存デバイスも利用不可 | テスト計画や不具合再現で必要 |
| 仮想デバイス | アプリ、Keychain、DB、テスト状態を消去 | 不具合状態を残したい |
| DerivedData | 再ビルドと再インデックス | 現在のビルドで使用中 |
| DeviceSupport | 実機OS用のオフラインデバッグ資料を失う可能性 | その実機やクラッシュを扱う |
| Archives | 配布ビルドに一致するdSYMを失う可能性 | ユーザーがその版を実行できる |
なぜiOSシミュレーターはこれほど多くのスペースを占有するのか
ランタイムはダウンロードしたiOS、watchOS、tvOS、visionOSのシステムイメージです。シミュレータデバイスは、そのランタイム上で動く仮想デバイスです。複数のデバイスが1つのランタイムを共有できるため、同じキャッシュとして扱えません。
ターミナル経由で未使用のシミュレーターを削除する方法
前節の 2 つのコマンドで、インストール済みのランタイムとデバイスを確認できます。どちらも表示だけで、削除は行いません。
ダウンロード済みランタイムはXcode > Settings > Componentsで確認、削除してください。/Library/Developer/CoreSimulatorや/System/Library/AssetsV2を直接消してはいけません。
現在のプラットフォームで最新のもの
開発中のプラットフォームでは最新ランタイムを保持します。
不具合再現に必要な旧版
テスト計画、CI、利用者の問題が指す版にはダウンロード時間以上の価値があります。
利用できないデバイスだけを削除する
一覧を確認した後、このコマンドでランタイムが存在しないデバイス記録だけを削除します。ランタイム自体は削除されません。
xcrun simctl delete unavailable
シミュレーターのキャッシュとアプリデータを消去する
特定デバイスのテスト状態だけを消す場合は、Simulatorでそのデバイスを起動し、Device > Erase All Content and Settingsを選びます。共有ランタイムは残りますが、アプリ、Keychain、データベースなどのデバイス状態は消えます。
DeviceSupport、DerivedData、Archivesを別々に管理する
DerivedDataは再生成できますが、全消去するとすべてのプロジェクトでビルドと索引をやり直します。DeviceSupportは実機のデバッグ、配布済みビルドのArchivesとdSYMは後のクラッシュ解析に必要な場合があります。Moleは置き換え済みランタイムを一覧し、選択した項目をsimctl runtime deleteで削除します。デバイスとアーカイブはXcodeで管理してください。
DeviceSupportは実機とクラッシュで選ぶ
古い日付だけでは不要とは言えず、接続する実機と解析するクラッシュで判断します。
Archivesは実行中のリリースで選ぶ
利用者が実行できる版は、dSYMと成果物を別で検証済みでない限り保持します。
再現可能な安全な手順
Xcode、Simulator、関連ビルドを終了して5種類を別々に計測します。不要と確認した旧ランタイムをXcode設定で削除し、デバイス一覧を確認してからxcrun simctl delete unavailableを実行します。DerivedDataは古いプロジェクト単位、DeviceSupportは実機とクラッシュ要件、ArchivesはOrganizerで配布中の版を基準に判断します。再計測して必要な空きが得られたら終了します。
Moleの境界
MoleはAppleが削除可能とした旧ランタイムだけを扱い、デバイス状態やリリースアーカイブは消しません。
よくある質問
シミュレーターを削除するとプロジェクトのコードも削除されますか?
プロジェクトのソースは削除されません。ただし仮想デバイス内のアプリとテスト状態は失われます。
iOS DeviceSupportフォルダを削除しても安全ですか?
DeviceSupport全体をキャッシュとして消さないでください。古いOSのデータでも実機デバッグやクラッシュ解析に使う場合があります。
Moleは古いシミュレーターを見つけられますか?
Moleは置き換え済みのダウンロード済みランタイムを表示し、選択項目をsimctlで削除します。CoreSimulatorのフォルダは直接削除しませんが、再生成できるシステムキャッシュ/Library/Developer/CoreSimulator/Cachesだけは、シミュレータが動いていないときに限って空にします。