寫(xiě)在開(kāi)頭
近期公司項(xiàng)目不是特別的忙,因此最近潛下心來(lái)研究了一下如何在cocopods上傳項(xiàng)目。
本人在學(xué)習(xí)的過(guò)程中,發(fā)現(xiàn)并沒(méi)有一篇完整詳細(xì)的介紹文章,因此總結(jié)幾位同行的文章,并實(shí)際操作,學(xué)到了一點(diǎn)皮毛,現(xiàn)將自己過(guò)程中所學(xué)到的知識(shí),以及遇到的坑分享給大家
下面,我就一步一步的操作將自己的pods發(fā)布到CocoaPods中兴喂。
如果你現(xiàn)在對(duì)CocoaPods還不太了解彻采,推薦你看一看這篇文章:用CocoaPods做iOS程序的依賴管理 ,2017年cocoaPods 1.2.1升級(jí)這里不再過(guò)多贅述.
本文以個(gè)人發(fā)布的一個(gè)簡(jiǎn)單的項(xiàng)目為例來(lái)說(shuō)明: LCActionAlertView
完整的項(xiàng)目目錄
1.創(chuàng)建遠(yuǎn)程倉(cāng)庫(kù)(github)
CocoaPods是托管在github上的评肆,所有的Pods也都是托管在github上歌径,因此我們首先需要?jiǎng)?chuàng)建一個(gè)屬于自己的 github 倉(cāng)庫(kù)损合,如下圖所示:
<br />
**說(shuō)明**
1.開(kāi)源庫(kù)的名字,必填項(xiàng).
2.對(duì)該庫(kù)的說(shuō)明,可選項(xiàng).
3.倉(cāng)庫(kù)的公開(kāi)性省艳,開(kāi)源的話選**Public**。 如果是公司內(nèi)部使用的話這里推薦大家使用私有的倉(cāng)庫(kù),但是**github**的私有倉(cāng)庫(kù)是要收費(fèi)的**$7/month**(壕請(qǐng)無(wú)視 - -<奚蟆)跋炕。大部分公司都是有自己的git服務(wù)器,不過(guò)一般只能在公司內(nèi)網(wǎng)使用律适,或者可以選擇[Gitlab](https://gitlab.com/),[Coding](https://coding.net/),[Bitbucket](https://bitbucket.org/)任意一種.
4.readme文件,建議勾選進(jìn)行創(chuàng)建,這是對(duì)該庫(kù)完整的一個(gè)說(shuō)明文檔
5.添加忽略文件使用,根據(jù)情況進(jìn)行選擇
6.正規(guī)的倉(cāng)庫(kù)都有一個(gè)**license**文件辐烂,**Pods**依賴庫(kù)對(duì)這個(gè)文件要求比較嚴(yán)格遏插,需要有這個(gè)文件。這里最好讓**github**自動(dòng)創(chuàng)建一個(gè)棉圈,不過(guò)后續(xù)手動(dòng)創(chuàng)建也行涩堤。建議使用**MIT**類型的**license**
2. clone項(xiàng)目到本地
這里推薦大家使用一個(gè)免費(fèi)的git客戶端 - SourceTree,推薦文章:SourceTree 的使用
3.向本地倉(cāng)庫(kù)中添加創(chuàng)建 Pods 依賴庫(kù)所需的文件#
1.共享代碼
將LCActionAlertView文件夾,即需要共享出去的源代碼所在文件夾拖入工程內(nèi),建議同時(shí)拖入該源代碼的使用示例工程
2.創(chuàng)建podspec文件
每個(gè)Pods依賴庫(kù)必須有且僅有一個(gè)名稱和依賴庫(kù)名保持一致,后綴名為.podspec的描述文件分瘾。這里我們依賴庫(kù)的描述文件名稱應(yīng)該為L(zhǎng)CActionAlertView.podspec
創(chuàng)建這個(gè)文件有兩種途徑:
1.復(fù)制已有的podspec文件然后修改對(duì)應(yīng)的參數(shù)胎围。
2.執(zhí)行命令行創(chuàng)建。 在終端輸入:
pod spec create LCActionAlertView
文件內(nèi)容如下所示:
里面有很多部分,根據(jù)需要選擇即可,另外使用文本編輯打開(kāi)此文件的時(shí)候,有時(shí)候英文標(biāo)點(diǎn)會(huì)自動(dòng)變?yōu)橹形臉?biāo)點(diǎn),因此建議拖入xcode,使用xcode打開(kāi),避免不必要的麻煩
@version = "0.0.1"
Pod::Spec.new do |s|
s.name = "LCActionAlertView"
s.version = @version
s.summary = "簡(jiǎn)單易用的底部彈出控件."
s.description = <<-DESC
首次pods上傳
*希望可以成功
DESC
s.homepage = "https://github.com/loversunny/LCActionAlertView"
s.license = "MIT"
s.author = { "冀柳沖" => "HH330897537@163.com" }
s.platform = :ios, "8.0"
s.source = { :git => "https://github.com/loversunny/LCActionAlertView.git",:tag => "v#{s.version}" }
s.source_files = "LCActionAlertView/*.{h,m}"
s.framework = "UIKit"
s.requires_arc = true
end
3. readme文件,不多贅述
4.開(kāi)源許可證 LICENSE
CocoaPods強(qiáng)制要求所有的Pods依賴庫(kù)都必須有l(wèi)icense文件德召,否則驗(yàn)證不會(huì)通過(guò)白魂。license文件有很多中,詳情可以參考tldrlegal上岗。前面我們已經(jīng)選擇創(chuàng)建了一個(gè)MIT類型的license福荸。
以上操作完成后,目錄是這樣的(command + shift + . 顯示隱藏目錄)
3.提交修改到github
提交之前,需要對(duì)剛才添加的podspec文件進(jìn)行驗(yàn)證
pod lib lint
運(yùn)行之后可能會(huì)得到下面的警告:
-> LCActionAlertView (0.0.1)
- WARN | source: Git sources should specify a tag.
[!] LCActionAlertView did not pass validation, due to 1 warning (but you can use `--allow-warnings` to ignore it) and All results apply only to public specs, but you can use `--private` to ignore them if linting the specification for a private pod..
You can use the `--no-clean` option to inspect any issue.
由于我們現(xiàn)在還沒(méi)有正式生成 release 版本, github 上并沒(méi)有任何 tag肴掷,所以我們剛才填寫(xiě) .podspec 文件填寫(xiě) git 地址的時(shí)候沒(méi)有填寫(xiě)指定 tag (上面文件的注釋中有提到)敬锐,解決方法我們可以先執(zhí)行忽略警告的命令:
pod lib lint --allow-warnings
如果成功會(huì)出現(xiàn)如下輸出:
-> O2View (0.0.1)
- WARN | source: Git sources should specify a tag.
O2View passed validation.
當(dāng)調(diào)試完成了之后,我們需要在 github 上把我們的代碼生成相應(yīng)穩(wěn)定的 release 版本呆瞻,根據(jù)版本號(hào),(或者直接git命令指定tag值)再修改podspec文件,指定tag值即可.
使用sourceTree 推送到github上.或者使用以下命令:
git add -A && git commit -m "add pod files"
git push origin master
5. 將生成的podspec文件提交到官方的 CocoaPods Specs 中
經(jīng)過(guò)前面的步驟台夺,我們的 CocoaPods 依賴庫(kù)就已經(jīng)準(zhǔn)備好了,但是現(xiàn)在你還不能在你的工程中使用它痴脾。如果你想成為一個(gè)真正可用的依賴庫(kù)颤介,還需要最后一步操作:將剛才生產(chǎn)的 podspec 文件提交到 官方的 CocoaPods Specs 中.
沒(méi)錯(cuò),我們平時(shí)用的能用pod search
搜到的依賴庫(kù)都會(huì)把它上傳到這個(gè)倉(cāng)庫(kù)中赞赖, 也就是說(shuō)只有將我們的 podspec 文件上傳到這里滚朵,才能成為一個(gè)真正的依賴庫(kù),別人才能用前域! 流程如下:
1.CocoaPods Trunk發(fā)布自己的Pods
在cocoapods使用trunk辕近,CocoaPods 需要0.33以上版本,用 pod --version查看版本匿垄,如果版本低移宅,需要更新。終端執(zhí)行 sudo gem install -n /usr/local/bin cocoapods
注冊(cè)Trunk
pod trunk register jlc160993@163.com 'sunny沖哥' --description='描述信息'
大家將上面的郵箱,名字,更改成自己的,然后執(zhí)行該命令,一切順利的話就會(huì)受到一份郵件年堆,點(diǎn)擊郵件中的鏈接驗(yàn)證通過(guò)后,再執(zhí)行:
pod trunk me
顯示以下信息
jiliuchongdeiMac:~ JLC$ pod trunk me
- Name: jlc --description=彈窗控件
- Email: hh330897537@163.com
- Since: June 26th, 03:40
- Pods:
- LCActionAlertView
- Sessions:
- June 26th, 03:40 - November 2nd, 21:16. IP: 218.29.120.82
如果你的pod是由多人維護(hù)的,你也可以添加其他維護(hù)者:
pod trunk add-owner JLC kyle@163.com
上面的工作完成之后盏浇,我們就可以開(kāi)始 trunk push
了变丧。
trunk push
pod trunk push
命令會(huì)首先驗(yàn)證你本地的podspec文件(是否有錯(cuò)誤),之后會(huì)上傳spec文件到trunk绢掰,最后會(huì)將你上傳的podspec文件轉(zhuǎn)換為需要的json文件痒蓬。在工程根目錄(包含有.podspec)下執(zhí)行命令:
pod trunk push
如果在trunk push過(guò)程中報(bào)錯(cuò)了童擎,仔細(xì)查看一下錯(cuò)誤信息,解決問(wèn)題后,重新push
成功之后我們也可以在本地的~/.cocoapods/repos/master/Specs
目錄下看到轉(zhuǎn)換之后的json文件
至此我們整個(gè)制作自己的開(kāi)源庫(kù)的過(guò)程就完成了,以后有新版本只需要修改工程根目錄下的podspec文件攻晒,然后重新執(zhí)行pod trunk push
命令即可顾复。
成功的話,一般會(huì)顯示如下信息
Congrats
LCActionAlertView (0.0.1) successfully published
June 29th, 00:57
https://cocoapods.org/pods/LCActionAlertView
Tell your friends!
然后耐心等待一般時(shí)間,就可以執(zhí)行pod search LCActionAlertView
命令去查看了哦
-> LCActionAlertView (0.0.1)
簡(jiǎn)單易用的底部彈出控件.
pod 'LCActionAlertView', '~> 0.0.1'
- Homepage: https://github.com/loversunny/LCActionAlertView
- Source: https://github.com/loversunny/LCActionAlertView.git
- Versions: 0.0.1 [master repo]
PS:
如果長(zhǎng)時(shí)間過(guò)去還是搜索不到 請(qǐng)參考Cocoapods: pod search無(wú)法搜索到類庫(kù)的解決辦法
最后
最后對(duì)這個(gè)過(guò)程做個(gè)總結(jié):
- 開(kāi)源庫(kù)發(fā)布之后,需要打上tag,參考Git 基礎(chǔ) - 打標(biāo)簽
git tag -a v1.4 -m 'my version 1.4'
- 進(jìn)入到項(xiàng)目根目錄下鲁捏,創(chuàng)建podspec文件
pod spec create PodName
- 編輯podspec文件中的相關(guān)信息芯砸,有兩個(gè)比較重要的地方s.source和s.source_files,可以驗(yàn)證是否有誤:
pod spec lint PodName.podspec
或者cd 到podspec文件所在目錄,執(zhí)行
pod lib lint
- 注冊(cè)pod trunk
pod trunk register jlc160993@163.com 'sunny沖哥' --description='描述信息'
- 發(fā)布到pod trunk
pod trunk push
該命令在包含有.podspec文件的目錄下執(zhí)行
- 更新pod庫(kù)
pod setup
如果pod trunk push成功后無(wú)法pod search到自己的庫(kù),可執(zhí)行該命令给梅。還是不行的話,參考此篇文章修改:CocoaPods 【pod search 搜索類庫(kù)失敗的解決辦法】
感謝!
本文在寫(xiě)作過(guò)程中參考了以下文章,再次致謝!
簡(jiǎn)書(shū)當(dāng)前Markdown語(yǔ)法與效果
如何發(fā)布自己的開(kāi)源框架到CocoaPods
特別鳴謝簡(jiǎn)友:MarkLin
本文章也是參考該文寫(xiě)作而成的,再次致謝
制作 CocoaPods 依賴庫(kù)
<br />
最后的最后
如果在操作過(guò)程中,有任何疑問(wèn)或者不明白的地方,歡迎留言探討,互相學(xué)習(xí),共同進(jìn)步,謝謝大家!