1. 程式人生 > >【原】iOS:手把手教你釋出程式碼到CocoaPods(Trunk方式)

【原】iOS:手把手教你釋出程式碼到CocoaPods(Trunk方式)

Change Log:

2015.08.20 - 新增podspec檔案更新方法

2015.08.19 - 首次釋出

概述

關於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:

sudo gem install cocoapods

更新結束後,我們開始註冊trunk:

pod trunk register [email protected] 'weng1250'  --verbose

郵箱以及使用者名稱請對號入座。使用者名稱我使用的是Github上的使用者名稱。--verbose引數是為了便於輸出註冊過程中的除錯資訊。執行上面的語句後,你的郵箱將會受到一封帶有驗證連結的郵件,如果沒有請去垃圾箱找找,有可能被遮蔽了。點選郵件的連結就完成了trunk註冊流程。使用下面的命令可以向trunk伺服器查詢自己的註冊資訊:

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到本地原始碼的根目錄,執行:

git add -A
git commit -m "first commit for version 1.0.0"
git push origin master

當然,你也可以使用SourceTree等GUI形式的Git客戶端進行程式碼的推送操作。

2、確保你所push的程式碼已經打上"version tag",也就是給原始碼打上版本號標籤:

git tag '1.0.0'  
git push --tags  

只有確保了以上兩點,CocoaPods才能更準確地找到你的repo。

現在我們開始通過trunk上傳你的podspec檔案。先cd到podspec檔案所在目錄,執行:

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命令仍舊查不到:

這個速度讓我覺得不大對勁。於是我使用

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我的開源專案。

=======================================================