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

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

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

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

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

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


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

  • 二進(jìn)制化后,可以看出我們編譯的target變少了,少了RxSwift.....這些target,這些就時(shí)間差的由來。
  • 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)制文件之間可以來回切換,速度比較快
      • 缺點(diǎn):源碼的變動(dòng)不能及時(shí)得到響應(yīng),而且需要第二個(gè)私有服務(wù)器
  • cocoapods-packager(cocoapods的開源項(xiàng)目)
    • 該插件是cocoapods的一個(gè)插件,主要是來將私有庫打包成二級(jí)制的一個(gè)插件,通過修改*.podspec文件
    • 該插件的優(yōu)缺點(diǎn):
      • 優(yōu)點(diǎn):可以將私有庫打包成二級(jí)制文件,由組件本身去管理二進(jìn)制文件,方便為主項(xiàng)目集成,私有庫變動(dòng)等
      • 缺點(diǎn):該庫已經(jīng)有很長一段時(shí)間不維護(hù)了,很多問題都未解決,而且我們的組件里依賴相對比較復(fù)雜,使用的Swift不能很好的支持。
  • cocoapods-binary(是一個(gè)非cocoapods的開源項(xiàng)目)
    • 該插件是開源的Cocoapods推薦的的一個(gè)插件,主要是來將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 來切換源碼和二級(jí)制 如果打開了上面的all_binary!后默認(rèn)都是true   
target "HP" do   
  pod "ExpectoPatronum", :binary => true  
end

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容