前言:
項(xiàng)目組件化的好處我就不不多說(shuō)了,今天我就跟大家分享一下項(xiàng)目組件化第一步:創(chuàng)作自己的私有庫(kù),以及自己遇到的令人酸爽的bug.
之前當(dāng)在項(xiàng)目中看到這樣的目錄后,是不是默默有一種高高在上,可遠(yuǎn)觀而不可褻玩焉的感覺(jué)。當(dāng)時(shí)我多想在這個(gè)目錄下有自己的代碼呀。只要不斷努力,夢(mèng)想并不遙遠(yuǎn)!

首先說(shuō)一下cocoapoads怎么把我們想要的三方庫(kù)下載到我們的工程里面的呢?理解了這個(gè),下面對(duì)我們自己建立的私庫(kù)就好理解了.
在GitHub 上https://github.com/CocoaPods/Specs鏈接下放著pod管理三方庫(kù)的podspec文件,隨便點(diǎn)開(kāi)其中一個(gè)。索引庫(kù),如下圖

這里面放著三方庫(kù)URLComponentsBuilder的一下信息,name, version ,summary, authors,homepage等信息。
在我們?cè)诮K端輸入pod setup,會(huì)將遠(yuǎn)程索引庫(kù)下載到我們本地方便pod search,cocapods本地spec索引庫(kù)的位置:/Users/mac/.cocoapods/repos/master/Specs
pod search時(shí)會(huì)根據(jù)本地specs倉(cāng)庫(kù)去創(chuàng)建search_index.json的索引文件,索引文件中包含了一個(gè)個(gè)三方庫(kù)的podspec文件中的信息,search_index.json文件的位置:/Users/mac/Library/Caches/cocoapods/search_index.json
pod install時(shí)候,會(huì)根據(jù)要安裝的三方庫(kù)的podspec索引文件,找到三方庫(kù)的下載地址和版本信息,然后下載到我們工程里面。
開(kāi)始步入正題

首先建立自己的私庫(kù)
1、本地私有索引庫(kù)
2、遠(yuǎn)程私有索引庫(kù)
3、本地組件代碼庫(kù)
4、遠(yuǎn)程組件代碼庫(kù)
大致流程是,創(chuàng)建自己的遠(yuǎn)程索引庫(kù),創(chuàng)建本地索引庫(kù),本地遠(yuǎn)程索引庫(kù)關(guān)聯(lián),創(chuàng)建自己的遠(yuǎn)程組件代碼倉(cāng)庫(kù),創(chuàng)建自己的本地的組件代碼倉(cāng)庫(kù),把自己的組件代碼放進(jìn)去提交到遠(yuǎn)程組件代碼倉(cāng)庫(kù),本地校驗(yàn),遠(yuǎn)程校驗(yàn),將自己創(chuàng)建的索引文件 push到遠(yuǎn)程索引庫(kù)進(jìn)行管理。
------------------------------------------------------------------------------------------------------
光說(shuō)不練假把式,現(xiàn)在我們創(chuàng)建一個(gè)網(wǎng)絡(luò)請(qǐng)求的組件,上傳到自己的私有庫(kù)。
1、在github上創(chuàng)建自己的遠(yuǎn)程索引庫(kù)倉(cāng)庫(kù),名字自己起,copy地址,我這已經(jīng)創(chuàng)建過(guò)了,就不重復(fù)創(chuàng)建了,創(chuàng)建完一次,自己之后的遠(yuǎn)程代碼索引都可以放在這里了。

注意事項(xiàng):
這里面寫(xiě)個(gè)說(shuō)明文件啥的,不要為空,或者接下來(lái)會(huì)出現(xiàn)不可描述的錯(cuò)誤,這是我踩過(guò)的坑總結(jié)出來(lái)的教訓(xùn)。如果為空會(huì)出現(xiàn)下面的錯(cuò)誤。
Your configuration specifies to merge with the ref 'refs/heads/master'
from the remote, but no such ref was fetched.
2、本地索引庫(kù)和遠(yuǎn)程索引庫(kù)關(guān)聯(lián)
pod repo add JSpecs https://github.com/canlanrensheng/JSpecs.git
然后pod repo查看

