概述
關于CocoaPods的介紹不在本文的主題范圍內,如果你是iOS開發者卻不知道CocoaPods,那可能要面壁30秒了。直奔主題,這篇文章主要介紹如果把你的代碼發布到CocoaPods代碼庫中,讓別人可以使用“pod search yourOpenProject”命令查找到你的代碼。
在2014年5月20日以前,發布代碼到CocoaPods可以使用這篇文章。但時過境遷,出于安全性等方面的考慮,CocoaPods團隊放棄了該方式,使用本文要說的trunk方式,用流程圖表示如下:(圖片來自CocoaPod官方blog)
下面請跟著我的步伐一步一步往下走,我會告訴你其中的一些坑以及如何應對這些坑:
一、注冊trunk
在注冊trunk之前,我們需要確認當前的CocoaPods版本是否足夠新。trunk需要pod在0.33及以上版本,如果你不滿足要求,打開Terminal使用ruby的gem命令更新pod:
1 | sudo gem install cocoapods |
更新結束后,我們開始注冊trunk:
1 | pod trunk? register ?zilin_weng @163 .com? 'weng1250' ??--verbose |
郵箱以及用戶名請對號入座。用戶名我使用的是Github上的用戶名。--verbose參數是為了便于輸出注冊過程中的調試信息。執行上面的語句后,你的郵箱將會受到一封帶有驗證鏈接的郵件,如果沒有請去垃圾箱找找,有可能被屏蔽了。點擊郵件的鏈接就完成了trunk注冊流程。使用下面的命令可以向trunk服務器查詢自己的注冊信息:
1 | pod trunk me |
輸出如下信息就表示你注冊成功,可以進行下面的流程:
二、配置PodSpec
在這一部分中我們需要做兩件事:1、為你的代碼添加podspec描述文件;2、將podspec文件通過trunk推送給CocoaPods服務器
2.1?添加podspec描述文件
這一步與更換trunk方式前的操作完全一樣。什么是podspec描述文件呢?簡單地講就是讓CocoaPods搜索引擎知道你的代碼的作者、版本號、源代碼地址、依賴庫等信息的文件。任何支持CocoaPods的開源代碼都必須有podspec文件。CocoaPods在github中用一個repo來管理所有支持CocoaPods的開源代碼:https://github.com/CocoaPods/Specs。
那如何編寫podspec文件呢?官方提供了一個模板并附有非常詳細的注釋說明。關于podspec文件的編寫本文不打算詳細講。強烈建議你看這篇文章的第三節部分,第四第五節不必看因為已經過時了。
建議直接拿一些成熟的開源庫的podspec改就行,生成的模板里有很多冗余的屬性。
這里要注意一點,有時你寫的podspec文件在后面push的時候會提示"The `source_files` pattern did not match any file."錯誤,但是能用pod lib lint命令做本地校驗時又是OK的。為什么呢?上述錯誤的意思是pod在網絡上根據你指定的路徑找不到相關文件。這時候你要核對網上git倉庫的路徑與source_files(其他_files字段同理)要對應。*_files字段指的是網絡git上的路徑
?
2.2 通過trunk推送podspec文件
現在我們已經有了自己的podspec文件,但是在推送podspec文件之前你需要確認以下幾點:
1、確保你的源碼已經push到Github上。如果還沒push源代碼,可以用Terminal cd到本地源代碼的根目錄,執行:
1 2 3 | git add -A git commit -m? "first commit for version 1.0.0" git push origin master |
當然,你也可以使用SourceTree等GUI形式的Git客戶端進行代碼的推送操作。
2、確保你所push的代碼已經打上"version tag",也就是給源代碼打上版本號標簽:
1 2 | git tag? '1.0.0' ?git push --tags? |
只有確保了以上兩點,CocoaPods才能更準確地找到你的repo。
現在我們開始通過trunk上傳你的podspec文件。先cd到podspec文件所在目錄,執行:
1 | pod trunk push WZLBadge.podspec |
文件名自行對號入座。上面的代碼做了三件事:(可以對著文章開頭的流程圖看)
1、驗證你的podspec文件是否合法。在trunk方式之前我們一般用“pod lib lint”命令進行驗證。
2、上傳podspec文件到trunk服務器(其實最終也會自動添加到https://github.com/CocoaPods/Specs中,只是使用trunk方式省去了以前先fork在pull request的繁瑣操作)
3、將你上傳的podspec文件轉成json格式文件
執行上面的push操作,就相當于你把你的源代碼提交給CocoaPods團隊審核了,一般需要一到兩個工作日可以審核結束。這種心情有點像提交App給Apple審核,哈哈。
*更正:現在CocoaPods審核只需要幾秒鐘或者幾分鐘就可以完成了。
?
三、更新本地pod依賴
既然代碼提交已經結束,那為什么還要這一步呢?因為你不知道什么時候會審核通過。你可能會說,使用"pod search"命令查一查不就知道了嗎?但遺憾的是如果這一步不執行,那在你的電腦上永遠不知道代碼何時審核通過。舉個例子,我在提交了我的一份開源代碼WZLBadge(截至發稿前已有300+的Star)到pod后的第三天使用search命令仍舊查不到:
這個速度讓我覺得不大對勁。于是我使用
1 | pod setup |
命令更新本地pod依賴庫后再執行pod search命令(該命令耗時半小時左右,與網速有關),結果如下:
這證明,代碼其實早已經審核通過了!
?
因此,在這一環節中你需要這么做:
在trunk push后,先用"pod search"查找一下你的代碼,有結果的話就歡天喜地;沒有的話執行"pod setup"進行本地依賴庫更新,再search。
?強勢插入:
如果不出意外,大多數同學在執行上述命令后會卡在“Setting up CocoaPods master repo”這一句中。我的經驗是一個字:等!不要關閉Terminal,大概半小時到一小時左右就會完成,提示“Setup completed”。(第一次會比較慢,第一次以后只需要幾秒鐘即可完成)為什么會卡這么久呢?
pod setup其實在做這么一件事:Cocoapods在將https://github.com/CocoaPods/Specs的信息下載到你電腦的~/.cocoapods
目錄下并進行文件比對,總數據大小大約在100MB左右,再加上服務器在國外,因此速度會比較慢。在執行過程中你也可以新開一個Terminal窗口,cd到~/.cocoapods目錄,用du -sh *
來查看下載進度。
當然,如果你有強迫癥等不了這么久,那也是有解決方法的。你可以參考唐巧的這篇文章的“使用CocoaPods的鏡像索引”部分,將CocoaPods的鏡像地址替換成國內的oschina等服務器地址,速度或許會有提高。但我個人認為沒必要,我在沒梯子的環境下耗時半小時左右,多點耐心。(第一次會比較慢,第一次以后只需要幾秒鐘即可完成)
?
?
**podspec文件更新方法
有時你可能會遇到這種情況:執行pod trunk push操作后發現podspec文件的某個地方寫錯了,想更新一下。對于這種情況,我們可能會先嘗試著在把podspec文件push一次。但是如果你的代碼版本號沒變(podspec里的version自然也沒變)就會提示push失敗,即使你更改了podspec的其他地方,pod也會認為這兩個文件是同一個。 我目前為止找不到trunk的相關update接口,所以只能順水推舟,更新源代碼版本號(如:1.1.1->1.1.2),重新push version tag,然后再執行pod trunk push操作。
?
寫在最后
trunk的方式的確比以前的fork->pull方式省事很多,但目前網上關于trunk提交CocoaPods代碼的資料不多,所以才有了這篇文章。希望這篇文章能各位有一些幫助。
本文轉自編程小翁博客園博客,原文鏈接:http://www.cnblogs.com/wengzilin/p/4742530.html,如需轉載請自行聯系原作者