如何發佈本身的開源框架到CocoaPods

在開發過程當中,常常會使用到第三框架,咱們經過一個pod install命令,很方便的就將第三方框架加到咱們本身的項目中。
若是咱們也想將本身寫的組件或庫開源出去,讓別人也能夠經過pod install命令安裝本身的框架該怎麼作呢?ios

下面,我就教你們一步一步的將本身的pods發佈到CocoaPods 中。若是你如今對CocoaPods還不太瞭解,推薦你看一看這篇文章:用CocoaPods作iOS程序的依賴管理git

建立本身項目的Podspec描述文件

下面我會經過一個名爲HUPhotoBrowser的項目來說解一下整個過程。
項目發佈到github後,須要打上tag。以後咱們在工程根目錄中初始化一個Podspec文件:github

pod spec create HUPhotoBrowser

該命令將在本目錄產生一個名爲HUPhotoBrowser.podspec文件。用編輯器打開該文件,裏面已經有很是豐富的說明文檔。下面介紹如何聲明第三方庫的代碼目錄和資源目錄,還有該第三方庫所依賴ios核心框架和第三方庫。這是個人podspec文件:正則表達式

Pod::Spec.new do |s|
  s.name         = "HUPhotoBrowser"
  s.version      = "0.0.2"
  s.summary      = "photo browser for ios."
  s.homepage     = "https://github.com/hujewelz/HUPhotoBrowser"
  s.license      = "MIT"
  s.author             = { "Jewelz Hu" => "hujewelz@163.com" }
  s.platform     = :ios, "7.0"
  s.source       = { :git => "https://github.com/hujewelz/HUPhotoBrowser.git", :tag => "0.0.2" }
  s.source_files  = "HUPhotoBrowser", "HUPhotoBrowser/**/*.{h,m}"
   s.framework  = "UIKit"
  # s.frameworks = "SomeFramework", "AnotherFramework"

s.name是咱們庫的名稱,s.version是庫原代碼版本號,s.summary是對咱們庫的一個簡單的介紹,s.homepage聲明庫的主頁,s.license是所採用的受權版本,s.author是庫的做者。 s.platform是咱們庫所支持的軟件平臺,這在咱們最後提交進行編譯 時有用。s.source聲明原代碼的地址。我這裏是託管在github上,因此這裏將地址copy過來就好了。json

屏幕快照 2016-02-26 下午3.02.58.png
對於不少第三方庫而言,在發佈的時候都會打上一個tag,如版本0.0.1就會打上一個名爲0.0.1tag,你也能夠選擇一個最新的commit來做爲該庫0.0.1版的代碼, 那麼最終source就是這樣了:xcode

{:git => "https://github.com/hujewelz/HUPhotoBrowser.git", :commit => '65584b0e0b08e01f83e66d487180c164b5182409'}

我這裏仍是使用的tag,因此我這裏就是這樣的:瀏覽器

{ :git => "https://github.com/hujewelz/HUPhotoBrowser.git", :tag => "0.0.2" }

之後咱們的庫有新版本時,咱們能夠修改相應的versionsource
s.source_files聲明瞭咱們庫的源代碼的位置,因此這個地方不能填錯了。
先看一下個人目錄結構:網絡

屏幕快照 2016-02-26 下午3.15.07.png
因此工程根目錄下的HUPhotoBrowse文件夾纔是庫的原代碼目錄。框架

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

