如何為自己的庫(kù)添加cocoapods支持

如何為自己的庫(kù)添加cocoapods支持

國(guó)際慣例,寫(xiě)在正文前面感慨下人生暢談下理想,暴躁老猿可直接略過(guò)第一段??????

說(shuō)來(lái)慚愧,做iOS開(kāi)發(fā)兩年多了,cocoapods幾乎是每個(gè)項(xiàng)目都會(huì)用的到第三方庫(kù)管理工具,但是之前卻只是用cocoapods給自己的項(xiàng)目添加第三方庫(kù)而沒(méi)有想過(guò)如何為自己的庫(kù)添加cocoapods支持,最近公司項(xiàng)目需求要給第三方對(duì)接的團(tuán)隊(duì)寫(xiě)一個(gè)SDK,ok沒(méi)問(wèn)題,但是SDK完成后如何給對(duì)方呢?開(kāi)始是直接打包發(fā)過(guò)去,這樣目的達(dá)到了,但是,完美如我這樣的猿總感覺(jué)缺點(diǎn)什么,沉思三秒后我就找到了問(wèn)題所在,那就是,逼格不夠高啊!直接發(fā)文件過(guò)去完全不符合本猿做事情逼格至上的信條??!于是我就想到了cocoapods,也就引申出了今天這篇文章,下面就讓本猿給爾等說(shuō)道說(shuō)道這其中的歡(en)樂(lè)(yuan)趣(qing)事(chou)。

FaRZrD.jpg

無(wú)論你是不是略過(guò)了第一段,本猿都要再啰嗦一句,做開(kāi)發(fā),看文檔很重要看文檔很重要看文檔很重要?。?!

1.在github為自己的庫(kù)創(chuàng)建一個(gè)倉(cāng)庫(kù)

FaRnVH.png

2.將剛創(chuàng)建的這個(gè)庫(kù)拉取到本地

  git clone https://github.com/xxxxx/-...-.git

拉下來(lái)后文件夾大概是這樣子的:

FaoOnx.png

3.然后將自己的要處理的庫(kù)文件放入這個(gè)文件夾

Classes文件夾就是你要添加的庫(kù),然后推送至github遠(yuǎn)程倉(cāng)庫(kù)。

  git add .
  git add commit -m "為了被遺忘者!"
  git push

注意:一般我們引用第三方庫(kù)都是與版本號(hào)的就像這樣:

  pod 'Masonry', '~> 1.1.0'

后邊的1.1.0就是版本號(hào),所以我們的庫(kù)也是要有版本號(hào)的,不然那豈不是看起來(lái)很山寨?這還怎么提高逼格呢???

  git tag 0.0.1
  git push tags

至此,我們已經(jīng)將自己的庫(kù)傳至github,加入cocoapods的前置工作也完成了。

4.創(chuàng)建spec文件 這是加入cocoapods的配置文件

注意:本猿就是在這個(gè)文件上吃了大虧,文件中的許多配置信息填充都有特定的語(yǔ)法,詳情參見(jiàn)官方文檔cocoapods

  pod spec create TestLibrary

TestLibrary就是你的庫(kù)的名字,文件內(nèi)容大概是下圖這個(gè)樣子的:

里邊有很多配置內(nèi)容,并且許多前邊加了#進(jìn)行了注釋,而我們其實(shí)并不需要這么多配置信息,只需留下關(guān)鍵部分即可

Pod::Spec.new do |s|

  s.name         = "TestLibrary"
  s.version      = "0.0.1"
  s.summary      = "簡(jiǎn)單描述"
  s.description  = <<-DESC
                   比簡(jiǎn)單描述長(zhǎng)一點(diǎn)的描述
                   DESC

  s.homepage     = "https://github.com/你的github/temp.git"
  s.license      = "MIT"
  s.author       = { "lazyloading" => "lazyloading@163.com" }
  s.platform     = :ios, "8.0"
  s.source       = { :git => "https://github.com/你的github/temp.git", :tag => "#{s.version}" }           
  s.source_files = "Classes", "Classes/**/*.{h,m}"
  s.vendored_frameworks = "**/MySDK.framework"

