Cocoapods公有庫與私有庫

導(dǎo)語

Cocoapods是iOS開發(fā)中一款優(yōu)秀的包管理工具,由于其使用起來簡單蜓陌、高效觅彰,得到了廣泛的使用。為什么要使用Cocoapods來管理第三方庫呢钮热?Cocoapods背后的原理是什么呢填抬?如何制作出屬于自己的私有庫?如何制作屬于自己的公有庫呢隧期?

為什么要使用Cocoapods來管理第三方庫呢飒责?

  • 傳統(tǒng)使用第三方庫的劣勢

    1. 使用一個第三方SDK赘娄,需要在工程里面添加一堆配置,少添加一步配置就會報(bào)一大堆錯誤宏蛉。這個時(shí)候?yàn)榱伺挪樯倭四囊粋€步驟遣臼,只能從頭開始重做一遍,太浪費(fèi)時(shí)間和精力拾并。有些配置還不好配置暑诸,就更使人煩躁郁悶了。
    2. 如果使用的第三方SDK有比較重要的更新辟灰,想使用最新的SDK只能到官方下載最新的SDK个榕,重新導(dǎo)入到自己的項(xiàng)目工程中。
    3. 如果公司有多個項(xiàng)目芥喇,每一個工程都這樣配置一遍西采,這是多么痛苦的領(lǐng)悟呀。
  • 使用Cocoapods管理第三方庫的優(yōu)勢
    我們看下使用Cocoapods是如何管理一個第三方庫的继控?在Podfile里面寫入這些內(nèi)容:
    platform :ios, '8.0'
    use_frameworks!

    target 'MyApp' do
      pod 'AFNetworking'
      pod 'ORStackView'
      pod 'SwiftyJSON'
    end‘
    

上面做完之后械馆,只需要在命令終端敲入以下命令即可完成安裝:
$ pod install
是不是很簡單,只需要敲入pod install命令武通,就能完成各種繁瑣的配置霹崎,如果第三方庫有更新,只需要敲入以下命令即可完成更新:
$ pod update --no-repo-update #--no-repo-update忽略本地repo更新冶忱,這個會在下面做解釋的尾菇。

  • Cocoapods私有庫帶來的好處
    至此我們已經(jīng)大概了解了一下使用Cocoapods管理第三方庫的優(yōu)勢,但是我們會發(fā)現(xiàn)這些都是公有的庫囚枪。如果公司內(nèi)部實(shí)現(xiàn)一些私有的組件派诬,不對外公開,而有想在不同項(xiàng)目中使用链沼,改怎么辦呢默赂?使用Cocoapods制作私有庫就完美的解決了這個問題。下圖就是使用私有庫帶給我們的好處:
Cocoapods-01.png

通過圖我們也可以看到括勺,相同的代碼只需要維護(hù)一份即可缆八,遵循了軟件的設(shè)計(jì)原則,don't repeat.

Cocoapods原理

關(guān)于具體的原理疾捍,可以參考Objc上的這篇文章:http://objccn.io/issue-6-4/
Cocoapods是如何實(shí)現(xiàn)查找第三方庫呢奈辰?我自己是這樣理解的,如下圖:

Cocoapods-02.png

從圖中拾氓,可以看到通過.podspec可以找到我們想要的第三方庫冯挎,那么.spec是什么呢?如下:

Pod::Spec.new do |s|
   s.name         = "CategoryComponents" #名稱
   s.version      = "0.0.2" #版本號
   s.summary      = "bruce CategoryComponents." #描述

   s.homepage     = "https://coding.net/u/Bruce_ChenQi/p/DDNPrivatePods" #描述頁面
   s.license      = "MIT" #版權(quán)聲明
   s.author       = { "guoshimeihua" => "cqdeyouxiang@163.com" } #作者信息

   s.platform     = :ios, "7.0" #使用平臺
   s.source       = { :git => "https://git.coding.net/Bruce_ChenQi/DDNPrivatePods.git", :tag => "0.0.2" } #源碼地址

   s.source_files  = "Classes", "Classes/**/*.{h,m}" #源碼文件
   s.frameworks = "CoreGraphics", "CoreFoundation", "Foundation", "UIKit" #依賴的framework
   s.requires_arc = true #是否支持ARC
end

至此,我們明白了查找到第三方庫背后的原理房官。但是趾徽,具體如何進(jìn)行搜索的呢?

先解釋一個概念翰守,什么是Spec Repo孵奶?它是所有的Pods的一個索引,也就是一個容器(集合)蜡峰,所有公開的Pods都在這個里面了袁。實(shí)際上就是一個Git倉庫remote端,當(dāng)你使用了Cocoapods湿颅,這個倉庫會被clone到本地的~/.cocoapods/repos目錄下载绿,進(jìn)入到這個文件下可以看到master文件夾,就是官方的Spec Repo了油航。當(dāng)你pod search的時(shí)候就在master這個文件下面查找的崭庸。

