開発者向け

XcodeのDerivedData、古いシミュレータ、iOS DeviceSupportは削除しても安全?

~/Library/Developer内のXcodeフォルダの中身、Xcodeが再作成するもの、Archivesに注意が必要な理由、シミュレータを削除するsimctlコマンドを解説します。

約11分で読めますMoreRoomチーム(Yando Pte. Ltd.)このページをMarkdownで見る

要点

  • DerivedDataは削除しても安全です。次回のビルドでXcodeが再作成します。代償は、1回分の遅いビルドとインデックスの作り直しだけです。
  • iOS DeviceSupportフォルダも削除して問題ありません。そのバージョンを搭載したデバイスを次に接続したとき、Xcodeがシンボルを再びコピーします。
  • Xcodeの「Archives」はむやみに削除しないでください。配布したビルドのクラッシュレポートをシンボル化するために必要なdSYMファイルが入っています。
  • シミュレータはxcrun simctl delete unavailableで、ランタイムはxcrun simctl runtime deleteで削除します。フォルダを手作業で消すのは避けましょう。
  • シミュレータのランタイムは1つあたり通常7〜10GBあるため、もうテストしないiOSバージョンを削除するのが、多くの場合いちばん効果的です。

Xcodeのストレージを安全に整理する方法

  1. XcodeとSimulatorを終了する. XcodeとSimulatorアプリを終了し、これから整理するフォルダをビルド、インデックス作成、起動中のデバイスが使っていない状態にします。
  2. DerivedDataを削除する. Finderで~/Library/Developer/Xcode/DerivedDataを開き、中身をゴミ箱に入れます。必要なものは次回のビルドでXcodeが再作成します。
  3. 古いDeviceSupportフォルダを削除する. ~/Library/Developer/Xcode/iOS DeviceSupportで、もうデバッグに使わないOSバージョンやデバイスのフォルダをゴミ箱に入れます。
  4. 使用できないシミュレータを削除する. ターミナルでxcrun simctl delete unavailableを実行し、ランタイムがインストールされていないシミュレータデバイスを削除します。
  5. 不要になったシミュレータランタイムを削除する. xcrun simctl runtime listを実行し、もうテストしないランタイムごとに、その識別子を指定してxcrun simctl runtime deleteを実行します。Xcode > Settings > Componentsからも削除できます。
  6. Archivesは最後に確認する. Window > Organizer > Archivesを開き、ユーザがまだ使っている可能性のあるビルドのアーカイブはすべて残します。古いものは別のドライブにコピーしてから削除します。

ほとんどの場合、答えは「はい」です。DerivedData、iOS DeviceSupport、テスト用デバイスのクローン、プレビュー用シミュレータ、Xcodeのキャッシュは削除しても安全で、必要になればXcodeが作り直します。シミュレータとシミュレータランタイムも削除して構いませんが、FinderではなくAppleのsimctlツールを使ってください。注意が必要なのはArchivesフォルダだけです。配布したアプリのデバッグシンボルが入っているためです。

iOS開発に使っているMacでは、これらのフォルダの合計が数十GBに達することも珍しくありません。それぞれの中身と、最もきれいに削除する方法を説明します。

Xcodeがデータを保存する場所

ほぼすべてが、ホームフォルダ内の~/Library/Developerにあります。例外はシミュレータランタイムで、macOSが管理するシステムディスクイメージとして保存されています。

フォルダ パス 削除しても安全? 再作成される?
DerivedData ~/Library/Developer/Xcode/DerivedData はい はい、次回のビルドで
Archives ~/Library/Developer/Xcode/Archives 先に確認 いいえ
iOS DeviceSupport ~/Library/Developer/Xcode/iOS DeviceSupport はい はい、デバイスを接続したときに
シミュレータデバイス ~/Library/Developer/CoreSimulator/Devices simctlを使用 Xcodeで作り直す
シミュレータランタイム /Library/Developer/CoreSimulator/Volumes simctlを使用 再ダウンロード
テスト用デバイスのクローン ~/Library/Developer/XCTestDevices はい はい、並列テストの実行時に
SwiftUIプレビュー ~/Library/Developer/Xcode/UserData/Previews はい はい、プレビューの実行時に
シミュレータのキャッシュ ~/Library/Developer/CoreSimulator/Caches はい はい
Xcodeのキャッシュ ~/Library/Caches/com.apple.dt.Xcode はい はい

同じ場所にあるwatchOS DeviceSupport、tvOS DeviceSupport、visionOS DeviceSupport、macOS DeviceSupportの各フォルダにも、DeviceSupportと同じ考え方が当てはまります。

~/Library/Developer内のXcodeのストレージフォルダの一覧。「安全に削除可能」と「先に確認」のラベル付き

DerivedData:安全。Xcodeが作り直します

