ios編譯優(yōu)化

在項目迭代更新過程中,代碼量也不斷增加,pod庫的數(shù)量也變得很多,最終導(dǎo)致clean + build全量編譯時間變長,嚴(yán)重影響了開發(fā)速度和體驗。
我們可以通過編譯緩存如 CCache 或者換個編譯器 Buck (FB) / Bazel (Google)來實現(xiàn)分布式編譯,微信團隊的這篇 微信編譯速度優(yōu)化 有進行了比較完整的闡述。
我們可以提前編譯好pod庫,也就是二進制化,項目編譯階段pod只需要做鏈接工作,不需要重新編譯。所謂的二進制化,簡單說來可以通過 podSpec 將 source 指向事先打包好的 binary 來提高編譯效率。當(dāng)然也可以通過 CocoaPods-Binary 將 dependencies 預(yù)編譯成 binary 后緩存至本地,然后將原有的 Source Code link 到 binary 的方式實現(xiàn)編譯效率的提高。

podspec私有二進制庫

私有的pod庫,可以通過podspec文件,動態(tài)調(diào)整依賴的pod庫,是源碼或二進制庫。

image.png

pod安裝命令:SOURCECODE=1 pod install
具體參考:ios組件二進制庫、組件二進制方案
這種方案弊端很明顯,只能針對自己的私有pod庫,而且源碼和二進制切換不很方便,現(xiàn)在有很多成熟的cocoapods-plugin。

制作pod庫,pod 驗證和上傳時,如果包含.a或者.framework,可能會遇到錯誤

ERROR | [iOS] xcodebuild: Returned an unsuccessful exit code

解決方式如下,上傳的參數(shù)要和驗證通過的參數(shù)一樣

pod lib lint --verbose  --allow-warnings --skip-import-validation --use-libraries
pod trunk push jkfjakjf.podspec --verbose  --allow-warnings --skip-import-validation --use-libraries

二進制編譯

1.1 cocoapods-binary

cocoapods-binary (Cocoapods 官方推薦的二進制插件)可以即時生成二進制包并緩存。原理是通過 CocoaPods 提供的 pre_install hook 在 pod installprepare階段攔截到當(dāng)前的 pod install context,進而 fork 出一份獨立的 installer 以完成將預(yù)編譯源碼 clone 至Pod/_Prebuild目錄下。

第一步,首先安裝插件

gem install cocoapods-binary

第二步,修改Podfile文件

#在最開始位置引入插件
plugin 'cocoapods-binary'
#plugin 'cocoapods-binary-bel'
platform :ios, '9.0'
#必須配置
use_frameworks!
#二進制編譯所有pod庫;
all_binary! 

target 'compileBinaryDemo' do

pod 'Masonry',  :binary => false #不二進制編譯;反之,為true
pod 'SDWebImage'

end

如果所有pod庫需要二進制化, 直接在起始位置使用all_binary!, 這樣默認(rèn)所有庫均提前編譯。
在使用all_binary!情況下,如果有些庫不需要開啟二進制化,可以在后面添加:binary => false。
如果只需要指定庫二進制化,那么在指定庫后面添加:binary => true

第三步

pod install,然后編譯項目。
如果pod install時,提示找不到插件。

pod install
[!] Your Podfile requires that the plugin `cocoapods-binary` be installed. Please install it and try installation again.

可以通過gem list命令,查看是否安裝成功。如果安裝了仍然提示找不到,那么大概率,是多ruby造成的,可以通過安裝rvm處理。

上面都處理完,你可能還會遇到問題,我沒有找到原因,我覺得可能是cocoapods-binary長期沒有維護,可以嘗試使用cocoapods-binary-bel,使用方式一樣。

cocoapods-binary不足之處
  1. 單私有源,無法實現(xiàn)服務(wù)端緩存,在沒有對應(yīng)二進制包版本時,pod install 后會額外去做二進制包的生成,一定程度上會影響 pod install的速度。
  2. 開發(fā)者切回源碼調(diào)試,二進制緩存會一并清空,需求重新編譯。
  3. 只支持framework,引入方式變更為 #import <aaa/aaa.h>。
1.2 cocoapods-binary-bel

cocoapods-binary-bel使用方式和cocoapods-binary一樣,同時也做了優(yōu)化改進。

  1. 切換為源碼模式,二進制緩存不會清空
  2. pod install --hsource,直接切換為源碼,而不需要改動podfile文件。
    我自己新建了一個空工程,引入了pod庫,做了一個源碼和二進制編譯的時間對比,如下,僅供參考。
    WeChatb.png

原文地址

1.3 雙私有源

雙私有源,一個靜態(tài)服務(wù)器保存預(yù)先打好包的framework,一個是我們現(xiàn)在保存源碼的服務(wù)地址,在install的時候去選擇使用下載那個。具體方案,cocoapods-bin、cocoapods-imy-bin,公司如果提供支持,可以嘗試這種方案。
參考:iOS如何提高10倍以上編譯速度

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

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

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