使用Cocoapods創(chuàng)建私有podspec

參考文章:

CocoaPods私有庫配置筆記

使用Cocoapods創(chuàng)建私有podspec

cocoapods應(yīng)用第二部分-私有庫相關(guān)


整體先說明一下創(chuàng)建一個私有的podspec包括如下那么幾個步驟:

  1. 創(chuàng)建并設(shè)置一個私有的Spec Repo。
  2. 創(chuàng)建Pod的所需要的項目工程文件沟娱,并配置對應(yīng)的podspec文件。
  3. 本地測試配置好的podspec文件是否可用柄冲。
  4. 向私有的Spec Repo中提交podspec朱嘴。
  5. 在個人項目中的Podfile中增加剛剛制作的好的Pod并使用糕珊。
  6. 更新維護(hù)podspec。

在這一系列的步驟中需要創(chuàng)建兩個Git倉庫假消,分別是第一步和第二步,并且第一步只是在初次創(chuàng)建私有podspec時才需要岭接,之后在創(chuàng)建其他的只需要從第二步開始就可以富拗。


創(chuàng)建私有Spec Repo

創(chuàng)建一個 Git倉庫,這個倉庫你可以創(chuàng)建私有的也可以創(chuàng)建公開的鸣戴,不過既然私有的Spec Repo啃沪,還是創(chuàng)建私有的倉庫吧,需要注意的就是如果項目中有其他同事共同開發(fā)的話窄锅,你還要給他這個Git倉庫的權(quán)限创千。

創(chuàng)建完成之后在Terminal中執(zhí)行如下命令
pod repo add YJKSpecs http://gitlab.ihaozhuo.com/iOS/YJKSpecs.git
執(zhí)行結(jié)果如下圖:

創(chuàng)建私有Spec Repo.png

此時如果成功的話進(jìn)入到~/.cocoapods/repos目錄下就可以看到Y(jié)JKSpecs這個目錄了。至此第一步創(chuàng)建私有Spec Repo完成入偷。

PS:如果有其他合作人員共同使用這個私有Spec Repo的話在他有對應(yīng)Git倉庫的權(quán)限的前提下執(zhí)行相同的命令添加這個Spec Repo即可追驴。


創(chuàng)建Pod項目工程文件

使用Cocoapods提供的一個工具將第二步與第三步結(jié)合起來做。相關(guān)的文檔介紹是Using Pod Lib Create 就拿我創(chuàng)建的podTestLibrary為例子具體講一下這里是如何操作的疏之,先cd到要創(chuàng)建項目的目錄然后執(zhí)行
pod lib create podTestLibrary
執(zhí)行結(jié)果如下圖:

創(chuàng)建Pod項目工程文件.png

其中會有幾個問題殿雪,看著大概意思選擇一個選項就好。

生成的項目結(jié)構(gòu)如圖:

項目結(jié)構(gòu).png

接下來就是向Pod文件夾中添加庫文件和資源锋爪,并配置podspec文件丙曙,我把一個測試的文件放入上圖標(biāo)注的文件夾下,然后進(jìn)入Example文件夾執(zhí)行pod update命令其骄。

注:這里需要注意的是每當(dāng)你向Pod中添加了新的文件或者以后更新了podspec的版本都需要重新執(zhí)行一遍pod update命令亏镰。

不執(zhí)行pod update命令,podTestLibrary 項目中直接導(dǎo)入私有庫是無法識別的年栓。

無法識別01.png

新添加的文件在沒有執(zhí)行pod update命令時拆挥,podTestLibrary 項目中的文件并不能識別。

無法識別02.png

測試無誤后需要將該項目添加并推送到遠(yuǎn)端倉庫某抓,并編輯podspec文件纸兔。

通過Cocoapods創(chuàng)建出來的目錄本身就在本地的Git管理下,我們需要做的就是給它添加遠(yuǎn)端倉庫否副,然后cdPodTestLibrary目錄

$ git add .
$ git commit -s -m "Initial Commit of Library"
$ git remote add origin git@gitlab.ihaozhuo.com:iOS/YJKTest.git #添加遠(yuǎn)端倉庫
$ git push origin master #提交到遠(yuǎn)端倉庫

因為podspec文件中獲取Git版本控制的項目還需要tag號汉矿,所以我們要打上一個tag
$ git tag -m "first release" 0.1.0
$ git push --tags #推送tag到遠(yuǎn)端倉庫

編輯podspec文件,下面我貼上我的podspec文件,并在后面以注釋的形式說明每個字段的含義备禀,沒有涉及到的字段可以去官方文檔查閱

Pod::Spec.new do |s|
s.name = 'podTestLibrary'??#名稱
s.version = '0.1.0'??#版本號
s.summary = 'A short description of podTestLibrary.'??#簡短介紹洲拇,下面是詳細(xì)介紹

