CocoaPods創(chuàng)建公有和私有Pod庫方法總結(jié)

轉(zhuǎn)載自:佳敏_朱 的文章
原文鏈接:https://segmentfault.com/a/1190000007947371

引言

剛畢業(yè)那段時間接觸到的一些文章到處都在大談iOS工程模塊化(CocoaPods化), 本人也一直在著力于將公司項目代碼解耦合, 但是因為一個人開發(fā)實在沒有必要將工程CocoaPods化, 所以遲遲沒有去研究將工程CocoaPods化的方法, 期間本人也抽時間去參加過蘑菇街等平臺舉辦的架構(gòu)交流會, 如今公司業(yè)務(wù)發(fā)展穩(wěn)定, 終于有時間將創(chuàng)建公有pod庫將自己的代碼供其他開發(fā)者pod依賴使用的方法, 以及創(chuàng)建本地/內(nèi)網(wǎng)的私有Pod庫供公司項目組件CocoaPods化的方法研究清楚, 把這幾天整理的筆記做個記錄.

創(chuàng)建公有Pod庫或者私有Pod庫, 實際上原理是一樣的, 都是基于git服務(wù)和repo協(xié)議, 不一樣的是, 兩者的版本索引查詢方式不一樣, 公有庫的podspec由CocoaPods/Specs管理, 而內(nèi)部私有使用的pod庫需要自己建立一個倉庫來管理podspec.

正文目錄
一. 創(chuàng)建公有Pod庫
1抡爹、注冊CocoaPods賬戶信息
2、創(chuàng)建共享庫文件并上傳到公有倉庫
3拘领、編輯.podspec文件
4脑沿、打tag, 發(fā)布一個release版本
5虾啦、發(fā)布自己的庫描述文件podspec給cocoapods
6、關(guān)于查找和使用新創(chuàng)建的庫
7、更新維護podspec
二. 創(chuàng)建私有Pod庫
1挣棕、創(chuàng)建一個git倉庫用來做內(nèi)部私有庫的Spec Repo
2歇攻、創(chuàng)建私有Pod組件庫
3固惯、然后將podspec加入私有Sepc repo中
4、查找和使用內(nèi)部組件庫

一. 創(chuàng)建公有Pod庫

例子: 我的第一個公共pod庫JM_ActionSheet, Podfile中添加pod 'JM_ActionSheet'即可使用.

1缴守、注冊CocoaPods賬戶信息

想要創(chuàng)建一個開源pod庫, 首先我們需要注冊CocoaPods, 這里使用trunk方式, 作為一個iOS開發(fā)人員你一定安裝了CocoaPods, 那么只需要在終端執(zhí)行:

pod trunk register 郵箱地址 '用戶名' --verbose

這里我們一般使用github郵箱和用戶名, 然后在你的郵箱中會收到確認郵件, 在瀏覽器中點擊鏈接確認即注冊成功, 成功之后可以終端執(zhí)行:

pod trunk me

查看自己的注冊信息, 以后當你有了自己的開源Pod庫, 也可以用此方式隨時查看自己發(fā)布過的Pods;

[圖片上傳失敗...(image-57c4e4-1512716649002)]

2葬毫、創(chuàng)建共享庫文件并上傳到公有倉庫

共享庫需要三個必不可少的部分:
A.

共享文件夾(文件夾存放著你要共享的內(nèi)容, 也就是其他人pod得到的文件, .podspec文件中的source_files需要指定此文件路徑及文件類型);
B.

LICENSE文件(默認一般選擇MIT);
C.

庫描述文件.podspec(本庫的各項信息描述, 需要提交給CocoaPods, pod通過這個文件查找到你共享的庫, .podspec文件的格式見第3點).

這一步分兩種情況:
A.如果你已經(jīng)有了現(xiàn)成的想要共享的文件,你只需要滿足上面三個部分,即可上傳到公有倉庫即可繼續(xù)其他的步驟;
B.你想要創(chuàng)建一個全新的工程去做自己的共享, 可以使用終端命令:

