Levo ガイド · 開発者向け: Apple

DerivedData を削除する方法と、削除しても安全か

Ready to free リストで Xcode のビルドデータにチェックが入り、サイズと理由が表示された Levo のポップオーバー

はい、安全です。DerivedData に入っているのは、Xcode がソースから作るビルド成果物、インデックス、ログだけです。削除しても、次のビルドが1回遅くなるだけで済みます。先に Xcode を終了し、ビルドやアーカイブの実行中には削除しないでください。

中身場所削除するとどうなるか
ビルド成果物DerivedData/<Project>-<hash>/Build次のビルドで作り直される
インデックスストア…/Index.noindexXcode がインデックスを作り直すので、しばらく検索や補完が遅くなる
ログ…/Logs古いビルドログがレポートナビゲータから消える
Swift パッケージ…/SourcePackagesパッケージを再取得するので、ネット接続が必要
モジュールキャッシュDerivedData/ModuleCache.noindex作り直される。すべてのプロジェクトで共有

自分でやる方法

フォルダは ~/Library/Developer/Xcode/DerivedData で、プロジェクトごとに、名前とハッシュの付いたサブフォルダがあります。目的に合った方法を選んでください。

  1. 1つのプロジェクトを Xcode から。Product › Clean Build Folder(⇧⌘K)を選びます。そのプロジェクトのビルド成果物は消えますが、インデックスは残ります。
  2. 1つのプロジェクトを Finder で。Xcode › Settings › Locations を開き、Derived Data の横にある小さな矢印をクリックして、そのプロジェクトのフォルダをゴミ箱に入れます。
  3. すべてをターミナルで。Xcode を終了した状態で次を実行します。
du -sh ~/Library/Developer/Xcode/DerivedData
rm -rf ~/Library/Developer/Xcode/DerivedData/*

フォルダそのものは残しておいてかまいません。なくなっていれば Xcode がまた作ります。-derivedDataPath を使うコマンドラインビルドの場合は、そちらのフォルダを削除してください。

ビルド、アーカイブ、UI テストの実行中や、飛行機の中で Swift パッケージを使う場合は待ちましょう。SourcePackages も消えるので、再ダウンロードが必要になります。残したい場合は、Build と Index.noindex フォルダだけを削除してください。

削除後にプロジェクトの挙動がおかしい場合は、File › Packages › Reset Package Caches でパッケージもリセットしましょう。SwiftPM と CocoaPods のキャッシュも同様です。

削除しても問題が解決しないとき

開発者がビルドの不具合を直すために DerivedData を消すのは、古いモジュールキャッシュやインデックスが原因であることが多く、実際によく効くからです。効かない場合は、原因が別のところにあります。間違ったバージョンに解決されたパッケージ、古い Pods フォルダ、署名の設定などです。次は パッケージキャッシュのガイドにあるパッケージのリセットを試してください。

フォルダが何度も 30 GB 以上に戻ってくるなら、どのプロジェクトのフォルダがいちばん大きいかを確認しましょう: du -sh ~/Library/Developer/Xcode/DerivedData/* | sort -h。ハッシュはプロジェクトのパスから作られるので、プロジェクトのブランチやクローンごとに別のフォルダができます。1つのアプリを10か所にチェックアウトしていれば、コピーも10個です。

Xcode › Settings › Locations で、DerivedData を外付けドライブなど別の場所に移すこともできます。それでも動きますが、遅いドライブではビルドがはっきり遅くなります。たいていの人には、定期的に削除するほうが得策です。

Levo ならこうします

Levo は、各プロジェクトの DerivedData フォルダを Xcode のビルドデータのグループにまとめて、サイズと最後にビルドした日時とともに表示します。しばらく触っていないプロジェクトや、ソースフォルダがもうないプロジェクトのフォルダは、Select › Smartly で真っ先にチェックされます。今朝ビルドしたものはチェックされないままです。

Xcode、xcodebuild、またはビルドサービスの実行中は、Levo がその行をロックし、理由を説明します。残したいもののチェックを外してから、Clean up を押します。Levo が探す項目の一覧は iOS と Mac の開発者のための Levo にあります。

よくある質問

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

はい。中身はソースから作られたビルド成果物、インデックス、ログです。Xcode が作り直すので、削除後の最初のビルドが遅くなるだけです。

Mac のどこに DerivedData がありますか?

~/Library/Developer/Xcode/DerivedData にあります。Xcode の Settings を開いて Locations を選び、Derived Data の横の矢印をクリックすると Finder で表示されます。

DerivedData を削除すると、ブレークポイントやスキームは消えますか?

いいえ。それらはプロジェクトやワークスペースに保存されていて、DerivedData にはありません。消えるのは古いビルドログとキャッシュされたインデックスです。

Xcode が DerivedData をまた埋めていくのはなぜですか?

ビルドのたびにそこへ書き込まれるからです。プロジェクトごとに1フォルダ、それにインデックスが加わります。大きなプロジェクトやブランチが多いと数十 GB になるので、数週間ごとに削除するのはごく普通のことです。