DerivedDataには、中間ビルド成果物、ソースのインデックス、ビルドログ、モジュールキャッシュが、プロジェクトごとのサブフォルダに保存されています。削除してもコードには一切影響しません。代わりにかかるのは時間です。各プロジェクトの次回のビルドは一から行われ、コード補完が完全に戻るまでにXcodeがインデックスを作り直します。

まずXcodeを終了してから、中身をゴミ箱に入れます:

open ~/Library/Developer/Xcode/DerivedData

特定のプロジェクトだけを整理するなら、そのサブフォルダ(プロジェクト名にランダムな文字列が付いた名前)だけを削除します。XcodeのProduct > Clean Build Folderはビルド成果物を削除しますが、通常インデックスは残すため、解放される容量は少なめです。保存場所はXcode > Settings > Locationsで確認・変更できます。

Archives:配布したものは残す

.xcarchiveはそれぞれ、Product > Archiveで作成した署名済みのビルドで、アプリのdSYMファイルを含んでいます。Xcodeはこれを使ってクラッシュレポートにシンボル名を付加します。対応するdSYMがないと、そのビルドで起きたクラッシュは関数名ではなくメモリアドレスで表示されます。他社製のクラッシュレポートツールも同じファイルを必要とします。

ですから、フォルダを空にするのではなく、アーカイブを1つずつ確認してください。Window > Organizer > Archivesで、古い社内テストビルドなど、もう誰も使っていないビルドを削除します。App StoreやTestFlightでまだ配布しているバージョンはアーカイブを残すか、Macから削除する前に.xcarchiveバンドルを外部ドライブにコピーしておきましょう。

iOS DeviceSupport:安全。必要になれば再コピーされます

iPhone、iPad、Apple Watch、Apple TV、Vision Proを開発用に接続すると、XcodeはMac上でデバッグやシンボル化ができるよう、そのデバイスのシステムシンボルをコピーします。最近のXcodeでは、各フォルダにデバイスのモデル、OSバージョン、ビルド番号を組み合わせた名前(例:iPhone15,5 27.0.1 (24A446))が付き、1つのフォルダが数GBになることもよくあります。

デバッグに使うデバイスでiOSをアップデートするたびに新しいフォルダが増え、Xcodeは古いフォルダを削除しません。もう使っていないOSバージョンのフォルダは、ゴミ箱に入れても安全です。まだ必要なフォルダを削除してしまっても、次にそのデバイスを接続したときにXcodeが再びコピーします(数分かかります)。

シミュレータ:デバイスとランタイムは別物です

シミュレータのランタイムは、iOS 27.1など1つのOSバージョンのシステムイメージ全体で、通常7〜10GBあります。シミュレータのデバイスは、小さな構成情報と、インストールしたアプリ、写真、設定といったそのデバイス固有のデータです。複数のデバイスが1つのランタイムを共有できるため、デバイスを削除するとそのデータが、ランタイムを削除すると大きなイメージが解放されます。

1つのシミュレータランタイムを複数のシミュレータデバイスが共有する仕組みと、それぞれを削除するsimctlコマンドの図

シミュレータデバイスを削除する

デバイスを一覧表示し、インストール済みのランタイムでもう動かないものを削除します:

xcrun simctl list devices
xcrun simctl delete unavailable

delete unavailableは、現在のXcodeがサポートしなくなったデバイス(多くは古いランタイムの名残)を削除します。特定のデバイスだけを削除するには、一覧に表示されるUDIDを指定します:xcrun simctl delete <UDID>。Window > Devices and Simulatorsからも同じ操作ができます。すべてのシミュレータとそのデータを本当に消したい場合を除き、xcrun simctl delete allは避けてください。デバイスの削除は元に戻せませんが、新しいデバイスはXcodeでいつでも作成できます。

シミュレータランタイムを削除する

xcrun simctl runtime list
xcrun simctl runtime delete <identifier>

runtime listは、インストールされている各イメージのバージョン、識別子、状態と、合計サイズを表示します。runtime deleteには識別子(各行のUUID)を指定し、イメージをアンマウントして削除します。Xcode 27の時点で、deleteはプレビュー用の--dry-runのほか、--notUsedSinceDays <days>、--unusable、--outdatedにも対応しています。古いXcodeでは使えるオプションが少ないので、xcrun simctl runtimeを実行して、お使いのバージョンで使えるものを確認してください。

Xcodeでは、Xcode > Settings > Components(Xcode 15ではPlatforms)で同じことができます。ランタイムを選んで削除するだけです。元に戻す方法は、Appleのガイド「Xcodeの追加コンポーネントのダウンロードとインストール」で説明されています。ターミナルでxcodebuild -downloadPlatform iOSを実行する方法も載っています。

/Library/Developer/CoreSimulator/Volumesや/System/Library/AssetsV2のランタイムファイルを手作業で削除しないでください。最近のXcodeはランタイムをシステム管理のアセットとして保存しているため、ファイルを直接消すと、ランタイムが登録されたまま壊れた状態になることがあります。

