CocoaPods

CocoaPods是iOS偏形,Mac下優(yōu)秀的第三方包管理工具敏储,類似于java的maven,給我們項(xiàng)目管理帶來(lái)了極大的方便丁侄。個(gè)人或公司在開發(fā)過(guò)程中惯雳,會(huì)積累很多可以復(fù)用的代碼包,有些我們不想開源鸿摇,又想像開源庫(kù)一樣在CocoaPods中管理它們石景,那么通過(guò)私有倉(cāng)庫(kù)來(lái)管理就很必要。對(duì)于CocoaPods還不太熟悉的,建議參考一下唐巧的博客或者直接到CocoaPods的官網(wǎng)看看:https://cocoapods.org/

二鸵钝、概念

大家很容易把spec repository 和 code repository弄混糙臼,我一開始就在這里掛起了好久。

1.code repository是代碼倉(cāng)庫(kù)恩商,我們把包代碼上傳到這個(gè)倉(cāng)庫(kù)变逃。

2.spec repository是配置倉(cāng)庫(kù),所有的配置按照包名怠堪、版本號(hào)分門別類的存放在這個(gè)倉(cāng)庫(kù)揽乱。這個(gè)倉(cāng)庫(kù)只用來(lái)存放spec文件,不存放代碼粟矿。

小結(jié):以AFNetWorking為例凰棉,如果只創(chuàng)建AFNetWorking的code repository,而不將code repository中的.Podspec文件上傳到spec repository的話陌粹,你在自己的工程引入AFN的時(shí)候壓根用不了撒犀。

三、步驟

創(chuàng)建私有的CocoaPods倉(cāng)庫(kù)之前需要先制作CocoaPods依賴庫(kù)掏秩,所以步驟分兩步:

1.制作CocoaPods依賴庫(kù)或舞,也就是代碼庫(kù)。

2.創(chuàng)建私有 CocoaPods 倉(cāng)庫(kù)蒙幻。

小結(jié):1.制作依賴庫(kù)也就是在自己的服務(wù)器或者github等遠(yuǎn)端第三方服務(wù)器創(chuàng)建一個(gè)倉(cāng)庫(kù)映凳,用來(lái)保存.podspec、LICENSE邮破、README.md以及代碼文件和一些資源文件诈豌。

? ? ? ? ? 2.創(chuàng)建私有 CocoaPods 倉(cāng)庫(kù)也就是在自己的服務(wù)器或者github等遠(yuǎn)端第三方服務(wù)器創(chuàng)建一個(gè)倉(cāng)庫(kù),用來(lái)接受并存放.podspec文件抒和,來(lái)管理自己的私庫(kù)矫渔。

四、制作 CocoaPods 依賴庫(kù)

當(dāng)我們使用了類似于AFNetWorking這樣的Pods 依賴庫(kù)以后摧莽, 你一定對(duì)創(chuàng)建自己的依賴庫(kù)很有興趣吧蚌斩,現(xiàn)在我們就來(lái)嘗試一下,以一個(gè)簡(jiǎn)單 caculatorMaker 為例自己創(chuàng)建一個(gè) Pods 依賴庫(kù)范嘱。

1.創(chuàng)建并設(shè)置一個(gè)私有的code Repository。

? ? ? ?因?yàn)镚itHub的私有倉(cāng)庫(kù)是收費(fèi)的员魏,我還不是GitHub的付費(fèi)用戶丑蛤,所以我使用了其他Git服務(wù),我使用的是gitlab(我們公司是基于內(nèi)網(wǎng)的撕阎,當(dāng)然你也可以基于外網(wǎng))受裹,當(dāng)然還有其他的可供選擇開源中國(guó)、CODING、Bitbucket以及CSDN Code.

2.clone 倉(cāng)庫(kù)到本地

為了方便向倉(cāng)庫(kù)中刪減內(nèi)容棉饶,需要將倉(cāng)庫(kù) clone 到本地厦章,這里有多種操作方式,可以選擇你喜歡的一種照藻,但是為了方便這邊選擇使用命令行袜啃。首先需要切換到你想在本地存儲(chǔ)的目錄,然后再 clone 幸缕,假設(shè)你放在用戶的根目錄上:

cd ~

git clone http://njGitrepo/xxx/caculatemaker.git

