Xcodeコンパイル性能の向上、RAMディスクコンパイル



DerivedData
 
Xcodeは、ファイルシステム内で一時情報を一元的にキャッシュします.
Xcode iOSプロジェクトをclean、build、またはiOS仮想マシン上でlaunchするたびに、XcodeはDeriveDataフォルダで読み書きを行います.つまり、Derived Dataの読み書きをハードディスクからメモリに移動します.
DeriveDataフォルダには、すべてのbuild情報、debug-およびrelease-built targets、およびプロジェクトのインデックスが含まれています.分散インデックス(odd index)の問題(コードブロック補完が正常ではなく、頻繁にインデックスを再構築したり、プロジェクトを実行したりするのが遅い)に遭遇した場合、派生データを効果的に削除できます.このフォルダを削除すると、すべてのXcode上のプロジェクト情報が破壊されます.
 
Step 1
DeriveDataの下にあるファイルを削除します.
rm -rf ~/Library/Developer/Xcode/DerivedData/*

これらのデータを削除すると、XcodeはBuild時に再書き込みされます.
 
Step 2
~/Library/Developer/Xcode/DerivedData.2 GBサイズのRAMディスクを取り付けます.
~/Library/Developer/Xcode/DerivedData.
cd ~/Library/Developer/Xcode/DerivedData

 
2 GBのRAMディスクを作成する(sizeの計算式size = (M) * 1024 * 1024 / 512):
hdid -nomount ram://4194304

この行のコマンドを実行すると、RAMディスクのドライブ名:/dev/diskN(Nは数値)が出力されます.
 
ディスクの初期化:
newfs_hfs -v DerivedData /dev/rdiskN

     Initialized/dev/rdisk3 as a 2 GB case-insensitive HFS Plus volume
 
ディスクのインストール:
diskutil mount -mountPoint ~/Library/Developer/Xcode/DerivedData /dev/diskN

既存のDeriveDataに古いファイルを非表示にするボリュームがインストールされます.これらのファイルは依然としてスペースを占めていますが、RAMディスクを削除するまでアクセスできません.
 
再起動またはFinderからRAMディスクをイジェクトすると、ディスクの内容が消えます.次にディスクを作成すると、Xcodeはインデックスとプロジェクトの中間ファイルを再構築します.
 
仮想ディスクを作成すると、割り当てられたすべての領域を直接占有するのではなく、仮想ディスク内のファイルの合計サイズに基づいてメモリを徐々に占有する.
注意:作成した仮想ディスクがいっぱいになると、コンパイルに失敗します.このときDerived Dataをクリアして再コンパイルし、十分なスペースがあるとしてもコンパイルに失敗する可能性がある.Xcodeを再起動することでこの問題を解決することができる.
 
手元のDemoに対してコンパイルテストを行い、コンパイル自体は読み書き内容が少なく、時間が短く、いずれも10 sから20 s以内であるため、スピードアップ感覚は明らかではなく、1 sから2 sの間では、大きなプロジェクトに応用すると比較的良い体現があるかもしれない.
 
参考:Reduce XCode build times
 
【iOS Tip】Xcodeコンパイル速度の向上