如何發佈自己的開源框架到CocoaPods

在開發過程中,經常會使用到第三框架,我們通過一個pod install命令,很方便的就將第三方框架加到我們自己的項目中。 如果我們也想將自己寫的組件或庫開源出去,讓別人也可以通過pod install命令安裝自己的框架該怎麼做呢?下面,我就教大家一步一步的將自己的pods發佈到CocoaPods 中。如果你現在對CocoaPods還不太瞭解,推薦你看一看這篇文章:用CocoaPods做iOS程序的依賴管理 創建自己項目的Podspec描述文件 下面我會通過一個名爲HUPhotoBrowser的項目來講解一下整個過程。項目發佈到github後,需要打上tag。之後我們在工程根目錄中初始化一個Podspec文件: 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" => "[email protected]" }   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過來就行了。 對於很多第三方庫而言,在發佈的時候都會打上一個tag,如版本0.0.1就會打上一個名爲0.0.1的tag,你也可以選擇一個最新的commit來作爲該庫0.0.1版的代碼, 那麼最終source就是這樣了: {: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文件後就可以將該podspec文件保存到本機的~/.cocoapods/repos/master/Specs目錄中僅供自己使用,也可以將其提交到CocoaPods/Specs代碼庫中。下面我們先將其保存到本機中: 下面可以看一下是否可以通過搜索找到該庫: 同樣在需要依賴於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 [email protected] 'Orta Therox' --description='macbook air' 大家在註冊時需要替換成自己的郵箱和用戶名,一切順利的話就會受到一份郵件,點擊郵件中的鏈接後驗證一下: pod trunk me 當然,如果你的pod是由多人維護的,你也可以添加其他維護者: $ pod trunk add-owner ARAnalytics [email protected] 上面的工作完成之後,我們就可以開始 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"就可以了。 如果你能看的上面的結果說明上傳成功了。我們也可以在本地的~/.cocoapods/repos/master/Specs目錄下看到轉換之後的json文件, 至此我們整個製作自己的開源庫的過程就完成了,以後有新版本只需要修改工程根目錄下的podspec文件就行了,然後重新執行pod trunk push命令。 最後 最後對這個過程做個總結: 1.開源庫發佈之後,需要打上tag 2.進入到項目根目錄下,創建podspec文件 pod spec create PodName 3.編輯podspec文件中的相關信息,有兩個比較重要的地方s.source和s.source_files,可以驗證是否有誤: pod spec lint PodName.podspec 4.註冊pod trunk $ pod trunk register [email protected] 'Orta Therox' --description='macbook air' 5.發佈到pod trunk pod trunk push [NAME.podspec] 該命令在包含有.podspec文件的目錄下執行 6.更新pod庫 pod setup 如果pod trunk push成功後無法pod search到自己的庫,可執行該命令。 最後的最後 哈哈。好吧,我承認其實我是來打廣告的。例子中的HUPhotoBrowser是我開源的一個圖片瀏覽器的庫,使用起來非常簡單,一行代碼就以實現圖片瀏覽功能,支持本地和網絡圖片。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章