基于Cocoapods搭建私有倉庫實施組件化架構(gòu)

Cocoapods的使用原理

CocoaPods 是開發(fā) OS X 和 iOS 應(yīng)用程序的一個第三方庫的依賴管理工具。利用 CocoaPods凄贩,可以定義自己的依賴關(guān)系 (稱作 pods)晌柬,并且隨著時間的變化宛瞄,以及在整個開發(fā)環(huán)境中對第三方庫的版本管理非常方便。相比于手動導(dǎo)入框架(下載源碼锐峭,導(dǎo)入項目停忿,配置環(huán)境驾讲,添加依賴庫,容易出錯)瞎嬉, 使用Cocoapods只需要簡潔3步就可以引入一個第三方框架蝎毡,一般情況下都不會出錯。
第一步氧枣、終端進(jìn)入項目路徑下沐兵,使用命令pod init,自動生成Podfile文件便监。
第二步扎谎、使用vim打開Podfile文件碳想,加入你想要使用的開源庫。(比如說AFN, 你可以使用 pod search AFNetworking 查詢AFN的版本毁靶,選擇一個合適的Version胧奔,然后添加 pod 'AFNetworking', '~> Version'
第三步、使用命令pod install安裝预吆。
然后只需等待Cocoapods像魔法一樣幫我們導(dǎo)入第三方框架龙填,你就可以在項目中愉快的使用AFNetworking了。作為一個iOS開發(fā)者拐叉,Cocoapods的便利性相信每一個用過的開發(fā)者都愛不釋手岩遗。

為什么我們僅僅在Podfile中引入框架的名稱和版本,就能下載到位于Github倉庫的框架代碼凤瘦,并導(dǎo)入到我們自己的項目中宿礁?

帶著這個疑問,我們在Finder中進(jìn)入~/.cocoapods/repos路徑下蔬芥,可以看到repos路徑下有一個master文件夾梆靖,其實這個master文件夾就是我們Cocoapods的開源庫索引文件的本地倉庫。
證實一下笔诵,終端下進(jìn)入master路徑返吻,命令ls -a,可以看到有.git文件嗤放,我們查看下它的遠(yuǎn)程倉庫思喊,使用命令git remote -v壁酬,輸出https://github.com/CocoaPods/Specs次酌,在瀏覽器中打開這個地址,這個就是Cocoapods的遠(yuǎn)程索引倉庫托管地址The CocoaPods Master Repo舆乔。我們在master目錄中看到很多子文件夾岳服,隨便打開一個,一直找到盡頭希俩,會找到一個*.podspec.json文件吊宋,這個文件就是一個第三方庫的索引文件,我們打開這個文件颜武,你就會看到相關(guān)的 name璃搜、version、homePage鳞上、git 等等相關(guān)的內(nèi)容这吻,這就是我們使用 pod search * 可以搜到指定的第三方庫的原因。

*.podspec.png

如果你想更深入的了解Cocoapods的工作原理篙议,可以參考:
ObjC中國 深入理解Cocoapods
Cocoapods 指南

私有倉庫的搭建

根據(jù)上面的摸索唾糯,相信大概知道了Cocoapods的一個工作流程怠硼,那么我們搭建自己的私有倉庫也是采用相同的思路,大概也是這三步:
1移怯、創(chuàng)建自己的私有索引倉庫香璃。
2、創(chuàng)建自己的框架或者項目舟误,將索引文件提交到這個私有索引倉庫葡秒。
3、在需要使用的項目的Podfile文件中嵌溢,導(dǎo)入私有索引倉庫地址同云,即可使用。

Tips: 如果你同時需要使用其他開源框架堵腹,類似AFN等炸站,必須將Cocoapods的索引倉庫地址也導(dǎo)入,否則無法安裝使用AFN疚顷。 
Reason:默認(rèn)情況下旱易,不寫source源的時候使用Cocoapods的索引倉庫,而當(dāng)你加入了你的私有索引倉庫地址腿堤,pod就只會在你指定的索引倉庫里面去找阀坏,當(dāng)然是找不到AFN等開源框架的。

看起來好像很簡單笆檀,那開始搭建我們的私有Cocoapods倉庫吧!

準(zhǔn)備工作:

1忌堂、一臺能上網(wǎng)的mac電腦。
2酗洒、一個自己的git賬號士修,什么git倉庫都可以。

Tips: github的私有倉庫好像是收費的樱衷,可以使用gitLab棋嘲、gitee等,我使用gitee

步驟:

1矩桂、在gitee上面創(chuàng)建一個索引倉庫JTSpecs沸移。 (這里為了演示,我就設(shè)置為開源的侄榴,你可以設(shè)置為私有的)

JTSpecs遠(yuǎn)程索引倉庫.png

2雹锣、在終端使用命令, 然后我們的~/.cocoapods/repos目錄下會多出來一個JTSpecs本地索引倉庫。

$pod repo add JTSpecs https://gitee.com/hjt_830/JTSpecs.git

JTSpecs本地索引倉庫.png

3癞蚕、終端進(jìn)入到桌面路徑蕊爵,創(chuàng)建本地項目,pod將自動使用模板創(chuàng)建一個項目https://github.com/CocoaPods/pod-template.git

pod lib create JTTest
使用template創(chuàng)建項目2.png

項目結(jié)構(gòu).png

4涣达、在gitee上創(chuàng)建一個遠(yuǎn)程JTTest倉庫在辆,終端進(jìn)入JTTest的項目路徑下证薇,將項目push到遠(yuǎn)程倉庫。

git remote add origin https://gitee.com/hjt_830/JTTest.git
Tips: 第一次pull項目的時候匆篓,會出現(xiàn)`refusing to merge unrelated histories`,  只需使用 `git pull origin master --allow-unrelated-histories`即可正確拉取浑度,然后push。

5鸦概、進(jìn)入項目路徑下的 JTTest/JTTest/Classes 路徑下箩张,將里面的 ReplaceMe.m 文件替換為自己的文件。
6窗市、XCode中修改 JTTest.podspec 文件先慷。

Tips: 由于這個文件是ruby腳本,為了便于閱讀和修改咨察,我們選中這個它论熙,并在右邊的`Identity and Type`中的Type中,選擇`Ruby Script`類型摄狱,然后隨便選中其他某個文件脓诡,再選回`JTTest.podspec`,XCode可以正確顯示內(nèi)容了

這里面有幾個地方需要注意:
s.public_header_files 是指你要給出的所有公共頭文件的路徑媒役,你可以指定特定的頭文件
s.frameworks 是項目中依賴的系統(tǒng)框架祝谚,比如說 UIKit、Foundation酣衷、CoreData
s.dependency 是指項目中依賴的第三方框架交惯,比如說 AFNetworking,可以指定版本
s.ios.deployment_target是你的庫需要的最低系統(tǒng)支持版本
...
7穿仪、改完后席爽,我們終端進(jìn)入Example目錄下,執(zhí)行命令pod install牡借,等待執(zhí)行完成拳昌,你會發(fā)現(xiàn) AFNetworking 已經(jīng)安裝進(jìn)去了。
8钠龙、本地校驗,校驗的是我們的JTTest.podspec文件御铃,所以需要返回上級目錄碴里,執(zhí)行命令 pod lib lint --allow-warnings --verbose
不出意外上真,會驗證通過咬腋,如果這里驗證失敗的同學(xué),看一下報錯的原因睡互,通常如果項目本身編譯正確的話根竿,那么就是 *.podspec文件里面的問題陵像,而且每次對 Development Pods 目錄下的文件和 *.podspec 文件做了任何的修改,都必須要再執(zhí)行一次 pod install 命令寇壳,確保Development Pods 目錄下的文件和 *.podspec 里面配置保持一致醒颖。
9、既然驗證通過壳炎,那我們就提交本地代碼泞歉,git push origin master,然后一定要打標(biāo)簽匿辩,一定要打標(biāo)簽腰耙,一定要打標(biāo)簽,重要的事情說三遍铲球,并且這個標(biāo)簽要和 *.podspec中的 s.version 的版本保持一致挺庞。
10、最后一步稼病,推送到我們的遠(yuǎn)程索引倉庫挠阁,當(dāng)然,推送之前你可以先遠(yuǎn)程校驗一次溯饵,終端使用命令 pod spec lint --allow-warnings --verbose侵俗,其實這個校驗也可以不做,因為我們推送的時候也會做這個工作丰刊。下面就推送到遠(yuǎn)程索引倉庫吧隘谣,終端使用命令 pod repo push JTSpecs JTTest.podspec --allow-warnings --verbose,這里的 JTSpecs是我們第二步中創(chuàng)建的索引倉庫的名字啄巧,你替換成自己的就好了寻歧。

到這里基本就已經(jīng)完成了私有倉庫的搭建,使用的時候只需要在 Podfile 引入就可以了秩仆,當(dāng)然記得加上:
source https://gitee.com/hjt_830/JTSpecs.git (這個替換成你自己的私有索引倉庫的地址)
source https://github.com/CocoaPods/Specs (這個是Cocoapods的開源私有索引倉庫)
大功告成码泛!

當(dāng)然,其實私有倉庫的搭建澄耍,還有更高級的用法噪珊,AFNetworking 中的文件是分不同的目錄,也就是不同的子模塊的齐莲,其實就是用到的 s.subspec痢站,這個其實也很簡單,需要指定子模塊选酗,具體可以參照AFNetworking阵难,如果有疑問可以提問哦。

下面是我創(chuàng)建的私有倉庫芒填,后面我會把 subspec 也添加上去的:
JTSpecs
JTTest

最后呜叫,喜歡的小伙伴記得點贊收藏哦空繁!??????

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市朱庆,隨后出現(xiàn)的幾起案子盛泡,更是在濱河造成了極大的恐慌,老刑警劉巖椎工,帶你破解...
    沈念sama閱讀 218,451評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件饭于,死亡現(xiàn)場離奇詭異,居然都是意外死亡维蒙,警方通過查閱死者的電腦和手機掰吕,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,172評論 3 394
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來颅痊,“玉大人殖熟,你說我怎么就攤上這事“呦欤” “怎么了菱属?”我有些...
    開封第一講書人閱讀 164,782評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長舰罚。 經(jīng)常有香客問我纽门,道長,這世上最難降的妖魔是什么营罢? 我笑而不...
    開封第一講書人閱讀 58,709評論 1 294
  • 正文 為了忘掉前任赏陵,我火速辦了婚禮,結(jié)果婚禮上饲漾,老公的妹妹穿的比我還像新娘蝙搔。我一直安慰自己,他們只是感情好考传,可當(dāng)我...
    茶點故事閱讀 67,733評論 6 392
  • 文/花漫 我一把揭開白布吃型。 她就那樣靜靜地躺著,像睡著了一般僚楞。 火紅的嫁衣襯著肌膚如雪勤晚。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,578評論 1 305
  • 那天镜硕,我揣著相機與錄音运翼,去河邊找鬼。 笑死兴枯,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的矩欠。 我是一名探鬼主播财剖,決...
    沈念sama閱讀 40,320評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼悠夯,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了躺坟?” 一聲冷哼從身側(cè)響起沦补,我...
    開封第一講書人閱讀 39,241評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎咪橙,沒想到半個月后夕膀,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,686評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡美侦,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,878評論 3 336
  • 正文 我和宋清朗相戀三年产舞,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片菠剩。...
    茶點故事閱讀 39,992評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡易猫,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出具壮,到底是詐尸還是另有隱情准颓,我是刑警寧澤,帶...
    沈念sama閱讀 35,715評論 5 346
  • 正文 年R本政府宣布棺妓,位于F島的核電站攘已,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏怜跑。R本人自食惡果不足惜样勃,卻給世界環(huán)境...
    茶點故事閱讀 41,336評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望妆艘。 院中可真熱鬧彤灶,春花似錦、人聲如沸批旺。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,912評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽汽煮。三九已至搏熄,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間暇赤,已是汗流浹背心例。 一陣腳步聲響...
    開封第一講書人閱讀 33,040評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留鞋囊,地道東北人止后。 一個月前我還...
    沈念sama閱讀 48,173評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親译株。 傳聞我的和親對象是個殘疾皇子瓜喇,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,947評論 2 355

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