利用cocoapods來(lái)創(chuàng)建私有倉(cāng)庫(kù)步驟
- 1.創(chuàng)建一個(gè)管理私有倉(cāng)庫(kù)的容器
- 2.制作私有倉(cāng)庫(kù)
- 3.驗(yàn)證私有倉(cāng)庫(kù)并加入到第一步創(chuàng)建的容器中
創(chuàng)建私有倉(cāng)庫(kù)容器
為什么要?jiǎng)?chuàng)建一個(gè)私有倉(cāng)庫(kù)容器
打開終端進(jìn)入用戶目錄 cd ~/.cocoapods可以寄看到以下信息
進(jìn)入到repos下的repos下的master再往下找榜旦,可以看到一些我們我們熟悉的東西
這個(gè)倉(cāng)庫(kù)下存儲(chǔ)了依托在cocoapods的第三庫(kù)的一個(gè)索引xxx.podspec.json(第二步所對(duì)應(yīng)的json文件),cocoadpoads通過(guò)這個(gè)索引下載第三方代碼
說(shuō)到這里大家應(yīng)該差不多明白了創(chuàng)建一個(gè)容器的原因了溅呢,就如官方工作原理一樣咐旧,在安裝cocoapods的時(shí)候铣墨,把當(dāng)前依托在coocapod的第三庫(kù)的一個(gè)索引文件下載到本地伊约,以后只需要進(jìn)行增量更新即可屡律。如果每次安裝第三庫(kù)的時(shí)候都去遠(yuǎn)端服務(wù)器去查找podfile中的每個(gè)依賴,服務(wù)器的壓力太大搏讶,客戶端的速度慢媒惕。私有倉(cāng)庫(kù)也是同樣的道理
原因說(shuō)了現(xiàn)在來(lái)講如何創(chuàng)建這個(gè)容器吓笙,很簡(jiǎn)單 --pod repo add name url
以github為例面睛,在github上建立一個(gè)倉(cāng)庫(kù) ,把url換成該倉(cāng)庫(kù)的地址叁鉴,name換成你自己想取的名字即可幌墓,實(shí)質(zhì)上就是git remote set-url 本地和遠(yuǎn)程關(guān)聯(lián)起來(lái)常侣。
pod repo add JSSpec https://github.com/jsonsnow
創(chuàng)建私有倉(cāng)庫(kù)
通過(guò)cocoapods的一個(gè)工具快速生成一些配置文件
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為追蹤的文件焦辅,在該目錄下的文件都會(huì)隨著pod的發(fā)版而發(fā)布出去,對(duì)應(yīng)的Xcode位置如下圖
這部分內(nèi)容很多前方,但通過(guò)cocoapods官方模板镣丑,對(duì)于一般工程往往就可以直接進(jìn)行第三部了--驗(yàn)證和加入到自己的創(chuàng)建
驗(yàn)證私有倉(cāng)庫(kù)并加入到第一步創(chuàng)建的容器
推送代碼到遠(yuǎn)端
當(dāng)我們?yōu)樽约旱膒od添加了代碼后莺匠,與一個(gè)遠(yuǎn)端地址關(guān)聯(lián)起來(lái)趣竣,把本地代碼推送到遠(yuǎn)端后遥缕,就可以進(jìn)行驗(yàn)證了
git remote set origin url
git add .
git commit -m ""
git push origin master
需要注意的是pod是通過(guò)tag來(lái)管理版本的因此我們還需要為工程打上tag
git tag 0.0.1
git push origin 0.0.1
tag一般和podspec中的version一致
驗(yàn)證倉(cāng)庫(kù)
pod lib lint(需要在當(dāng)前.podsepc目錄下)進(jìn)行本地驗(yàn)證
驗(yàn)證通過(guò)后
pod repo push xx_repo xxx.podspec,驗(yàn)證并發(fā)布
xx_repo:第一步創(chuàng)建的倉(cāng)庫(kù)管理容器
xxx.podspec:待發(fā)布的倉(cāng)庫(kù)
整個(gè)過(guò)程大致如上所述,列舉一些遇到的問(wèn)題
pod lib create 時(shí)候出現(xiàn)如下錯(cuò)誤
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
包含私有倉(cāng)庫(kù)的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)致
比如有私有倉(cāng)庫(kù)A和B户秤,B依賴A鸡号,A在repo中有兩個(gè)tag0.0.1鲸伴,和0.0.2汞窗,但A遠(yuǎn)程只有一個(gè)tag0.0.1杉辙,再驗(yàn)證的時(shí)候cocoapods從倉(cāng)庫(kù)容器得到的是0.0.2但是A的遠(yuǎn)端卻找不到這個(gè)tag蜘矢,因此會(huì)出錯(cuò)
一般我們?cè)谥谱鱬od的時(shí)候品腹,如果依賴本地的pod舞吭,往往會(huì)在podfile這樣寫
pod 'xxxx',:path => ’../xxx‘
當(dāng)發(fā)版的時(shí)候需要去掉后面path部分羡鸥,不然驗(yàn)證也不會(huì)通過(guò)惧浴,驗(yàn)證的時(shí)候會(huì)根據(jù)podfile文件來(lái)創(chuàng)建一個(gè)工程衷旅,指定path會(huì)導(dǎo)致依賴找不到柿顶。