完成后群发,我們進(jìn)入到 ~/caculatemaker 目錄,這時(shí)候你看到是一個(gè)空文件夾,這由于我用的是gitlab創(chuàng)建的发乔,沒有像github網(wǎng)頁(yè)那樣在創(chuàng)建code Repository的時(shí)候可以勾選創(chuàng)建LICENSE和README.md文件熟妓。其實(shí)也不是什么都沒有,實(shí)際上是有一個(gè)隱藏的 .git 文件栏尚,后續(xù)我們的所有文件都在這個(gè)目錄下進(jìn)行起愈。

注意:打開隱藏目錄,可以使用命令译仗,接著需要重啟一下 Finder抬虽, 可以按住 option + 右鍵 Finder 圖標(biāo)選擇重啟。

//打開隱藏的命令:

defaults write com.apple.finder AppleShowAllFiles -bool true

//關(guān)閉隱藏的命令:

defaults write com.apple.finder AppleShowAllFiles -bool false

3.向本地倉(cāng)庫(kù)中添加創(chuàng)建 Pods 依賴庫(kù)所需的文件

這個(gè)代碼庫(kù)需要手動(dòng)在外面創(chuàng)建好.podspec古劲、LICENSE斥赋、README.md以及代碼文件和一些資源文件并拖動(dòng)到,當(dāng)然你在其他的git服務(wù)上需要?jiǎng)?chuàng)建的基本都是這幾種文件产艾。

?1).每個(gè) Pods 依賴庫(kù)必須有且僅有一個(gè)名稱和依賴庫(kù)名保持一致疤剑,后綴名為 .podspec 的描述文件。這里我們依賴庫(kù)的描述文件名稱應(yīng)該為 caculatormaker.podspec闷堡。

?2).創(chuàng)建這個(gè).podspec 的描述文件有兩種途徑:

? ? ? ? ? ? ? ? ? a.復(fù)制已有的 podspec 文件然后修改對(duì)應(yīng)的參數(shù)隘膘。

? ? ? ? ? ? ? ? ? b.執(zhí)行命令行創(chuàng)建。

我們使用命令行:

pod spec create caculatormaker

我們發(fā)現(xiàn)這個(gè)是ruby文件杠览,里面有很多東西是我們不需要的弯菊,我們可以用文本編輯器打開并刪除我們不需要的內(nèi)容。

Pod::Spec.new do |s|??

s.name? ? ? ? ? ? = 'caculatemaker'

s.version? ? ? ? ? = '0.1.0'??

s.summary? ? ? ? ? = 'just test'? s.description? ? ? = <<-DESC? ? ? ? ? ? ? ? ? ? ?

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?Testing Private Podspec.? ? ? ? ? ? ? ? ? ? ? ??

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? DESC?

?s.homepage? ? ? ? = 'http://njgitrepo/wushuanghong/caculatemaker'??

# s.screenshots? ? = 'www.example.com/screenshots_1', 'www.example.com/screenshots_2'?

?s.license? ? ? ? ? = { :type => 'MIT', :file => 'LICENSE' }??

s.author? ? ? ? ? = { 'shuanghong.wu' => 'shuanghong.wu@qq.com' }?

?s.source? ? ? ? ? = { :git => 'http://njGitrepo/wushuanghong/caculatemaker.git' ,:tag => s.version} ?

s.ios.deployment_target = '8.0'

s.source_files? = "Classes", "Classes/**/*.{h,m}", "caculator/**/*.{h,m}"

end

? ? ? ? ? 3).README.md

使用 github 的人應(yīng)該都熟悉這個(gè)文件踱阿,它使一個(gè)成功的 github 倉(cāng)庫(kù)必不可少的一部分管钳,使用 markdown 對(duì)倉(cāng)庫(kù)進(jìn)行詳細(xì)說(shuō)明。

? ? ? ? ? 4).LICENSE 文件

CocoaPods 強(qiáng)制要求所有的 Pods 依賴庫(kù)都必須有 license 文件软舌,否則驗(yàn)證不會(huì)通過(guò)才漆。 license 文件有很多中,詳情可以參考tldrlegal佛点。前面我們已經(jīng)選擇創(chuàng)建了一個(gè) MIT 類型的 license醇滥。

4.提交修改到code Repository