テスト用クローン、プレビュー、シミュレータのキャッシュ

  • XCTestDevices:並列テストのためにXcodeが作成するクローンです。テストを実行していないときなら、ゴミ箱に入れても安全です。
  • SwiftUIプレビュー:Xcodeはプレビューを専用のシミュレータセットで実行します。xcrun simctl --set previews delete allで削除でき、次にプレビューを実行したときにXcodeが作り直します。
  • CoreSimulatorのキャッシュとログ:~/Library/Developer/CoreSimulator/Cachesと~/Library/Logs/CoreSimulatorは、Simulatorアプリを閉じた状態なら安全に消去できます。

古いXcode、ツールチェーン、ダウンロードファイル

/ApplicationsにあるXcodeは1つ1つが大きなアプリで、ベータ版や古いプロジェクト用に残したコピーはすぐにかさみます。削除する前に、コマンドラインツールがどのXcodeを使っているかを確認しましょう:

xcode-select -p

このパスが指すXcodeと、CIジョブや古いプロジェクトでまだ必要なバージョンは残してください。~/Downloadsにある.xipファイルも確認しましょう。Xcodeをインストールしたあとは、このアーカイブは不要です。swift.orgから入手した追加のSwiftツールチェーンは~/Library/Developer/Toolchainsにあります。プロジェクトで選択しているものは残してください。

~/Library/Caches/com.apple.dt.XcodeはXcode自身のキャッシュで、必要に応じて作り直されます。長年Xcodeを使っている場合は、かなり古いバージョンのXcodeがダウンロードしたオフライン用ドキュメントセットが~/Library/Developer/Shared/Documentation/DocSetsに残っていることもあります。現在のバージョンでは使われていません。

おすすめの順序

  1. XcodeとSimulatorを終了します。
  2. DerivedData、XCTestDevices、プレビュー用シミュレータを削除します。ここまではリスクがありません。
  3. xcrun simctl delete unavailableを実行します。
  4. もう対象にしていないOSバージョンのDeviceSupportフォルダとシミュレータランタイムを削除します。
  5. Archivesと古いXcodeは、最後に慎重に確認します。

作業が終わったらゴミ箱を空にして、容量を取り戻しましょう。フォルダの場所はmacOS 27 Golden Gate、26 Tahoe、15 Sequoia、14 Sonomaで共通です。使えるsimctlのオプションはXcodeのバージョンによって異なります。

MoreRoomでできること

MoreRoomの無料版は~/Library/Developerをスキャンして、ここで紹介したフォルダを1つずつ認識し、「安全に削除可能」または「先に確認」のバッジと、削除後に再作成されるかどうかを表示します。DerivedData、DeviceSupport、テスト用クローン、キャッシュは、項目ごとにゴミ箱に入れられ、取り消しもできます。シミュレータデバイスとランタイムについては、MoreRoomはApple純正のxcrun simctl deleteとxcrun simctl runtime deleteを実行します。これらのコマンドは元に戻せないため、その旨が表示されます。Archivesは「残すもの」として示されます。

MoreRoom Proでは、複数の項目をまとめて整理できるコレクター、必要な容量に対して最も安全な組み合わせを選ぶ目標モード、使っていないプロジェクトのためのプロジェクトの休止が使えます。アーカイブをMoreRoomから外部ドライブに移す機能は近日公開予定です。それまではご自身でコピーしてください。

よくある質問

DerivedDataを削除するとXcodeプロジェクトが壊れますか?

いいえ。DerivedDataに入っているのは、Xcodeが生成したビルド成果物、インデックス、ログだけです。ソースコードとプロジェクト設定はプロジェクトフォルダにあります。Xcodeがデータを作り直すあいだ、次回のビルドとインデックス作成に時間がかかるだけです。

Xcodeの「Archives」は削除しても安全ですか?

もう誰も使っていないビルドに限ります。各アーカイブには、クラッシュレポートのアドレスを関数名に変換するためのdSYMファイルが含まれています。ユーザの手元にまだあるバージョンのアーカイブはすべて残すか、先に別のドライブにコピーしてください。

iOS DeviceSupportが何度も復活するのはなぜですか?

Xcodeは、開発用に接続したデバイスからデバッグシンボルを、デバイスのモデルとOSバージョンごとに1回コピーします。まだ使っているデバイスのフォルダを削除すると、次にそのデバイスを接続したときにXcodeが再びコピーします。

CoreSimulatorフォルダをまるごと削除してもいいですか?

おすすめしません。シミュレータデバイスとランタイムはCoreSimulatorサービスに登録されており、ランタイムはマウントされたシステムディスクイメージです。管理情報の整合性を保つため、xcrun simctl delete、xcrun simctl runtime delete、またはXcodeの設定を使ってください。

削除したシミュレータランタイムを元に戻すには?

Xcode > Settings > Componentsから再ダウンロードするか、ターミナルでxcodebuild -downloadPlatform iOSを実行します。そのあと、Window > Devices and Simulatorsでシミュレータデバイスを作り直せます。

このガイドに登場するフォルダ