會(huì)多出本地索引庫(kù)JSpecs
3、創(chuàng)建自己的遠(yuǎn)程組件代碼庫(kù),并copy地址

4、創(chuàng)建自己的本地組件代碼倉(cāng)庫(kù)
cd ~/Desktop/
執(zhí)行pod lib create JSHttpToolKit
根據(jù)需要填寫(xiě)下面的信息

成功之后把我們自己寫(xiě)的組件代碼放在下面的目錄下

cd 進(jìn)入 Example 文件目錄下
執(zhí)行 pod install? 把你封裝的代碼集成到Example中.
編輯JSHttpToolKit.podspec信息,如下圖,因?yàn)槲覍?xiě)的需要依賴AFNetworking庫(kù),所以s.dependency要加上相應(yīng)的依賴庫(kù),不依賴的不用加。

記住s.version版本號(hào),下邊要用
cd 到本地組件目錄下

開(kāi)始提交代碼到遠(yuǎn)程組件代碼倉(cāng)庫(kù)
git add .
git commit -m '1.0.0代碼提交'
git remote add origin https://github.com/canlanrensheng/JSHttpToolKit.git
git push origin master
git tag '1.0.0' (這里的tag要跟上面的JSHttpToolKit.podspec的version一致,要不然會(huì)出現(xiàn)不可描述的錯(cuò)誤)
git push --tags
5、本地驗(yàn)證
pod lib lint JSHttpToolKit.podspec --allow-warnings

三方庫(kù)包含靜態(tài)庫(kù)(如:xxxx.a),在驗(yàn)證的時(shí)候,不能驗(yàn)證通過(guò),可使用如下命令:pod lib lint --use-libraries --allow-warnings
如果沒(méi)有依賴三方庫(kù)的話去掉 --use-libraries如下:
pod lib lint JSHttpToolKit.podspec --allow-warnings
6、遠(yuǎn)程驗(yàn)證
pod spec lint --allow-warnings

三方庫(kù)包含靜態(tài)庫(kù)(如:xxxx.a),在驗(yàn)證的時(shí)候,不能驗(yàn)證通過(guò),可使用如下命令:pod lib lint--use-libraries? --allow-warnings
如果沒(méi)有依賴三方庫(kù)的話去掉 --use-libraries如下:
pod spec lint --allow-warnings
//編輯報(bào)錯(cuò)的問(wèn)題?trunk URL couldn't be downloaded:xxx 應(yīng)該是源的問(wèn)題
pod lib lint JSVideoBrowserKit.podspec? --use-libraries? --allow-warnings --sources='https://github.com/CocoaPods/Specs.git'
7、將你的.podspec索引文件 push到索引庫(kù)進(jìn)行管理
pod repo push JSpecs JSHttpToolKit.podspec --use-libraries --allow-warnings
如果出現(xiàn)報(bào)錯(cuò)?runk URL couldn't be downloaded:xxx 應(yīng)該是源的問(wèn)題
pod repo push JSSpecs JSVideoBrowserKit.podspec --use-libraries? --allow-warnings --sources='https://github.com/CocoaPods/Specs.git'

查看pod repo

cd到本地索引庫(kù)的這個(gè)目錄下cd /Users/zhangjinshan/.cocoapods/repos/JSpecs
ls查看

說(shuō)明已經(jīng)添加到本地的索引庫(kù)里面了。Perfect!
到這里我們就完成了自己的網(wǎng)絡(luò)請(qǐng)求組件的制作,接下來(lái)看怎么用呢?
新建一個(gè)測(cè)試工程,并在工程目錄下創(chuàng)建podfile

引入Specs和自己的遠(yuǎn)程索引庫(kù)的地址
cd到測(cè)試目錄下,執(zhí)行pod install

在需要的地方引入我們的頭文件就可以了。

到此,創(chuàng)建自己的私有庫(kù)就完成了。歡迎批評(píng)指正!