前言
在我們開(kāi)發(fā)過(guò)程中,有一些自己封裝的工具類或是庫(kù)他炊,為了方便管理,我們借助cocoapods來(lái)實(shí)現(xiàn)已艰。我們平時(shí)所接觸的第三方庫(kù)痊末,是公開(kāi)的,我們自己的代碼使用私有庫(kù)來(lái)進(jìn)行哩掺。
私有庫(kù)相關(guān)概念和原理
cocopods為包管理凿叠,那么顧名思義它只是管理我們所存代碼的一些信息,并不是真正管理我們的代碼嚼吞。那么這里就需要兩個(gè)倉(cāng)庫(kù)盒件,其中一個(gè)倉(cāng)庫(kù)是托管cocoapods所需要的配置文件,另外一個(gè)倉(cāng)庫(kù)才是存放我們的代碼舱禽。
cocoapods是通過(guò).podspec
文件來(lái)索引私有庫(kù)真的存代碼的倉(cāng)庫(kù)炒刁。其所有配置文件托管在Master Repo。
核心概念:
.podspec : 該文件為你的代碼倉(cāng)庫(kù)索引描述文件誊稚,CocoaPods通過(guò)該文件對(duì)你真正存儲(chǔ)代碼工程的 Git 倉(cāng)庫(kù)進(jìn)行索引與下載
Lib : 你上傳到遠(yuǎn)程Git倉(cāng)庫(kù)的代碼工程翔始,將來(lái)用于開(kāi)源共享或則私有
Git 倉(cāng)庫(kù) : Git介紹
CocoaPod 通過(guò)第一個(gè) Git 倉(cāng)庫(kù)的里 .podspec 描述文件找到真正存儲(chǔ)你代碼的第二個(gè) Git 倉(cāng)庫(kù),然后根據(jù) .podspec 里的相關(guān)字段對(duì)特定目錄下的代碼里伯,三方依賴庫(kù)城瞎,資源文件等進(jìn)行下載。
換一種說(shuō)法來(lái)理解疾瓮,第一個(gè) Git 倉(cāng)庫(kù)里的 .podspec 描述文件相當(dāng)于我們的指針, 其指向的另一個(gè) Git 倉(cāng)庫(kù)(內(nèi)存)才是你自己真正所共享的代碼脖镀。
私有庫(kù)創(chuàng)建流程
基于git的倉(cāng)庫(kù)有很多,由于GitHub的私有庫(kù)是收費(fèi)的狼电,所以筆者使用的碼云蜒灰。
1.首先創(chuàng)建倉(cāng)庫(kù)1弦蹂,用于托管我們的代碼。
2.創(chuàng)建倉(cāng)庫(kù)2强窖,用于存放cocoapoads索引所需的配置文件凸椿。
3.前面已經(jīng)將兩個(gè)倉(cāng)庫(kù)建好了,那么接下來(lái)創(chuàng)建代碼庫(kù)Lib和托管Podspec文件毕骡。
(1)首先在本地創(chuàng)建一個(gè)Lib削饵,使用終端cd到你文件想要保存的目錄下,依照提示創(chuàng)建未巫。
創(chuàng)建lib命令:
pod lib create <#項(xiàng)目名字#>
當(dāng)執(zhí)行
pod lib create ProjectName
時(shí),其實(shí)是下載了一個(gè)pod模板,然后在內(nèi)部通過(guò)更改.podspec文件的配置定制化自己的pod,
pod lib create ProjectName
其實(shí)使用了默認(rèn)參數(shù),補(bǔ)全的話pod lib create ProjectName --template-url=https://github.com/CocoaPods/pod-template.git
,當(dāng)模板創(chuàng)建成功后窿撬,會(huì)自動(dòng)使用XCode打開(kāi)。
(2)接下來(lái)我們配置一下
ExampleLib.podspec
文件:(3)配置好相關(guān)信息后叙凡,我們來(lái)檢查一下文件格式和遠(yuǎn)程地址等信息是否正確:
pod lib lint
注意:提示信息需要沒(méi)有error和warn:(這里一般出錯(cuò)都是遠(yuǎn)程倉(cāng)庫(kù)地址沒(méi)配置好或是素材路徑等)
通過(guò)Cocoapods創(chuàng)建出來(lái)的工程本身就在本地的Git管理下劈伴,我們需要做的就是給它添加遠(yuǎn)端倉(cāng)庫(kù),此遠(yuǎn)程倉(cāng)庫(kù)就是上面我們創(chuàng)建的ExampleLib握爷。網(wǎng)上大多數(shù)的做法是直接通過(guò)終端git命令行來(lái)上傳跛璧,筆主這里使用可視化的git管理工具SourceTree;
使用SourceTree將遠(yuǎn)程倉(cāng)庫(kù)clone下來(lái),然后將我們所創(chuàng)建的lib倉(cāng)庫(kù)復(fù)制好新啼,進(jìn)行遠(yuǎn)程推送追城。推送后一定要給本次推送打上tag(標(biāo)簽)。因?yàn)檫@個(gè)標(biāo)簽在下一步驗(yàn)證中需要使用燥撞。
tag的版本號(hào)需要跟ExampleLib.podspec文件中的
s.version
一致座柱。注意:SourceTree添加標(biāo)簽后,一定要再遠(yuǎn)程推送一編物舒,這樣遠(yuǎn)程倉(cāng)庫(kù)才有tag的色洞。遠(yuǎn)程驗(yàn)證
Podspec
正確性:
pod spec lint
會(huì)讀取線上的repo
并檢查相應(yīng)的tag
如果遠(yuǎn)程驗(yàn)證沒(méi)過(guò),一定要注意是不是遠(yuǎn)程倉(cāng)庫(kù)的tag沒(méi)有添加成功。
PS:如何你在創(chuàng)建lib失敗冠胯,錯(cuò)誤如下:
創(chuàng)建失敗一開(kāi)始題主以為是ruby版本太低火诸,經(jīng)查閱資源得知是因?yàn)閏ocoapods的版本太低了≤欤可以通過(guò)命令行
pod --version
查看版本號(hào)置蜀,低于1.2.0的都不行。那么通過(guò)命令
gem install cocoapods --pre
來(lái)升級(jí)cocoapods割粮。升級(jí)后再重新開(kāi)始創(chuàng)建lib就能正常創(chuàng)建了盾碗。
(4)存放代碼的遠(yuǎn)程倉(cāng)庫(kù)已經(jīng)弄好了,那么接下來(lái)就應(yīng)該把
ExampleLib.podspec
文件上傳到配置文件倉(cāng)庫(kù)舀瓢,以便pod查詢使用。我們平常使用到的第三方庫(kù)的Podspec文件都托管在https://github.com/CocoaPods/Specs耗美【┧瑁可以進(jìn)入 ~/.cocoapods/repos 目錄下查看航缀,三方庫(kù)的所有配置文件都在Master文件夾中。pod repo add 倉(cāng)庫(kù)名 倉(cāng)庫(kù)地址
~/.cocoapods/repos 目錄下查看堰怨,就能找到我們剛剛添加的庫(kù)了芥玉。
(5)最后就將ExampleLib.podspec文件上傳到遠(yuǎn)程庫(kù)
私有庫(kù)的使用
私有庫(kù)創(chuàng)建成功后,pod search 你的私有庫(kù)名字
可以搜索到我們的私有庫(kù)备图。由于我們使用的私有庫(kù)灿巧,那么就需要告訴cocoapods你所引用的私有庫(kù)的配置文件在哪里,固在Podfile文件中需要添加私有庫(kù)配置文件的遠(yuǎn)程倉(cāng)庫(kù)地址:
總結(jié)
下面用一張圖來(lái)總結(jié)整個(gè)過(guò)程: