まず測る
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はこれらを自動で片付けてくれますか?
いいえ。どのフォルダにもサイズ上限も期限もありません。このページが存在する理由がまさにそれです。
