Cocoapods公有庫與私有庫

導語

Cocoapods是iOS開發中一款優秀的包管理工具,由于其使用起來簡單、高效,得到了廣泛的使用。為什么要使用Cocoapods來管理第三方庫呢?Cocoapods背后的原理是什么呢?如何制作出屬于自己的私有庫?如何制作屬于自己的公有庫呢?

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

  • 傳統使用第三方庫的劣勢

    1. 使用一個第三方SDK,需要在工程里面添加一堆配置,少添加一步配置就會報一大堆錯誤。這個時候為了排查少了哪一個步驟,只能從頭開始重做一遍,太浪費時間和精力。有些配置還不好配置,就更使人煩躁郁悶了。
    2. 如果使用的第三方SDK有比較重要的更新,想使用最新的SDK只能到官方下載最新的SDK,重新導入到自己的項目工程中。
    3. 如果公司有多個項目,每一個工程都這樣配置一遍,這是多么痛苦的領悟呀。
  • 使用Cocoapods管理第三方庫的優勢
    我們看下使用Cocoapods是如何管理一個第三方庫的?在Podfile里面寫入這些內容:
    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私有庫帶來的好處
    至此我們已經大概了解了一下使用Cocoapods管理第三方庫的優勢,但是我們會發現這些都是公有的庫。如果公司內部實現一些私有的組件,不對外公開,而有想在不同項目中使用,改怎么辦呢?使用Cocoapods制作私有庫就完美的解決了這個問題。下圖就是使用私有庫帶給我們的好處:
Cocoapods-01.png

通過圖我們也可以看到,相同的代碼只需要維護一份即可,遵循了軟件的設計原則,don't repeat.

Cocoapods原理

關于具體的原理,可以參考Objc上的這篇文章:http://objccn.io/issue-6-4/
Cocoapods是如何實現查找第三方庫呢?我自己是這樣理解的,如下圖:

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" #版權聲明
   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

至此,我們明白了查找到第三方庫背后的原理。但是,具體如何進行搜索的呢?

先解釋一個概念,什么是Spec Repo?它是所有的Pods的一個索引,也就是一個容器(集合),所有公開的Pods都在這個里面。實際上就是一個Git倉庫remote端,當你使用了Cocoapods,這個倉庫會被clone到本地的~/.cocoapods/repos目錄下,進入到這個文件下可以看到master文件夾,就是官方的Spec Repo了。當你pod search的時候就在master這個文件下面查找的。

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

  1. 先創建出一個私有倉庫,大家可以在coding上創建一個私有庫(免費的)。

  2. 先cd到你要創建私有庫的目錄下面,然后把剛才創建的私有庫從remote端clone到本地,clone完成后,如下圖:


    Cocoapods-03.png

    MyPods是我創建出來的文件夾,MyPrivatePods是從remote端clone到本地的。

  3. 在MyPrivatePods文件目錄下,創建一個Classes文件,用來存放源碼文件。創建完成如下:


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

    pod spec create BruceCategoryComponents
    

其中BruceCategoryComponents是我自己起的spec_name,可以根據自己的需要改成自己想要的名字。創建完成后如下圖:


Cocoapods-05.png
  1. 然后用Xcode打開.podspec文件,進行編輯,怎么進行編輯可以參考Cocoapods原理那部分,有提到的。編輯完成后,在終端可以輸入

    pod lib lint
    

編輯成功后,會出現以下提示的:


Cocoapods-06.png

否則的話,根據終端提示的錯誤信息,進行修改,直到驗證成功。

  1. 為了測試的方便,我們在MyPrivatePods目錄下創建一個demo工程,這樣方便以后對私有庫進行維護更新與測試,創建完成后如下圖:


    Cocoapods-07.png

    把Classes源文件拷貝到demo工程里面,這樣方便其他人也對該私有庫進行維護,添加新的功能。

  2. 往coding上提交剛才的修改,并打上tag標簽。一定要記得打上tag標簽,且與剛才編輯.podspec里面寫的版本號一致。


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

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

創建成功后,可以進入~/.cocoapods/repos目錄下可以看到BrucePods文件。如下圖:


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

    pod repo push BrucePods BruceCategoryComponents.podspec
    

添加成功后,如下圖:


Cocoapods-10.png

可以進入到BrucePods目錄下查看一下現在的文件目錄結構:


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


    Cocoapods-12.png

到這個步驟我們的私有庫就制作完成了。來測試一下,我們的私有庫是否能夠正常使用。我們創建一個新的工程,在Podfile文件中,寫入以下內容:

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

然后運行pod install --no-repo-update命令,但是結果卻如下:

Cocoapods-13.png

這是為什么呢?因為需要指明倉庫的來源才可以的。添加以下兩句話就可以了。
公有倉庫
source 'https://github.com/CocoaPods/Specs.git'
私有倉庫
source 'https://git.coding.net/Bruce_ChenQi/MyPrivatePods.git'

  1. 私有庫的升級、分支
    在對私有庫進行升級維護的時候,測試沒有問題后,只需要重新編輯.podspec文件,修改相應的版本號,再次執行下面命令即可:

    pod repo push BrucePods BruceCategoryComponents.podspec
    

想創建分支的話,只需對subspec進行設置即可。

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

    rm -rf BrucePods
    
  2. 其他項目組成員如何使用私有庫
    首先在coding上面給其他成員添加相應的權限。另外,在其電腦上執行以下命令即可:
    pod repo add BrucePods https://git.coding.net/Bruce_ChenQi/MyPrivatePods.git

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

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

  1. 首次使用trunk的時候,需要注冊自己的電腦:
    // pod trunk register [E-mail] [User Name]
    $ pod trunk register cqdeyouxiang@163.com "bruce"
  2. 執行完成之后,會受到一封驗證郵件,按郵件提示完成驗證即可。
    注冊流程完成之后,可以使用
    pod trunk me
    驗證一下自己是否注冊成功,成功后,會看到一下輸出的:


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

總結

希望這篇文章能幫助大家可以創建出自己的私有庫和公有庫,文章有什么錯誤的地方,歡迎大家指正。
我的聯系方式: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/

國士梅花

歡迎大家關注國士梅花,技術路上與你陪伴。

guoshimeihua.jpg
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,156評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,401評論 3 415
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,069評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,873評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,635評論 6 408
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,128評論 1 323
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,203評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,365評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,881評論 1 334
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,733評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,935評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,475評論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,172評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,582評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,821評論 1 282
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,595評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,908評論 2 372

推薦閱讀更多精彩內容