- 版權(quán)聲明:本文為博主原創(chuàng)文章,未經(jīng)博主允許不得轉(zhuǎn)載。

CocoaPods簡介
每種語言發(fā)展到一個(gè)階段,就會出現(xiàn)相應(yīng)的依賴管理工具,例如 Java 語言的 Maven,nodejs 的 npm。隨著 iOS 開發(fā)者的增多,業(yè)界也出現(xiàn)了為 iOS 程序提供依賴管理的工具,它的名字叫做:CocoaPods。
CocoaPods項(xiàng)目的源碼 在 Github 上管理。該項(xiàng)目開始于 2011 年 8 月 12 日,經(jīng)過多年發(fā)展,現(xiàn)在已經(jīng)成為 iOS 開發(fā)事實(shí)上的依賴管理標(biāo)準(zhǔn)工具。開發(fā) iOS 項(xiàng)目不可避免地要使用第三方開源庫,CocoaPods 的出現(xiàn)使得我們可以節(jié)省設(shè)置和更新第三方開源庫的時(shí)間。
我在開發(fā)猿題庫客戶端時(shí),使用了 24 個(gè)第三方開源庫。在沒有使用 CocoaPods 以前,我需要:
- 1.把這些第三方開源庫的源代碼文件復(fù)制到項(xiàng)目中,或者設(shè)置成 git 的 submodule。
- 2.對于這些開源庫通常需要依賴系統(tǒng)的一些 framework,我需要手工地將這些 framework 分別增加到項(xiàng)目依賴中,比如通常情況下,一個(gè)網(wǎng)絡(luò)庫就需要增加以下 framework: CFNetwork, SystemConfiguration, MobileCoreServices, CoreGraphics, zlib。
- 3.對于某些開源庫,我還需要設(shè)置
-licucore或者-fno-objc-arc等編譯參數(shù) - 4.管理這些依賴包的更新。
這些體力活雖然簡單,但毫無技術(shù)含量并且浪費(fèi)時(shí)間。在使用 CocoaPods 之后,我只需要將用到的第三方開源庫放到一個(gè)名為 Podfile 的文件中,然后執(zhí)行pod install。
CocoaPods 就會自動將這些第三方開源庫的源碼下載下來,并且為我的工程設(shè)置好相應(yīng)的系統(tǒng)依賴和編譯參數(shù)。
CocoaPods的安裝及使用
安裝
安裝的方式非常簡單,Mac下已經(jīng)自帶了ruby,只要使用ruby的gem命令就可以安裝了。打開的Mac的終端,在終端運(yùn)行下面的命令:
$ [sudo] gem install cocoapods
$ pod setup
說明:執(zhí)行
$ pod setup這步可能比較慢,需要多等待一段時(shí)間,也可能是網(wǎng)絡(luò)的問題
更新
當(dāng)然我們也可以更新我們的CocoaPods,同樣也是使用ruby的gem命令:
$ [sudo] gem update cocoa pods```
然而你也可以更新CocoaPods的預(yù)覽版,執(zhí)行下面的命令:
$ [sudo] gem update cocoapods --pre```
查找第三方庫
如果我們不知道cocoaPods管理的庫中,是否有你想要的庫,那么你可以通過$ pod search xxx命令進(jìn)行查找,以下是我用$ pod search sdwebimage查找到的所有可用的庫:
-> SDWebImage (3.5.1)
Asynchronous image downloader with cache support with an UIImageView
category.
pod 'SDWebImage', '~> 3.5.1'
- Homepage: https://github.com/rs/SDWebImage
- Source: https://github.com/rs/SDWebImage.git
- Versions: 3.5.1, 3.5, 3.4, 3.3, 3.2, 3.1, 3.0, 2.7.4, 2.7, 2.6, 2.5, 2.4
[master repo]
- Sub specs:
- SDWebImage/Core (3.5.1)
- SDWebImage/MapKit (3.5.1)
- SDWebImage/WebP (3.5.1)```
>注:我省略了兩個(gè)庫,沒有全列出。
#####使用
假設(shè)我的Desktop上有一個(gè)已經(jīng)存在的一個(gè)項(xiàng)目名稱叫做:CocoaPodsTest,首先,進(jìn)入項(xiàng)目的根目錄,并在根目錄下創(chuàng)建一個(gè)名叫Podfile的文件(沒有任何后綴):
$ cd Desktop/CocoaPodsTest/ '進(jìn)入項(xiàng)目根目錄,根據(jù)自己項(xiàng)目實(shí)際目錄'
$ vim Podfile '創(chuàng)建Podfile文件,你可以選擇你自己喜歡的編輯器'```
注:vim的簡單用法,$ vim fileName創(chuàng)建文件fileName,并打開;按i進(jìn)入插入模式,輸入文本;按esc進(jìn)入命令模式后,按:wq或ZZ退出并保存。
然后,在Podfile文件中按以下的格式將依賴庫的名字列出:
platform :ios, '6.0' '平臺、版本'
target 'CocoaPodsText' do `項(xiàng)目target`
pod 'SDWebImage', '~> 3.5.1' '開源庫名稱、版本'
pod 'AFNetworking', '~> 2.0.3' '開源庫名稱、版本'```
保存Podfile文件后,執(zhí)行如下安裝的命令:
$ pod install```
當(dāng)安裝命令執(zhí)行成功后,會輸出:
Analyzing dependencies
Downloading dependencies
Installing AFNetworking (2.0.3)
Installing SDWebImage (3.5.1)
Generating Pods project
Integrating client project
[!] From now on use `CocoaPodsTest.xcworkspace`.```
哈哈,看到類似這樣的輸出就是成功了。你所需要的第三方開源庫都下載好了,并且設(shè)置好了相應(yīng)的依賴以及編譯參數(shù)。在我們以后用的時(shí)候一定要記住以下兩點(diǎn):
>1. 最后一行是一個(gè)警告,提醒我們需要注意:從現(xiàn)在開始,需要通過`xxx.xcworkspace`打開的我們的項(xiàng)目。而不是之前我們一直用的`xxx.xcodeproj`
>2. 當(dāng)我們每次修改了`Podfile`這個(gè)文件后,一定要記得執(zhí)行命令:`$ pod install`,還可以執(zhí)行`$ pod update`來更新類庫
###常見問題
1.[!] Invalid Podfile file: undefined local variable or method `en_US' for #<Pod::Podfile:0x00000102a5d8b0>. Updating CocoaPods might fix the issue.
原因:單引號格式,可能是手動輸入導(dǎo)致
解決辦法:系統(tǒng)偏好設(shè)置-鍵盤-文本-將“使用智能引號和破折號”一項(xiàng)取消勾選-再將podfile里面的單(雙)引號修改一下
2.如果在執(zhí)行sudo gem install cocoapods的時(shí)候報(bào)以下錯(cuò)誤:
ERROR: While executing gem ... (Errno::EPERM)
Operation not permitted - /usr/bin/pod
并且你的操作系統(tǒng)是EI Caption,可是嘗試使用以下方法來代替上面的安裝命令:
$ sudo gem install -n /usr/local/bin cocoa pods
附:如何使用CocoaPods的鏡像索引:
所有項(xiàng)目的Podspec文件都托管在https://github.com/CocoaPods/Specs,
第一次執(zhí)行pod setup時(shí),CocoaPods會將這些podspec索引文件更新到本地的~/.cocoapods目錄下,
這個(gè)索引文件比較大,所以第一次更新時(shí)非常慢.
友好人士在國內(nèi)的服務(wù)器建立了Cocoapods索引庫的鏡像,
所以執(zhí)行索引跟新操作時(shí)候會快很多.具體操作方法如下:
$ pod repo remove master
$ pod repo add master https://gitcafe.com/akuandev/Specs.git
$ pod repo update
這是使用gitcafe上的鏡像,將以上代碼中的 https://gitcafe.com/akuandev/Specs.git
替換成 http://git.oschina.net/akuandev/Specs.git 即可使用oschina上的鏡像。```
3.ArgumentError - invalid byte sequence in US-ASCII
原因:字符集錯(cuò)誤
解決辦法:
使用locale命令查看當(dāng)前的字符集,如果都是zh,需要執(zhí)行以下命令:
export LC_ALL=en_US.UTF-8
export LANG=en_US.UTF-8
然后再使用locale命令查看,已經(jīng)改過來了
[!] The YMTea [Debug] target overrides the OTHER_LDFLAGS build setting defined in `Pods/Target Support Files/Pods/Pods.debug.xcconfig'. This can lead to problems with the CocoaPods installation
Use the $(inherited) flag, or
Remove the build settings from the target.
[!] The YMTea [Release] target overrides the OTHER_LDFLAGS build setting defined in `Pods/Target Support Files/Pods/Pods.release.xcconfig'. This can lead to problems with the CocoaPods installation
- Use the `$(inherited)` flag, or
- Remove the build settings from the target.
原因:我是在已有項(xiàng)目中集成Cocoapods的時(shí)候遇到這個(gè)問題,原因是項(xiàng)目 Target 中做了一些設(shè)置,CocoaPods 也做了默認(rèn)的設(shè)置,如果兩個(gè)設(shè)置結(jié)果不一致,就會造成問題。
解決方法:我想要使用 CocoaPods 中的設(shè)置,分別在我的項(xiàng)目中定義PODS_ROOT 和 Other Linker Flags的地方(build settings),把他們的值用$(inherited)替換掉,進(jìn)入終端,執(zhí)行 pod update
警告沒了,回到 Xcode,build通過。
網(wǎng)上還流行另外一種簡單粗暴的方法:點(diǎn)擊項(xiàng)目文件 project.xcodeproj,右鍵顯示包內(nèi)容,用文本編輯器打開project.pbxproj,刪除OTHER_LDFLAGS的地方,保存(這種我沒試過)