由于目前的開發(fā)的項目也是有將近三年的歷史,工程中有大概2000個.m文件,若干 pod 源文件慌申,少數(shù) framework,每次編譯耗時5分鐘左右理郑,打包將近8分鐘蹄溉,所以就在想使用技術(shù)手段解決這個痛點,然后在網(wǎng)上查找解決方案您炉,親自實踐之后取長補(bǔ)短柒爵,適配了目前的工程。
以下內(nèi)容參考:
http://www.reibang.com/p/67bf747658fe
http://www.reibang.com/p/7286396f8838
1. 安裝 CCache
使用 Homebrew 安裝 CCache(可能在此時會更新 Homebrew 至最新):
$ brew install ccache
注意赚爵,此時可能會因為沒有權(quán)限提示安裝 ccache 失敗棉胀,解決方法是右鍵點擊終端 → 使用描述文件新建窗口 → Homebrew ,再次輸入該命令安裝冀膝。
2. 在工程中創(chuàng)建 CCache 腳本
在工程根目錄下新建1~2個 CCache 腳本唁奢,起名為 ccache-clang
(1還是2取決于工程中是否有C++代碼):
#!/bin/sh
if type -p ccache >/dev/null 2>&1; then
export CCACHE_MAXSIZE=10G
export CCACHE_CPP2=true
export CCACHE_HARDLINK=true
export CCACHE_SLOPPINESS=file_macro,time_macros,include_file_mtime,include_file_ctime,file_stat_matches
# 指定日志文件路徑到桌面,等下排查集成問題有用窝剖,集成成功后刪除麻掸,否則很占磁盤空間
export CCACHE_LOGFILE='~/Desktop/CCache.log'
exec ccache /usr/bin/clang "$@"
else
exec clang "$@"
fi
需要注意的是,如果在安裝 CCache 很順的情況下赐纱,可使用上面的代碼脊奋,如果因為權(quán)限問題,在編譯的時候上面的代碼會走 else
導(dǎo)致無效疙描,此時需要改為:
#!/bin/sh
export PATH=$PATH:/usr/local/bin
export CCACHE_MAXSIZE=10G
export CCACHE_CPP2=true
export CCACHE_HARDLINK=true
export CCACHE_SLOPPINESS=file_macro,time_macros,include_file_mtime,include_file_ctime,file_stat_matches
# 指定日志文件路徑到桌面诚隙,等下排查集成問題有用,集成成功后刪除淫痰,否則很占磁盤空間
export CCACHE_LOGFILE='~/Desktop/CCache.log'
exec ccache /usr/bin/clang "$@"
如項目中用到C++最楷,將此文件復(fù)制一份,把文件中的 clang
替換為 clang++
。
之后通過命令行把這兩個文件改為可執(zhí)行文件:
$ chmod 777 ccache-clang
3. 在 Xcode 中配置編譯條件
選中需要編譯的 Target 中的 Build Settings 籽孙,在最上面點擊+
添加用戶自定義設(shè)置烈评,添加一個常量CC
,這個值會讓 Xcode 在編譯時把執(zhí)行路徑的可執(zhí)行文件當(dāng)做 C 編譯器犯建。然后添加CC
的路徑讲冠,路徑為剛才創(chuàng)建的文件的位置
關(guān)閉 Clang Modules,因為 CCache 不支持 Clang Modules适瓦,所以需要把 Enable Modules 的選項關(guān)掉竿开。
- 在
Build Settings
中搜索Enable Modules
,設(shè)置為NO
- PodFile 中插入如下代碼:
post_install do |installer|
installer.pods_project.targets.each do |target|
target.build_configurations.each do |config|
#關(guān)閉 Enable Modules
config.build_settings['CLANG_ENABLE_MODULES'] = 'NO'
# 在生成的 Pods 項目文件中加入 CC 參數(shù)玻熙,路徑的值根據(jù)你自己的項目來修改
config.build_settings['CC'] = '$(PODS_ROOT)/../ccache-clang'
end
end
end
- 將
@import
全部改為#import
否彩,如果使用了 Swift 混編,也需要更改:
4. 一切就緒嗦随,測試
cmd+shift+k 清空編譯文件夾列荔,開始進(jìn)行第一次編譯,第一次編譯會比之前以往都要慢枚尼,因為此時會進(jìn)行緩存贴浙,在命令行中輸入 ccache -s
可查看進(jìn)度:
如果接入成功,則會看到 cache size 不為0署恍,那么現(xiàn)在可以 cmd+shift+k 編譯第二次崎溃。你會發(fā)現(xiàn)第二次會比第一次速度快很多,那么證明 CCache 工作正常盯质。