目錄的層級關係必定要跟代碼庫的保持一致。這裏前一部分能夠不用的,由於我這裏後一部分的HUPhotoBrowser/**與前面是一致的,這個指定的目錄下的文件都會進行編譯。若是該目錄下還有一些資源文件(如圖片等),這些文件並不須要進行編譯。可使用s.resourcs聲明。 *.{h,m}是一個相似正則表達式的字符串,表示匹配全部以.h.m爲擴展名的文件。
s.framework聲明瞭所依賴的核心庫,我這裏只用到了UIKit,因此是這樣的:編輯器

s.framework  = "UIKit"

若是你的項目中依賴多個庫,可使用

s.frameworks = "SomeFramework", "AnotherFramework"

固然,咱們開發的庫中也可能還依賴第三方庫,例如JSONKit,那麼,就能夠作以下聲明:

s.dependency "JSONKit", "~> 1.4"

若是有多個須要填寫多個s.dependency
編輯完podspec文件後,須要驗證一下這個文件是否可用,若是有任何WARNING或者ERROR都是不能夠的,它就不能被添加到Spec Repo中,不過xcode的WARNING是能夠存在的,驗證須要執行命令:

pod spec lint PodName.podspec

當看到HUPhotoBrowser passed validation.時,說明驗證經過了。在檢測你的podspec時候,若是直接用pod spec lint xxx.podspec的話,出現錯誤它只會直接一句紅色的話The spec did not pass validation, due to 1 error.告訴你的有多少個error和warning,而不會具體的指出你的錯誤出在哪裏,這時候你能夠在這句指令後面加上參數--verbose 這樣就會告訴你具體的錯誤信息。這樣根據它提示你的錯誤信息去解決就能夠了。

編輯好podspec文件後就能夠將該podspec文件保存到本機的~/.cocoapods/repos/master/Specs目錄中僅供本身使用,也能夠將其提交到CocoaPods/Specs代碼庫中。下面咱們先將其保存到本機中:

屏幕快照 2016-02-26 下午3.44.31.png
下面能夠看一下是否能夠經過搜索找到該庫:

屏幕快照 2016-02-26 下午3.48.06.png
一樣在須要依賴於HUPhotoBrowser這個庫的項目,能夠將下列添加到項目的Podfile文件中

pod 'HUPhotoBrowser', '~0.0.2'

保存文件,並用pod install安裝HUPhotoBrowser庫。

經過以上步驟建立Pod庫還只能供本身使用,下面會繼續講解如何將其提交到CocoaPods/Specs代碼庫中,讓其餘人也能夠經過pod install安裝咱們的開源庫。

CocoaPods Trunk發佈本身的Pods

在cocoapods使用了trunk以後,CocoaPods 須要0.33以上版本,用 pod --version查看版本,若是版本低,須要更新。

註冊Trunk

$ pod trunk register orta@cocoapods.org 'Orta Therox' --description='macbook air'

你們在註冊時須要替換成本身的郵箱和用戶名,一切順利的話就會受到一份郵件,點擊郵件中的連接後驗證一下:

pod trunk me

屏幕快照 2016-02-26 下午4.05.42.png
固然,若是你的pod是由多人維護的,你也能夠添加其餘維護者:

$ pod trunk add-owner ARAnalytics kyle@cocoapods.org

上面的工做完成以後,咱們就能夠開始 trunk push了。

Trunk push

pod trunk push 命令會首先驗證你本地的podspec文件(是否有錯誤),以後會上傳spec文件到trunk,最後會將你上傳的podspec文件轉換爲須要的json文件。在工程根目錄(包含有.podspec)下執行命令:

pod trunk push

若是在trunk push過程當中報錯了,仔細查看一下錯誤信息。我當初就是使用了podspec文件中描述的版本所沒有的API,以後修改podspec文件中 s.platform = :ios, "7.0"就能夠了。

屏幕快照 2016-02-26 下午4.12.59.png
若是你能看的上面的結果說明上傳成功了。咱們也能夠在本地的~/.cocoapods/repos/master/Specs目錄下看到轉換以後的json文件,

屏幕快照 2016-02-26 下午4.16.56.png
至此咱們整個製做本身的開源庫的過程就完成了,之後有新版本只須要修改工程根目錄下的podspec文件就好了,而後從新執行pod trunk push命令。

最後

最後對這個過程作個總結:

  1. 開源庫發佈以後,須要打上tag

  2. 進入到項目根目錄下,建立podspec文件

pod spec create PodName
  1. 編輯podspec文件中的相關信息,有兩個比較重要的地方 s.source s.source_files ,能夠驗證是否有誤:

pod spec lint PodName.podspec
  1. 註冊pod trunk

$ pod trunk register orta@cocoapods.org 'Orta Therox' --description='macbook air'
  1. 發佈到pod trunk

pod trunk push [NAME.podspec]

該命令在包含有.podspec文件的目錄下執行

  1. 更新pod庫

pod setup

若是pod trunk push成功後沒法pod search到本身的庫,可執行該命令。

最後的最後

哈哈。好吧,我認可其實我是來打廣告的。例子中的HUPhotoBrowser是我開源的一個圖片瀏覽器的庫,使用起來很是簡單,一行代碼就以實現圖片瀏覽功能,支持本地和網絡圖片。但願你們能夠支持一下,歡迎你們star。若是有什麼問題的話能夠直接issue我。最後,但願能跟你們共同進步。項目地址:HUPhotoBrowser

相關文章
相關標籤/搜索