創(chuàng)建只有自己能Pod的私有庫

? 對(duì)于iOS開發(fā)者來說绩鸣,Cocoapods無疑是一個(gè)非常好用的三方庫管理工具渤滞,在開發(fā)過程中,我們也會(huì)使用到許多優(yōu)秀的三方庫因俐。有時(shí)候我們也需要將自己的東西封裝起來并重復(fù)利用拇惋,但是又不想像Cocoapods上一樣讓別人用,這時(shí)我們就需要建立自己的私有庫抹剩。

? 想要上傳自己的私有庫撑帖,需要先弄懂Cocoapods的原理及目錄結(jié)構(gòu)。Cocoapods一共分為兩塊澳眷,即CocoapodsSpecs胡嘿,Specs實(shí)際上是一個(gè)目錄容器,所有的三方庫的podspec文件都在里面钳踊,那么podspec文件又是什么呢衷敌,podspec文件就相當(dāng)于每一個(gè)三方庫的介紹文件,包含名字拓瞪、版本缴罗、以及三方庫的下載地址等,步驟三會(huì)詳細(xì)介紹祭埂。

? 使用過cocoa pods的同學(xué)在本地都會(huì)有一個(gè).cocoapods/repos文件夾面氓,這個(gè)文件夾就是在使用cocoa pods時(shí)自動(dòng)從Specs上clone到本地的,即路徑~/.cocoapod/repos蛆橡,進(jìn)入本地看看目錄結(jié)構(gòu):

repos->master->Specs->[Name]->[Version]->[Name].podspec

? 沒錯(cuò)舌界,這個(gè)是公有的三方庫的目錄,我們做私有庫泰演,就是要模仿公有庫的結(jié)構(gòu)目錄呻拌,建立一個(gè)自己的Spec的私有倉庫來維護(hù),這個(gè)倉庫可以是私有也可以是公開睦焕“爻總的來說酿箭,我們需要維護(hù)的東西有兩個(gè),一個(gè)是私有的Specs目錄趾娃,一個(gè)是我們需要上傳的三方庫缭嫡。

一、創(chuàng)建私有的Specs目錄

在遠(yuǎn)端建一個(gè)倉庫抬闷,命名為MySpecs妇蛀,把倉庫clone到本地,把公有Specs里面的CocoaPods-version.yml文件拷貝到里面笤成,并建立一個(gè)名為“Specs”的文件夾评架,(文件夾里面可以放一個(gè)無關(guān)的小文件,要是是空文件夾推到遠(yuǎn)端可能會(huì)被忽略)炕泳,然后把東西推動(dòng)遠(yuǎn)端倉庫纵诞,私有Specs創(chuàng)建完成。如圖:

二培遵、將遠(yuǎn)端的私有Specs倉庫clone到本地.cocoapods目錄下

$ pod repo add MySpecs https://xxxx@bitbucket.org/xxxx/Myspecs.git?

在終端執(zhí)行上述命令浙芙,記得將倉庫地址改正。執(zhí)行成功的話籽腕,在本地~/.cocoapods/repos路徑下就能發(fā)現(xiàn)嗡呼,多了一個(gè)MySpec的文件夾。

三皇耗、創(chuàng)建pod spec文件

我必須說這一步尤為重要

我必須說這一步尤為重要

我必須說這一步尤為重要

重要的事情說三遍南窗。

準(zhǔn)備工作:1、將需要作為三方庫的所有文件整理在工程的一個(gè)文件夾下(為后續(xù)方便)郎楼,并上傳至遠(yuǎn)端万伤。

? ? ? ? ? ? ? ? 2、打開終端cd 到本地工程下呜袁。

執(zhí)行命令:

$ pod spec create [Name] https://xxxx@bitbucket.org/xxxx/xxxx.git

注:其中Name是三方庫的名字敌买,地址是作為三方庫的工程的遠(yuǎn)端地址。

完成后在當(dāng)前目錄下回生成一個(gè)叫做[Name].podspec的文件傅寡。打開這個(gè)文件(建議用sublime打開放妈,sublime很好用北救,另外sublime的負(fù)責(zé)人看到了記得打賞廣告費(fèi)荐操,謝謝!)里面注釋相當(dāng)詳細(xì)珍策,我這里列舉幾個(gè)重要的:

s.name? ? ? ? = "xxxx" ? ? #三方庫名字