經(jīng)過(guò)前面步驟黎比,我們已將在本地的 git 倉(cāng)庫(kù)添加了不少文件,現(xiàn)在我們只要將他們提交到 gitlab上就可以鸳玩。在此之前我們需要對(duì)剛才添加的 pod 進(jìn)行一下驗(yàn)證:

pod lib lint

如果你剛才沒有給caculatormaker.podspec的s.source指定tag阅虫,就有可能有warn警告,執(zhí)行下面的命令:

pod lib lint --allow-warnings

驗(yàn)證成功之后不跟,我們只要把代碼提交到 gitlab 倉(cāng)庫(kù)颓帝,就可以了,參考命令:

git add -A && git commit -m "add pod files"

git push origin master

如果以上的操作都沒有問(wèn)題的話躬拢,gitlab上應(yīng)該可以看到類似下面的內(nèi)容:

到現(xiàn)在為止躲履,我們的 CocoaPods 依賴庫(kù)就已經(jīng)準(zhǔn)備好了,但是現(xiàn)在你還不能在你的工程中使用它聊闯。如果你想成為一個(gè)真正可用的依賴庫(kù)工猜,還需要最后一步操作:將剛才生產(chǎn)的 podspec 文件提交到 自己創(chuàng)建的私有Spec Repository上,那么繼續(xù)下面的第五步菱蔬。

五篷帅、創(chuàng)建私有 CocoaPods 倉(cāng)庫(kù)

1.創(chuàng)建并設(shè)置一個(gè)私有的Spec Repository。

跟第四步中的創(chuàng)建code Repository一樣拴泌,我們創(chuàng)建Spec Repository也是基于gitlab的魏身,當(dāng)讓你也可以用其他上面我提到的方式。

如圖所示蚪腐,我們?cè)趃ithub上創(chuàng)建一個(gè)空的倉(cāng)庫(kù)箭昵,命名為wshSpecs,這個(gè)倉(cāng)庫(kù)是用來(lái)存放我們自己所有的私有庫(kù)的spec文件回季,就如同官方的https://github.com/CocoaPods/Specs是用來(lái)存放所有官方的specs文件一樣家制。

終端執(zhí)行命令:

pod repo add wshSpecs http://njGitrepo/wushuanghong/wshSpecs.git

注意:上面的命令的解釋如下:

pod repo add REPO_NAME SOURCE_URL

其中的 REPO_NAME 是我們要添加的私有repo的名稱(這里我們待會(huì)填的是:wshSpecs),后面是倉(cāng)庫(kù)的 gitlab 地址泡一。這里做的其實(shí)是創(chuàng)建的工作颤殴,也就是在~/.cocoapods/repo目錄下添加了一個(gè)以你的私有repo為名的文件夾,但是并沒有添加spec文件鼻忠。

這里用的是https地址涵但,當(dāng)然你也可以用git地址,不過(guò)這樣有可能失敗帖蔓。如果失敗矮瘟,很大因素是你github的ssh在本地沒有配置好,配置方法可以看這里:Generating SSH keys塑娇,成功后可以看得到.cocoapods目錄如下圖所示:

至此芥永,我們已經(jīng)在本地得到我們自己的私有倉(cāng)庫(kù) wshSpecs ,這是一個(gè)空的倉(cāng)庫(kù)钝吮。

注意:這里我需要介紹一下上面的master文件夾里面到底是什么東西:

? ? ? ? ? ? a. 進(jìn)入到這個(gè)目錄

? ? ? ? ? ? ? ? 在Finger前往文件夾中輸入 ?~/.cocoapods, 顯示的內(nèi)容就是上圖的界面。

? ? ? ? ? ? b.點(diǎn)開master文件夾下面的spec目錄,其下存放的就是所有提交到 CocoaPods 的開源庫(kù)的 podspec 文件的集 ? ? ? 合奇瘦。

其結(jié)構(gòu)如下圖所示:

其組成方式:

specName -- version -- specName.podspec

( master 里現(xiàn)在是 specName.podspec.json棘催,這個(gè) .json 文件就是 podspec 文件加了個(gè)后綴。我們可以采用 pod ipc spec 這個(gè)命令來(lái)將 spec 文件轉(zhuǎn)換成 .json)

