什么是cocoapods
CocoaPods是一個用來幫助我們管理第三方依賴庫的工具乎完。它可以解決庫與庫之間的依賴關系,下載庫的源代碼宏所,同時通過創(chuàng)建一個Xcode的workspace來將這些第三方庫和我們的工程連接起來冗懦,供我們開發(fā)使用景殷。這么說可能還不是很理解离福,當我們開發(fā)iOS應用時杖狼,會經(jīng)常使用到很多第三方開源類庫,比如JSONKit术徊,AFNetWorking等等本刽。可能某個類庫又用到其他類庫赠涮,所以要使用它,必須得另外下載其他類庫暗挑,而其他類庫又用到其他類庫笋除,A依賴B,B又依賴C......炸裆±總之筆者的意思,手動一個個去下載所需類庫十分麻煩烹看。另外一種常見情況是国拇,你項目中用到的類庫有更新,你必須得重新下載新版本依賴庫惯殊,然后一個個重新加入到項目中酱吝,費時費力,操作繁瑣且容易出錯土思。如果能有什么工具能代替我們手工去解決這些依賴和更新問題务热,那我們開發(fā)效率將如有神助。這就是CocoaPods的作用己儒。
總而言之崎岂,使用CocoaPods的目的是讓我們能自動化的、集中的闪湾、直觀的管理第三方開源庫冲甘。
cocoapods安裝
0.升級/安裝Ruby環(huán)境
CocoaPods 是使用 Ruby 實現(xiàn)的,可以通過 gem 命令來安裝。MAC 中一般自帶 Ruby 環(huán)境江醇,如果沒有請參考 Ruby 官方文檔來安裝 Ruby 環(huán)境省艳。也可參考 如何在Mac OS X上安裝 Ruby運行環(huán)境
- sudo gem update --system
1.查看現(xiàn)有Ruby鏡像源是否為taobao.org
- $gem sources -l
2.通過以上命令,如果打印的當前Ruby鏡像源是https://rubygems.org/ 那么需要使用以下命令移除然后替換為淘寶的鏡像源(如果是且僅是https://ruby.taobao.org/ 直接跳轉到第4步驟):
你或許會好奇問嫁审,為什么需要把https://rubygems.org/
替換為https://ruby.taobao.org/
跋炕,因為https://rubygems.org/
在國外,如果我們不替換為淘寶鏡像源律适,那么cocoapods的安裝將是非常慢辐烂,所以,強烈建議將默認的 RubyGems 源替換為淘寶的 RubyGems 鏡像捂贿,這樣速度要快很多纠修,更多信息可以參考 RubyGems 鏡像 - 淘寶網(wǎng)。
- $gem sources --remove https://rubygems.org/
- $gem sources -a https://ruby.taobao.org/
3.驗證新源是否存在厂僧,注意扣草,不是i是list的首字母l
- gem sources -l
終端顯示如下代表替換成功!
*** CURRENT SOURCES ***
http://ruby.taobao.org/
4.安裝CocoaPods
4.1. $sudo gem install cocoapods
這個命令默認安裝的應該是最新版本颜屠,如果想安裝指定版本的cocoapods辰妙,請使用以下命令:
- $sudo gem install cocoapods -v 1.0.1
備注:
如果蘋果系統(tǒng)升級到OS X EL Capitan(或者更高版本的macOS系統(tǒng)),以上命令無效甫窟,使用如下命令: - $sudo gem install -n /usr/local/bin cocoapods
- sudo xcode-select --switch /Applications/Xcode.app(可有可無)
注意: 直接運行
sudo gem install cocoapods
可能會報如下錯誤ERROR: While executing gem ... (Gem::FilePermissionError) You don't have write permissions for the /usr/bin directory. 說我們沒有管理員權限密浑,如果你是管理員,同時也在命令前面加了sudo粗井,不要猶豫尔破,此時我們也需要使用
sudo gem install -n /usr/local/bin cocoapods這個命令,而非
sudo gem install cocoapods `
4.2.將 CocoaPods Specs repository復制到你電腦上~/.cocoapods目錄下
備注:
"~"代表用戶絕對目錄的收起狀態(tài)浇衬,展開為:/Users/userName懒构,"."開頭的代表是隱藏文件
- $pod setup
執(zhí)行以上命令后,需要一點時間來完成耘擂,耐心等待胆剧。如果安裝失敗那么 ~/.cocoapods 里面是空的,就需要以下兩個命令重新setup梳星。
- pod repo remove master
- pod setup
pod setup 命令本質(zhì)上是從https://github.com/CocoaPods/Specs.git
這個地址下載podspec倉庫到本地~/.cocoapods
目錄赞赖。
備注:
卸載 CocoaPods 可以使用以下命令:sudo gem uninstall cocoapods
如果執(zhí)行以上卸載命令報如下錯誤:ERROR: While executing gem ... (Gem::FilePermissionError) You don't have write permissions for the /usr/bin directory.
,此時我們也是需要變更下卸載的目錄冤灾,命令如下sudo gem uninstall -n /usr/local/bin cocoapods
5.查看CocoasPods版本
- pod --version
完畢之后這個文件夾大概有 100多M前域,到這里你已經(jīng)成功安裝了CocoaPods!
關于pod setup執(zhí)行非常慢的問題
如果是第一次執(zhí)行pod setup命令韵吨,你會發(fā)現(xiàn)進度慢的可憐匿垄,有時候等半天(真的是半天)都沒有什么反應,解決辦法請參考這篇文章。其給出的解決辦法就是通過終端執(zhí)行以下兩個命令
cd ~/.cocoapods/repos
git clone https://github.com/CocoaPods/Specs.git
然后可以用pod repo
命令查看信息椿疗。也可以用pod repo update
命令更新repo.
究其原因漏峰,因為pod setup
命令的本質(zhì)就是把github上CocoaPods上的Specs拷貝到repos目錄下,并改名成master届榄。
關于通過pod search 命令找不到三方庫的問題
安裝完pod后浅乔,我們通常會通過pod search XXX命令查看某個庫是否支持pod方式集成。比如
pod search MJRefresh
然而铝条,很不巧靖苇,終端有可能會給出下面的提示,其意為在本地repo的master中找不到匹配的庫文件MJRefresh:
但是我們明明已經(jīng)下載好了master班缰,且master內(nèi)容有559.3MB贤壁,如下:
有可能你會懷疑我們master進行pod setup的時候遺漏了一部分文件或者某個環(huán)節(jié)出了問題。其實不是的埠忘,我們只需要在終端執(zhí)行以下命令問題即可解決脾拆。
rm ~/Library/Caches/CocoaPods/search_index.json
無疑,此命令就是移除我們本地的search_index.json文件莹妒。該文件是根據(jù)~/.cocoapods/repos
下的master生成的與之對應的檢索文件名船。
然后我們在終端再次pod search XXX
命令。這個命令執(zhí)行時間可能會久一點动羽。原因在于:我們剛才移除了search_index.json文件包帚,而pod search 命令會先查看有無search_index.json文件,如果不存在該文件运吓,會自動根據(jù)master文件夾生成一個新的search_index.json文件,耐心等待疯趟,直到出現(xiàn)以下界面拘哨。
然后執(zhí)行pod search XXX,我們就能search到匹配的庫文件(當然前提是我們search的三方庫支持pod)
如果你查看~/Library/Caches/CocoaPods/
目錄信峻,發(fā)現(xiàn)系統(tǒng)自動給我們生成了search_index.json
文件倦青。
關于pod search XXX 找不到第三方庫的問題,這篇文章也有介紹碰逸。
cocoapods使用
1.使用search命令搜索類庫名信轿,如果能搜到予颤,那么代表該依賴庫支持pods的方式集成,反之不能癣亚。
- $ pod search AFNetworking
2.創(chuàng)建Podfile文件,最好把Podfile創(chuàng)建在項目根目錄下(也就是和我們項目的XXX.xcodeproj文件同目錄)
$vim Podfile
3.在 Podfile中添加我們需要依賴的庫名和版本號获印,如下
platform :ios, '8.0'
# Uncomment this line if you're using Swift
use_frameworks!
pod 'AFNetworking', '~> 3.0'
注意:你是否還在使用touch 命令創(chuàng)建podfile文件述雾?你是否還在手動配置podfile文件中的target。從今以后,你可以使用cd命令切換到工程根目錄下玻孟,然后使用pod init 方法在當前目錄下快捷的創(chuàng)建一個podfile文件唆缴,并且podfile文件已經(jīng)根據(jù)當前目錄中的工程名稱進行了配置。如下圖:
PS:上面說過面徽,最好把podfile文件放在工程根目錄下,其實Podfile文件也可以不放在工程的根目錄下匣掸。如果podfile文件放在非根目錄下趟紊,需要做的是在Podfile中指定后綴名為
.xcodeproj
的文件的路徑。因為默認情況下旺聚,podfile文件是要和.xcodeproj
文件處于同一個目錄下的织阳,正因為.xcodeproj
文件處于項目的根目錄下,所以我們經(jīng)常把podfile放在根目錄下砰粹,這才是建議大家把podfile放在根目錄的原因唧躲。如果非要把podfile文件放在非根目錄下。我們就需要在Podfile文件頭部指定.xcodeproj
文件的路徑碱璃,如下圖:
然后執(zhí)行pod install --verbose --no-repo-update 命令,AFNetworking就安裝得到項目中了弄痹,如下圖:
和Pod file在根目錄下時不同,當Podfle不在根目錄下時候嵌器,Pods文件夾肛真、Podfile.lock、.xcworkspace
都不在根目錄下爽航。也就是說蚓让,Pods文件夾、Podfile.lock讥珍、.xcworkspace
到底在哪個目錄下历极,取決于Podfile在哪個目錄,即衷佃,Pods文件夾趟卸、Podfile.lock、.xcworkspace
永遠和Podfile同目錄氏义。
2.使用install命令安裝依賴庫
pod --verbose --no-repo-update
執(zhí)行命令后锄列,控制臺會打印如下信息,分別分析依賴惯悠、下載依賴邻邮、安裝依賴庫AFNetworking、生成Pods工程吮螺、集成我們的項目和Pods工程(也就是生成名為XXX.xcworkspace的文件)饶囚。最后會在終端提醒帕翻,從現(xiàn)在起,我們該用后綴名為.xcworkspace的文件打開項目萝风。
EricmatoMacBook-Pro:CocoaPodsDemo ericwang$ pod install
Analyzing dependencies
Downloading dependencies
Installing AFNetworking (3.0)
Generating Pods project
Integrating client project
[!] From now on use `VVSPodsDemo.xcworkspace`.
以上是用命令行的方式創(chuàng)建Podfile嘀掸、編輯Podfile、安裝依賴庫规惰。還有一種更方便的方式睬塌,就是使用CocoaPods插件。CocoaPods的安裝和使用非常簡單歇万,和其他插件的安裝一樣揩晴,此處不再贅述。
CocoaPods常見問題
Podfile文件過期
問題摘自CocoaPods安裝和使用教程
[!] Required version (UAAppReviewManager (from `../`)) not found for `UAAppReviewManager`.
Available versions: 0.1.6
這里的意思大概是Podfile文件過期贪磺,類庫有升級硫兰,但是Podfile沒有更改。 pod update會更新所有的類庫刹前,獲取最新版本的類庫泳赋。而且你會發(fā)現(xiàn),如果用了
pod install 就成功了祖今。
那你也許會問,什么時候用 pod update 呢千诬,我又不知道類庫有沒有新版本。好吧膏斤,那你每次直接用
pod install掸绞,如果不行,再用 $ pod update耕捞。但是如果我們在團隊開發(fā)中衔掸,clone公司的項目到本地,此時我們應該直接用pod install俺抽,不建議用pod update (為了保持依賴庫版本同步)敞映。詳情如下:
pod install :優(yōu)先按照podfile.lock 中的依賴庫信息更新pod依賴庫。如果沒有podfile.lock磷斧,再按照podfile中的依賴庫信息更新pod依賴庫振愿。
pod update 直接按照podfile中的依賴庫信息更新pod依賴庫捷犹。
本地pod repo長時間未更新導致找不到最新版本的依賴庫
如下圖,從github上下載了一個別人的demo冕末,執(zhí)行pod install 命令后報一下錯誤:
原因在于我本地的pod倉庫已經(jīng)很久沒有更新萍歉,本地并沒有3.8.1版本的SDWebImage依賴庫的說明文件(podSpec文件)。此時需要執(zhí)行pod repo update命令過來更新本地的依賴庫档桃。如下圖:
耐心等待...然后本地倉庫更新完成枪孩,如下圖:
最后執(zhí)行pod search SEWebImage命令查看版本信息,發(fā)現(xiàn)已經(jīng)有3.8.1這個版本了藻肄,如下圖:
最后執(zhí)行pod install 命令蔑舞,pod 依賴庫便可以成功安裝,如下圖:
找不到頭文件
cocoapods導入一個第三方的庫(開源庫或者靜態(tài)/動態(tài)庫)嘹屯,然后導入這個庫的頭文件攻询,編譯報錯,說某個頭文件找不到州弟。錯誤如下:
解決方案:
配置頭文件的搜索路徑钧栖,配置如下:
問題描述:使用cocoapods時,import某個頭文件后呆馁, 找不到這個頭文件中import的其他頭文件桐经。
問題原因:這是因為還沒設置頭文件的目錄。
解決辦法:在項目的Target的里設置一下浙滤,添加cocoapods頭文件目錄:目錄路徑直接寫:${SRCROOT} 阴挣,后邊選擇recursive 。就可以了纺腊。
注意:必須選擇recursive 畔咧,否則照樣報錯,recursive是遞歸查找的意思揖膜,如果在當前路徑下找不到頭文件誓沸,會去子路徑下繼續(xù)查找。
注意:是在 User Header Search Paths 里添加壹粟,不是上面的 Header Search Paths.
如圖:
文/VV木公子(簡書作者)
PS:如非特別說明拜隧,所有文章均為原創(chuàng)作品,著作權歸作者所有趁仙,轉載轉載請聯(lián)系作者獲得授權洪添,并注明出處,所有打賞均歸本人所有雀费!
如果您是iOS開發(fā)者干奢,或者對本篇文章感興趣,請關注本人盏袄,后續(xù)會更新更多相關文章忿峻!敬請期待薄啥!
參考文章
CocoaPods安裝和使用教程
CocoaPods安裝和使用教程以及一些常見問題
2016 cocoapods的安裝和使用以及版本升級遇到的問題