s.version? ? ? = "0.0.1" ? ? #版本號(hào)托启,建議從0.0.1開始(官方的版本號(hào)是不能刪除和向下修改的,只能遞增攘宙,但私有庫是我們自己維護(hù)的屯耸,所以可以隨意修改)

s.summary? ? ? = "xxxxxxxx" ? ?#三方庫總結(jié)

s.description? = "xxxxxxx" ? ? ? #三方庫描述

s.homepage ?= "https://xxxxxxx" ? ? ? #主頁信息(填寫項(xiàng)目倉庫的地址即可)

s.license? ? ? = "MIT" ?#開源協(xié)議拐迁,一般填MIT(注:.podspec

文件同目錄下必須要有一個(gè)MIT開源協(xié)議文件,如果沒有疗绣,去github上別人的目錄下隨便拷貝一個(gè))

s.author? ? ? ? ? ? = { "xxxxxx" => "xxxxxx@163.com" }#作者姓名线召、郵箱,不用我說了吧

s.platform? ? = :ios, "7.0" #支持的系統(tǒng)版本

s.source? ? ? = { :git => "https://xxxx@bitbucket.org/xxx/xxx.git", :tag => "0.0.1" }#資源地址多矮,很重要缓淹,pod install的時(shí)候根據(jù)這個(gè)地址去下載三方庫,另外為避免麻煩塔逃,版本號(hào)必須與s.version中的版本號(hào)一致讯壶。

s.source_files = ""#這個(gè)很重要,指定資源文件湾盗,前綴就是.podspec文件當(dāng)前路徑伏蚊,只用寫之后的路徑,如Class/*是指Class文件夾下的所有文件格粪,但不包括子文件夾里面的文件躏吊、Class/**/*是指包含所有Class文件夾下的文件,包括子文件匀借、Class/**/*.{h,m}是指包含所有Class文件夾下的后綴為.h或.m的文件颜阐,當(dāng)然也可以指定文件。

s.requires_arc = true#是否支持arc

#######以下的為可選

#s.resource? = "icon.png"#資源文件吓肋,包括圖片和xib文件

# s.dependency "JSONKit", "~> 1.4"#需要依賴的三方庫

#s.framework? = "SomeFramework"#需要依賴的框架

#s.public_header_files = ''#公開的頭文件凳怨,如果不沒公開,用戶在用的時(shí)候可能引不到響應(yīng)的頭文件

s.subspec 'subFolder' do |ss|

ss.source_files = 'Class/xxx/**/*.{h,m}'

ss.public_header_files = "Class/xxx/**/*.{h}"

end#這個(gè)是子依賴庫是鬼,因?yàn)槿绻覀冎皇怯胹.source_files來指定文件肤舞,那么用戶在pod下來之后所有的文件都在同一個(gè)目錄下,沒有子文件夾均蜜,如果想要分下類李剖,用s.subspec,每一個(gè)subspec可以分一個(gè)子文件夾囤耳,但是記得一定要將.h文件通過ss.public_header_files公開篙顺,不然有可能會(huì)找不到頭文件。

差不多這些重要的充择,可以根據(jù)庫的復(fù)雜度酌情修改德玫,然后保存。

如有不明白的可以和我討論椎麦,或者去參考其他的如:AFNetworking等的podspec文件宰僧。

四、驗(yàn)證

打開終端观挎,cd到.podspec文件的目錄下琴儿,使用命令:

$ pod lib lint

如果有錯(cuò)段化,按照錯(cuò)誤修改podspec文件,如果通過造成,那么恭喜你完成一大部分了显熏。

當(dāng)然為了驗(yàn)證你的文件路徑指定對(duì)不對(duì),我們可以做一個(gè)測(cè)試晒屎,找一個(gè)新工程佃延,在Podfile文件中加入

pod '[Name]', :podspec => '/Users/xxxx/Desktop/xxx/xxx.podspec'

注:[Name]為pod spec中的s.name,必須一致夷磕,后面的路徑為本地pod spec文件的路徑履肃。

然后打開終端cd到當(dāng)前Podfile目錄下執(zhí)行

pod install

pod install --no-repo-update

第二條命令是不更新官方Specs至本地,速度要比第一條快坐桩。

執(zhí)行完成之后尺棋,打開工程看看Pods下的三方庫的結(jié)構(gòu)是不是跟你想象的一樣,并可以測(cè)試能不能用绵跷。

