引言
最近對(duì)組件化相關(guān)的知識(shí)比較感興趣,翻看了好多大神的博客,算是對(duì)組件化有個(gè)大概的了解了。所謂的組件化,一方面是抽取私有Pod庫(kù),其實(shí)就是把我們的項(xiàng)目分成多個(gè)模塊,例如基類模塊、工具類模塊、登陸模塊、首頁(yè)模塊等等,然后把他們抽取成一個(gè)個(gè)私有Pod庫(kù),像平時(shí)利用cocopods導(dǎo)入三方庫(kù)那樣導(dǎo)入我們的這些私有庫(kù);另一個(gè)方面就是關(guān)于模塊之間的通信問(wèn)題,常常采用路由跳轉(zhuǎn)。本文的主要目的是前者。
一. 公有Pod庫(kù)的本質(zhì)
公有Pod庫(kù)大家應(yīng)該都比較熟悉,項(xiàng)目中經(jīng)常使用的三方庫(kù),如AFNetworking,Masonry,SDWebImage等都屬于公有Pod庫(kù),任何一個(gè)開(kāi)發(fā)者都可以把其導(dǎo)入自己的項(xiàng)目工程中進(jìn)行使用。與之相對(duì)應(yīng)的就是私有Pod庫(kù),它只能被有權(quán)限的人使用。其實(shí)公有和私有的區(qū)別不大,就是誰(shuí)來(lái)管理.podspecs文件的問(wèn)題,下面就說(shuō)一下大家比較熟悉的公有Pod庫(kù)的本質(zhì)
- 遠(yuǎn)程索引庫(kù):存在一個(gè)公共的遠(yuǎn)程索引庫(kù),包含所有三方框架的.podspec文件,在.podspecs文件中包括了框架名,框架源碼地址,用戶名,描述等信息。
- 本地索引庫(kù):在安裝pod,執(zhí)行pod setup的時(shí)候,會(huì)將公共的遠(yuǎn)程索引庫(kù)copy一份到本地,也即是公共的本地索引庫(kù)。(可以查看此目錄:/Users/xx/.cocoapods/repos, xx替換成你的電腦名,下同)
- 檢索文件: 公共的本地索引庫(kù)會(huì)另外生成一個(gè)檢索文件,以鍵值對(duì)的形式,方便以后查找。( 可以查看此目錄:/Users/xx/Library/Caches/CocoaPods)
- 導(dǎo)入三方庫(kù):執(zhí)行pod install的時(shí)候,先去檢索文件中查找,找到之后,在公共的本地索引庫(kù)拿到框架源碼地址進(jìn)行導(dǎo)入。
二. 創(chuàng)建私有Pod庫(kù)
上面已經(jīng)提到了,公有Pod庫(kù)是任何一個(gè)開(kāi)發(fā)者都可以導(dǎo)入使用的,并且是能看到源碼的,這顯然不是我們想要的。我們的pod庫(kù)應(yīng)該是只能內(nèi)部人員才能導(dǎo)入使用,所以我們應(yīng)該把一個(gè)個(gè)模塊抽取成私有的Pod庫(kù)。
公有和私有Pod庫(kù)的主要區(qū)別就是遠(yuǎn)程索引庫(kù)不同,我們需要?jiǎng)?chuàng)建一個(gè)私有的遠(yuǎn)程索引庫(kù),用來(lái)管理私有庫(kù)的.podspec文件,其他方面大同小異。
下面以Base模塊為例,將其抽取成私有Pod庫(kù)。說(shuō)明一下:原項(xiàng)目名為ModuleDemo,位于桌面上。
1.創(chuàng)建私有的遠(yuǎn)程索引庫(kù)
(1) 在coding.net上創(chuàng)建一個(gè)私有的倉(cāng)庫(kù)FERSpecs,克隆地址是:https://git.coding.net/jokin11/FERSpecs.git,F(xiàn)ERSpecs就作為上面提到的私有的遠(yuǎn)程索引庫(kù)。
(2) 終端執(zhí)行下面命令,將私有的遠(yuǎn)程索引庫(kù)copy到本地。
pod repo add FERSpecs https://git.coding.net/jokin11/FERSpecs.git
執(zhí)行完畢后,在目錄:/Users/xx/.cocoapods/repos 下會(huì)多出來(lái)一個(gè)FERSpecs文件夾,至此私有的索引庫(kù)部分就完成了。
2.創(chuàng)建私有Pod組件庫(kù)
(1) 打開(kāi)終端,進(jìn)入到桌面目錄下,執(zhí)行下面命令來(lái)創(chuàng)建一個(gè)名為FERBase的Pod庫(kù)空模板。
pod lib create FERBase
依次輸入下圖信息進(jìn)行基礎(chǔ)配置:

