發(fā)布 Git 管理的代碼至Cocoapods
1. 創(chuàng)建.podspec文件
Git 管理的代碼都會(huì)有 .git 文件。首先打開終端, cd 到與.git 同級(jí)的目錄。
執(zhí)行命令:
$ pod spec create <NAME>
<NAME> 替換成所要發(fā)布的項(xiàng)目的名稱。例如
$ pod spec create RTDatabase
執(zhí)行成功,終端會(huì)有途中所示提示。

2. 編輯.podspec文件
打開文件項(xiàng)目文件目錄,找到 *.podspec文件,雙擊打開。如果打不開,選擇Xcode 或者 Sublime Text打開。第一次打開會(huì)有一百多行,看起來(lái)很嚇人。先把注釋(.podspec中以#開頭的是注釋)刪除。
-> 大概留著么多東西就行了,需要的可以再添加進(jìn)來(lái)。
Pod::Spec.new do |s|
s.name = "RTDatabase" # 要發(fā)布項(xiàng)目的名稱,要與.podspec同名
s.version = "0.0.1" # 版本號(hào)
s.summary = "A short description of RTDatabase." # 項(xiàng)目概括
s.description = <<-DESC
DESC # 項(xiàng)目描述。可以沒(méi)有,但有這一項(xiàng)就要有內(nèi)容。
s.homepage = "http://EXAMPLE/RTDatabase" # 個(gè)人主頁(yè)
s.author = { "ENUUI" => "ENUUI_C@163.com" } # 作者,以及聯(lián)系方式。
s.license = "MIT" # 發(fā)布的證書,不知道證書可以去了解一下。
# s.requires_arc = true # 是否是arc的
# s.platform = :ios # 運(yùn)行環(huán)境
# s.ios.deployment_target = "5.0" # 運(yùn)行環(huán)境,與所支持的系統(tǒng)版本
# s.osx.deployment_target = "10.7"
# s.watchos.deployment_target = "2.0"
# s.tvos.deployment_target = "9.0"
s.source = { :git => "http://EXAMPLE/RTDatabase.git", :tag => "#{s.version}" }
# 項(xiàng)目源文件目錄
s.source_files = "Classes/**/*.{h,m}"
# s.public_header_files = "Classes/**/*.h" # public頭文件目錄
# s.dependency "JSONKit", "~> 1.4" # 依賴的第三方
# s.ios.frameworks = 'MobileCoreServices', 'CoreGraphics' # 依賴的系統(tǒng)庫(kù)
end
這樣以來(lái)就一目了然了,稍稍有點(diǎn)英語(yǔ)基礎(chǔ),就能看出來(lái)每一項(xiàng)的含義是什么。
s.source = { :git => "http://EXAMPLE/RTDatabase.git", :tag => "#{s.version}" }
- 其中
http://EXAMPLE/RTDatabase.git可以替換成托管代碼的git網(wǎng)站上的git clone用的網(wǎng)址,如https://github.com/FuihuiC/RTDB.git;
也可替換成項(xiàng)目的.git目錄,如/Users/ENUUI/Desktop/Codes/OptiDB/RTDB/.git。#{s.version}則一項(xiàng)建議就不要該了,這個(gè)的意思是,項(xiàng)目資源的release版本與.podspec中的s.version項(xiàng)中的版本號(hào)相同。
s.source_files = "Classes/**/*.{h,m}"
s.public_header_files = "Classes/**/*.h"這兩項(xiàng)非常類似。剛開始的時(shí)候這個(gè)目錄還是很容易出問(wèn)題的。
- 目錄起始要與
.podspec所在的目錄同級(jí);- 其中的
*代表任意長(zhǎng)度的任意的任意字符;{h,m}中填寫文件后綴,出了h,m,還有swift等,多項(xiàng)以,隔開;s.public_header_files = "Classes/**/*.h"這一項(xiàng)只會(huì)聲明公開的頭文件,不會(huì)按照路徑去加載。所以要保證這一項(xiàng)中的頭文件都已經(jīng)在s.source_files加載,或者單獨(dú)加載。比如
s.source_files = 'RTDatabase/core/RT*.{h,m}'.這句的意思是:RTDatabase/core/路徑下,所有以RT開頭的.h和.m文件。
檢測(cè)本地pod是否通過(guò)。
- 執(zhí)行命令:
$ pod lib lint <NAME>.podspec --allow-warnings<NAME>替換成自己的.podspec文件的名字,不保留尖括號(hào)。
3. 創(chuàng)建release版本
(1) Git 托管網(wǎng)站創(chuàng)建release版本
所有的 Git 托管網(wǎng)站都差不太多,以 GitHub 為例。
- 首先,確保代碼都已經(jīng)提交完成。點(diǎn)擊release。

- 然后,點(diǎn)擊
Draft a new release。
點(diǎn)擊創(chuàng)建新的release - 在新建
release界面,圖示1位置填寫索要?jiǎng)?chuàng)建release的版本號(hào)??梢赃x擇分支,起個(gè)標(biāo)題,填寫當(dāng)前版本的描述。其中,版本號(hào)是必填的。填寫完成后,點(diǎn)擊Publish release,新的release就創(chuàng)建好了。
在新建`release`界面
創(chuàng)建完成后,一定要
git pull一下,將新版信息pull到本地。
(2)本地創(chuàng)建release
- 打開終端,
cd到.git所在目錄,執(zhí)行命令:
// <version>位置填寫要?jiǎng)?chuàng)建的 tag 的版本號(hào)。沒(méi)有尖括號(hào)。
$ git tag -a <version> -m '<message>'
- 如果要提交到 Git 服務(wù)器,執(zhí)行下命令:
// <version> 填寫要提交的 tag 的版本號(hào)。沒(méi)有尖括號(hào)。
$ git push origin <version>
- 刪除本地 tag
$ git tag -d <version> //刪除本地tag
- 刪除遠(yuǎn)程tag
$ git push origin <version> //刪除遠(yuǎn)程tag
// 或者
$ git push origin --delete tag <version> //刪除遠(yuǎn)程tag
4. 發(fā)布
- 首先,檢測(cè)文件的有效性,執(zhí)行命令:
$ pod spec lint --allow-warnings
執(zhí)行結(jié)果顯示*.podspec passed validation(一般是綠色的)時(shí)成功。
- 發(fā)布到cocoapods,執(zhí)行命令:
$ pod trunk push <NAME>.podspec --allow-warnings
這個(gè)過(guò)程可能會(huì)慢一些,耐心等待就可以了。當(dāng)出現(xiàn)一些彩色的小圖案,并有Tell your friends!字樣的時(shí)候,說(shuō)明已經(jīng)成功了。
5. 問(wèn)題
- 路徑問(wèn)題。在添加資源的時(shí)候,路徑一定要寫清楚,不能錯(cuò)點(diǎn)。
- 代碼錯(cuò)誤。代碼有問(wèn)題是傳不上去的。
- 沒(méi)有把 Git 服務(wù)器上的
release拉到本地。
6.示例
文中提到的代碼 RTDatabase
RTDatabase 的 .podspec

