iOS:手把手教你發佈代碼到CocoaPods(Trunk方式)

概述

關於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改就行,生成的模板裏有很多冗餘的屬性。

 

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審覈,哈哈。

 

三、更新本地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代碼的資料不多,所以纔有了這篇文章。希望這篇文章能各位有一些幫助。


轉載請註明 編程小翁@博客園,郵件[email protected],歡迎各位與我在C/C++/Objective-C/機器視覺等領域展開交流!

歡迎跳轉我的GitHub主頁,關注我的開源代碼,Fellow me,也歡迎你Star/Fork/Watch我的開源項目。

原文鏈接:http://www.cnblogs.com/wengzilin/p/4742530.html
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章