如何將自己的項目添加Pod

網(wǎng)上將自己的項目做成Pod 的文檔很多间景,但是有些文檔已經(jīng)很老了祭往,不適合新手上手晦嵌,經(jīng)過這兩天的研究我決定還是自己寫一篇這方面的文檔:

整個過程的實現(xiàn)我以一個基于AFNetworking封裝的網(wǎng)絡(luò)請求OBDataService為例:

一佩伤、創(chuàng)建自己的github倉庫

cocopods都托管在GitHub上(官方鏈接:https://github.com/CocoaPods)冻记,所有的Pods依賴庫也都依賴github搏熄,因此第一步我們需要創(chuàng)建一個屬于自己的github倉庫棚唆。倉庫創(chuàng)建界面如下圖:


上圖中標了序號的共6處暇赤,對應的說明如下:

1、Repository name

倉庫名稱宵凌,這里寫成OBDataService鞋囊,必填的.因為我之前創(chuàng)建過這個文件所以才會提示已經(jīng)創(chuàng)建了;

2瞎惫、Description

倉庫的描述信息溜腐,可選的;

3瓜喇、倉庫的公開性

這里只能選Public挺益,一個是因為Private是要money的,再一個Private別人看不到還共享個毛乘寒;

4望众、是否創(chuàng)建一個默認的README文件

一個完整地倉庫,都需要README說明文檔伞辛,建議選上烂翰。當然不嫌麻煩的話你也可以后面再手動創(chuàng)建一個;

5始锚、是否添加.gitignore文件

.gitignore文件里面記錄了若干中文件類型刽酱,凡是該文件包含的文件類型,git都不會將其納入到版本管理中瞧捌。是否選擇看個人需要棵里;

6、license類型

正規(guī)的倉庫都應該有一個license文件姐呐,Pods依賴庫對這個文件的要求更嚴殿怜,是必須要有的。因此最好在這里讓github創(chuàng)建一個曙砂,也可以自己后續(xù)再創(chuàng)建头谜。我使用的license類型是MIT。

上面的各項都填寫完畢后鸠澈,點擊Create repository按鈕即可柱告,到這,倉庫創(chuàng)建過程就結(jié)束了笑陈。

二际度、clone倉庫到本地

為了便于向倉庫中刪減內(nèi)容,需要先將倉庫clone到本地涵妥,操作方式有多種乖菱,推薦使用命令行:

$ git clone https://github.com/obally/OBDataService.git

操作完成后,github上對應的文件都會拷貝到本地,目錄結(jié)構(gòu)為:

后續(xù)我們的所有文件增窒所、刪鹉勒、改都在這個目錄下進行。

2吵取、LICENSE文件

CocoaPods強制要求所有的Pods依賴庫都必須有l(wèi)icense文件禽额,否則驗證不會通過。license的類型有很多種海渊,詳情可以參考網(wǎng)站tl;dr Legal绵疲。在創(chuàng)建github倉庫的時候,我已經(jīng)選擇了MIT類型的license臣疑。

3盔憨、主類文件

創(chuàng)建Pods依賴庫就是為了方便別人使用我們的成果,比如我想共享給大家的OBDataService類讯沈,是我想提供給廣大用戶使用的郁岩,這個類自然是必不可少的。我把這個類包含的兩個文件放到一個名稱為OBDataService的文件夾中缺狠,對應的目錄結(jié)構(gòu)如圖:

里面包含兩個文件:OBDataService.h和OBDataService.m


4问慎、demo工程

為了快速地教會別人使用我們的Pods依賴庫,通常需要提供一個demo工程挤茄。我創(chuàng)建的demo工程放到了一個名為OBDataServiceDemo的文件夾中如叼,該目錄包含的文件如下圖所示:


我用pod 引入了AFNetworking

5、README.md

使用github的人應該都熟悉這個文件穷劈,它是一個成功github倉庫必不可少的一部分笼恰,使用的是markdown標記語言,用于對倉庫的詳細說明歇终。

以上所說的5個是創(chuàng)建Pods依賴庫所需最基礎(chǔ)的文件社证,其中1、2评凝、3是必需的追葡,4、5是可選但強烈推薦創(chuàng)建的奕短。

添加完這些文件以后宜肉,我的github本地倉庫目錄就變成了下圖所示的樣子:


三、向本地git倉庫中添加創(chuàng)建Pods依賴庫所需文件

注意:以下描述的文件都要放在步驟二clone到本地的git倉庫的根目錄下面翎碑。

創(chuàng)建.podspec

首先在你的項目中使用如下命令創(chuàng)建名為 OBDataService 的 OBDataService.podspec(當然你也可以使用vim創(chuàng)建谬返,只是沒有默認文本而已)

$ pod spec create OBDataService

編輯.podspec

創(chuàng)建好的 .podspec 包含大量的注釋說明了每個參數(shù)的含義及用法。如果想詳細了解可以仔細閱讀杈女。這里只介紹幾個常用的。

1、后綴為.podspec文件

該文件為Pods依賴庫的描述文件达椰,每個Pods依賴庫必須有且僅有那么一個描述文件翰蠢。文件名稱要和我們想創(chuàng)建的依賴庫名稱保持一致,我的OBDataService依賴庫對應的文件名為OBDataService.podspec啰劲。

1.1 podspec文件內(nèi)容

OBDataService.podspec的保存內(nèi)容為:

Pod::Spec.new do |s|

s.name? ? ? ? = "OBDataService"

s.version? ? ? = "1.0.0"

s.summary? ? ? = "A tool for URL Request"

s.description? = <<-DESC

A tool for URL Request base on AFNetworking

DESC

s.homepage? ? = "https://github.com/obally/OBDataService.git"

s.license? ? ? = "MIT"

s.author? ? ? ? ? ? = { "obally" => "*********@qq.com" }

s.platform? ? = :ios, "7.0"

s.source? ? ? = { :git => "https://github.com/obally/OBDataService.git", :tag => "#{s.version}" }

s.source_files? =? "OBDataService/*.{h,m}"

s.dependency "AFNetworking", "~> 3.1.0"

end

其中需要說明的又幾個參數(shù):

s.name:名稱梁沧,pod search 搜索的關(guān)鍵詞

s.version:版本

s.summary:簡介,pod search 搜索的關(guān)鍵詞

s.homepage:主頁地址蝇裤,例如Github地址

s.license:許可證

s.author:作者

s.social_media_url:社交網(wǎng)址

s.platform:平臺

s.source:Git倉庫地址廷支,例如在Github地址后邊加上 .git 就是Git倉庫地址,常見寫法如下

s.source_files:需要包含的源文件栓辜,常見的寫法如下

s.resources:需要包含的圖片等資源文件

s.dependency:依賴庫恋拍,不能依賴未發(fā)布的庫

s.dependency:依賴庫,如有多個可以這樣寫

s.requires_arc:是否要求ARC

s.source_files 常見寫法


"Directory1/*"? 表示匹配所有文件

"Directory1/Directory2/*.{h,m}"? 表示匹配所有以.h和.m結(jié)尾的文件

"Directory1/**/*.h"? 表示匹配所有子目錄


s.source 常見寫法


s.source = { :git => "https://github.com/obally/OBDataService.git", :commit => "68defea" }

s.source = { :git => "https://github.com//obally/OBDataService.git", :tag => 1.0.0 }

s.source = { :git => "https://github.com//obally/OBDataService.git", :tag => s.version }


commit => "68defea" 表示將這個Pod版本與Git倉庫中某個commit綁定

tag => 1.0.0 表示將這個Pod版本與Git倉庫中某個版本的comit綁定

tag => s.version 表示將這個Pod版本與Git倉庫中相同版本的comit綁定

按照上述規(guī)則編輯完成就制作好了 .podspec(最好使用vim進行編輯)藕甩。

驗證.podspec

執(zhí)行以下命令施敢,為 Pod 添加版本號,并打上 tag:

set the new version to 1.0.0

set the new tag to 1.0.0

編輯好后最好先驗證 .podspec 是否有有效

$ pod spec lint

驗證過程中:

-> OBDataService

驗證成功后:OBDataService.podspec passed validation.

驗證失敗后:[!] The spec did not pass validation, due to 1 error.

驗證 .podspec 會先測試本地 .podspec 文件是否存在語法錯誤狭莱。測試成功再根據(jù) .podspec 文件找到遠端倉庫對應的版本克隆到本地并進行配置僵娃。最后測試文件是否能夠編譯成功。

.podspec驗證失敗錯誤排查

語法錯誤

如果是因為語法錯誤腋妙,驗證失敗后會給出錯誤的準確定位

[!] Invalid `OBDataService.podspec` file: no .floating literal anymore; put 0 before dot

s.version = “1.0.0”

^

OBDataService.podspec:5: syntax error, unexpected tFLOAT, expecting '('

s.version = “1.0.0”

^

標記“^”的地方即為有語法錯誤的地方。

上述錯誤是因為使用“文本編輯”進行編輯造成的匙睹。使用文本編輯有時候英文""引號會自動變成中文“”引號谆甜。

[!] Your Podfile has had smart quotes sanitised. To avoid issues in the future, you should not use TextEdit for editing it. If you are not using TextEdit, you should turn off smart quotes in your editor of choice.

使用 vim 將其改為英文的""引號即可垃僚。

依賴錯誤

但是,有些非語法錯誤是不會給出錯誤原因的规辱。這個時候可以使用“--verbose”來查看詳細的驗證過程來幫助定位錯誤。

pod spec lint OBDataService.podspec --verbose

如下錯誤通過 --verbose 就可以找到原因改淑。

-> OBDataService(1.0.0)

- ERROR | [iOS] Encountered an unknown error (The 'Pods' target has transitive dependencies that include static binaries: (/private/var/folders/jz/b_m3k7ln47524cm__h3__mk00000gn/T/CocoaPods/Lint/Pods/BPushSDK/LibBPush/libBPush.a)) during validation.

這個錯誤是因為依賴庫(s.dependency)包含了.a靜態(tài)庫造成的。雖然這并不影響Pod的使用浴讯,但是驗證是無法通過的朵夏。可以通過 --use-libraries 來讓驗證通過仰猖。

pod spec lint OBDataService.podspec --verbose --use-libraries

這種情況下使用 --use-libraries 雖然不會出現(xiàn)錯誤(error),但是有時候會帶來一些警告(waring)鸵赫,警告同樣是無法通過驗證的躏升。這時可以用 --allow-warnings 來允許警告。

pod spec lint OBDataService.podspec --verbose --use-libraries --allow-warnings

安裝錯誤

如果在其他項目 pod install 的過程中膨疏,出現(xiàn)包含“undefined method end_with?' for nil”字樣的報錯。進入“~/.cocoapods/repos”目錄者吁,刪除“master”双霍,并將 master-1 改為 master 即可。

如果出現(xiàn)如下錯誤染坯,而你的驗證可以通過丘逸,那么一般更新下版本號就可以解決。[!] Unable to find a specification for 'OBDataService'.`

再次驗證

如果錯誤發(fā)生在 .podspec 中仲锄。當修改完時湃鹊,不需要再次提交就可以直接驗證。如果錯誤發(fā)生在代碼中怀愧,則需要再次提交才能驗證余赢。

上傳到Git

將包含配置好的 .podspec 的項目提交 Git,并給這次提交打上 tag


$ git add -A && git commit -m "Release 1.0.0."

$ git tag '1.0.0'

$ git push --tags

$ git push origin master



發(fā)布到CocoaPods

你可以用 .podspec 文件來方便的管理內(nèi)部代碼扛拨,當然绑警,也可以發(fā)布自己的 Pod 供其他開發(fā)者使用。

CocoaPods 0.33中加入了 Trunk 服務(wù)计盒,使用 Trunk 服務(wù)可以方便的發(fā)布自己的Pod章郁。雖然一開始使用 GitHub Pull Requests 來整理所有公共 pods 效果很好志衍。但是,隨著 Pod 數(shù)量的增加培廓,這個工作對于 spec 維護人員 Keith Smiley 來說變得十分繁雜春叫。甚至一些沒有通過 $ pod lint 的 spec 也被提交上來,造成 repo 無法 build价匠。CocoaPods Trunk 服務(wù)的引入呛每,解決了很多類似的問題。每次使用 Trunk 服務(wù)發(fā)布 Pod 時都會通過 $ pod lint 驗證 .podspec 是否有效洋腮。要想使用 Trunk 服務(wù)手形,首先需要使用如下命令注冊自己的電腦。這很簡單伙狐,只要你指明你的郵箱地址(spec文件中的)和名稱即可曼玩。CocoaPods 會給你填寫的郵箱發(fā)送驗證郵件黍判,點擊郵件中的鏈接就可通過驗證。

pod trunk register *********@qq.com "obally"

然后就可以發(fā)布你的 Pod 了顷帖。

pod trunk push OBDataService.podspec

發(fā)布時會驗證 Pod 的有效性,如果你在手動驗證 Pod 時使用了 --use-libraries 或 --allow-warnings 等修飾符榴嗅,那么發(fā)布的時候也應該使用相同的字段修飾嗽测,否則出現(xiàn)相同的報錯。

pod trunk push OBDataService.podspec --use-libraries --allow-warnings

發(fā)布成功后唠粥,就可以使用 pod search 搜索到你的 Pod 了晤愧!

由于 pod search 是搜索的本地“~/.cocoapods”,所以在其他設(shè)備上可能無法搜到只厘。這時只需要執(zhí)行 pod install 更新下 pod 倉庫即可(不要加 --no-repo-update)舅巷。

版本升級

當需要更新 Pod 版本的時候,修改 .podspec 中的 s.version 為更高的版本號介评,并修改 s.source 中對應的 Git 版本爬舰。提交到Git,并打上對應tag坪仇。然后再次執(zhí)行pod trunk push HTQRCode.podspec.當修改了項目內(nèi)容垃你,重新提交,修改tag,一定要記得修改.podspec 中的s.version?

將新的 .podspec 發(fā)布到 CocoaPods皆刺。更新完成凌摄!

為了更新更加方便锨亏,版本控制更加清晰忙干,s.source 建議采用如下寫法:

s.source = { :git => "https://github.com/obally/OBDataService.git", :tag => s.version }

這樣寫將 Git 的版本與 CocoaPods 的版本進行了綁定浪藻。每次提交后再給本次提交打上 tag 就完成了更新爱葵。而且在 Git 中就可以清晰的看到哪次提交對應的哪個 CocoaPods 版本。如果與 commit 綁定萌丈,則要通過兩次提交才能完成更新浓瞪,第一次先提交修改代碼巧婶,第二次將上一次 commit id 更新到 s.source 然后再次提交。如果直接與固定 tag 綁定英岭,則每次還都要修改 s.source湿右。如果你的 Pod 是私有庫,那么 s.source 其實是無用的吭狡。因為在 Podfile 中已經(jīng)指明了地址和版本(如下)丈莺。這時 s.source 可以隨便填寫缔俄,但最好還是按照上述規(guī)則以便以后發(fā)布。

協(xié)同工作

當需要其他人來共同維護你的代碼,需要提供權(quán)限

pod trunk add-owner OBDataService *******@163.com


總結(jié)制作pod的步驟

1.從自己的github上創(chuàng)建項目,clone到本地

git clone https://github.com/obally/OBDataService.git

2.創(chuàng)建創(chuàng)建podspec文件和相對應的項目

Pod::Spec.new do |s|

s.name? ? ? ? = "OBDataService"

s.version? ? ? = "1.0.2"

s.summary? ? ? = "A tool for URL Request"

s.description? = <<-DESC

A tool for URL Request base on AFNetworking

DESC

s.homepage? ? = "https://github.com/obally/OBDataService.git"

s.license? ? ? = "MIT"

s.author? ? ? ? ? ? = { "obally" => "*********@qq.com" }

s.platform? ? = :ios, "7.0"

s.source? ? ? = { :git => "https://github.com/obally/OBDataService.git", :tag => "#{s.version}" }

s.source_files? =? "OBDataService/*.{h,m}"

s.dependency "AFNetworking", "~> 3.1.0"

end

3.推送的遠程倉庫,校驗podspec文件

git add -A && git commit -m "Release 1.0.0."

git tag '1.0.0'

git push --tags

git push origin master

pod spec lint

4.使用trunk發(fā)布到CocoaPods(第一次需要register)

pod trunk register *********@qq.com "obally"

pod trunk push OBDataService.podspec

5.如需更改項目或者.podspec 文件 修改2中s.version 重復3步驟還有4中的第二步驟即可蟹略,記住s.version 必須與3中的tag 保持一致

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末挖炬,一起剝皮案震驚了整個濱河市茅茂,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌空闲,老刑警劉巖碴倾,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異异雁,居然都是意外死亡僧须,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來暂论,“玉大人取胎,你說我怎么就攤上這事∥胖” “怎么了觉痛?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長映挂。 經(jīng)常有香客問我盗尸,道長泼各,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任逆巍,我火速辦了婚禮,結(jié)果婚禮上笙僚,老公的妹妹穿的比我還像新娘灵再。我一直安慰自己,他們只是感情好栋猖,可當我...
    茶點故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布蒲拉。 她就那樣靜靜地躺著痴腌,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上柿菩,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天枢舶,我揣著相機與錄音,去河邊找鬼躏尉。 笑死后众,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的教藻。 我是一名探鬼主播右锨,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼讥电!你這毒婦竟也來了轧抗?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤潮剪,失蹤者是張志新(化名)和其女友劉穎分唾,沒想到半個月后绽乔,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡看疗,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年两芳,在試婚紗的時候發(fā)現(xiàn)自己被綠了去枷。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,039評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡竖螃,死狀恐怖特咆,靈堂內(nèi)的尸體忽然破棺而出录粱,到底是詐尸還是另有隱情,我是刑警寧澤荒叶,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布输虱,位于F島的核電站,受9級特大地震影響愁茁,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜嘶居,卻給世界環(huán)境...
    茶點故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一邮屁、第九天 我趴在偏房一處隱蔽的房頂上張望菠齿。 院中可真熱鬧,春花似錦芋忿、人聲如沸疾棵。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽拟枚。三九已至梨州,卻和暖如春田轧,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背每窖。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工弦悉, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留稽莉,地道東北人。 一個月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓劈猪,卻偏偏與公主長得像,于是被迫代替她去往敵國和親充边。 傳聞我的和親對象是個殘疾皇子常侦,可洞房花燭夜當晚...
    茶點故事閱讀 42,786評論 2 345

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