如何制作出屬于自己的私有庫?

  1. 先創(chuàng)建出一個私有倉庫谊囚,大家可以在coding上創(chuàng)建一個私有庫(免費(fèi)的)怕享。

  2. 先cd到你要創(chuàng)建私有庫的目錄下面,然后把剛才創(chuàng)建的私有庫從remote端clone到本地镰踏,clone完成后函筋,如下圖:


    Cocoapods-03.png

    MyPods是我創(chuàng)建出來的文件夾,MyPrivatePods是從remote端clone到本地的奠伪。

  3. 在MyPrivatePods文件目錄下跌帐,創(chuàng)建一個Classes文件,用來存放源碼文件芳来。創(chuàng)建完成如下:


    CocoaPods-04.png
  4. 在MyPrivatePods目錄下創(chuàng)建.podspec文件含末,先在終端cd到該目錄下,然后輸入以下命令:

    pod spec create BruceCategoryComponents
    

其中BruceCategoryComponents是我自己起的spec_name即舌,可以根據(jù)自己的需要改成自己想要的名字。創(chuàng)建完成后如下圖:


Cocoapods-05.png
  1. 然后用Xcode打開.podspec文件挎袜,進(jìn)行編輯顽聂,怎么進(jìn)行編輯可以參考Cocoapods原理那部分,有提到的盯仪。編輯完成后紊搪,在終端可以輸入

    pod lib lint
    

編輯成功后,會出現(xiàn)以下提示的:


Cocoapods-06.png

否則的話全景,根據(jù)終端提示的錯誤信息耀石,進(jìn)行修改,直到驗(yàn)證成功爸黄。

  1. 為了測試的方便滞伟,我們在MyPrivatePods目錄下創(chuàng)建一個demo工程揭鳞,這樣方便以后對私有庫進(jìn)行維護(hù)更新與測試,創(chuàng)建完成后如下圖:


    Cocoapods-07.png

    把Classes源文件拷貝到demo工程里面梆奈,這樣方便其他人也對該私有庫進(jìn)行維護(hù)野崇,添加新的功能。

  2. 往coding上提交剛才的修改亩钟,并打上tag標(biāo)簽乓梨。一定要記得打上tag標(biāo)簽,且與剛才編輯.podspec里面寫的版本號一致清酥。


    Cocoapods-08.png
  3. 創(chuàng)建屬于自己的私有庫中心扶镀,為什么要創(chuàng)建自己的私有庫,可以參照Cocoapods原理部分講的焰轻。敲入以下命令即可:

    pod repo add BrucePods https://git.coding.net/Bruce_ChenQi/MyPrivatePods.git
    

創(chuàng)建成功后臭觉,可以進(jìn)入~/.cocoapods/repos目錄下可以看到BrucePods文件。如下圖:


Cocoapods-09.png
  1. 下面就是把BruceCategoryComponents.podspec添加到私有庫中心鹦马,如下:

    pod repo push BrucePods BruceCategoryComponents.podspec
    

添加成功后胧谈,如下圖:


Cocoapods-10.png

可以進(jìn)入到BrucePods目錄下查看一下現(xiàn)在的文件目錄結(jié)構(gòu):


Cocoapods-11.png
  1. 這個時(shí)候,就可以通過pod search命令搜索到剛才創(chuàng)建的私有庫了荸频。如下所示:


    Cocoapods-12.png

到這個步驟我們的私有庫就制作完成了菱肖。來測試一下,我們的私有庫是否能夠正常使用旭从。我們創(chuàng)建一個新的工程稳强,在Podfile文件中,寫入以下內(nèi)容:

target 'BruceDemo' do
   platform :ios, '7.0'
   pod 'BruceCategoryComponents'
end

然后運(yùn)行pod install --no-repo-update命令和悦,但是結(jié)果卻如下:

Cocoapods-13.png

這是為什么呢退疫?因?yàn)樾枰该鱾}庫的來源才可以的。添加以下兩句話就可以了鸽素。
公有倉庫
source 'https://github.com/CocoaPods/Specs.git'
私有倉庫
source 'https://git.coding.net/Bruce_ChenQi/MyPrivatePods.git'

  1. 私有庫的升級褒繁、分支
    在對私有庫進(jìn)行升級維護(hù)的時(shí)候,測試沒有問題后馍忽,只需要重新編輯.podspec文件棒坏,修改相應(yīng)的版本號,再次執(zhí)行下面命令即可:

    pod repo push BrucePods BruceCategoryComponents.podspec
    

想創(chuàng)建分支的話遭笋,只需對subspec進(jìn)行設(shè)置即可坝冕。

  1. 刪除私有庫
    如果想要刪除私有庫,需要分兩步瓦呼,第一步刪除coding上創(chuàng)建的私有庫喂窟。第二部,到~/.cocoapods/repos目錄下,通過以下命令行即可刪除:

    rm -rf BrucePods
    
  2. 其他項(xiàng)目組成員如何使用私有庫
    首先在coding上面給其他成員添加相應(yīng)的權(quán)限磨澡。另外碗啄,在其電腦上執(zhí)行以下命令即可:
    pod repo add BrucePods https://git.coding.net/Bruce_ChenQi/MyPrivatePods.git

