說明
本文介紹采用 trunk 方式上傳CocoaPods
trunk需要pod在0.33及以上版本,如果你不滿足要求,需要更新pod.
圖片是流程圖

一:在Github上新建一個(gè)repo,上傳代碼.
不多講 此篇文章Demo地址
需要注意的一點(diǎn)是:必須跟遠(yuǎn)程倉庫打tag
git tag 0.2.0 -light
解釋:創(chuàng)建輕量標(biāo)簽不需要傳遞參數(shù),直接指定標(biāo)簽名稱即可。
git tag -a 0.1.0 -m "xxxxxxxxxxxx"
解釋:創(chuàng)建附注標(biāo)簽時(shí),參數(shù)-a即annotated的縮寫,指定標(biāo)簽類型,后附標(biāo)簽名。參數(shù)m指定標(biāo)簽說明,說明信息會(huì)保存在標(biāo)簽對(duì)象中。
tag 相關(guān)操作
列出當(dāng)前倉庫的所有標(biāo)簽
$ git tag
列出符合模式的標(biāo)簽
$ git tag -l 'v0.1.*'
查看標(biāo)簽版本信息
$ git show v0.1.0
刪除本地tag
git tag -d <tagname>
刪除遠(yuǎn)程tag
git push origin --delete tag <tagname>
查看所有遠(yuǎn)程分支
git branch -a
查看tag
git tag
在某個(gè)commit 上打tag
git tag test_tag c809ddbf83939a89659e51dc2a5fe183af384233
本地tag推送到線上
git push origin test_tag
本地刪除tag
git tag -d test_tag
本地tag刪除了,再執(zhí)行該句,刪除線上tag
git push origin :refs/tags/test_tag
切換 分支
git checkout xxxxxxxx
切換標(biāo)簽與切換分支命令相同
$ git checkout [tagname]
解釋:切換標(biāo)簽后處于一個(gè)空的分支上,即”You are in ‘detached HEAD’ state.”
誤打或需要修改標(biāo)簽時(shí),需要先將標(biāo)簽刪除,再打新標(biāo)簽
$ git tag -d v0.1.2
解釋:參數(shù)-d即delete的縮寫,意為刪除其后指定的標(biāo)簽。
給指定的commit打標(biāo)簽
$ git tag -a v0.1.0 49e0cd22f6bd9510fe65084e023d9c4316b446a6
解釋:打標(biāo)簽不必要在HEAD之上,也可在之前的版本上打,這需要你知道某個(gè)提交對(duì)象的校驗(yàn)和,通過git log命令獲取。
將v0.1.0標(biāo)簽提交到git服務(wù)器
$ git push origin v0.1.0
解釋:通常的git push不會(huì)將標(biāo)簽對(duì)象提交到git服務(wù)器,我們需要進(jìn)行顯式的操作。
將本地所有標(biāo)簽一次性提交到git服務(wù)器
$ git push origin –tags
git遠(yuǎn)程倉庫的操作
git查看遠(yuǎn)程倉庫地址命令:git remote -v
git移除遠(yuǎn)程倉庫地址: git remote rm origin
git添加遠(yuǎn)程倉庫地址: git remote add origin
git remote add origin https://xxxxxxxxxx.git
git push -u origin master
二 :注冊(cè) trunk
pod trunk register yourEmail yourName --verbose
郵箱以及用戶名請(qǐng)對(duì)號(hào)入座。
用戶名我使用的是我的郵箱前綴。(一般別人喜歡用GitHub名字)
--verbose參數(shù)是為了便于輸出注冊(cè)過程中的調(diào)試信息。
執(zhí)行上面的語句后,你的郵箱將會(huì)受到一封帶有驗(yàn)證鏈接的郵件,如果沒有請(qǐng)去垃圾箱找找,有可能被屏蔽了。
點(diǎn)擊郵件的鏈接就完成了trunk注冊(cè)流程。使用下面的命令可以向trunk服務(wù)器查詢自己的注冊(cè)信息:
pod trunk me
輸出如下信息就表示你注冊(cè)成功,可以進(jìn)行下面的流程:

