天天看點

【原】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)

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

下面請跟着我的步伐一步一步往下走,我會告訴你其中的一些坑以及如何應對這些坑:

一、注冊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
      

輸出如下資訊就表示你注冊成功,可以進行下面的流程:

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

二、配置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指令仍舊查不到:

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

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

pod setup
      

指令更新本地pod依賴庫後再執行pod search指令(該指令耗時半小時左右,與網速有關),結果如下:

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

這證明,代碼其實早已經稽核通過了!

是以,在這一環節中你需要這麼做:

在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我的開源項目。