如何制作屬于自己的公有庫呢?

公有庫的制作和私有庫的制作很多都是相同的钱贯,唯一不同的就是把.podspec文件提交到公有倉庫里面了挫掏。以前Cocoapods組件的提交方式是通過pull request進(jìn)行的,現(xiàn)在改成trunk自動化的提交方式秩命。Trunk自動化提交有下面幾個步驟:

  1. 首次使用trunk的時(shí)候尉共,需要注冊自己的電腦:
    // pod trunk register [E-mail] [User Name]
    $ pod trunk register cqdeyouxiang@163.com "bruce"
  2. 執(zhí)行完成之后,會受到一封驗(yàn)證郵件弃锐,按郵件提示完成驗(yàn)證即可袄友。
    注冊流程完成之后,可以使用
    pod trunk me
    驗(yàn)證一下自己是否注冊成功霹菊,成功后剧蚣,會看到一下輸出的:


    Cocoapods-14.png
  3. 接下來重復(fù)制作私有庫1-7步驟,注意此時(shí)應(yīng)該在github上創(chuàng)建一個公有的倉庫旋廷,其他不變鸠按。
    1-7步驟做完之后,執(zhí)行提交命令饶碘,如下:
    pod trunk push BRCategoryComponents.podspec
    只需要這一條命令目尖,組件就被推送到Cocoapods的主倉庫中了。
  4. 可以通過pod search來搜索剛才自己創(chuàng)建的公有組件扎运,如下圖:
Cocoapods-15.png

總結(jié)

希望這篇文章能幫助大家可以創(chuàng)建出自己的私有庫和公有庫瑟曲,文章有什么錯誤的地方,歡迎大家指正豪治。
我的聯(lián)系方式:cqdeyouxiang@163.com 微信號:BruceGuoShi

mine_wx.png
參考文章

http://blog.wtlucky.com/blog/2015/02/26/create-private-podspec/
http://foggry.com/blog/2016/03/23/cocoapods-xiang-jie-zhi-geng-xin-pian/
https://blog.cnbluebox.com/blog/2014/03/31/cocoapodsdai-ma-guan-li/

國士梅花

歡迎大家關(guān)注國士梅花洞拨,技術(shù)路上與你陪伴。

guoshimeihua.jpg
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末负拟,一起剝皮案震驚了整個濱河市烦衣,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌掩浙,老刑警劉巖琉挖,帶你破解...
    沈念sama閱讀 222,252評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異涣脚,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)寥茫,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,886評論 3 399
  • 文/潘曉璐 我一進(jìn)店門遣蚀,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事芭梯∠找” “怎么了?”我有些...
    開封第一講書人閱讀 168,814評論 0 361
  • 文/不壞的土叔 我叫張陵玖喘,是天一觀的道長甩牺。 經(jīng)常有香客問我,道長累奈,這世上最難降的妖魔是什么贬派? 我笑而不...
    開封第一講書人閱讀 59,869評論 1 299
  • 正文 為了忘掉前任,我火速辦了婚禮澎媒,結(jié)果婚禮上搞乏,老公的妹妹穿的比我還像新娘。我一直安慰自己戒努,他們只是感情好请敦,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,888評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著储玫,像睡著了一般侍筛。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上撒穷,一...
    開封第一講書人閱讀 52,475評論 1 312
  • 那天匣椰,我揣著相機(jī)與錄音,去河邊找鬼桥滨。 笑死窝爪,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的齐媒。 我是一名探鬼主播吮蛹,決...
    沈念sama閱讀 41,010評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼历恐,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起求类,我...
    開封第一講書人閱讀 39,924評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎堕阔,沒想到半個月后绒窑,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,469評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡拷恨,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,552評論 3 342
  • 正文 我和宋清朗相戀三年脖律,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片腕侄。...
    茶點(diǎn)故事閱讀 40,680評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡小泉,死狀恐怖芦疏,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情微姊,我是刑警寧澤酸茴,帶...
    沈念sama閱讀 36,362評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站兢交,受9級特大地震影響薪捍,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜配喳,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,037評論 3 335
  • 文/蒙蒙 一酪穿、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧界逛,春花似錦昆稿、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,519評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至少欺,卻和暖如春喳瓣,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背赞别。 一陣腳步聲響...
    開封第一講書人閱讀 33,621評論 1 274
  • 我被黑心中介騙來泰國打工畏陕, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人仿滔。 一個月前我還...
    沈念sama閱讀 49,099評論 3 378
  • 正文 我出身青樓惠毁,卻偏偏與公主長得像,于是被迫代替她去往敵國和親崎页。 傳聞我的和親對象是個殘疾皇子鞠绰,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,691評論 2 361

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