五膘螟、向Specs遠(yuǎn)端提交.podspec文件

通過驗(yàn)證后,給當(dāng)前代碼打上tag碾局,建議tag和版本號(hào)一致荆残,并推送到遠(yuǎn)端(官方的tag是不能向下修改的)

$ git tag '0.0.1

$ git push origin --tags

將tag推送到遠(yuǎn)端之后,向自己的私有庫提交podsepc文件:

$ pod repo push MySpecs [Name].podspec

如果提交成功净当,這時(shí)候去到~/.cocoapods/repo/MySpecs文件夾下就發(fā)現(xiàn)多了一個(gè)文件夾内斯,正是你剛剛創(chuàng)建的三方庫。

到這里像啼,恭喜你的私有庫創(chuàng)建完成俘闯。


六、使用

不出意外忽冻,這個(gè)時(shí)候真朗,你去終端pod search 你的三方庫名字,就能搜到(如果你的名字和官方Specs里面的某個(gè)三方庫名字一樣的話將會(huì)搜不到)僧诚,使用的時(shí)候在Podfile中加入兩個(gè)Specs源即:

官方源:

source 'https://github.com/CocoaPods/Specs.git'

私有源:

source 'https://xxxxx@bitbucket.org/xxxxx/Myspecs.git'#即你的私有源倉庫地址


當(dāng)然遮婶,你也可以指定地址

pod 'xxxx', :git =>'https://xxxx@bitbucket.org/xxxx/xxxx.git'

這里的地址是你的三方庫的遠(yuǎn)端地址。二選一都行湖笨,為了避免沖突旗扑,建議用第二種。

把自己踩過的坑記錄下來赶么,希望對(duì)正在研究的同學(xué)有幫助肩豁。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末脊串,一起剝皮案震驚了整個(gè)濱河市辫呻,隨后出現(xiàn)的幾起案子清钥,更是在濱河造成了極大的恐慌,老刑警劉巖放闺,帶你破解...
    沈念sama閱讀 207,248評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件祟昭,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡怖侦,警方通過查閱死者的電腦和手機(jī)篡悟,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來匾寝,“玉大人搬葬,你說我怎么就攤上這事⊙藁冢” “怎么了急凰?”我有些...
    開封第一講書人閱讀 153,443評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)猜年。 經(jīng)常有香客問我抡锈,道長(zhǎng),這世上最難降的妖魔是什么乔外? 我笑而不...
    開封第一講書人閱讀 55,475評(píng)論 1 279
  • 正文 為了忘掉前任床三,我火速辦了婚禮,結(jié)果婚禮上杨幼,老公的妹妹穿的比我還像新娘撇簿。我一直安慰自己,他們只是感情好差购,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,458評(píng)論 5 374
  • 文/花漫 我一把揭開白布补疑。 她就那樣靜靜地躺著,像睡著了一般歹撒。 火紅的嫁衣襯著肌膚如雪莲组。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,185評(píng)論 1 284
  • 那天暖夭,我揣著相機(jī)與錄音锹杈,去河邊找鬼。 笑死迈着,一個(gè)胖子當(dāng)著我的面吹牛竭望,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播裕菠,決...
    沈念sama閱讀 38,451評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼咬清,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起旧烧,我...
    開封第一講書人閱讀 37,112評(píng)論 0 261
  • 序言:老撾萬榮一對(duì)情侶失蹤影钉,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后掘剪,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體平委,經(jīng)...
    沈念sama閱讀 43,609評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,083評(píng)論 2 325
  • 正文 我和宋清朗相戀三年夺谁,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了廉赔。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,163評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡匾鸥,死狀恐怖蜡塌,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情勿负,我是刑警寧澤岗照,帶...
    沈念sama閱讀 33,803評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站笆环,受9級(jí)特大地震影響攒至,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜躁劣,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,357評(píng)論 3 307
  • 文/蒙蒙 一迫吐、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧账忘,春花似錦志膀、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至蒋荚,卻和暖如春戳稽,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背期升。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評(píng)論 1 261
  • 我被黑心中介騙來泰國打工惊奇, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人播赁。 一個(gè)月前我還...
    沈念sama閱讀 45,636評(píng)論 2 355
  • 正文 我出身青樓颂郎,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國和親容为。 傳聞我的和親對(duì)象是個(gè)殘疾皇子乓序,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,925評(píng)論 2 344

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