為你的庫添加cocoapods支持

多倫大草原

為你的庫添加cocoapods支持

前言

本文意在教大家一步一步將自己的pods發(fā)布到CocoaPods中,將自己寫的組件或庫開源出去,讓別人輕輕pod install一下即可安裝。自己在上傳pods過程中也遇到過一些小坑,也在此做了說明。測(cè)試文件為一個(gè)很簡(jiǎn)單的DynamicLabel類,旨在上傳pods的過程,寫的不好的地方望磚下留情。

1、環(huán)境

cocoapods的安裝這里就不再說了,另外要說明的是你首先要把項(xiàng)目push到github,并release一個(gè)版本打上tag標(biāo)簽(目的在于讓cocoapods能夠根據(jù)你提供的tag來鎖定版本),如果沒有push可cd到你的項(xiàng)目根目錄如下:

//添加
git add -A
//commit
git commit -m"version description"
//push
git push origin master

//打上標(biāo)簽
git tag'0.0.3'
//推送
git push --tags

2、創(chuàng)建podspec文件

cd到你的項(xiàng)目根目錄如下:

//創(chuàng)建podspec文件
pod spec create DynamicLabel

之后會(huì)生成一個(gè).podspec文件,我這里用sublime打開,可以看到里面有很多待編輯項(xiàng),顧名思義,我這里編輯項(xiàng)如下:

s.name         = "DynamicLabel"
s.version      = "0.0.3"
s.summary      = "limited label Scroll display"
s.description  = <<-DESC
limited label Scroll display.
               DESC

s.homepage     = "https://github.com/henvyluk/DynamicLabel"
s.license      = "MIT"
s.author             = { "henvyluk" => "henvyluk@163.com" }
s.platform     = :ios, "7.0"
s.source       = { :git => "https://github.com/henvyluk/DynamicLabel.git", :tag => "0.0.3" }

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

s.exclude_files = "Classes/Exclude"

s.framework  = "UIKit"
s.requires_arc = true

值得注意的是s.source_files需要根據(jù)podspec文件的相對(duì)位置來寫,表示DynamicLabel 下的Classes文件夾下的所有文件下的所有.h/.m文件,s.framework是你的項(xiàng)目所用到的庫,我這里只用到了UIKit,如果你的項(xiàng)目中依賴多個(gè)庫,可以使用:

s.frameworks = "SomeFramework", "AnotherFramework"

當(dāng)我們開發(fā)的庫中也可能還依賴第三方庫,例如JSONKit,那么可以使用:

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

另外如果要添加xib文件,在pod中,xib不能當(dāng)成源文件(即s.source_files),雖然可能會(huì)通過檢測(cè),但是pod install之后會(huì)報(bào)錯(cuò),所以必須要將xib放入資源文件中(即s.resources),我就遇到過這種情況,只好更新了一個(gè)版本,

"Unable to run command 'StripNIB xxx.nib' - this target might include its own product".

再一個(gè)添加圖片資源的話,類似于xib,不需其它操作,我是將xib和圖片都放在s.Resource中形如:

s.resources = "xxxx/xxx/*.{png,xib}"

這里看一下我的文件目錄:


finder Screenshot

確認(rèn)完畢后可通過如下做文件校驗(yàn):

pod lib lint

此時(shí)如果有紅色錯(cuò)誤The spec did not pass validation, due to 1 error可通過在上述指令后加--verbose來看出錯(cuò)誤出在哪里,根據(jù)提示的信息在做修改,這里提醒s.source_files處容易出錯(cuò),注意文件的位置,以及s.framework不要出錯(cuò),否則會(huì)項(xiàng)目?jī)?nèi)的代碼不識(shí)別。

當(dāng)出現(xiàn)如下的提示時(shí)就代表驗(yàn)證通過了,可以進(jìn)行下一步了:

terminal Screenshot

3、注冊(cè)Trunk

//分別是你的郵箱和描述
pod trunk register henvyluk@163.com --description='henvy'

之后你的郵箱會(huì)收到確認(rèn)郵件,點(diǎn)擊郵件中的鏈接后驗(yàn)證后:

pod trunk me

如圖則表示注冊(cè)成功,可以進(jìn)行接下來的push了


terminal Screenshot

4、Trunk push

執(zhí)行:

pod trunk push

如果push過程中出錯(cuò),再檢查一下podspec文件,我之前因?yàn)榘姹酒ヅ鋯栴}出了錯(cuò)。如果看到如下圖即代表上傳成功,我的pod版本比較新,好像舊的版本跟這有點(diǎn)區(qū)別,會(huì)給dataURL和日至打印,這個(gè)新版本的比較人性化一點(diǎn),但為啥我覺得很幼稚有木有。


terminal Screenshot

5、驗(yàn)證

說是push成功了怎么說也要驗(yàn)證一下吧,來search一下:

pod search DynamicLabel

一看握草!!

terminal Screenshot

push出錯(cuò)了?其實(shí)不然,cocoapods官網(wǎng)已經(jīng)有了我們的代碼,不信可以搜搜看,See Podspec還可以看到我們的項(xiàng)目在Specs倉庫中的具體位置。


coocapods Screenshot

問題是我們的電腦~/.cocoapods/repos/master/Specs目錄并未更新,執(zhí)行:

//更新pod庫
pod setup

這一步具體做了什么東西呢?將官方的Specs倉庫文件目錄下載下來,然后和我們本地的Specs目錄進(jìn)行比對(duì),增加的增加,刪除的刪除。

第一次會(huì)有點(diǎn)慢,之后再setup的話基本上是秒更,最后setup completed,好了現(xiàn)在是最新的了,再來search一下,


terminal Screenshot

要命了,仍然搜不到,我當(dāng)初就是卡在了這一步,卡的莫名其妙的,因?yàn)閷?shí)在想不通還有什么會(huì)影響search,后來在stackoverflow上有提到search_index.json,這是搜索的緩存目錄,

//清除索引緩存
rm ~/Library/Caches/CocoaPods/search_index.json

之后pod search DynamicLabel,等待重建索引后:


terminal Screenshot

6、寫在最后

好了至此制作自己的整個(gè)開源庫的過程就完成了,如果以后要更新版本,同樣修改podspec文件重新push就好了,要注意的是如果你之前提交過pod,那么你需要去Claim your Pod認(rèn)領(lǐng):

Claim your Pod Screenshot

至此結(jié)束,也望大神不吝指教,郵件henvyluk@163.com,同時(shí)歡迎跳轉(zhuǎn)我的GitHub主頁討論,再會(huì)!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容