本文側(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 instal
l 和 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)階》