pod lib create 庫名

去根據(jù)需要選擇各項配置后創(chuàng)建一個標準的工程, 這里不做贅述, 具體請參考:Using Pod Lib Create;

你可以使用SourceTree等工具上傳你的代碼到公共倉庫, 關(guān)于如何使用命令行上傳代碼到遠端倉庫, 可以移步:iOS開發(fā)使用Git那些事, 這里不做贅述.

3镇辉、編輯.podspec文件

JM_ActionSheet.podspec為例:

Pod::Spec.new do |s|
    s.name         = 'JM_ActionSheet'
    s.version      = '1.0.1'
    s.summary      = 'An ActionSheet like WeChat'
    s.homepage     = 'https://github.com/ZJM6658/ActionSheetLikeWeChat'
    s.license      = 'MIT'
    s.authors      = {'JM Zhu' => '815187811@qq.com'}
    s.platform     = :ios, '6.0'
    s.source       = {:git => 'https://github.com/ZJM6658/ActionSheetLikeWeChat.git', :tag => s.version}
    s.source_files = 'JM_ActionSheet/*.{h,m}'
    s.requires_arc = true
end

這是一個最簡單的.podspec文件樣式, 各項屬性的意思一目了然, 如果本庫中有依賴其他庫, 加上``s.dependency '庫名'`即可.

編寫完成后, 我們需要驗證.podspec文件的合法性, 這里需要終端cd到.podspec文件所在文件夾, 執(zhí)行:

pod lib lint JM_ActionSheet.podspec

如有警告或者錯誤請重新檢查你的編寫正確性, 如果沒有問題會出現(xiàn)

-> JM_ActionSheet (1.0.1)

JM_ActionSheet passed validation.

4、打tag, 發(fā)布一個release版本

一切準備就緒后, 我們需要在你的git倉庫里面存在一個與.podspec文件中一致的version, 這里你可以在你的git倉庫中的releases一項去手動發(fā)布, 也可以在當前文件夾下使用終端命令:

git tag -m 'first release' '1.0.1'
git push --tag #推送tag到遠端倉庫

成功之后即可在你的releases里面看到這個tag的版本.

5贴捡、發(fā)布自己的庫描述文件podspec給cocoapods

同樣在這個文件夾下, 終端執(zhí)行:

pod trunk push JM_ActionSheet.podspec

將你的庫文件.podspec文件提交到公有的specs上面, 這一步做的操作是驗證你的podspec文件是否合法+提交到specs中(等同于fork;commit;push)+將上傳的podspec文件轉(zhuǎn)成json格式文件)忽肛,成功后會出現(xiàn)Congrats信息噢~

[圖片上傳失敗...(image-1db10c-1512716649002)]

6、關(guān)于查找和使用新創(chuàng)建的庫

成功后需要等待的時間不定, 目前一般比較快, 一般使用pod setup和pod search查看是否已經(jīng)可以使用, 本人創(chuàng)建這個庫之后一個星期內(nèi)每天嘗試pod setuppod search JM_ActionSheet始終無法查找到自己的庫, 查找資料之后找到解決辦法:

1.pod setup成功后生成的~/Library/Caches/CocoaPods/search_index.json文件, 是用來查找的索引文件, 終端輸入:

rm ~/Library/Caches/CocoaPods/search_index.json

刪除~/Library/Caches/CocoaPods目錄下的search_index.json文件, 刪除成功后再執(zhí)行:pod search 庫名, 等待輸出:Creating search index for spec repo 'master'.. Done! 稍等片刻就會出現(xiàn)你想要的結(jié)果~

7烂斋、更新維護podspec

如果有錯誤或者需要迭代版本,修改工程文件后推送到遠端倉庫后, 需要修改podspec中的版本號, 并重新打tag上傳, 再進行新一輪的驗證和發(fā)布, 當然, 創(chuàng)建一個演示demo工程供其他開發(fā)者下載查看并不會影響我們的pod庫.

二. 創(chuàng)建私有Pod庫

私有Pod庫和公有Pod庫的創(chuàng)建方式?jīng)]有什么區(qū)別, 不一樣的是管理他們的spec repo不一樣
所以我們需要自己創(chuàng)建一個跟CocoaPods/Specs類似的倉庫來管理內(nèi)部創(chuàng)建的Pod庫的podspec文件, 供內(nèi)部人員更新和依賴使用內(nèi)部Pod組件庫.
私有repo的構(gòu)建形式有兩種, 一種是私有g(shù)it服務(wù)器上面創(chuàng)建屹逛,一種是本機創(chuàng)建.
本機創(chuàng)建請參考官方文檔:Private Pods,

這里介紹的是在公司內(nèi)部搭建的git服務(wù)器上面創(chuàng)建整個服務(wù)的方式.

1、創(chuàng)建一個git倉庫用來做內(nèi)部私有庫的Spec Repo

在私有服務(wù)器一個倉庫,一個用來存放所有共享庫的podspec, 這里創(chuàng)建好之后的內(nèi)部SSH協(xié)議地址是:git@git.yaomaitong.net:iOSPods/ymtSpecs.git, 花錢買git的私有倉庫或者使用其他免費的第三方git服務(wù)(如Bitbucket等)創(chuàng)建的私有倉庫給到的http/https地址也一樣.終端輸入命令:

pod repo add ymtSpecs git@git.yaomaitong.net:iOSPods/ymtSpecs.git

將ymtSpecs添加到本地repo, 添加成功后可以在/.cocoapods/repos/目錄下可以看到官方的specs:master和剛剛加入的specs:ymtSpecs

如果有其他合作人員共同使用這個私有Spec Repo的話在他有對應(yīng)Git倉庫的權(quán)限的前提下執(zhí)行相同的命令添加這個Spec Repo即可.

2源祈、創(chuàng)建私有Pod組件庫

繼續(xù)創(chuàng)建一個私有倉庫,用來建立需要共享的內(nèi)部組件, 以Category為例:git@git.yaomaitong.net:iOSPods/Category.git, 可以創(chuàng)建示例工程, 像創(chuàng)建公有的庫一樣, 填寫自己的podspec文件

Pod::Spec.new do |s|
    s.name         = 'Category'
    s.version      = '1.0.1'
    s.summary      = 'ymt Category files'
    s.homepage     = 'http://git.yaomaitong.net/iOSPods/Category'
    s.license      = 'MIT'
    s.authors      = {'Gua Pi' => 'guapi@yaomaitong.cn'}
    s.platform     = :ios, '7.0'
    s.source       = {:git => 'http://git.yaomaitong.net/iOSPods/Category.git', :tag => s.version}
    s.source_files = 'AllCategory/*.{h,m}'
    s.requires_arc = true
end

值得注意的是:podspec文件中的homepage和source不支持ssh協(xié)議地址,所以我們得放入http/https地址.

與公有庫的創(chuàng)建方式一樣,

pod lib lint Category.podspec驗證成功之后push到倉庫, 然后打tag發(fā)布release版本.

3煎源、然后將podspec加入私有Sepc repo中

公有庫使用trunk方式將.podspec文件發(fā)布到CocoaPods/Specs, 內(nèi)部的pod組件庫則是添加到我們第一步創(chuàng)建的私有Spec repo中去, 在終端執(zhí)行:

pod repo push ymtSpecs Category.podspec

添加成功之后ymtSpecs中會包含Category庫的podspec信息, 可以前往~/.cocoapods/repos下的ymtSpecs文件夾中查看, 同時git服務(wù)器中的遠端也更新了.

4、查找和使用內(nèi)部組件庫

執(zhí)行pod search Category就能查到剛剛創(chuàng)建好的Category庫了, 然后在想要使用此組件的工程的Podfile中加入pod 'Category', '~>1.0.1'即可使用內(nèi)部組件啦香缺!

值得注意的是:必須在Podfile前面需要添加你的私有Spec repo的git地址source, pod install時, 才能在私有repo中查找到私有庫, 像這樣:

    source 'git@git.yaomaitong.net:iOSPods/ymtSpecs.git'

    platform :ios, '7.0'
    target "test" do
        pod 'Category', '~>1.0.1'
    end

經(jīng)過測試, 這種方式可以把你的所有可以拆分出來的組件, 甚至是業(yè)務(wù)都來使用Pod管理, 這樣達到了解耦和單項更新優(yōu)化某些組件不影響老版本的依賴使用, 出現(xiàn)問題修改Podfile中的依賴版本即可隨時回滾, 給開發(fā)了帶來極大的便利, 值得學(xué)習(xí).

參考鏈接:
CocoaPods Guides
Private Pods
手把手教你發(fā)布代碼到CocoaPods(Trunk方式)
使用Cocoapods創(chuàng)建私有podspec
COCOAPODS創(chuàng)建私有PODS

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末手销,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子图张,更是在濱河造成了極大的恐慌锋拖,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,126評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件祸轮,死亡現(xiàn)場離奇詭異兽埃,居然都是意外死亡,警方通過查閱死者的電腦和手機适袜,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評論 2 382
  • 文/潘曉璐 我一進店門柄错,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人苦酱,你說我怎么就攤上這事售貌。” “怎么了疫萤?”我有些...
    開封第一講書人閱讀 152,445評論 0 341
  • 文/不壞的土叔 我叫張陵颂跨,是天一觀的道長。 經(jīng)常有香客問我扯饶,道長恒削,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,185評論 1 278
  • 正文 為了忘掉前任尾序,我火速辦了婚禮钓丰,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘每币。我一直安慰自己斑粱,他們只是感情好,可當我...
    茶點故事閱讀 64,178評論 5 371
  • 文/花漫 我一把揭開白布脯爪。 她就那樣靜靜地躺著则北,像睡著了一般矿微。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上尚揣,一...
    開封第一講書人閱讀 48,970評論 1 284
  • 那天涌矢,我揣著相機與錄音,去河邊找鬼快骗。 笑死娜庇,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的方篮。 我是一名探鬼主播名秀,決...
    沈念sama閱讀 38,276評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼藕溅!你這毒婦竟也來了匕得?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,927評論 0 259
  • 序言:老撾萬榮一對情侶失蹤巾表,失蹤者是張志新(化名)和其女友劉穎汁掠,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體集币,經(jīng)...
    沈念sama閱讀 43,400評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡考阱,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,883評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了鞠苟。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片乞榨。...
    茶點故事閱讀 37,997評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖当娱,靈堂內(nèi)的尸體忽然破棺而出吃既,到底是詐尸還是另有隱情,我是刑警寧澤趾访,帶...
    沈念sama閱讀 33,646評論 4 322
  • 正文 年R本政府宣布态秧,位于F島的核電站董虱,受9級特大地震影響扼鞋,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜愤诱,卻給世界環(huán)境...
    茶點故事閱讀 39,213評論 3 307
  • 文/蒙蒙 一云头、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧淫半,春花似錦溃槐、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽猴鲫。三九已至,卻和暖如春谣殊,著一層夾襖步出監(jiān)牢的瞬間拂共,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評論 1 260
  • 我被黑心中介騙來泰國打工姻几, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留宜狐,地道東北人。 一個月前我還...
    沈念sama閱讀 45,423評論 2 352
  • 正文 我出身青樓蛇捌,卻偏偏與公主長得像抚恒,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子络拌,可洞房花燭夜當晚...
    茶點故事閱讀 42,722評論 2 345

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