? 對(duì)于iOS開發(fā)者來說绩鸣,Cocoapods無疑是一個(gè)非常好用的三方庫管理工具渤滞,在開發(fā)過程中,我們也會(huì)使用到許多優(yōu)秀的三方庫因俐。有時(shí)候我們也需要將自己的東西封裝起來并重復(fù)利用拇惋,但是又不想像Cocoapods上一樣讓別人用,這時(shí)我們就需要建立自己的私有庫抹剩。
? 想要上傳自己的私有庫撑帖,需要先弄懂Cocoapods的原理及目錄結(jié)構(gòu)。Cocoapods一共分為兩塊澳眷,即Cocoapods和Specs胡嘿,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é)有幫助肩豁。