一、如何檢視編譯時間
終端執行下面指令
defaults write com.apple.dt.Xcode ShowBuildOperationDuration YES
編譯時,Xcode編譯進度條走完後,會展示編譯時間
二、可優化點
- build setting中 Optimization Level 設定優化
配置項 | 含義 |
---|---|
None | 編譯器不執行優化,不改善代碼性能,編譯耗時較少 |
Fast | 編譯器執行簡單的優化來提高代碼性能,相對增加編譯耗時 |
Faster | 編譯器執行所有優化,提升代碼性能,但增加編譯耗時 |
Fastest | 編譯器執行所有優化,改善代碼的速度,但會增加代碼長度,編譯速度慢 |
Fastest,Smallest | 編譯器執行所有優化,不會增加代碼長度,它是執行檔案占用更少記憶體的首選方案,幹的事兒越多,需要的時間就越長 |
基于上述情況,在 Develop(開發環境)下,Optimization Level 可配置為None,來提高代碼編譯速度,cocoapods 做同樣設定,在podfile檔案中,增加下面代碼:
post_install do |installer|
installer.pods_project.targets.each do |target|
target.build_configurations.each do |config|
# Develop 為開發環境scheme
if config.name.include?("Develop")
config.build_settings['GCC_OPTIMIZATION_LEVEL'] = '0'
end
end
end
end
-
符号表優化
依然在
中,搜尋build setting
,将Debug Information Format
、Develop
、AdHoc
均設定為不輸出dysm符号表,以節約編譯和打包時間。Beta
- 将
改為Build Active Architecture Only
是否僅編譯目前架構的版本,如果為No,會編譯所有架構的版本。FBI WARNING,此選項在Release模式下必須為No,否則釋出的ipa在部分裝置上将不可用。這一項更改完之後,可以顯著提高編譯速度。Yes
-
設定Xcode編譯線程數
在終端執行下面語句:
defaults write xcodebuild PBXNumberOfParallelBuildSubtasks 8
defaults write xcodebuild IDEBuildOperationMaxNumberOfConcurrentCompileTasks 8
defaults write com.apple.xcode PBXNumberOfParallelBuildSubtasks 8
defaults write com.apple.xcode IDEBuildOperationMaxNumberOfConcurrentCompileTasks 8
-
預編譯頭檔案 Precompile Prefix Header
Xcode目前已經不推薦使用pch方式,并且提供了 Enable Modules 用以替代。
如果項目中使用了 pch,
預設為YES,即 pch 參與預編譯,預編譯完成後,pch會被緩存起來,進而提高編譯速度;當設定為 NO 時,pch 不會被預編譯,而是在每個用到它導入的架構類庫中編譯一次(即每個引用了pch内容的.m檔案都要編譯一次pch,這樣會降低項目的編譯速度)。Precompile Prefix Header
-
Link-Time Optimizations 連結時優化
Link-Time Optimization執行連結時優化(LTO)。在Clang/LLVM領域,這意味着連結器獲得的是LLVM位元組碼,而不是通常的目标檔案。這些位元組碼在一種更抽象的層次上代表程式這裡寫連結内容的執行過程,允許LTO得以進行,但是壞處是,仍然需要将他們轉換成機器代碼,在連結時需要額外的處理時間。
參數設為YES時,能夠優化連結時間;目标檔案以LLVM二進制檔案格式存儲,在連結期間,優化了整個程式。
将其設為NO時,可以減少Link階段的時間。對于Link階段耗時較長的項目,整體編譯優化展現較為明顯。