大概需要的配置內(nèi)容就是上述這些了,需要其他配置的參見(jiàn)官方文檔cocoapods,下邊解釋下這些配置信息都代表什么:

  • s.name : 你所創(chuàng)建的庫(kù)的名字,比如Masonry,AFNNetworking等等
  • s.version : 庫(kù)的版本號(hào)
  • s.summary : 簡(jiǎn)短的描述信息
  • s.description : 比簡(jiǎn)短描述長(zhǎng)一點(diǎn)的描述信息
  • s.homepage : 你的項(xiàng)目主頁(yè),一般寫(xiě)github地址
  • s.license : 遵守的協(xié)議
  • s.author : 你的cocoapods賬戶 ,后邊說(shuō)明怎么創(chuàng)建
  • s.platform : 支持的平臺(tái)與系統(tǒng)版本
  • s.source : 代碼的路徑,即在你的github中的路徑,后邊的tag就是第三步中我們所添加的tag,不寫(xiě)具體的版本默認(rèn)為最新版
  • s.source_files : 要引入的文件
  • s.vendored_frameworks : 靜態(tài)包的路徑

注意:特別需要注意的是s.source_filess.vendored_frameworks的寫(xiě)法,本猿就在這里耗費(fèi)了大把的光陰,啊,我的青春啊。

s.source_files的寫(xiě)法默認(rèn)大概是這樣的s.source_files = "Classes/**/*.{h,m}"

其實(shí)就是你的庫(kù)項(xiàng)目中真正要讓第三方引入的文件的路徑,本猿就因?yàn)槁窂藉e(cuò)誤失敗了一次又一次,其中:

**是匹配所有的目錄

*是匹配所有的文件

.{h,m}是匹配后綴為.h或.m的文件

并且podsepc文件必須要在你的庫(kù)項(xiàng)目的根目錄下,而s.vendored_frameworks后邊跟你的frameworks的路徑(如果你的庫(kù)是以frameworks形式導(dǎo)入的話,這個(gè)字段必須加,否則不需要),本猿一開(kāi)始是是將所有代碼都開(kāi)放出去,所以沒(méi)有寫(xiě)這個(gè)配置信息,后來(lái)因?yàn)槟承┰虼蛩銓⑽募虬蒮rameworks發(fā)布出去,就添加了這個(gè)字段。

所有這些信息配置完成后我們來(lái)驗(yàn)證下配置信息的正確性:

pod spec lint TestLibrary.podspec --allow-warnings

或者不進(jìn)行驗(yàn)證直接發(fā)布到cocoapods:

pod trunk push TestLibrary.podspec --allow-warnings

后邊的--allow-warnings是可選參數(shù):

--allow-warnings 打印警告信息??
--verbose 打印錯(cuò)誤信息?

如果你進(jìn)行了驗(yàn)證并且通過(guò),我們要將修改后的項(xiàng)目信息提交到github:

git add .
git commit -m "修改spec"
git push

如果沒(méi)有進(jìn)行驗(yàn)證選擇直接發(fā)布到cocoapods你會(huì)發(fā)現(xiàn)失敗了?為什么呢?因?yàn)槲覀冞€沒(méi)與注冊(cè)cocoapods啊,是不是覺(jué)得我巴拉巴拉說(shuō)了這么一大堆這么重要的信息為什么前文沒(méi)說(shuō)?因?yàn)楸驹诚矚g在遇到錯(cuò)誤后去去尋找問(wèn)題原因,這樣記憶才更深刻,好了下邊說(shuō)如何注冊(cè)cocoapods:

pod trunk register lazyloading@163.com lazyloading --description="為了希爾瓦娜斯!" --verbose

其中郵箱必須真實(shí)有效,因?yàn)闀?huì)給你發(fā)驗(yàn)證郵件,lazyloading就是你的昵稱,description后邊跟的是描述信息如果收到郵件確認(rèn)成功我們可以查看賬戶信息:

  pod trunk me 

不出意外會(huì)出現(xiàn)類似如下信息:


FaoH39.png

這就說(shuō)明你注冊(cè)成功了(一般都會(huì)成功,如果不成功你要好好回想下是不是今天沒(méi)有扶老太太過(guò)馬路)

ok,到這里我們github倉(cāng)庫(kù)也創(chuàng)建了,庫(kù)文件也傳上去了,spec配置信息也編寫(xiě)完成,賬戶也有了,是不是就差最后一步了呢?對(duì),就是將這所有的操作轉(zhuǎn)化為成果的一步:

pod trunk push ZMTestLibrary.podspec --allow-warnings 

