開発者向けストレージガイド

Xcodeに容量を全部持っていかれています

現役のMacで20〜60 GB、6つのフォルダに分かれていて、そのどれもXcodeが自分で片付けることはありません。ここではそれぞれについて、役割と、消してよいかどうかを説明します。

14日間無料、カード不要。 その後は3台まで買い切り$15。

XcodeのDerivedDataとデバイスサポートのフォルダをサイズ順に並べたBytesweep

まず測る

1つのコマンドで、合計がXcodeのどのフォルダにどう分かれているか分かるので、どれを狙うべきかが決まります:

du -sh ~/Library/Developer/Xcode/* ~/Library/Developer/CoreSimulator 2>/dev/null | sort -h

6つのフォルダ

DerivedData — たいてい最大 · 消しても安全

ビルドの中間ファイル、インデックス、モジュールキャッシュ。プロジェクトごとに1フォルダで、とっくに削除したプロジェクトのぶんも含めて永久に残ります。

~/Library/Developer/Xcode/DerivedData

消しても、フルビルドが1回遅くなるだけで、ほかに代償はありません。Xcodeの挙動がおかしいときの定番の対処でもあり、だからiOS開発者は誰もがこのパスを暗記しています。

iOS DeviceSupport — 大きい · 消しても安全

これまでに接続したすべての実機からコピーされたシンボルキャッシュ。iOSビルドごとに1フォルダで、1つあたり数GB。もう持っていない端末のぶんも溜まり続けます。

~/Library/Developer/Xcode/iOS DeviceSupport

そのiOSバージョンの端末を次に接続したとき、Xcodeが再度コピーします。最初の接続が遅くなるだけで、ほかに代償はありません。

CoreSimulatorの端末 — 大きい · おおむね安全

シミュレータの端末はそれぞれ独自のファイルシステムを持ち、回収されることはありません。データベースの整合性が保たれるよう、フォルダを消すのではなくXcode自身のコマンドを使ってください:

xcrun simctl delete unavailable

さらに進めるなら、 xcrun simctl delete all ですべてのシミュレータ端末を削除できます。シミュレータのランタイム自体は次で管理します: Xcode → 設定 → コンポーネント

Archives — 小さいが、かけがえがない · 残す

これまでに出荷したすべてのビルドと、そのdSYMデバッグシンボル。

~/Library/Developer/Xcode/Archives

ここだけは触らないでください。 公開したビルドのdSYMがないと、そのバージョンを使っているユーザーからのクラッシュレポートをシンボル化できず、スタックトレースは永久に16進アドレスのままです。どうしてもここを整理するなら、まだ世に出ているバージョンのアーカイブは残してください。

そして次のiOSリリースのあと、また同じことを

DerivedDataはビルドした日に戻り、DeviceSupportは端末を接続するたびに増えます。これは解決ではなく、繰り返す雑用です。Bytesweepは6つのフォルダを一度に見つけ、Archivesは掃除対象ではなく確認対象として扱い、どのクリーンアップも7日間取り消せます。間違ったプロジェクトを消した日に、それが効いてきます。

Swift Package Managerのキャッシュ — 消しても安全

複製された依存リポジトリ。必要に応じて再取得されます。

~/Library/Caches/org.swift.swiftpm

古いシミュレータランタイムと古いXcode — 注意すれば安全

以前のXcode.appはそれだけで15 GB、ランタイムがさらに数GBあります。古いプロジェクトのためにまだ必要なバージョンは残し、あとはFinderで削除してから、関連するランタイムを設定 → コンポーネントで削除してください。

増えすぎないための2つの習慣

DerivedDataはプロジェクト単位で消す、まとめてではなく

サブフォルダにはプロジェクト名が付いています。フォルダごと消すと、いま作業中のものまで全部リビルドになります。去年終わったプロジェクトのぶんだけ消せば、代償はまったくありません。

iOSのリリースごとにDeviceSupportを確認する

接続する端末それぞれについて、iOSビルドごとに1フォルダずつ増えるので、1年を通して静かに膨らみます。毎年9月に2分かけるだけで、30 GBになるのを防げます。

6つを一度に見つける

BytesweepはXcodeの各フォルダを名前で検出してサイズを表示し、Archivesは掃除ではなく確認対象として印を付けます。消したものはすべて復元ポイントに入るので、取り消しは7日間1クリックです。

関連: Docker disk space · Mac向けの一覧全文

よくある質問

DerivedDataを削除しても安全ですか?

はい。名前のとおり、すべてソースから導出されたものです。代償は、対象プロジェクトの次のビルドがフルビルドになることだけです。

DeviceSupportを消すと、iPhoneでのデバッグができなくなりますか?

いいえ。そのiOSバージョンの端末を次に接続したとき、Xcodeがシンボルを再度コピーします。そのあとの最初の接続が数分長くなるだけです。

Xcodeのアーカイブは削除できますか?

できますが、その前に考えてください。アーカイブには出荷したビルドのdSYMが入っており、これがないとそのバージョンのクラッシュレポートをシンボル化できません。まだユーザーの手元にあるものは残し、古いベータは自由に消してください。

Xcode.app自体がこんなに大きいのはなぜですか?

約15 GBです。Appleがサポートするすべてのプラットフォーム向けのツールチェーン、SDK、シミュレータランタイムを同梱しているからです。使わないシミュレータランタイムはXcode → 設定 → コンポーネントで削除できますが、アプリ本体の大きさはどうにもなりません。

Xcodeはこれらを自動で片付けてくれますか?

いいえ。どのフォルダにもサイズ上限も期限もありません。このページが存在する理由がまさにそれです。