CocoaPods 講解

本文側(cè)重于 CocoaPods 的理論知識(shí),幫助使用者更好的理解 CocoaPods 以便于更好的使用 CocoaPods。
整理內(nèi)容來(lái)源于 唐巧 -《iOS開(kāi)發(fā)進(jìn)階》,也推薦給大家。

1 CocoaPods 簡(jiǎn)介

1.1 簡(jiǎn)介:

CocoaPods 項(xiàng)目的源碼 (http://github.com/CocoaPods/CocoaPods) 在 Github 上管理。項(xiàng)目于2011年8月開(kāi)始,經(jīng)過(guò)多年發(fā)展,已成為 iOS 開(kāi)發(fā)事實(shí)上的依賴管理標(biāo)準(zhǔn)工具。CocoaPods 可以使我們節(jié)省設(shè)置和更新第三方開(kāi)源庫(kù)的時(shí)間。

不使用 CocoaPods 之前,我們開(kāi)發(fā)項(xiàng)目使用第三方時(shí)基本上是:

  • 1 把用到的第三方開(kāi)源庫(kù)的源代碼文件復(fù)制到工程中,或者設(shè)置 git 的 submodule。
  • 2 這些開(kāi)源庫(kù)通常需要依賴系統(tǒng)的一些 framework,需要手工將這些 framework 一一添加到工程中。比如一個(gè)網(wǎng)絡(luò)庫(kù)就需要增加 CFNetwork、SystemConfiguration 等f(wàn)ramework。
  • 3 對(duì)于某些開(kāi)源庫(kù),還需要設(shè)置 -licucore 或者 -fno-objc-arc 等編譯參數(shù)。
  • 4 管理這些開(kāi)源庫(kù)的更新。

這種體力活雖然簡(jiǎn)單,但毫無(wú)技術(shù)含量并浪費(fèi)時(shí)間。

使用 CocoaPods 之后,只需將用到的開(kāi)源庫(kù)放到一個(gè)名為 Podfile 的文件中,然后執(zhí)行 pod install。CocoaPods 就會(huì)自動(dòng)將這些開(kāi)源庫(kù)的源碼下載,并為工程設(shè)置好相應(yīng)的系統(tǒng)以來(lái)和編譯參數(shù)。

1.2 原理:

CocoaPods 原理是將原有的依賴庫(kù)都放到另一個(gè)名為 Pods 的項(xiàng)目中,然后讓主項(xiàng)目依賴 Pods 項(xiàng)目,這樣,源碼管理工作都從主項(xiàng)目移到了 Pods 項(xiàng)目中。
技術(shù)細(xì)節(jié):

  • 1 Pods項(xiàng)目最終會(huì)編譯成一個(gè)名為 libPods.a 的文件,主項(xiàng)目只需要以來(lái)這個(gè) .a 文件即可。
  • 2 對(duì)于資源文件, CocoaPods 提供了一個(gè)名為 Pods-resources.sh 的bash 腳本,該腳本在每次項(xiàng)目編譯的時(shí)候都會(huì)執(zhí)行,將第三方庫(kù)的各種資源文件復(fù)制到目標(biāo)目錄中。
  • 3 CocoaPods 通過(guò)一個(gè)名為 Pods.xconfig 的文件在編譯時(shí)設(shè)置所有的依賴和參數(shù)。

2 CocoaPods 的安裝和使用

2.1 CocoaPods 的安裝

CocoaPods 的安裝方式很簡(jiǎn)單, Mac 下都自帶 ruby,使用 ruby 的 gem 命令即可下載安裝:
> $ sudo gem install cocoapods
> $ pod setup

如果 gem 太老,可以嘗試用如下的命令升級(jí) gem:
> sudo gem update —system

另外,ruby 的軟件源 rubygems.org 因?yàn)槭褂脕嗰R遜的云服務(wù),所以被屏蔽了,需要更新一下 ruby 的源,下面代碼將官方的 ruby 源替換成國(guó)內(nèi)淘寶的源:
> gem sources —remove https://rubygems.org/
> gem sources -a http://ruby.taobao.org/
> gem sources -l`

還有一點(diǎn)需要注意,pod setup 在執(zhí)行時(shí),會(huì)輸出 Setting up CocoaPods master repo, 但會(huì)等待比較久的時(shí)間。這一步其實(shí)是 CocoaPods 在將它的信息下載到 ~/.cocoapods 目錄下,如果等待太久,可以試著 cd 到那個(gè)目錄,用 du -sh * 來(lái)查看下載進(jìn)度。也可以參考下面提到的“使用 CocoaPods 的鏡像索引” 內(nèi)容來(lái)提高下載速度。

2.2 使用 CocoaPods 的鏡像索引

所有項(xiàng)目的 Podspec 文件都托管在 https://github.com/CocoaPods/Specs.
第一次執(zhí)行 pod setup 時(shí),CocoaPods 會(huì)將這些 Podspec 索引文件更新到本地的 ~/.cocoapods/ 目錄下,索引大約有 80MB 左右。所以第一次更新會(huì)比較慢。
一個(gè)叫 akinliu (http://akinliu.github.io/2014/05/03/cocoapods-specs-/) 在 gitcafe (http://gitcafe.com/) 和 oschina (http://www.oschina.net/) 上建立了 CocoaPods 索引庫(kù)的鏡像,因?yàn)?gitcafe 和 oschina 都是國(guó)內(nèi)的服務(wù)器,所以在執(zhí)行索引更新操作時(shí),會(huì)快很多。如下可以將 CocoaPods 設(shè)置成使用 gitcafe 鏡像:
> pod repo remove master
> pod repo add master https://gitcafe.com/akuandev/Specs.git
> pod repo update`

