前情提要
看了好多網(wǎng)上的CocoaPods私有庫配置,看的是一知半解,寫的都不是很詳細,還是需要自己實際操作。實踐是檢驗真理的唯一標準。在這里,我把最正確最詳細的步驟展示給大家。因為私有庫的配置對項目模塊化具有很大的作用,具體有多大的好處和作用,可能會在文章的最后也可能后續(xù)文章會說到,現(xiàn)在開始我們的私有庫配置,也是我將項目模塊化的第一步。
官方文檔 中文翻譯
第一步 創(chuàng)建一個私有的倉庫
也就是創(chuàng)建本地repo。
首先在你的服務器上創(chuàng)建一個倉庫??梢允窃贕ithub上或者是你自己的服務器如下
$ cd /opt/git
$ mkdir Specs.git
$ cd Specs.git
$ git init --bare
第二步 添加你的私有庫到你的CocoaPods中
使用你服務器上的倉庫的URL,添加你的倉庫使用:
$ pod repo add Repo_Name SOURCE_URL
Repo_Name:你自己取得私有庫的名字
SOURCE_URL:是你第一步創(chuàng)建私有庫的URL地址
成功后,你可以額檢查是否成功安裝,通過
$ cd ~/.cocoapods/repos/REPO_NAME
$ pod repo lint .

第三步 創(chuàng)建我們的私有庫中的自定義Library
通過CocoaPods為我們提供的模板,可以自動創(chuàng)建一個項目,供我們創(chuàng)建自定義Lib
pod lib create MyLibrary
MyLibrary:是自定義Lib的名字,自取
可以使用自己的模板,因為這句命令其實是縮寫,其完整應該是 pod lib create MyLibrary --template-url= https://github.com/cocoapods/pod-template,可以把=后面的URL替換成你自己的模板URL,不過我想幾乎沒人會用自己的模板吧(應該不會打臉吧,反正我用的是默認的)。
然后會問你一些問題來完成默認的配置。第一個問題是郵箱:
What is your email?
> XXXX@163.com
然后接下來的一系列問題
XXXXXX$ pod lib create QGGImagePicker
Cloning `https://github.com/CocoaPods/pod-template.git` into `QGGImagePicker`.
Configuring QGGImagePicker template.
------------------------------
To get you started we need to ask a few questions, this should only take a minute.
If this is your first time we recommend running through with the guide:
- http://guides.cocoapods.org/making/using-pod-lib-create.html
( hold cmd and double click links to open in a browser. )
What language do you want to use?? [ ObjC / Swift ]
> ObjC
Would you like to include a demo application with your library? [ Yes / No ]
> Yes
Which testing frameworks will you use? [ Specta / Kiwi / None ]
> Specta
Would you like to do view based testing? [ Yes / No ]
> Yes
What is your class prefix?
> QGG
第一個問題是你用的什么語言,不多說了。
第二個問題是問你要不要包含一個Demo,來測試你的Library。有了這個demo后,你可以用pod try MyLib獲取到能測試你Library的Demo。
第三個問題是讓你選擇一個測試的framework,保證你的library的穩(wěn)定性。官方推薦Specta。
第四個問題是問你是否要基于視圖的測試。
第五個問題,讓你所有的Class加上一個前綴。
直接回車會選擇選項中帶下劃線也就是默認項。
然后將你的Lib代碼放入到模板項目中,文件路徑參照下圖:

非常重要的一點
先聲明我是這樣操作的,網(wǎng)上并沒有看到接下來的操作,都非常跳躍,說的很少。
我將項目復制出來,是打開項目,將里面的文件夾復制出來,如下圖:

?。。?!注意:不是在最外層將整個項目文件夾復制出來,因為是用模板自動生成出來的,所以細心的同學會發(fā)現(xiàn)這個項目中有自動生成的.git、.gitignore隱藏文件?。。。?/strong>

我一開始的時候直接在github上建了個Lib的Repository,然后直接check out 到本地,然后將模板自動生成項目到Lib的工作目錄,發(fā)現(xiàn)根本沒發(fā)現(xiàn)文件有修改,沒東西上傳到github。所以問題出在了通過模板自動生成的項目對應提交的git目錄也指向了生成時的模板URL。我開始還費解怎么沒法上傳修改后的代碼,搞了半天問題出在這,坑死爹了?。?!
恩,發(fā)現(xiàn)問題后就感覺如履平地。然后按照我上面所說的復制出來文件到check out出來的目錄,然后就能上傳代碼到git了,注意打個tag,原因看下面一段,
你會在項目里看到一個后綴名為.podspec的文件,這個文件很重要,這是Lib的Pod配置文件。打開,很多工具可以打開,我用的是Sublime Text。打開大致是這樣的內(nèi)容
Pod::Spec.new do |s|
s.name = 'MyLibrary'
s.version = '0.1.0'
s.summary = 'Test of MyLibrary.'
s.description = <<-DESC
TODO: Add long description of the pod here.
DESC
s.homepage = 'https://github.com/jiabibi888/MyLibrary'
s.license = { :type => 'MIT', :file => 'LICENSE' }
s.author = { 'jiabibi888' => 'zhangjiabi9149@163.com' }
s.source = { :git => 'https://github.com/jiabibi888/MyLibrary.git', :tag => s.version.to_s }
s.ios.deployment_target = '8.0'
s.source_files = 'MyLibrary/Classes/**/*'
end
默認出來就是這樣,配置文件基本已經(jīng)沒問題了,不用自己再參照官方語法寫了。接下來解釋為什么要打一個tag,你會看到第二個參數(shù)s.version = '0.1.0',這個版本你可以修改,是用來標注你Lib版本的。以tag=0.1.0為例,然后往下看 s.source = { :git => 'https://github.com/jiabibi888/MyLibrary.git', :tag => s.version.to_s },它會通過tag去取資源,所以你需要打一個tab,不然獲取不到代碼資源。
就像上面說的配置文件基本已經(jīng)沒問題,你只要注意看下s.homepage = 'https://github.com/jiabibi888/MyLibrary'和s.source = { :git => 'https://github.com/jiabibi888/MyLibrary.git', :tag => s.version.to_s }中的URL是否正確,即可??捎?strong>pod lib lint 和 pod spec lint來驗證你的podspec文件是否正確。兩個指令的不同點在于pod lib lint不用訪問網(wǎng)路,而pod spec lint檢查外部repo和相關標簽。
下面是是用pod spec lint命令來驗證的具體情況:
$ pod spec lint
-> MyLibrary (0.1.0)
Analyzed 1 podspec.
MyLibrary.podspec passed validation.
好,到這一步,你的Lib創(chuàng)建已經(jīng)成功。
第四步 添加你的Podspec到你的倉庫
確定你已經(jīng)給你的代碼資源打上tag和版本,然后運行
$ pod repo push REPO_NAME SPEC_NAME.podspec
成功以后是這樣的情況:
$ pod repo push TestSpec MyLibrary.podspec
Validating spec
-> MyLibrary (0.1.0)
Updating the `TestSpec' repo
Already up-to-date.
Adding the spec to the `TestSpec' repo
- [Add] MyLibrary (0.1.0)
Pushing the `TestSpec' repo
To https://github.com/XXXX/TestSpec.git
a63caee..dd11098 master -> master
Congratulations!??!
自此,一個你自定義的Lib成功加入到了你的私有庫中。
可以將私有庫中的.podspec文件轉(zhuǎn)成.json
$ pod ipc spec MyLibrary.podspec >> MyLibrary.podspec.json