為你的庫(kù)添加cocoapods支持
前言
本文意在教大家一步一步將自己的pods發(fā)布到CocoaPods中境肾,將自己寫(xiě)的組件或庫(kù)開(kāi)源出去颇象,讓別人輕輕pod install一下即可安裝叹谁。自己在上傳pods過(guò)程中也遇到過(guò)一些小坑,也在此做了說(shuō)明。測(cè)試文件為一個(gè)很簡(jiǎn)單的DynamicLabel類菲盾,旨在上傳pods的過(guò)程,寫(xiě)的不好的地方望磚下留情。
1骆撇、環(huán)境
cocoapods的安裝這里就不再說(shuō)了,另外要說(shuō)明的是你首先要把項(xiàng)目push到github父叙,并release一個(gè)版本打上tag標(biāo)簽(目的在于讓cocoapods能夠根據(jù)你提供的tag來(lái)鎖定版本)神郊,如果沒(méi)有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打開(kāi)屿岂,可以看到里面有很多待編輯項(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ì)位置來(lái)寫(xiě)爷怀,表示DynamicLabel 下的Classes文件夾下的所有文件下的所有.h/.m文件,s.framework是你的項(xiàng)目所用到的庫(kù)带欢,我這里只用到了UIKit运授,如果你的項(xiàng)目中依賴多個(gè)庫(kù)烤惊,可以使用:
s.frameworks = "SomeFramework", "AnotherFramework"
當(dāng)我們開(kāi)發(fā)的庫(kù)中也可能還依賴第三方庫(kù),例如JSONKit吁朦,那么可以使用:
s.dependency "JSONKit", "~> 1.4"
另外如果要添加xib文件柒室,在pod中,xib不能當(dāng)成源文件(即s.source_files),雖然可能會(huì)通過(guò)檢測(cè),但是pod install之后會(huì)報(bào)錯(cuò)逗宜,所以必須要將xib放入資源文件中(即s.resources)雄右,我就遇到過(guò)這種情況,只好更新了一個(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}"
這里看一下我的文件目錄:
確認(rèn)完畢后可通過(guò)如下做文件校驗(yàn):
pod lib lint
此時(shí)如果有紅色錯(cuò)誤The spec did not pass validation, due to 1 error可通過(guò)在上述指令后加--verbose來(lái)看出錯(cuò)誤出在哪里熬甚,根據(jù)提示的信息在做修改逢渔,這里提醒s.source_files處容易出錯(cuò),注意文件的位置乡括,以及s.framework不要出錯(cuò)肃廓,否則會(huì)項(xiàng)目?jī)?nèi)的代碼不識(shí)別。
當(dāng)出現(xiàn)如下的提示時(shí)就代表驗(yàn)證通過(guò)了诲泌,可以進(jìn)行下一步了:
3盲赊、注冊(cè)Trunk
//分別是你的郵箱和描述
pod trunk register henvyluk@163.com --description='henvy'
之后你的郵箱會(huì)收到確認(rèn)郵件,點(diǎn)擊郵件中的鏈接后驗(yàn)證后:
pod trunk me
如圖則表示注冊(cè)成功敷扫,可以進(jìn)行接下來(lái)的push了
4哀蘑、Trunk push
執(zhí)行:
pod trunk push
如果push過(guò)程中出錯(cuò),再檢查一下podspec文件呻澜,我之前因?yàn)榘姹酒ヅ鋯?wèn)題出了錯(cuò)递礼。如果看到如下圖即代表上傳成功,我的pod版本比較新羹幸,好像舊的版本跟這有點(diǎn)區(qū)別脊髓,會(huì)給dataURL和日至打印,這個(gè)新版本的比較人性化一點(diǎn)栅受,但為啥我覺(jué)得很幼稚有木有将硝。
5、驗(yàn)證
說(shuō)是push成功了怎么說(shuō)也要驗(yàn)證一下吧屏镊,來(lái)search一下:
pod search DynamicLabel
一看握草R捞邸!
push出錯(cuò)了而芥?其實(shí)不然律罢,cocoapods官網(wǎng)已經(jīng)有了我們的代碼,不信可以搜搜看,See Podspec還可以看到我們的項(xiàng)目在Specs倉(cāng)庫(kù)中的具體位置误辑。
問(wèn)題是我們的電腦~/.cocoapods/repos/master/Specs目錄并未更新沧踏,執(zhí)行:
//更新pod庫(kù)
pod setup
這一步具體做了什么東西呢?將官方的Specs倉(cāng)庫(kù)文件目錄下載下來(lái)巾钉,然后和我們本地的Specs目錄進(jìn)行比對(duì)翘狱,增加的增加,刪除的刪除砰苍。
第一次會(huì)有點(diǎn)慢潦匈,之后再setup的話基本上是秒更,最后setup completed,好了現(xiàn)在是最新的了赚导,再來(lái)search一下茬缩,
要命了,仍然搜不到辟癌,我當(dāng)初就是卡在了這一步寒屯,卡的莫名其妙的荐捻,因?yàn)閷?shí)在想不通還有什么會(huì)影響search黍少,后來(lái)在stackoverflow上有提到search_index.json,這是搜索的緩存目錄处面,
//清除索引緩存
rm ~/Library/Caches/CocoaPods/search_index.json
之后pod search DynamicLabel厂置,等待重建索引后:
6、寫(xiě)在最后
好了至此制作自己的整個(gè)開(kāi)源庫(kù)的過(guò)程就完成了魂角,如果以后要更新版本昵济,同樣修改podspec文件重新push就好了,要注意的是如果你之前提交過(guò)pod野揪,那么你需要去Claim your Pod認(rèn)領(lǐng):
至此結(jié)束访忿,也望大神不吝指教,郵件henvyluk@163.com,同時(shí)歡迎跳轉(zhuǎn)我的GitHub主頁(yè)討論斯稳,再會(huì)海铆!