# This description is used to generate tags and improve search results.
# * Think: What does it do? Why did you write it? What is the focus?
# * Try to keep it short, snappy and to the point.
# * Write the description between the DESC delimiters below.
# * Finally, don't worry about the indent, CocoaPods strips it!

s.description = <<-DESC
TODO: Add long description of the pod here.
DESC

s.homepage = 'https://github.com/王佳佳/podTestLibrary'?? #主頁
s.screenshots = 'www.example.com/screenshots_1', 'www.example.com/screenshots_2'??#截圖
s.license = { :type => 'MIT', :file => 'LICENSE' }??#開源協(xié)議
s.author = { '王佳佳' => 'wangjiajia@hz-health.cn' }??#作者信息
s.source = { :git => 'http://gitlab.ihaozhuo.com/iOS/YJKTest.git', :tag => "0.1.0" }??#項目地址奈揍,這里不支持ssh的地址,驗證不通過赋续,只支持HTTP和HTTPS男翰,最好使用HTTPS
s.social_media_url = 'https://twitter.com/<TWITTER_USERNAME>'??#多媒體介紹地址
s.ios.deployment_target = '8.0'??#支持的平臺及版本
s.source_files = 'podTestLibrary/Classes/**/*' ??#代碼源文件地址,**/*表示Classes目錄及其子目錄下所有文件纽乱,如果有多個目錄下則用逗號分開蛾绎,如果需要在項目中分組顯示,這里也要做相應(yīng)的設(shè)置

# s.resource_bundles = {
'podTestLibrary' => ['podTestLibrary/Assets/.png']
} #資源文件地址
# s.public_header_files = 'Pod/Classes/**/
.h'??#公開頭文件地址
#s.frameworks = 'UIKit', 'MapKit'??#所需的framework鸦列,多個用逗號隔開
#s.dependency 'AFNetworking', '~> 2.3'??#依賴關(guān)系租冠,該項目所依賴的其他庫,如果有多個需要填寫多個s.dependency
end

編輯完podspec文件后薯嗤,需要驗證一下這個文件是否可用顽爹,如果有任何WARNING或者ERROR都是不可以的,它就不能被添加到Spec Repo中骆姐,不過xcode的WARNING是可以存在的镜粤,驗證需要執(zhí)行一下命令
pod lib lint

驗證命令.png

存在警告可以通過下面命令忽略
pod lib lint --allow-warnings
當(dāng)看到驗證成功則說明podspec文件是合格的,這一步就算完成啦玻褪。

驗證通過.png

本地測試podspec文件

我們可以創(chuàng)建一個新的項目繁仁,在這個項目的Podfile文件中直接指定剛才創(chuàng)建編輯好的podspec文件,看是否可用归园。 在Podfile中我們可以這樣編輯,有兩種方式

pod ‘podTestLibrary’, :path => ‘/Users/wangjiajia/Desktop/podTestLibrary’ # 指定路徑
pod ‘podTestLibrary’, :podspec => ‘/Users/wangjiajia/Desktop/podTestLibrary/podTestLibrary.podspec’ # 指定podspec文件

然后執(zhí)行pod install命令安裝依賴稚矿,打開項目工程庸诱,可以看到庫文件都被加載到Pods子項目中了,不過它們并沒有在Pods目錄下晤揣,而是跟測試項目一樣存在于Development Pods/podTestLibrary中桥爽,這是因為我們是在本地測試,而沒有把podspec文件添加到Spec Repo中的緣故昧识。

在項目中編寫代碼钠四,測試庫文件無誤后就可以開始下一步了,提交podspec到Spec Repo中跪楞。

效果圖如下:

本地測試.png

向Spec Repo提交podspec

向Spec Repo提交podspec需要確定的是podspec必須通過驗證無誤(若存在警告錯誤同樣可用 --allow-warnings來忽略)缀去。 向我們的私有Spec Repo提交podspec只需要一個命令

$ pod repo push YJKSpecs podTestLibrary.podspec #前面是本地Repo名字 后面是podspec名字

如圖:

向Spec Repo提交podspec .png

完成之后這個組件庫就添加到我們的私有Spec Repo中了,可以進(jìn)入到~/.cocoapods/repos/YJKSpecs目錄下查看

如圖:

本地私有庫.png

至此甸祭,我們的這個組件庫就已經(jīng)制作添加完成了缕碎,使用pod search命令就可以查到我們自己的庫了

看下圖:

搜索自己的控件.png

這里可以發(fā)現(xiàn)找到的這個并不是我們的控件,由此猜測應(yīng)該是在[master repo]里存在和我們命名一樣的鬼東西池户,這里我們先不管啦咏雌,直接看下一步凡怎,試試我們的控件可不可以從遠(yuǎn)端拉取下來。


使用制作好的Pod

在Podfile里添加相應(yīng)的配置信息赊抖,

如圖所示:

Podfile配置.png

