ios XCode編譯速度過(guò)慢解決方案

公司有個(gè)做了很久的老項(xiàng)目,被蝸牛般的編譯速度折磨了很久。估計(jì)很多同學(xué)也會(huì)遇到類似的問(wèn)題。今天在這里把平時(shí)自己如何加快XCode編譯速度的方法整理一下。大家可以參考參考!

1. 增加X(jué)Code執(zhí)行的線程數(shù)(??)

可以根據(jù)自己Mac的性能,更改線程數(shù)設(shè)置5defaults write com.apple.Xcode PBXNumberOfParallelBuildSubtasks 5

另外也有一個(gè)設(shè)置可以開(kāi)啟:defaults write com.apple.dt.Xcode ShowBuildOperationDuration YES

XCode默認(rèn)使用與CPU核數(shù)相同的線程來(lái)進(jìn)行編譯,但由于編譯過(guò)程中的IO操作往往比CPU運(yùn)算要多,因此適當(dāng)?shù)奶嵘€程數(shù)可以在一定程度上加快編譯速度。

image

2.將Debug Information Format改為DWARF(??????)

在工程對(duì)應(yīng)TargetBuild Settings中,找到Debug Information Format這一項(xiàng),將Debug時(shí)的DWARF with dSYM file改為DWARF。

如圖:

image

這一項(xiàng)設(shè)置的是是否將調(diào)試信息加入到可執(zhí)行文件中,改為DWARF后,如果程序崩潰,將無(wú)法輸出崩潰位置對(duì)應(yīng)的函數(shù)堆棧,但由于Debug模式下可以在XCode中查看調(diào)試信息,所以改為DWARF影響并不大。這一項(xiàng)更改完之后,可以大幅提升編譯速度。

比如在目前本人負(fù)責(zé)的項(xiàng)目中,由于依賴了多個(gè)Target,所以需要在每個(gè)TargetDebug Information Format設(shè)置為DWARF。順便提一下,如果通過(guò)Cocoapod引入第三方則Debug Information Format默認(rèn)就是設(shè)置為DWARF的。

  • SDWebImage通過(guò)Cocoapod``Debug Information Format的默認(rèn)設(shè)置

    image

注意:將Debug Information Format改為DWARF之后,會(huì)導(dǎo)致在Debug窗口無(wú)法查看相關(guān)類類型的成員變量的值。當(dāng)需要查看這些值時(shí),可以將Debug Information Format改回DWARF with dSYM file,clean(必須)之后重新編譯即可。

3.將Build Active Architecture Only改為Yes(??)

在工程對(duì)應(yīng)TargetBuild Settings中,找到Build Active Architecture Only這一項(xiàng),將Debug時(shí)的NO改為Yes。

image

這一項(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)庫(kù)中使用-O4,因?yàn)檫@會(huì)讓Clang鏈接Link Time Optimizations (LTO)使得編譯更慢,通常使用-O3

image

注意:在設(shè)置編譯優(yōu)化之后,XCode斷點(diǎn)和調(diào)試信息會(huì)不正常,所以一般靜態(tài)庫(kù)或者其他Target這樣設(shè)置。

4.資源整合(????)

4.1 將常用的代碼及文件打包成靜態(tài)庫(kù)

4.2 添加預(yù)編譯文件,把常用的頭文件放到預(yù)編譯文件里面

4.3 能用@class就用@class

參考

To speed up the XCode compile and link speed (200%+)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容