最后一句代碼敲完是不是感覺(jué)一切都變得索然無(wú)味了呢,不要慌,以我的經(jīng)驗(yàn),一般這一步都會(huì)出錯(cuò),錯(cuò)誤原因不外物spec配置信息不對(duì),那么你就要根據(jù)錯(cuò)誤信息好好排查問(wèn)題出在哪了,我耗費(fèi)時(shí)間最多的地方就是s.source_filess.vendored_frameworks路徑寫(xiě)錯(cuò)。

如果沒(méi)有報(bào)錯(cuò)你將會(huì)看到類似如下的信息:

Faooh4.png

小伙子可以啊,居然一發(fā)入孕,后生可畏后生可畏啊哈哈哈哈哈

哦,忘了說(shuō)一點(diǎn),也許你會(huì)問(wèn)為什么編寫(xiě)spec文件時(shí)候s.name明明寫(xiě)的TestLibrary后邊成功后顯示的卻是ZMTestLibrary呢?其實(shí)啊,是因?yàn)楸驹碁榱藢?xiě)這篇文章又重新走了一遍流程,而發(fā)布的庫(kù)名字不能相同所以就換了個(gè)名字,畢竟給你們寫(xiě)教程不能誤人子弟不是,不然背后豈不是要罵本猿不厚道,有坑不說(shuō)寫(xiě)的什么玩意這是....

那么,庫(kù)也發(fā)布成功了,下一步當(dāng)讓就是見(jiàn)證奇跡的時(shí)刻啦,我們來(lái)一起搜索下看能不能搜到

pod search ZMTestLibrary

敲這句代碼時(shí)候是不是激動(dòng)的手都在顫抖呢。不過(guò)不要慌,一般不會(huì)立馬搜到的,一般都會(huì)報(bào)如下錯(cuò)誤:

[!] Unable to find a pod with name, author, summary, or descriptionmatching '······'
FaoWn0.jpg

那是因?yàn)?code>cocoapods處理需要一定的時(shí)間,這個(gè)不好把握,運(yùn)氣好的話幾分鐘完事,運(yùn)氣好的話,得嘞,您明兒個(gè)再來(lái)看吧。你如果對(duì)自己的人品和運(yùn)氣非常有自信卻還是沒(méi)有收到,不要慌,我們來(lái)更新下pod本地索引

pod setup

這一步安裝過(guò)cocoapods的小伙伴都知道,可能要費(fèi)點(diǎn)時(shí)間,啊,我寶貴的光陰啊。

如果這一步結(jié)束還么搜到,依然不要慌,刪除本地cocoapods緩存的本地索引文件

rm ~/Library/Caches/CocoaPods/search_index.json

完了之后再次執(zhí)行

pod search ZMTestLibrary

cocoapods會(huì)重新建立索引文件,不出意外你就會(huì)看到類似如下的信息:

FaoINF.png

至此,將自己的庫(kù)添加cocoapods已經(jīng)全部走完,你以為這就結(jié)束了嗎?不不不,少年,忘了我們最開(kāi)始我那段廢話說(shuō)的什么了嗎?當(dāng)然是在項(xiàng)目中引入使用啊,之前是只會(huì)用不會(huì)加總是拿來(lái)主義,現(xiàn)在添加也有了,是時(shí)候檢測(cè)一波成果了

創(chuàng)建一個(gè)項(xiàng)目,添加pod信息,這里我就不說(shuō)明了相信大家能看到這里都懂的,pod用的都不是一次兩次了,

最后:

  pod install

走你

不出意外你會(huì)在項(xiàng)目中看到這樣的信息:

Faoh7T.png

完美,逼格終于又提升了一截,嘴角不自覺(jué)揚(yáng)起了迷人的弧度

Fao5AU.jpg

到這里本篇文章要講的內(nèi)容就已經(jīng)全部結(jié)束了,雖然不是很難的操作,但是對(duì)于某些開(kāi)發(fā)者來(lái)說(shuō)沒(méi)有需求就不會(huì)有去學(xué)習(xí)去探究的動(dòng)力,無(wú)論是多么淺顯的知識(shí)即使是1+1=2,你不去接觸就永遠(yuǎn)不會(huì),并且不斷地接觸學(xué)習(xí)新的東西,才會(huì)讓人生變得越來(lái)越有意思不是嗎?

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容