Macで古いiOSシミュレータランタイムを削除する方法
時間が経つにつれて、XcodeのiOSシミュレーターは気づかないうちに数GBものストレージ容量を消費します。ここでは、そのスペースを解放する方法を紹介します。
Xcodeの容量は、ランタイム、シミュレータデバイス、DerivedData、DeviceSupport、Archivesに分かれます。近い場所にありますが、管理方法と復元コストが異なるため、削除前に測定します。
なぜiOSシミュレーターはこれほど多くのスペースを占有するのか
ランタイムはダウンロードしたiOS、watchOS、tvOS、visionOSのシステムイメージです。シミュレータデバイスは、そのランタイム上で動く仮想デバイスです。複数のデバイスが1つのランタイムを共有できるため、同じキャッシュとして扱えません。
ターミナル経由で未使用のシミュレーターを削除する方法
xcrun simctl delete unavailableが削除するのは、対応ランタイムが存在しないデバイスレコードだけです。
xcrun simctl delete unavailable
ランタイムはアンインストールされません。ダウンロード済みランタイムはXcode > Settings > Componentsで確認、削除してください。/Library/Developer/CoreSimulatorや/System/Library/AssetsV2を直接消してはいけません。
シミュレーターのキャッシュとアプリデータを消去する
特定デバイスのテスト状態だけを消す場合は、Simulatorでそのデバイスを起動し、Device > Erase All Content and Settingsを選びます。共有ランタイムは残りますが、アプリ、Keychain、データベースなどのデバイス状態は消えます。
iOS DeviceSupportとDerivedDataを手動で削除する
DerivedDataは再生成できますが、全消去するとすべてのプロジェクトでビルドと索引をやり直します。DeviceSupportは実機のデバッグ、配布済みビルドのArchivesとdSYMは後のクラッシュ解析に必要な場合があります。Moleは置き換え済みランタイムを一覧し、選択した項目をsimctl runtime deleteで削除します。デバイスとアーカイブはXcodeで管理してください。
よくある質問
シミュレーターを削除するとプロジェクトのコードも削除されますか?
プロジェクトのソースは削除されません。ただし仮想デバイス内のアプリとテスト状態は失われます。
iOS DeviceSupportフォルダを削除しても安全ですか?
DeviceSupport全体をキャッシュとして消さないでください。古いOSのデータでも実機デバッグやクラッシュ解析に使う場合があります。
Moleは古いシミュレーターを見つけられますか?
Moleは置き換え済みのダウンロード済みランタイムを表示し、選択項目をsimctlで削除します。CoreSimulatorのフォルダを直接削除しません。