利用cocoapods來創(chuàng)建私有倉庫步驟
- 1.創(chuàng)建一個管理私有倉庫的容器
- 2.制作私有倉庫
- 3.驗證私有倉庫并加入到第一步創(chuàng)建的容器中
創(chuàng)建私有倉庫容器
為什么要創(chuàng)建一個私有倉庫容器
打開終端進(jìn)入用戶目錄 cd ~/.cocoapods可以寄看到以下信息

進(jìn)入到repos下的repos下的master再往下找,可以看到一些我們我們熟悉的東西

這個倉庫下存儲了依托在cocoapods的第三庫的一個索引xxx.podspec.json(第二步所對應(yīng)的json文件),cocoadpoads通過這個索引下載第三方代碼
說到這里大家應(yīng)該差不多明白了創(chuàng)建一個容器的原因了,就如官方工作原理一樣,在安裝cocoapods的時候,把當(dāng)前依托在coocapod的第三庫的一個索引文件下載到本地,以后只需要進(jìn)行增量更新即可。如果每次安裝第三庫的時候都去遠(yuǎn)端服務(wù)器去查找podfile中的每個依賴,服務(wù)器的壓力太大,客戶端的速度慢。私有倉庫也是同樣的道理
原因說了現(xiàn)在來講如何創(chuàng)建這個容器,很簡單 --pod repo add name url
以github為例,在github上建立一個倉庫 ,把url換成該倉庫的地址,name換成你自己想取的名字即可,實質(zhì)上就是git remote set-url 本地和遠(yuǎn)程關(guān)聯(lián)起來。
pod repo add JSSpec https://github.com/jsonsnow
創(chuàng)建私有倉庫
通過cocoapods的一個工具快速生成一些配置文件
pod lib create XXX

查看生成的podspec文件
#
# Be sure to run `pod lib lint CLLTest.podspec' to ensure this is a
# valid spec before submitting.
#
# Any lines starting with a # are optional, but their use is encouraged
# To learn more about a Podspec see http://guides.cocoapods.org/syntax/podspec.html
#
Pod::Spec.new do |s|
s.name = 'CLLTest'
s.version = '0.1.0'
s.summary = 'A short description of CLLTest.'
# This description is used to generate tags and improve search results.
# * Think: What does it do? Why did you write it? What is the focus?
# * Try to keep it short, snappy and to the point.
# * Write the description between the DESC delimiters below.
# * Finally, don't worry about the indent, CocoaPods strips it!
s.description = <<-DESC
TODO: Add long description of the pod here.
DESC
s.homepage = 'https://github.com/jsonsnow/CLLTest'
# s.screenshots = 'www.example.com/screenshots_1', 'www.example.com/screenshots_2'
s.license = { :type => 'MIT', :file => 'LICENSE' }
s.author = { 'jsonsnow' => '1183010734@qq.com' }
s.source = { :git => 'https://github.com/jsonsnow/CLLTest.git', :tag => s.version.to_s }
# s.social_media_url = 'https://twitter.com/<TWITTER_USERNAME>'
s.ios.deployment_target = '8.0'
s.source_files = 'CLLTest/Classes/**/*'
# s.resource_bundles = {
# 'CLLTest' => ['CLLTest/Assets/*.png']
# }
# s.public_header_files = 'Pod/Classes/**/*.h'
# s.frameworks = 'UIKit', 'MapKit'
# s.dependency 'AFNetworking', '~> 2.3'
end
其中s.source_files = 'CLLTest/Classes/*/' ,就是pod為追蹤的文件,在該目錄下的文件都會隨著pod的發(fā)版而發(fā)布出去,對應(yīng)的Xcode位置如下圖

這部分內(nèi)容很多,但通過cocoapods官方模板,對于一般工程往往就可以直接進(jìn)行第三部了--驗證和加入到自己的創(chuàng)建
驗證私有倉庫并加入到第一步創(chuàng)建的容器
推送代碼到遠(yuǎn)端
當(dāng)我們?yōu)樽约旱膒od添加了代碼后,與一個遠(yuǎn)端地址關(guān)聯(lián)起來,把本地代碼推送到遠(yuǎn)端后,就可以進(jìn)行驗證了
git remote set origin url
git add .
git commit -m ""
git push origin master
需要注意的是pod是通過tag來管理版本的因此我們還需要為工程打上tag
git tag 0.0.1
git push origin 0.0.1
tag一般和podspec中的version一致
驗證倉庫
pod lib lint(需要在當(dāng)前.podsepc目錄下)進(jìn)行本地驗證
驗證通過后
pod repo push xx_repo xxx.podspec,驗證并發(fā)布
xx_repo:第一步創(chuàng)建的倉庫管理容器
xxx.podspec:待發(fā)布的倉庫
整個過程大致如上所述,列舉一些遇到的問題
pod lib create 時候出現(xiàn)如下錯誤
lib/ruby/site_ruby/2.3.0/rubygems/core_ext/kernel_require.rb:120:in `require': cannot load such file -- colored2 (LoadError)
解決方法
sudo gem install colored2
sudo gem update --system
包含私有倉庫的podfile文件需要加上第一步容器的地址和cocoapods的
source 'https://github/jsonsnow'
source 'https://github.com/CocoaPods/Specs.git'
pod lib lint 成功 但是pod repo push xx_repo xxx.podspec失敗一般是tag混亂導(dǎo)致
比如有私有倉庫A和B,B依賴A,A在repo中有兩個tag0.0.1,和0.0.2,但A遠(yuǎn)程只有一個tag0.0.1,再驗證的時候cocoapods從倉庫容器得到的是0.0.2但是A的遠(yuǎn)端卻找不到這個tag,因此會出錯
一般我們在制作pod的時候,如果依賴本地的pod,往往會在podfile這樣寫
pod 'xxxx',:path => ’../xxx‘
當(dāng)發(fā)版的時候需要去掉后面path部分,不然驗證也不會通過,驗證的時候會根據(jù)podfile文件來創(chuàng)建一個工程,指定path會導(dǎo)致依賴找不到。