在podfile文件最上方添加
source 'https://github.com/CocoaPods/Specs.git' #官方倉庫的地址
source 'http://gitlab.ihaozhuo.com/iOS/YJKSpecs.git' #我們自己的私有spec倉庫的地址

默認(rèn)情況下,如果你不添加source的話,系統(tǒng)會默認(rèn)使用 https://github.com/CocoaPods/Specs.git官方源,但是當(dāng)你添加了source后,系統(tǒng)就不再自動搜索 官方源,所以這兩句都必須添加!!!!!

執(zhí)行 pod install,結(jié)果如下圖:

導(dǎo)入控件01.png

果然出問題啦统倒,找到人家的控件啦,這時候咋辦呢氛雪,試一試將倉庫地址的順序變一下看看啥效果吧房匆。

更改查找?guī)斓捻樞?png

再次執(zhí)行 pod install,結(jié)果如下圖:

導(dǎo)入控件02.png

果然是可以成功,這個問題就教育們要注意兩點

1注暗、書寫的代碼最好存在相應(yīng)的標(biāo)志信息坛缕,防止與他人的代碼產(chǎn)生雷同。
2捆昏、在存在私有庫的時候赚楚,最好把自己私有庫的地址放在上邊,這樣在產(chǎn)生相同的控件時也可以準(zhǔn)確找到自己想要的那個骗卜。

當(dāng)然在存在雷同的時候最好對類名進(jìn)行修改宠页。


更新維護(hù)podspec

更新維護(hù)幾乎就是重復(fù)上面的步驟,
1寇仓、在第二部生成的項目文件中举户,修改你的控件的代碼,修改完成在之后經(jīng)過 pod update 之后就在項目進(jìn)行測試遍烦,測試完成及可提交遠(yuǎn)端俭嘁,并打上相應(yīng)標(biāo)簽。
2服猪、修改podspec供填,并進(jìn)行本地測試,測試完成罢猪,將podspec推向遠(yuǎn)端就好近她。

在公用控件更新維護(hù)的時候最好能夠多個版本兼容,因為一個基礎(chǔ)控件的改動膳帕,可能會涉及到項目中多處地方的粘捎,一個API的定義變更,可能會影響到項目中大量的業(yè)務(wù)代碼變動危彩。
還有就是在Podfile建議要帶上版本號攒磨,以免他人的變動給你帶來大量的任務(wù)量。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末汤徽,一起剝皮案震驚了整個濱河市咧纠,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌泻骤,老刑警劉巖漆羔,帶你破解...
    沈念sama閱讀 206,378評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件梧奢,死亡現(xiàn)場離奇詭異,居然都是意外死亡演痒,警方通過查閱死者的電腦和手機(jī)亲轨,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來鸟顺,“玉大人惦蚊,你說我怎么就攤上這事⊙渡” “怎么了蹦锋?”我有些...
    開封第一講書人閱讀 152,702評論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長欧芽。 經(jīng)常有香客問我莉掂,道長,這世上最難降的妖魔是什么千扔? 我笑而不...
    開封第一講書人閱讀 55,259評論 1 279
  • 正文 為了忘掉前任憎妙,我火速辦了婚禮,結(jié)果婚禮上曲楚,老公的妹妹穿的比我還像新娘厘唾。我一直安慰自己,他們只是感情好龙誊,可當(dāng)我...
    茶點故事閱讀 64,263評論 5 371
  • 文/花漫 我一把揭開白布抚垃。 她就那樣靜靜地躺著,像睡著了一般趟大。 火紅的嫁衣襯著肌膚如雪讯柔。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,036評論 1 285
  • 那天护昧,我揣著相機(jī)與錄音,去河邊找鬼粗截。 笑死惋耙,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的熊昌。 我是一名探鬼主播绽榛,決...
    沈念sama閱讀 38,349評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼婿屹!你這毒婦竟也來了灭美?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,979評論 0 259
  • 序言:老撾萬榮一對情侶失蹤昂利,失蹤者是張志新(化名)和其女友劉穎届腐,沒想到半個月后铁坎,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,469評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡犁苏,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,938評論 2 323
  • 正文 我和宋清朗相戀三年硬萍,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片围详。...
    茶點故事閱讀 38,059評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡朴乖,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出助赞,到底是詐尸還是另有隱情买羞,我是刑警寧澤,帶...
    沈念sama閱讀 33,703評論 4 323
  • 正文 年R本政府宣布雹食,位于F島的核電站畜普,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏婉徘。R本人自食惡果不足惜漠嵌,卻給世界環(huán)境...
    茶點故事閱讀 39,257評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望盖呼。 院中可真熱鬧儒鹿,春花似錦、人聲如沸几晤。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蟹瘾。三九已至圾浅,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間憾朴,已是汗流浹背狸捕。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留众雷,地道東北人灸拍。 一個月前我還...
    沈念sama閱讀 45,501評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像砾省,于是被迫代替她去往敵國和親鸡岗。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,792評論 2 345

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