Cocopod 二進(jìn)制化優(yōu)化項(xiàng)目構(gòu)建速度

什么是組件二進(jìn)制化?

  • 在iOS開發(fā)中,事實(shí)標(biāo)準(zhǔn)是我們使用CocoaPods生成、管理和使用library。這里的library就是一個(gè)模塊、組件或庫(kù)。二進(jìn)制化指的是通過編譯把組件的源碼轉(zhuǎn)換成靜態(tài)庫(kù)或動(dòng)態(tài)庫(kù),以提高該組件在App項(xiàng)目中的編譯速度。

為什么我們需要二進(jìn)制化呢?

  • 在我們App開發(fā)中,我們逐漸的抽象了很多模塊、業(yè)務(wù)、UI等把他轉(zhuǎn)換成私有CocoaPod庫(kù)。其中有很多我們自己的組件是用Swift寫的,源碼格式為.Swift。在app項(xiàng)目編譯時(shí).Swift部分代碼編譯非常慢。 隨著業(yè)務(wù)的擴(kuò)展,私有CocoaPod庫(kù)和第三方CocoaPod庫(kù)越來(lái)越多,App項(xiàng)目中的文件也越來(lái)越多。每次pod install安裝新庫(kù)或pod update更新庫(kù)的時(shí)候,重新編譯的過程需要等待很長(zhǎng)時(shí)間。這也向我們提出了加快編譯速度的需求。

下面是使用的工具個(gè)人理解上的對(duì)比,如果有不對(duì)的地方往指正和溝通,互相進(jìn)步和學(xué)習(xí)


Cocopods組件二進(jìn)制插件

  • 二進(jìn)制化后,可以看出我們編譯的target變少了,少了RxSwift.....這些target,這些就時(shí)間差的由來(lái)。
  • cocoapods-bin(是一個(gè)非cocoapods的開源項(xiàng)目)
    • 該插件進(jìn)行二進(jìn)制化的策略是采用雙私有源,即2個(gè)服務(wù)器一個(gè)靜態(tài)服務(wù)器保存預(yù)先打好包的.a或者framework,一個(gè)是我們現(xiàn)在保存源碼的服務(wù)器,在install的時(shí)候去選擇使用下載那個(gè)。
    • 該插件優(yōu)點(diǎn)缺點(diǎn)也十分明顯
      • 優(yōu)點(diǎn):源碼和二進(jìn)制文件之間可以來(lái)回切換,速度比較快
      • 缺點(diǎn):源碼的變動(dòng)不能及時(shí)得到響應(yīng),而且需要第二個(gè)私有服務(wù)器
  • cocoapods-packager(cocoapods的開源項(xiàng)目)
    • 該插件是cocoapods的一個(gè)插件,主要是來(lái)將私有庫(kù)打包成二級(jí)制的一個(gè)插件,通過修改*.podspec文件
    • 該插件的優(yōu)缺點(diǎn):
      • 優(yōu)點(diǎn):可以將私有庫(kù)打包成二級(jí)制文件,由組件本身去管理二進(jìn)制文件,方便為主項(xiàng)目集成,私有庫(kù)變動(dòng)等
      • 缺點(diǎn):該庫(kù)已經(jīng)有很長(zhǎng)一段時(shí)間不維護(hù)了,很多問題都未解決,而且我們的組件里依賴相對(duì)比較復(fù)雜,使用的Swift不能很好的支持。
  • cocoapods-binary(是一個(gè)非cocoapods的開源項(xiàng)目)
    • 該插件是開源的Cocoapods推薦的的一個(gè)插件,主要是來(lái)將Podfile里所依賴的組件選擇性打包成二級(jí)制的一個(gè)插件,通過修改Podfile文件里的內(nèi)容
    • 該插件的優(yōu)缺點(diǎn):
      • 優(yōu)點(diǎn):選擇性的在將那些組件使用二進(jìn)制,不需要多個(gè)服務(wù)去存二級(jí)制文件,二進(jìn)制文件在pod install的過程進(jìn)行預(yù)編譯,生成的項(xiàng)目之間依賴framework。源碼變動(dòng)能比較快的得到相應(yīng)
      • 缺點(diǎn):二進(jìn)制切換到源碼文件的時(shí)候都會(huì)刪除已經(jīng)打好的二級(jí)制文件,下次切換需要重新編譯新的二級(jí)制文件,這個(gè)過程比較耗時(shí)

Usage

1.安裝插件

 gem install cocoapods-binary

2.在Podfile中加入以下內(nèi)容

#引入插件  
plugin 'cocoapods-binary'  
#一定要使用framework  
use_frameworks!  
#該值打開后 默認(rèn)所有的依賴都將開啟二進(jìn)制化  
#all_binary!  
 
#在依賴的組件后添加:binary => true/false 來(lái)切換源碼和二級(jí)制 如果打開了上面的all_binary!后默認(rèn)都是true   
target "HP" do   
  pod "ExpectoPatronum", :binary => true  
end

最后編輯于
?著作權(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)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

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