在開發(fā)過程中践宴,經(jīng)常會使用到第三框架哨查,我們通過一個pod install命令陨囊,很方便的就將第三方框架加到我們自己的項(xiàng)目中弦疮。
如果我們也想將自己寫的組件或庫開源出去,讓別人也可以通過pod install命令安裝自己的框架該怎么做呢蜘醋?下面胁塞,我就教大家一步一步的將自己的pods發(fā)布到CocoaPods 中。如果你現(xiàn)在對CocoaPods還不太了解压语,推薦你看一看這篇文章:用CocoaPods做iOS程序的依賴管理?
近期研究CocoPods的制作闲先,本文章為記錄其制作過程以及本人所遇到的問題,以及解決方法无蜂。本文章記錄本人制作的過程,如有可以修正之處蒙谓,歡迎留言指教斥季。
制作過程參考:
主要過程如下:
一、創(chuàng)建自己的git倉庫?
二、clone倉庫到本地
三酣倾、向本地git倉庫中添加創(chuàng)建Pods依賴庫所需文件
四舵揭、提交修改文件到github
五、上傳podspec文件到CocoaPods官方倉庫中
六躁锡、查看我們自己創(chuàng)建的Pods依賴庫
七午绳、刪除提交到cocoapods上的框架
篇章較長,本次介紹第三映之、四步拦焚,全部篇章如下:
三、向本地git倉庫中添加創(chuàng)建Pods依賴庫所需文件
打開終端杠输,cd 進(jìn)入步驟二clone的文件夾路徑下赎败,輸入指令pod spec create?‘’你的命名‘’,我的命名與文件夾名一致蠢甲。
?pod spec create demo.podspec
“TextEdit” 打開該文件顯示如下(截圖部分截圖):
該文件是ruby文件僵刮,里面的條目都很容易知道含義。
其中需要說明的幾個參數(shù):
s.name是我們庫的名稱鹦牛,s.version是庫原代碼版本號搞糕,s.summary是對我們庫的一個簡單的介紹,s.homepage聲明庫的主頁曼追,s.license是所采用的授權(quán)版本窍仰,s.author是庫的作者。s.platform是我們庫所支持的軟件平臺拉鹃,這在我們最后提交進(jìn)行編譯 時有用辈赋。s.source聲明原代碼的地址。步驟一已經(jīng)托管在github上,所以這里將地址copy過來就行了膏燕。
對于很多第三方庫而言钥屈,在發(fā)布的時候都會打上一個tag,如版本0.0.1就會打上一個名為0.0.1的tag
我在github上面打的tag步驟為:
填寫相關(guān)release信息
我這里還是使用的tag坝辫,所以我這里就是這樣的:
s.source = { :git => "https://github.com/......git", :tag => "#{s.version}" }
以后我們的庫有新版本時篷就,我們可以修改相應(yīng)的version和source。
s.source_files聲明了我們庫的源代碼的位置近忙,所以這個地方不能填錯了竭业。
例如目錄結(jié)構(gòu)(此處摘自其他朋友寫的簡書說明,如何發(fā)布自己的開源框架到CocoaPods?):
所以工程根目錄下的HUPhotoBrowse文件夾才是庫的原代碼目錄及舍。
s.source_files??="HUPhotoBrowser","HUPhotoBrowser/**/*.{h,m}"
目錄的層級關(guān)系一定要跟代碼庫的保持一致未辆。這里前一部分可以不用的,因?yàn)槲疫@里后一部分的HUPhotoBrowser/**與前面是一致的锯玛,這個指定的目錄下的文件都會進(jìn)行編譯咐柜。如果該目錄下還有一些資源文件(如圖片等)兼蜈,這些文件并不需要進(jìn)行編譯∽居眩可以使用s.resourcs聲明为狸。*.{h,m}是一個類似正則表達(dá)式的字符串,表示匹配所有以.h和.m為擴(kuò)展名的文件遗契。
s.framework聲明了所依賴的核心庫辐棒,我這里只用到了UIKit,所以是這樣的:
s.framework??="UIKit"
如果你的項(xiàng)目中依賴多個庫,可以使用
s.frameworks?="SomeFramework","AnotherFramework"
當(dāng)然牍蜂,我們開發(fā)的庫中也可能還依賴第三方庫漾根,例如JSONKit,那么捷兰,就可以做如下聲明:
s.dependency?"JSONKit",?"~>?1.4"
如果有多個需要填寫多個s.dependency立叛。
附上一份文件,可作為參考贡茅,也可自行請參考其他人發(fā)布的項(xiàng)目秘蛇,獲取下來參考他們?nèi)绾尉庉嫞ū热纾?a target="_blank" rel="nofollow">Lede-Inc/LDBusMediator?):
Pod::Spec.new do |s|
s.name = "POD名字"
s.version = "0.0.2"
s.summary = "說明."
s.description = <<-DESC
? ? ? ? ? ? ? ? ? ? ? ? ? 描述內(nèi)容
? ? ? ? ? ? ? ? ? ? ? ? ? DESC
s.license = {:type => 'MIT', :file => 'LICENSE'}
s.homepage = 'https://github.com/...git的主頁地址'
s.author = { "作者" => "作者" }
s.source = { :git => "https://github.com/步驟一創(chuàng)建的git地址", :tag => "#{s.version}" }
s.platform = :ios, '9.0'
s.ios.deployment_target = '9.0'
s.source_files = '項(xiàng)目名字/發(fā)布的文件夾名字/*.{h,m}'
# s.resource = "*.png" ? 備注:如果有引用圖片
# s.resource_bundles = { '你的項(xiàng)目名' => ['文件所在文件夾/*.{xib}'] } ? ? 備注:如果有引用xib ?, storyboard;以逗號分開
s.requires_arc = true
end
編輯完podspec文件后顶考,需要驗(yàn)證一下這個文件是否可用赁还,如果有任何WARNING或者ERROR都是不可以的,它就不能被添加到Spec Repo中驹沿,不過xcode的WARNING是可以存在的艘策,驗(yàn)證需要執(zhí)行命令:
XX為你制作的庫的命名
pod?spec?lint ?XX.podspec
如果有引用到庫framwork或C語言庫的話必須使用
pod spec lint XX.podspec --use-libraries?// 驗(yàn)證
pod spec lint XX.spec.podspec --verbose // 可以打印更多信息
pod spec lint XX.podspec --allow-warnings //忽略警告 ,如果你的項(xiàng)目存在警告
pod spec lint XX.podspec --use-libraries //引用到第三方?
pod spec?lint XX.podspec --verbose (打印錯誤信息)
當(dāng)看到 “你的PodName” passed validation.時渊季,說明驗(yàn)證通過了
驗(yàn)證podspec文件朋蔫,遇到幾個問題不能通過,文章最后把本人所遇到的問題以及解決方式說明一下却汉,希望能幫助到遇到同樣問題的朋友驯妄。
四、提交修改文件到github
在步驟三中增加很多新文件合砂,需要將它們提交到github倉庫中去青扔。我使用SourceTree ?commit的。
根據(jù)步驟三內(nèi)容翩伪,為pod添加版本號并打上tag微猖。然后執(zhí)行pod驗(yàn)證命令
pod?lib?lint
pod?lib?lint?--allow-warnings?//忽略警告 ,如果你的項(xiàng)目存在警告
如果一切正常缘屹,這條命令執(zhí)行完后會出現(xiàn)下面的輸出:
你的Pod名字 passed?validation.
到此凛剥,pod驗(yàn)證就結(jié)束了。
需要說明的是轻姿,在執(zhí)行pod驗(yàn)證命令的時候犁珠,打印出了任何warning或者error信息傅瞻,驗(yàn)證都會失敗盲憎!如果驗(yàn)證出現(xiàn)異常,打印的信息會很詳細(xì)胳挎,大家可以根據(jù)對應(yīng)提示做出修改饼疙。