配置完畢之后,Pod庫(kù)空模板就創(chuàng)建成功了,系統(tǒng)會(huì)自動(dòng)此模板。
(2) 在coding.net上創(chuàng)建遠(yuǎn)程倉(cāng)庫(kù)FERBase,克隆地址是:https://git.coding.net/jokin11/FERBase.git,在終端FERBase目錄下執(zhí)行下面命令,關(guān)聯(lián)本地倉(cāng)庫(kù)到遠(yuǎn)程倉(cāng)庫(kù)。
git remote add origin https://git.coding.net/jokin11/FERBase.git
(3) 將原項(xiàng)目MoudleDemo中需要封裝的Base模塊,復(fù)制到 FERBase/FERBase/Classes中,同時(shí)將Base文件夾拖入項(xiàng)目的下圖位置,順便刪除ReplaceMe文件,


pod spec lint
等待片刻,終端出現(xiàn) FERBase.podspec passed validation,則說(shuō)明 FERBase.podspec 文件通過(guò)校驗(yàn)。
3.將FERBase.podspec文件加入私有的遠(yuǎn)程索引庫(kù)
上面已經(jīng)驗(yàn)證過(guò) FERBase.podspec 文件沒(méi)問(wèn)題,接著就是要把 FERBase.podspec 文件添加到私有的索引庫(kù)(也就是第一步中得到的索引庫(kù) FERSpecs),在終端執(zhí)行下面命令:
pod repo push FERSpecs FERBase.podspec
上面命令對(duì) FERBase.podspec 文件做了兩個(gè)操作:一個(gè)是將其推送到私有的遠(yuǎn)程索引庫(kù),可以去 coding.net 的 FERSpecs倉(cāng)庫(kù)中查看;另一個(gè)是將其copy到私有的本地索引庫(kù),這個(gè)可以去目錄:/Users/xx/.cocoapods/repos/FERSpecs 下查看到。
至此,Base模塊抽取成私有的Pod庫(kù)也就完成了,可以在終端執(zhí)行pod search FERBase來(lái)查詢它,接下來(lái)就是在原項(xiàng)目中使用它了。
4.使用私有Pod庫(kù)
在原項(xiàng)目的Podfile中,導(dǎo)入私有的Pod庫(kù)的方式如下圖

pod install命令進(jìn)行安裝,安裝完畢之后,可以看到Pods文件夾中已經(jīng)有FERBase了,然后把原項(xiàng)目中的Base文件夾給刪除掉即可。另外,公司內(nèi)部其他成員在使用之前需要執(zhí)行下面命令,將私有的遠(yuǎn)程索引庫(kù)copy到本地,然后就可以正常使用了。
pod repo add FERSpecs https://git.coding.net/jokin11/FERSpecs.git
總結(jié)
在整個(gè)過(guò)程中,需要到git服務(wù)器上創(chuàng)建兩個(gè)倉(cāng)庫(kù),一個(gè)作為索引庫(kù),一個(gè)作為pod組件庫(kù);接著就是創(chuàng)建模板并配置.podspec文件;然后就是讓索引庫(kù)管理.podspec文件,之后就是使用了,如果清楚了這幾步,對(duì)于抽取私有Pod庫(kù)應(yīng)該很得心應(yīng)手。