Xcodeが大量の領域を使う理由と、取り戻す方法
Xcode本体も大きいのですが、使っている領域の大半はアプリの外にあります。DerivedDataのビルド出力、接続したことのあるすべてのiOSバージョンのシンボルファイル、シミュレータのデバイスとランタイム、そして出荷したすべてのビルドのアーカイブです。そのほぼすべてが ~/Library/Developer にあり、大半は作り直すことができます。
以下では、正確なフォルダ、それぞれを消去するコマンドまたはメニュー、そして削除の代償を説明します。始める前に、XcodeとSimulatorを終了してください。
領域がどこに使われているかを確認する
何かを削除する前に、まず測ります。次のコマンドは、XcodeとSimulatorがライブラリに保存している各フォルダのサイズを表示します。サイズを読み取るだけです。
開発者のMacのほとんどでは、上位に来るのはCoreSimulatorとXcodeで、Xcodeの中で最も大きいフォルダはDerivedData、iOS DeviceSupport、Archivesです。
du -sh ~/Library/Developer/* ~/Library/Developer/Xcode/* 2>/dev/null | sort -hDerivedData:ビルド出力とインデックス
パス:~/Library/Developer/Xcode/DerivedData。Xcodeはここに、プロジェクトまたはワークスペースごとに1つのフォルダを作り、コンパイル済みのオブジェクト、モジュールキャッシュ、コードインデックス、ビルドログ、そのプロジェクト用にチェックアウトしたSwiftパッケージを保存します。ずっと前に削除したプロジェクトのフォルダも残ります。
これは最も安全に削除できるもので、通常は最も大きなものでもあります。下記のコマンドは、すべてのプロジェクトについて、DerivedDataの中身をすべて削除します。Finderでフォルダを開き、もう作業していないプロジェクトだけを削除することもできます。
代償:各プロジェクトの次回のビルドはフルビルドになり、Xcodeはコードのインデックスを作り直し、Swiftパッケージはもう一度解決されます。ソースコードも設定も失われません。
rm -rf ~/Library/Developer/Xcode/DerivedData/*DeviceSupport:接続したデバイスのシンボル
パス:~/Library/Developer/Xcode/iOS DeviceSupport。watchOS、tvOS、visionOS用の同様のフォルダもあります。あるOSバージョンを実行しているデバイスをはじめて接続すると、Xcodeは、そのデバイスでデバッグしてクラッシュログをシンボル化できるように、そのバージョンのシステムシンボルをコピーします。すべてのデバイスでOSをアップデートするたびにフォルダがもう1つ増え、それぞれが数GBあり、Xcodeが古いものを削除することはありません。
Finderでフォルダを開き、もう実行していないバージョンをゴミ箱に入れます。フォルダ名にはOSのバージョンとビルド番号が含まれているので、どれが古いかは簡単にわかります。
代償:削除したバージョンのデバイスを接続すると、Xcodeがシンボルをもう一度コピーし、数分かかります。現在のデバイスで実行しているバージョンは残しておいてください。
シミュレータのデバイスとキャッシュ
パス:~/Library/Developer/CoreSimulator/Devices。各シミュレータは、そのデバイスのデータ一式、つまりインストールされたアプリ、その書類、写真、設定を収めた1つのフォルダです。Xcodeをアップデートすると、もう存在しないランタイムに属していたシミュレータが、利用できないデバイスとして残ります。下記のコマンドは、それらだけを削除します。
残しておくシミュレータをリセットするには、xcrun simctl erase all を使います。すべてのシミュレータのコンテンツと設定を消去しますが、デバイス自体は残します。代償:それらのシミュレータ内にあるアプリとテストデータです。
~/Library/Developer/CoreSimulator/Caches には、Simulatorがランタイムごとに構築するキャッシュが入っています。Simulatorが閉じているあいだであれば、削除しても安全です。代償:各シミュレータの次回の起動は、キャッシュが作り直されるあいだ遅くなります。
xcrun simctl delete unavailable古いシミュレータランタイム
ランタイムとは、特定のiOSバージョンなど、シミュレートされるオペレーティングシステムそのものです。1つが数GBあり、新しいバージョンのXcodeをインストールするたびにたまっていきます。保存場所はホームフォルダではなく、システム全体で使われる /Library/Developer/CoreSimulator で、手動ではなくXcodeまたはsimctlを通して削除する必要があります。
Xcodeで「Settings」を開き、「Components」(Xcode 15では「Platforms」)を選択します。もうテスト対象にしていないランタイムを選択し、削除します。ターミナルからは、下記のコマンドでインストール済みのランタイムが識別子とともに一覧表示され、xcrun simctl runtime delete のあとに識別子を続けると1つ削除できます。
代償:ランタイムをもう一度ダウンロードするまで、そのOSバージョンのシミュレータを実行できません。ダウンロードは大きなものになります。
xcrun simctl runtime listArchives:削除する前によく考える
パス:~/Library/Developer/Xcode/Archives。「Product」>「Archive」を選択するたびに、Xcodeはビルドされたアプリをデバッグシンボル(dSYMファイル)とともに保存します。アーカイブは、日付ごとのフォルダにまとめられています。
管理はXcodeのOrganizerから行います。「Window」>「Organizer」と選択して「Archives」を選び、アーカイブを右クリックして削除します。
代償:これは、まったく同じものを作り直すことができない唯一の項目です。そのビルドのクラッシュレポートをシンボル化するにはアーカイブのdSYMが必要で、書き出しや再提出をする場合はアーカイブそのものが必要です。まだ公開中のバージョンのアーカイブは残し、古い開発用ビルドやテスト用ビルドを削除してください。
Swiftパッケージのキャッシュとプレビュー
Swift Package Managerは、クローンしたリポジトリの共有キャッシュを ~/Library/Caches/org.swift.swiftpm に保持しています。下記のコマンドを任意のパッケージフォルダ内で実行すると、これが空になります。代償:次回の解決時に、パッケージがもう一度ダウンロードされます。
SwiftUIのプレビューは専用のシミュレータ一式で実行され、~/Library/Developer/Xcode/UserData/Previews に保存されています。削除するには、xcrun simctl --set previews delete all を実行します。代償:次回のプレビューは、Xcodeがデバイスを作り直すあいだ、表示されるまで時間がかかります。
CocoaPodsやCarthageを使っている場合、それらはXcodeのフォルダの外に独自のキャッシュを持っています。
swift package purge-cacheDiskzyでのXcodeの残存ファイルの扱い
Diskzyの「Clean up」(クリーンアップ)タブは、これらのフォルダを見つけ、それぞれのデフォルトを決めて、理由を表示します。DerivedDataは、Xcodeが開いていなければチェックが入ります。DeviceSupportは、最新の2バージョンが残され、それより古いものにチェックが入ります。CoreSimulator Cachesにはチェックが入ります。CoreSimulator Devicesは、あなたのシミュレータとそのアプリデータなので、チェックが外れます。Archivesは表示されますがチェックは外れているので、再提出が必要になるかもしれないものを残しておけます。
Diskzyが削除するものはすべてゴミ箱に入るので、ゴミ箱を空にするまでは何も失われません。macOS 15 Sequoia以降に対応したMacのネイティブアプリで、72時間はすべての機能が無料で使え、その後は$9の買い切りでMac 2台まで使えます。
よくある質問
- XcodeのDerivedDataは削除しても安全ですか?
- はい。入っているのは、Xcodeが生成し直すビルド出力、インデックス、ログだけです。何もキャッシュされていない状態になるため、各プロジェクトの次回のビルドには時間がかかります。
- iOS DeviceSupportフォルダは削除できますか?
- はい。そのOSバージョンを実行しているデバイスを次に接続したときに、Xcodeがシンボルをもう一度コピーします。現在のデバイスで使っているバージョンは残しておくのが賢明です。
- xcrun simctl delete unavailable は何をしますか?
- ランタイムがもうインストールされていないシミュレータデバイスを削除します。通常は、古いバージョンのXcodeが残したものです。まだ実行できるシミュレータには手を付けません。
- Xcodeのアーカイブは削除すべきですか?
- 不要になったものだけにしてください。アーカイブには、そのビルドのクラッシュレポートをシンボル化するためのデバッグシンボルが入っているので、顧客がまだ使っているバージョンのアーカイブは残しておきます。
- 消去してもXcodeがまた領域を使うのはなぜですか?
- DerivedDataとシミュレータのキャッシュは、プロジェクトをビルドして実行するとすぐに作り直されます。これは想定どおりです。節約になるのは、古いプロジェクト、古いOSバージョン、使っていないシミュレータのデータを削除した分です。
関連ガイド
- DerivedData~/Library/Developer/Xcode/DerivedData
- iOS DeviceSupport~/Library/Developer/Xcode/iOS DeviceSupport
- CoreSimulator Devices~/Library/Developer/CoreSimulator/Devices
- CoreSimulator Caches~/Library/Developer/CoreSimulator/Caches
- Xcode Archives~/Library/Developer/Xcode/Archives
アンインストールガイド
Macの空き領域がどこに消えたのかを確認
Diskzyはディスク全体をマップにし、システムデータの内訳を示し、安全なものを消去します。72時間は無料、その後は$9の買い切りでMac 2台まで使えます。
Diskzyを無料で試す