在開發過程當中,常常會使用到第三框架,咱們經過一個pod install
命令,很方便的就將第三方框架加到咱們本身的項目中。
若是咱們也想將本身寫的組件或庫開源出去,讓別人也能夠經過pod install
命令安裝本身的框架該怎麼作呢?ios
下面,我就教你們一步一步的將本身的pods發佈到CocoaPods
中。若是你如今對CocoaPods
還不太瞭解,推薦你看一看這篇文章:用CocoaPods作iOS程序的依賴管理git
下面我會經過一個名爲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
對於不少第三方庫而言,在發佈的時候都會打上一個tag
,如版本0.0.1就會打上一個名爲0.0.1
的tag
,你也能夠選擇一個最新的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" }
之後咱們的庫有新版本時,咱們能夠修改相應的version
和source
。s.source_files
聲明瞭咱們庫的源代碼的位置,因此這個地方不能填錯了。
先看一下個人目錄結構:網絡
因此工程根目錄下的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代碼庫中。下面咱們先將其保存到本機中:
下面能夠看一下是否能夠經過搜索找到該庫:
一樣在須要依賴於HUPhotoBrowser
這個庫的項目,能夠將下列添加到項目的Podfile
文件中
pod 'HUPhotoBrowser', '~0.0.2'
保存文件,並用pod install
安裝HUPhotoBrowser
庫。
經過以上步驟建立Pod庫還只能供本身使用,下面會繼續講解如何將其提交到CocoaPods/Specs代碼庫中,讓其餘人也能夠經過pod install
安裝咱們的開源庫。
在cocoapods使用了trunk以後,CocoaPods
須要0.33以上版本,用 pod --version
查看版本,若是版本低,須要更新。
$ pod trunk register orta@cocoapods.org 'Orta Therox' --description='macbook air'
你們在註冊時須要替換成本身的郵箱和用戶名,一切順利的話就會受到一份郵件,點擊郵件中的連接後驗證一下:
pod trunk me
固然,若是你的pod是由多人維護的,你也能夠添加其餘維護者:
$ pod trunk add-owner ARAnalytics kyle@cocoapods.org
上面的工做完成以後,咱們就能夠開始 trunk push
了。
pod trunk push
命令會首先驗證你本地的podspec
文件(是否有錯誤),以後會上傳spec
文件到trunk
,最後會將你上傳的podspec
文件轉換爲須要的json
文件。在工程根目錄(包含有.podspec)下執行命令:
pod trunk push
若是在trunk push
過程當中報錯了,仔細查看一下錯誤信息。我當初就是使用了podspec
文件中描述的版本所沒有的API,以後修改podspec
文件中 s.platform = :ios, "7.0"
就能夠了。
若是你能看的上面的結果說明上傳成功了。咱們也能夠在本地的~/.cocoapods/repos/master/Specs
目錄下看到轉換以後的json
文件,
至此咱們整個製做本身的開源庫的過程就完成了,之後有新版本只須要修改工程根目錄下的podspec
文件就好了,而後從新執行pod trunk push
命令。
最後對這個過程作個總結:
開源庫發佈以後,須要打上tag
進入到項目根目錄下,建立podspec
文件
pod spec create PodName
編輯podspec
文件中的相關信息,有兩個比較重要的地方 s.source
和 s.source_files
,能夠驗證是否有誤:
pod spec lint PodName.podspec
註冊pod trunk
$ pod trunk register orta@cocoapods.org 'Orta Therox' --description='macbook air'
發佈到pod trunk
pod trunk push [NAME.podspec]
該命令在包含有.podspec
文件的目錄下執行
更新pod庫
pod setup
若是pod trunk push
成功後沒法pod search
到本身的庫,可執行該命令。
哈哈。好吧,我認可其實我是來打廣告的。例子中的HUPhotoBrowser是我開源的一個圖片瀏覽器的庫,使用起來很是簡單,一行代碼就以實現圖片瀏覽功能,支持本地和網絡圖片。但願你們能夠支持一下,歡迎你們star。若是有什麼問題的話能夠直接issue我。最後,但願能跟你們共同進步。項目地址:HUPhotoBrowser