做了這么久的老項(xiàng)目迫靖,被蝸牛般的編譯速度折磨很久。估計(jì)很多同學(xué)也會(huì)遇到類似的問題兴使。這里把平時(shí)自己如何加快
XCode
編譯速度的方法整理一下系宜。
1. 增加XCode執(zhí)行的線程數(shù)(??)
可以根據(jù)自己Mac
的性能,更改線程數(shù)設(shè)置5
:defaults write com.apple.Xcode PBXNumberOfParallelBuildSubtasks 5
另外也有一個(gè)設(shè)置可以開啟:defaults write com.apple.dt.Xcode ShowBuildOperationDuration YES
XCode默認(rèn)使用與CPU核數(shù)相同的線程來進(jìn)行編譯发魄,但由于編譯過程中的IO操作往往比CPU運(yùn)算要多盹牧,因此適當(dāng)?shù)奶嵘€程數(shù)可以在一定程度上加快編譯速度。
2.將Debug Information Format改為DWARF(??????)
在工程對(duì)應(yīng)Target
的Build Settings
中励幼,找到Debug Information Format
這一項(xiàng)汰寓,將Debug時(shí)的DWARF with dSYM file
改為DWARF
。
如圖:
這一項(xiàng)設(shè)置的是是否將調(diào)試信息加入到可執(zhí)行文件中苹粟,改為DWARF后有滑,如果程序崩潰,將無法輸出崩潰位置對(duì)應(yīng)的函數(shù)堆棧嵌削,但由于Debug模式下可以在XCode中查看調(diào)試信息毛好,所以改為DWARF影響并不大。這一項(xiàng)更改完之后苛秕,可以大幅提升編譯速度肌访。
比如在目前本人負(fù)責(zé)的項(xiàng)目中,由于依賴了多個(gè)Target
艇劫,所以需要在每個(gè)Target
的Debug Information Format
設(shè)置為DWARF
吼驶。順便提一下,如果通過Cocoapod
引入第三方則Debug Information Format
默認(rèn)就是設(shè)置為DWARF
的店煞。
-
SDWebImage
通過Cocoapod``Debug Information Format
的默認(rèn)設(shè)置
注意:將
Debug Information Format
改為DWARF
之后旨剥,會(huì)導(dǎo)致在Debug
窗口無法查看相關(guān)類類型的成員變量的值。當(dāng)需要查看這些值時(shí)浅缸,可以將Debug Information Format
改回DWARF with dSYM file
,clean(必須)
之后重新編譯即可魄咕。
3.將Build Active Architecture Only改為Yes(??)
在工程對(duì)應(yīng)Target
的Build Settings
中衩椒,找到Build Active Architecture Only
這一項(xiàng),將Debug
時(shí)的NO
改為Yes
哮兰。
這一項(xiàng)設(shè)置的是是否僅編譯當(dāng)前架構(gòu)的版本毛萌,如果為NO
,會(huì)編譯所有架構(gòu)的版本喝滞。需要注意的是阁将,此選項(xiàng)在Release
模式下必須為NO`,否則發(fā)布的ipa在部分設(shè)備上將不能運(yùn)行右遭。這一項(xiàng)更改完之后做盅,可以顯著提高編譯速度缤削。
4.設(shè)計(jì)編譯優(yōu)化等級(jí)(??)
不要再項(xiàng)目中或者靜態(tài)庫中使用-O4
,因?yàn)檫@會(huì)讓Clang
鏈接Link Time Optimizations (LTO)
使得編譯更慢吹榴,通常使用-O3
亭敢。
注意:在設(shè)置編譯優(yōu)化之后,XCode斷點(diǎn)和調(diào)試信息會(huì)不正常图筹,所以一般靜態(tài)庫或者其他Target
這樣設(shè)置帅刀。