將以上代碼中的 https://gitcafe.com/akuandev/Specs.git 替換成 http://git.oschina.net/akuandev/Specs.git 即可使用 oschina 上的鏡像。

2.3 使用 CocoaPods

使用時(shí)需要新建一個(gè)名為 Podfile 的文件,如以下格式,將依賴的庫(kù)名字依次列在文件中即可:
> platform :ios
> pod JSONKit,~>1.4
> …...

然后將編輯好的 Podfile 文件放到項(xiàng)目根目錄中,執(zhí)行命令:
> cd “your project home"
> pod install

現(xiàn)在,所有第三方庫(kù)都已經(jīng)下載完成并設(shè)置好了編譯參數(shù)和依賴,你只需要記住以下兩點(diǎn)即可:

  • 1 使用 CocoaPods 生成的 *.xcworkspace 文件來(lái)打開(kāi)工程,而不是以前的 *.xcodeproj 文件;
  • 2 每次更改了 Podfile 文件,都需要重新執(zhí)行一次 pod update 命令。

3 注意事項(xiàng)

3.1 關(guān)于 .gitignore

當(dāng)你執(zhí)行了 pod install 之后, 除了 Podfile 外, CocoaPods 還會(huì)生成一個(gè)名為 Podfile.lock 的文件,不應(yīng)該把這個(gè)文件加入到 .gitignore 中。因?yàn)?Podfile.lock 會(huì)鎖定當(dāng)前各依賴庫(kù)的版本,之后即使多次執(zhí)行 pod install 也不會(huì)更改版本,只有執(zhí)行 pod update 才會(huì)改變 Podfile.lock。在多人協(xié)作的時(shí)候,這樣可以防止第三方庫(kù)升級(jí)時(shí)做成大家各自的第三方庫(kù)版本不一致。
CocoaPods 的一篇官方文檔 (http://guides.cocoapods.org/using/using-cocoapods.html#should-i-ignore-the-pods-directory-in-source-control) 也在 What is a Podfile.lock 一節(jié)中介紹了 Podfile.lock 的作用,并指出:

This file should always be kept under version control.

3.2 為自己的項(xiàng)目創(chuàng)建 podspec 文件

我們可以為自己的開(kāi)源項(xiàng)目創(chuàng)建 podspec 文件,首先通過(guò)如下命令初始化一個(gè) podspec 文件:
> pod spec create your_pod_spec_name
該命令執(zhí)行之后,CocoaPods 會(huì)生成一個(gè)名為 your_pod_spec_name.podspec 的文件,然后我們修改其中的相關(guān)內(nèi)容即可。
具體步驟可參考這兩篇博客中的相關(guān)內(nèi)容:《如何編寫(xiě)一個(gè)CocoaPods 的 spec 文件》(http://ishalou.com/blog/2012/10/16/how-to-create-a-cocoapods-spec-file/) 和《CocoaPods 入門(mén)》(http://studentdeng.github.io/blog/2013/09/13/cocoapods-tutorial/)。

3.3 使用私有的 pods

我們可以直接指定某一個(gè)依賴的 podspec,這樣就可以使用企業(yè)內(nèi)部的私有庫(kù)。這樣有利于使企業(yè)內(nèi)部的公共項(xiàng)目支持 CocoaPods。如下:
> pod MyCommon, :podspec => https://yuantiku.com/common/myCommon.podspec

3.4 不更新 podspec

CocoaPods 在執(zhí)行 pod install 和 pod update 時(shí),會(huì)默認(rèn)先跟新一次 podspec 索引。使用 --no-repo-update 參數(shù)可以禁止其做索引更新操作。如下:
> pod install --no-repo-update
> pod update --no-repo-update

3.5 生成第三方庫(kù)的幫助文檔

如果你想讓 CocoaPods 幫你生成第三方庫(kù)的幫助文檔,并集成到 Xcode 中, 那么用 brew 安裝 appledoc 即可:
> brew install appledoc

appledoc 最大的優(yōu)點(diǎn)是可以將幫助文檔集成到 Xcode 中,這樣在工作時(shí),按住 option 鍵單機(jī)方法名或類名,就可以顯示出相應(yīng)的幫助文檔。

文章來(lái)源:摘自 唐巧 -《iOS開(kāi)發(fā)進(jìn)階》

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

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