發(fā)布個(gè)人開(kāi)源框架到CocoaPods——讓你的項(xiàng)目支持CocoaPods


寫(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)目目錄
項(xiàng)目目錄.png

1.創(chuàng)建遠(yuǎn)程倉(cāng)庫(kù)(github)

CocoaPods是托管在github上的评肆,所有的Pods也都是托管在github上歌径,因此我們首先需要?jiǎng)?chuàng)建一個(gè)屬于自己的 github 倉(cāng)庫(kù)损合,如下圖所示:

創(chuàng)建倉(cāng)庫(kù).png

<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),避免不必要的麻煩


LCActionAlertView.podspec 內(nè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 + . 顯示隱藏目錄)

項(xiàng)目目錄.png

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文件

json文件目錄.png

至此我們整個(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é):

  1. 開(kāi)源庫(kù)發(fā)布之后,需要打上tag,參考Git 基礎(chǔ) - 打標(biāo)簽
git tag -a v1.4 -m 'my version 1.4'
  1. 進(jìn)入到項(xiàng)目根目錄下鲁捏,創(chuàng)建podspec文件
pod spec create PodName
  1. 編輯podspec文件中的相關(guān)信息芯砸,有兩個(gè)比較重要的地方s.source和s.source_files,可以驗(yàn)證是否有誤:
pod spec lint PodName.podspec

或者cd 到podspec文件所在目錄,執(zhí)行

pod lib lint
  1. 注冊(cè)pod trunk
pod trunk register jlc160993@163.com  'sunny沖哥' --description='描述信息'
  1. 發(fā)布到pod trunk
pod trunk push 

該命令在包含有.podspec文件的目錄下執(zhí)行

  1. 更新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)步,謝謝大家!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末假丧,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子动羽,更是在濱河造成了極大的恐慌包帚,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,311評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件运吓,死亡現(xiàn)場(chǎng)離奇詭異渴邦,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)拘哨,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén)谋梭,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人宅静,你說(shuō)我怎么就攤上這事章蚣。” “怎么了姨夹?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,671評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵纤垂,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我磷账,道長(zhǎng)峭沦,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,252評(píng)論 1 279
  • 正文 為了忘掉前任逃糟,我火速辦了婚禮吼鱼,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘绰咽。我一直安慰自己菇肃,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,253評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布取募。 她就那樣靜靜地躺著琐谤,像睡著了一般。 火紅的嫁衣襯著肌膚如雪玩敏。 梳的紋絲不亂的頭發(fā)上斗忌,一...
    開(kāi)封第一講書(shū)人閱讀 49,031評(píng)論 1 285
  • 那天质礼,我揣著相機(jī)與錄音,去河邊找鬼织阳。 笑死眶蕉,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的唧躲。 我是一名探鬼主播造挽,決...
    沈念sama閱讀 38,340評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼惊窖!你這毒婦竟也來(lái)了刽宪?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 36,973評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤界酒,失蹤者是張志新(化名)和其女友劉穎圣拄,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體毁欣,經(jīng)...
    沈念sama閱讀 43,466評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡庇谆,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,937評(píng)論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了凭疮。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片饭耳。...
    茶點(diǎn)故事閱讀 38,039評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖执解,靈堂內(nèi)的尸體忽然破棺而出寞肖,到底是詐尸還是另有隱情,我是刑警寧澤衰腌,帶...
    沈念sama閱讀 33,701評(píng)論 4 323
  • 正文 年R本政府宣布新蟆,位于F島的核電站,受9級(jí)特大地震影響右蕊,放射性物質(zhì)發(fā)生泄漏琼稻。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,254評(píng)論 3 307
  • 文/蒙蒙 一饶囚、第九天 我趴在偏房一處隱蔽的房頂上張望帕翻。 院中可真熱鬧,春花似錦萝风、人聲如沸抚垃。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,259評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)赚导。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間衫仑,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工堕花, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留文狱,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,497評(píng)論 2 354
  • 正文 我出身青樓缘挽,卻偏偏與公主長(zhǎng)得像瞄崇,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子壕曼,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,786評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容