前言
在iOS項(xiàng)目中使用第三方類庫(kù)可以說是非常常見的事 , 但是要正確地配置 和更新他們有時(shí)候是非常繁瑣的事情 , 幸運(yùn)的是CocoaPods是一個(gè)很好的解決方案.
介紹
CocoaPods是OS X和iOS下的一個(gè)第三類庫(kù)管理工具 , 通過CocoaPods工具我們可以為項(xiàng)目添加被稱為“Pods”的依賴庫(kù) (這些類庫(kù)必須是CocoaPods本身所支持的) , 并且可以輕松管理其版本.
Cocoapods意義體現(xiàn)在兩個(gè)方面.
第一 : 在引入第三方庫(kù)時(shí)它可以自動(dòng)為我們完成各種各樣的配置 , 包括配置編譯階段、連接器選項(xiàng)、甚至是ARC環(huán)境下的-fno-objc-arc配置等.
第二 : 使用CocoaPods可以很方便地查找新的第三方庫(kù) , 這些類庫(kù)是比較"標(biāo)準(zhǔn)的" , 而不是網(wǎng)上隨便找到的 , 這樣可以讓我們找到真正好用的類庫(kù).
安裝
要想使用CocoaPods工具 首先我們要先下載安裝 , 而在下載安裝CocoaPods之前 我們要先有它的運(yùn)行環(huán)境 Ruby.
MAC 的OS X自帶Ruby , 但是我們使用之前 還是要更新一下為好 , 避免版本過低導(dǎo)致安裝失敗 .
1.更新Ruby環(huán)境
首先我們要先查看Ruby的版本 在終端輸入以下命令:
ruby -v
你會(huì)看到例如這樣的信息 :
ruby 2.0.0p643 (2015-02-25 revision 49749) [x86_64-darwin14.4.0]
從這條信息中我們可以得知當(dāng)前Ruby的版本號(hào) 以及更新日期 , 通過這些信息 我們可以檢驗(yàn)接下來的更新是否成功了.
下面我們開始更新Ruby , 在終端輸入以下命令:
gem update —system
如果執(zhí)行后出現(xiàn)類似這樣的提示 那說明你沒有足夠的權(quán)限去操作:
ERROR: While executing gem ... (Gem::FilePermissionError)
You don‘t have write permissions for the
/Library/Ruby/Gems/2.0.0 directory.`
這時(shí)我們可以使用以下命令去完成更新:
sudo gem update —system
如果你的Ruby版本是最新的 那么你將看到
Updating installed gems
Nothing to update
現(xiàn)在更新成功Ruby后 我們就可以開始下載安裝CocoaPods了 , 但在開始前 我們還需要做一步操作 , 更改Ruby的鏡像 :
安裝CocoaPods時(shí)我們要訪問cocoapods.org,該網(wǎng)站可能被我們大天朝墻了,這樣下載安裝可能會(huì)是灰常慢的,不過我們可以用淘寶的Ruby鏡像來訪問該網(wǎng)站 , 具體操作如下:
gem sources --remove https://rubygems.org/
等有反應(yīng)之后再輸入以下命令
gem sources -a https://ruby.taobao.org/
通過以上2個(gè)命令 我們先移除原有的鏡像 再添加淘寶的鏡像 這樣就完成了更改 , 為了確保更改成功 在終端輸入一下命令可以查看當(dāng)前鏡像:
gem sources -l
2.安裝CocoaPods
在終端輸入執(zhí)行: sudo gem install cocoapods 開始下載安裝.
注意 : 這個(gè)時(shí)候會(huì)提示你輸入密碼 . PS:在終端輸入密碼不會(huì)有提示 , 光標(biāo)也不會(huì)移動(dòng) , 一定要注意!
使用
這里我們說一些平時(shí)常用的使用方法 , 例如搜索、安裝、更新、刪除等操作 .
1.搜索庫(kù)
使用CocoaPods搜索的命令如下:
pod search 你要搜索的庫(kù)名(支持模糊查詢)
舉個(gè)例子
pod search afnetworking
我們搜索AFNetworking庫(kù) , 只要CocoaPods支持的庫(kù)都可以搜索到 , 搜索成功后終端會(huì)返回這個(gè)庫(kù)的所有類庫(kù)版本和描述信息 , 以及在Podfile中配置的寫法 , 下面我們來看一下搜索返回的信息:

如果你搜索的庫(kù)不存在 則會(huì)提示 :

下面還有一大坨相關(guān)搜索到的庫(kù)的信息這里就不一一列舉了.
在這些信息中 我們一會(huì)要用到的就是這一句 :
pod 'AFNetworking', '~> 3.0.4'
這句話后面我們要添加到Podfile文件中 , 那么什么是Podfile呢?
這里我們介紹一下 , Podfile是CocoaPods重要的組件之一 , 該文件用于配置項(xiàng)目所需要的第三方庫(kù),它可以被高度定制 . 其實(shí)你也可以把它看成一張購(gòu)物清單 , 我們所需要的庫(kù)的都列在這個(gè)清單上 , CocoaPods就會(huì)根據(jù)這個(gè)清單上的庫(kù)去做相應(yīng)的操作 .
實(shí)例 :
pod ‘AFNetworking’ //不顯式指定依賴庫(kù)版本,表示每次都獲取最新版本
pod ‘AFNetworking’, ‘2.0’ //只使用2.0版本
pod ‘AFNetworking’, ‘> 2.0’ //使用高于2.0的版本
pod ‘AFNetworking’, ‘>= 2.0’ //使用大于或等于2.0的版本
pod ‘AFNetworking’, ‘< 2.0’ //使用小于2.0的版本
pod ‘AFNetworking’, ‘<= 2.0’ //使用小于或等于2.0的版本
pod ‘AFNetworking’, ‘~> 0.1.2’ //使用大于等于0.1.2但小于0.2的版本
pod ‘AFNetworking’, ‘~>0.1’ //使用大于等于0.1但小于1.0的版本
pod ‘AFNetworking’, ‘~>0’ //高于0的版本,寫這個(gè)限制和什么都不寫是一個(gè)效果,都表示使用最新版本
2.安裝庫(kù)
安裝庫(kù)之前 我們首先要?jiǎng)?chuàng)建一個(gè)Podfile文件 , 然后在Podfile文件中添加我們要安裝的庫(kù)信息 , 最后在終端執(zhí)行安裝命令 , 下面我們一步一步來講 (這里我們演示的是終端下的操作流程) :
- 找到你想要使用CocoaPods工程的根目錄
- 使用終端命令進(jìn)入該目錄 :
cd 你的目錄地址 - 進(jìn)入到該目錄后 終端輸入 :
vim Podfile來創(chuàng)建Podfile文件 - 接下來就進(jìn)入了Podfile文件的編輯模式 , 這時(shí)我們只需要把我們要添加的庫(kù)的配置信息寫進(jìn)去就可以了 , 當(dāng)然還是建議直接復(fù)制粘貼 避免手打出現(xiàn)錯(cuò)誤.
- 配置信息添加好后 , 點(diǎn)擊鍵盤ESC鍵 退出編輯模式 , 然后輸入保存并退出的命令 :
:wq就結(jié)束Podfile文件的編輯了 (如果不想用終端操作 也可以通過記事本打開Podfile文件添加信息) . - 此時(shí)我們會(huì)發(fā)現(xiàn)我們工程根目錄下會(huì)多出一個(gè)名為Podfile的文件 , 打開后你會(huì)看到剛剛你添加的庫(kù)配置信息 , 現(xiàn)在有了一個(gè)配置好的Podfile文件后 我們就可以執(zhí)行最后一步操作了 , 執(zhí)行安裝命令:
pod install
這時(shí)CocoaPods會(huì)根據(jù)Podfile文件中配置的信息去下載安裝相應(yīng)的庫(kù). 就算你需要用到一萬(wàn)個(gè)庫(kù) 也只需要這一行命令就可以全部自動(dòng)下載安裝配置完成 是不是很方便呢 ?

還有一點(diǎn)要說明一下 , 當(dāng)你第一次使用CocoaPods安裝庫(kù)時(shí) , 會(huì)在你工程的根目錄生成一個(gè)與你工程名相同的包 .
以后你必須要通過這個(gè).xcworkspace文件來打開你的工程 .
你必須要通過這個(gè).xcworkspace文件來打開你的工程 .
必須要通過這個(gè).xcworkspace文件來打開你的工程 .
[重要的事重復(fù)三遍]
如果你依然點(diǎn)錯(cuò)的話..
"( *?ω?)?╰ひ╯ 那么我們可以聊聊人生


3.更新庫(kù)
要想更新已經(jīng)安裝好的庫(kù) 其實(shí)非常簡(jiǎn)單 只需要一行命令就可以搞定 :
pod update
CocoaPods會(huì)自動(dòng)根據(jù)Podfile文件中的配置信息對(duì)可以更新的庫(kù)進(jìn)行更新操作 .

4.刪除庫(kù)
如果我們安裝好的庫(kù)不想要了 怎么辦呢 ? 非常簡(jiǎn)單 , 我們只需要在Podfile文件中刪除對(duì)應(yīng)的庫(kù)的配置信息 (為了演示 我注釋掉了它) , 然后再執(zhí)行一次安裝命令就可以了


5.移除CocoaPods
假如我們的工程不想再使用CocoaPods了 那么我們?cè)趺磳惭b好的CocoaPods從我們的工程中移除呢?
- 刪除工程文件夾下的Podfile、Podfile.lock及Pods文件夾
- 刪除xcworkspace文件
- 使用xcodeproj文件打開工程,刪除Frameworks組下的Pods.xcconfig及l(fā)ibPods.a引用
- 在工程設(shè)置中的Build Phases下刪除Check Pods Manifest.lock及Copy Pods Resources

高級(jí)使用
以上所描述的是最常用的基礎(chǔ)使用方法 , 下面為擴(kuò)展的高級(jí)使用
多個(gè)target中使用相同的Pods依賴庫(kù)
比如 , 名稱為CocoaPodsDemo的target和Second的target都需要使用FMDB、SDAutoLayout、AFNetworking三個(gè)Pods依賴庫(kù) , 可以使用link_with關(guān)鍵字來實(shí)現(xiàn) , 將Podfile寫成如下方式:
link_with 'CocoaPodsDemo', 'Second'
platform :ios
pod 'SDAutoLayout', '~> 1.3'
pod 'FMDB'
platform :ios, '7.0' //庫(kù)支持的IOS最低版本
pod 'AFNetworking', '~> 3.0'
不同的target使用完全不同的Pods依賴庫(kù)
CocoaPodsTest這個(gè)target使用的是FMDB、SDAutoLayout、AFNetworking三個(gè)依賴庫(kù),但Second這個(gè)target只需要使用YYKit這一個(gè)依賴庫(kù),這時(shí)可以使用target關(guān)鍵字,Podfile的描述方式如下:
target :'CocoaPodsDemo' do
platform :ios
pod 'SDAutoLayout', '~> 1.3'
pod 'FMDB'
platform :ios, '7.0'
pod 'AFNetworking', '~> 3.0'
end
target :'Second' do
pod 'YYKit'
end
Podfile.lock文件的作用
在使用CocoaPods , 執(zhí)行完pod install之后 , 會(huì)生成一個(gè)Podfile.lock文件 . 這個(gè)文件看起來跟我們關(guān)系不大 , 實(shí)際上絕對(duì)不應(yīng)該忽略它.
該文件用于保存已經(jīng)安裝的Pods依賴庫(kù)的版本 , 通過CocoaPods安裝了FMDB、SDAutoLayout、AFNetworking三個(gè)Pods依賴庫(kù)以后對(duì)應(yīng)的Podfile.lock文件內(nèi)容如下:

Podfile.lock文件最大得用處在于多人開發(fā) , 當(dāng)團(tuán)隊(duì)中的某個(gè)人執(zhí)行完pod install命令后 , 生成的Podfile.lock文件就記錄下了當(dāng)時(shí)最新Pods依賴庫(kù)的版本 , 這時(shí)團(tuán)隊(duì)中的其它人check下來這份包含Podfile.lock文件的工程以后 , 再去執(zhí)行pod install命令時(shí) , 獲取下來的Pods依賴庫(kù)的版本就和最開始獲取到的版本一致 . 如果沒有Podfile.lock文件,后續(xù)所有用戶執(zhí)行pod install命令都會(huì)獲取最新版本的AFNetworking , 這就有可能造成同一個(gè)團(tuán)隊(duì)使用的依賴庫(kù)版本不一致,這對(duì)團(tuán)隊(duì)協(xié)作來說絕對(duì)是個(gè)災(zāi)難!
鑒于Podfile.lock文件對(duì)團(tuán)隊(duì)協(xié)作如此重要 , 我們需要將它添加到版本管理中.
更新
關(guān)于1.1.0版本的一些小改動(dòng) , 在1.1.0之前的版本就不做介紹了 , 語(yǔ)法和1.1.0是由區(qū)別的 所以更新了 cocoaPods之后還是需要做一些細(xì)微的修改.
主要是修改你的Podfile 文件 如下示例:
platform :ios, '7.0'
target 'cocoaPodTest' do
pod 'AFNetworking', '~> 3.1.0'
end
結(jié)構(gòu)如下:
platform 的意思是系統(tǒng)支持的最低版本
target是你的工程名
do開始
你pod的庫(kù)
你pod的庫(kù)
你pod的庫(kù)
你pod的庫(kù)
end結(jié)束
我是LEE , 一枚有信仰的果粉Coder , 如果喜歡記得關(guān)注哦 親 ~ 么了個(gè)噠 ?