那這個(gè)文件夾是如何來(lái)得呢耳标?其實(shí)醇坝,這個(gè)文件夾是在你安裝了 CocoaPods 后,第一次執(zhí)行 pod install 時(shí)次坡, CocoaPods 通過(guò)命令 pod setup 來(lái)建立的(這條命令會(huì)自動(dòng)執(zhí)行)呼猪。

2.添加 剛才第四步創(chuàng)建的 caculatormaker.podspec 到你的 Spec Repository。

在前面驗(yàn)證通過(guò)的基礎(chǔ)上砸琅,我們接著執(zhí)行命令:

pod repo push wshSpecs caculatormaker.podspec

按照平時(shí)使用 CocoaPods 的習(xí)慣宋距,我們添加依賴庫(kù)之前會(huì)先搜索一下庫(kù),讓我們執(zhí)行一下命令:

pod search caculatormaker

3.在個(gè)人項(xiàng)目中的Podfile中增加剛剛制作的好的Pod并使用症脂。

讓我們建立一個(gè)普通的工程谚赎,命名為 TestPodDemo,然后在終端 cd 到其目錄路徑下诱篷,添加一個(gè) Podfile 文件:

pod init

建立后修改 Podfile 文件內(nèi)容如下:

source 'https://github.com/CocoaPods/Specs.git'? ? ? ? #官方倉(cāng)庫(kù)地址

source ‘http://njGitrepo/wushuanghong/wshSpecs.git’? ? ? ? #私有倉(cāng)庫(kù)地址

use_frameworks!

target 'TestPodDemo' do

pod ‘caculatemaker’

end

執(zhí)行:

pod install

這樣一來(lái)我們就可以使用這個(gè)私有庫(kù)了壶唤!

4.更新維護(hù)podspec。

當(dāng)我們的代碼變動(dòng)時(shí)棕所,首先需要更新code Repository中的.podspec 文件的版本闸盔,然后push到 Spec Repository。

六琳省、參考資料

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末迎吵,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子岛啸,更是在濱河造成了極大的恐慌钓觉,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,470評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件坚踩,死亡現(xiàn)場(chǎng)離奇詭異荡灾,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)瞬铸,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,393評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門批幌,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人嗓节,你說(shuō)我怎么就攤上這事荧缘。” “怎么了拦宣?”我有些...
    開封第一講書人閱讀 162,577評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵截粗,是天一觀的道長(zhǎng)信姓。 經(jīng)常有香客問(wèn)我,道長(zhǎng)绸罗,這世上最難降的妖魔是什么意推? 我笑而不...
    開封第一講書人閱讀 58,176評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮珊蟀,結(jié)果婚禮上菊值,老公的妹妹穿的比我還像新娘。我一直安慰自己育灸,他們只是感情好腻窒,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,189評(píng)論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著磅崭,像睡著了一般儿子。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上绽诚,一...
    開封第一講書人閱讀 51,155評(píng)論 1 299
  • 那天典徊,我揣著相機(jī)與錄音,去河邊找鬼恩够。 笑死卒落,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的蜂桶。 我是一名探鬼主播儡毕,決...
    沈念sama閱讀 40,041評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼扑媚!你這毒婦竟也來(lái)了腰湾?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,903評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤疆股,失蹤者是張志新(化名)和其女友劉穎费坊,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體旬痹,經(jīng)...
    沈念sama閱讀 45,319評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡附井,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,539評(píng)論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了两残。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片永毅。...
    茶點(diǎn)故事閱讀 39,703評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖人弓,靈堂內(nèi)的尸體忽然破棺而出沼死,到底是詐尸還是另有隱情,我是刑警寧澤崔赌,帶...
    沈念sama閱讀 35,417評(píng)論 5 343
  • 正文 年R本政府宣布意蛀,位于F島的核電站耸别,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏浸间。R本人自食惡果不足惜太雨,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,013評(píng)論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望魁蒜。 院中可真熱鬧,春花似錦吩翻、人聲如沸兜看。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,664評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)细移。三九已至,卻和暖如春熊锭,著一層夾襖步出監(jiān)牢的瞬間弧轧,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,818評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工碗殷, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留精绎,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,711評(píng)論 2 368
  • 正文 我出身青樓锌妻,卻偏偏與公主長(zhǎng)得像代乃,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子仿粹,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,601評(píng)論 2 353

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