什么是組件二進(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