三:配置PodSpec文件
需要做兩件事情
1、為你的代碼添加podspec描述文件;
2、將podspec文件通過trunk推送給CocoaPods服務(wù)器
什么是podspec描述文件呢?
簡單地講就是讓CocoaPods搜索引擎知道你的代碼的作者、版本號(hào)、源代碼地址、依賴庫等信息的文件。任何支持CocoaPods的開源代碼都必須有podspec文件。
官方配置文件說明地址
Pod::Spec.new do |s|
s.name = "LearnCocoaPods"
s.version = "0.0.1"
s.summary = "UIBarButtonItem extension"
s.description = "UIBarButtonItem extension Learn CocoaPods"
s.homepage = "https://github.com/zhangxueyang/LearnCocoaPods"
s.license = "MIT"
s.author = { "cocoazxy" => "cocoazxy@gmail.com" }
s.platform = :ios, "5.0"
s.source = { :git => "https://github.com/zhangxueyang/LearnCocoaPods.git", :tag => "#{s.version}" }
s.source_files = "Classes", "Classes/**/*.{h,m}"
s.requires_arc = true
end
podspec文件中有很多參數(shù),但并不是每一個(gè)都能用上,我寫的這個(gè)podspec文件中的參數(shù)基本上夠用了。這個(gè)文件使用ruby語言寫的,所以如果有ruby語言的功底看這個(gè)代碼應(yīng)該很熟悉,當(dāng)然沒有也沒關(guān)系,因?yàn)槔斫馄饋韺?shí)在太簡單了。
下面還是挨個(gè)對(duì)每個(gè)參數(shù)介紹下:
1.name :pod的名字,應(yīng)該與你的工程名保持一致
2.version: 版本號(hào),你以為是你工程的版本號(hào),那你就大錯(cuò)特錯(cuò)了,我在這個(gè)地方坑了好久。后來才知道這個(gè)version是和你的branch名稱保持一致的,如果你的branch名字叫做1.0.0,那這個(gè)version就可以要寫成1.0.0,當(dāng)更新版本的時(shí)候,要重新建立一個(gè)branch命名為1.0.1,然后version也要寫成1.0.1。
3.summary:一句話介紹你的pod
4.homepage:pod的url地址
5.license:你的pod所遵守的開源協(xié)議、 一般都是‘MIT’
6.author: 作者名,聯(lián)系方式
7.platform:pod所支持平臺(tái)和最小系統(tǒng)版本
8.ios.deployment_target:同上
9.source:pod的地址和tag
10.source_files:pod在工程中的所在目錄,如果有多個(gè)不同的目錄,則寫成這種形式 :’floder1…’,’floder2….’,’….’
11.requires_arc:是否是ARC。
3.1---添加podspec描述文件
pod trunk push LearnCocoaPods.podspec --allow-warnings
pod trunk push xxxxxxxxxx.podspec(換成你自己的podspec文件名字)
3.2--- 等待上傳成功就好
在上傳的過程工作了三件事
1、驗(yàn)證你的podspec文件是否合法。在trunk方式之前我們一般用“pod lib lint”命令進(jìn)行驗(yàn)證。
2、上傳podspec文件到trunk服務(wù)器(其實(shí)最終也會(huì)自動(dòng)添加到https://github.com/CocoaPods/Specs中,只是使用trunk方式省去了以前先fork在pull request的繁瑣操作)
3、將你上傳的podspec文件轉(zhuǎn)成json格式文件
執(zhí)行上面的push操作,就相當(dāng)于你把你的源代碼提交給CocoaPods團(tuán)隊(duì)審核了,現(xiàn)在CocoaPods審核只需要幾秒鐘或者幾分鐘就可以完成了。
看到這個(gè) 說明成功了
--------------------------------------------------------------------------------
?? Congrats
?? LearnCocoaPods (0.0.1) successfully published
?? April 4th, 08:54
?? https://cocoapods.org/pods/LearnCocoaPods
?? Tell your friends!
--------------------------------------------------------------------------------
3.3--- 搜索看能不能找到我們的庫文件
先用"pod search"查找一下你的代碼,有結(jié)果的話就歡天喜地;沒有的話執(zhí)行"pod setup"進(jìn)行本地依賴庫更新,再search。
pod setup 更新慢的解決辦法
因?yàn)樵?pod setup 更新過程中:
Cocoapods在將https://github.com/CocoaPods/Specs的信息下載到你電腦的~/.cocoapods目錄下并進(jìn)行文件比對(duì),總數(shù)據(jù)大小大約在100MB左右,再加上服務(wù)器在國外,因此速度會(huì)比較慢。
在執(zhí)行過程中你也可以新開一個(gè)Terminal窗口,cd到~/.cocoapods目錄,用du -sh *來查看下載進(jìn)度。
解決辦法就是替換鏡像文件
先用這個(gè)命令查看軟件源
gem sources -l
如果是 https://rubygems.org/
或者是 https://ruby.taobao.org/
就需要先移除掉
gem sources --remove https://rubygems.org/
gem sources --remove https://ruby.taobao.org/
gem sources --remove https://gems.ruby-china.org/
淘寶鏡像已經(jīng)不提供更新
換成這個(gè)
gem sources --add https://gems.ruby-china.com/
在進(jìn)行pod setup 就會(huì)快很多
error: RPC failed
error: RPC failed
error: RPC failed; curl 56 GnuTLS recv error (-54): Error in the pull function.
fatal: The remote end hung up unexpectedly
fatal: early EOF
報(bào)錯(cuò)原因:
git緩存區(qū)不足
解決方案
修改Git的傳輸字節(jié)限制即可。
git config --global http.postBuffer 524288000
建議看下這篇文章 用CocoaPods做iOS程序的依賴管理
關(guān)于文章中的 淘寶鏡像源 應(yīng)該是作者好久沒更新文章 所以還是淘寶的, 在上邊已經(jīng)說明,需要特別注意.
說下遇到的坑
1搜索不出來結(jié)果
Unable to find a pod with name, author, summary, or descriptionmatching 'xxxxxxx'。
解決辦法:
刪除~/Library/Caches/CocoaPods目錄下的search_index.json文件
pod setup成功后會(huì)生成~/Library/Caches/CocoaPods/search_index.json文件。
終端輸入rm ~/Library/Caches/CocoaPods/search_index.json
刪除成功后再執(zhí)行pod search
podspec文件更新方法
執(zhí)行pod trunk push操作后發(fā)現(xiàn)podspec文件的某個(gè)地方寫錯(cuò)了,想更新一下。
對(duì)于這種情況,我們可能會(huì)先嘗試著在把podspec文件push一次。但是如果你的代碼版本號(hào)沒變(podspec里的version自然也沒變)就會(huì)提示push失敗,即使你更改了podspec的其他地方,pod也會(huì)認(rèn)為這兩個(gè)文件是同一個(gè)。
更新源代碼版本號(hào)(如:1.1.1->1.1.2)
重新push version tag,然后再執(zhí)行pod trunk push操作。
上邊是直接提交了文件夾上去 接下來是提交帶有demo的文件
參考下邊文章就好了
使用Cocoapods創(chuàng)建私有podspec,帶有DEMO
這個(gè)排版比較好點(diǎn)
更新版本的錯(cuò)誤處理,一般是忘記改 版本號(hào) 或者 忘記在spec 文件沒有改 version