cocoapods從安裝到使用

什么是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)

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:


Snip20161213_6.png

但是我們明明已經(jīng)下載好了master班缰,且master內(nèi)容有559.3MB贤壁,如下:

Snip20161213_8.png

有可能你會懷疑我們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)以下界面拘哨。

Snip20161213_4.png

然后執(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ù)當前目錄中的工程名稱進行了配置。如下圖:


使用pod init 命令創(chuàng)建podfile文件
pod init 命令不僅會創(chuàng)建pod file文件黍翎,還會對podfile進行配置

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 install 2.1.如果安裝依賴庫且不希望更新CocoaPods的spec倉庫 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 install只會按照Podfile的要求來請求類庫寒锚,如果類庫版本號有變化劫映,那么將獲取失敗。但是 pod update會更新所有的類庫刹前,獲取最新版本的類庫泳赋。而且你會發(fā)現(xiàn),如果用了 pod update喇喉,再用 pod install 就成功了祖今。

那你也許會問,什么時候用 pod install拣技,什么時候用 pod update 呢千诬,我又不知道類庫有沒有新版本。好吧膏斤,那你每次直接用 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)庫)嘹屯,然后導入這個庫的頭文件攻询,編譯報錯,說某個頭文件找不到州弟。錯誤如下:

屏幕快照 2016-04-28 下午2.20.12.png

解決方案:
配置頭文件的搜索路徑钧栖,配置如下:
問題描述:使用cocoapods時,import某個頭文件后呆馁, 找不到這個頭文件中import的其他頭文件桐经。

問題原因:這是因為還沒設置頭文件的目錄。

解決辦法:在項目的Target的里設置一下浙滤,添加cocoapods頭文件目錄:目錄路徑直接寫:${SRCROOT} 阴挣,后邊選擇recursive 。就可以了纺腊。

注意:必須選擇recursive 畔咧,否則照樣報錯,recursive是遞歸查找的意思揖膜,如果在當前路徑下找不到頭文件誓沸,會去子路徑下繼續(xù)查找。

注意:是在 User Header Search Paths 里添加壹粟,不是上面的 Header Search Paths.

如圖:


E1BE8808-66FF-416D-AA93-08BD1709BED0.jpg

文/VV木公子(簡書作者)
PS:如非特別說明拜隧,所有文章均為原創(chuàng)作品,著作權歸作者所有趁仙,轉載轉載請聯(lián)系作者獲得授權洪添,并注明出處,所有打賞均歸本人所有雀费!

如果您是iOS開發(fā)者干奢,或者對本篇文章感興趣,請關注本人盏袄,后續(xù)會更新更多相關文章忿峻!敬請期待薄啥!

參考文章

CocoaPods安裝和使用教程
CocoaPods安裝和使用教程以及一些常見問題
2016 cocoapods的安裝和使用以及版本升級遇到的問題

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市逛尚,隨后出現(xiàn)的幾起案子垄惧,更是在濱河造成了極大的恐慌,老刑警劉巖黑低,帶你破解...
    沈念sama閱讀 219,270評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件赘艳,死亡現(xiàn)場離奇詭異,居然都是意外死亡克握,警方通過查閱死者的電腦和手機蕾管,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,489評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來菩暗,“玉大人掰曾,你說我怎么就攤上這事⊥M牛” “怎么了旷坦?”我有些...
    開封第一講書人閱讀 165,630評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長佑稠。 經(jīng)常有香客問我秒梅,道長,這世上最難降的妖魔是什么舌胶? 我笑而不...
    開封第一講書人閱讀 58,906評論 1 295
  • 正文 為了忘掉前任捆蜀,我火速辦了婚禮,結果婚禮上幔嫂,老公的妹妹穿的比我還像新娘辆它。我一直安慰自己,他們只是感情好履恩,可當我...
    茶點故事閱讀 67,928評論 6 392
  • 文/花漫 我一把揭開白布锰茉。 她就那樣靜靜地躺著,像睡著了一般切心。 火紅的嫁衣襯著肌膚如雪飒筑。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,718評論 1 305
  • 那天绽昏,我揣著相機與錄音扬霜,去河邊找鬼。 笑死而涉,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的联予。 我是一名探鬼主播啼县,決...
    沈念sama閱讀 40,442評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼材原,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了季眷?” 一聲冷哼從身側響起余蟹,我...
    開封第一講書人閱讀 39,345評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎子刮,沒想到半個月后威酒,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,802評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡挺峡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,984評論 3 337
  • 正文 我和宋清朗相戀三年葵孤,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片橱赠。...
    茶點故事閱讀 40,117評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡尤仍,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出狭姨,到底是詐尸還是另有隱情宰啦,我是刑警寧澤,帶...
    沈念sama閱讀 35,810評論 5 346
  • 正文 年R本政府宣布饼拍,位于F島的核電站赡模,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏师抄。R本人自食惡果不足惜漓柑,卻給世界環(huán)境...
    茶點故事閱讀 41,462評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望司澎。 院中可真熱鬧欺缘,春花似錦、人聲如沸挤安。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,011評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蛤铜。三九已至嫩絮,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間围肥,已是汗流浹背剿干。 一陣腳步聲響...
    開封第一講書人閱讀 33,139評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留穆刻,地道東北人置尔。 一個月前我還...
    沈念sama閱讀 48,377評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像氢伟,于是被迫代替她去往敵國和親榜轿。 傳聞我的和親對象是個殘疾皇子幽歼,可洞房花燭夜當晚...
    茶點故事閱讀 45,060評論 2 355

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

  • “CocoaPods是一個用來幫助我們管理第三方依賴庫的工具∶危” CocoaPods安裝順序: Xcode->ho...
    易水寒208閱讀 283評論 0 0
  • 項目組件化甸私、平臺化是技術公司的共同目標,越來越多的技術公司推崇使用pod管理第三方庫以及私有組件飞傀,一方面使項目架構...
    swu_luo閱讀 21,792評論 0 39
  • 應該會有人問皇型,現(xiàn)在cocoapods的使用教程都爛大街了,你這么寫有意思嗎砸烦?我想說還是有必要的弃鸦,技術在不斷變化,其...
    奔奔奔跑閱讀 383評論 0 7
  • CocoaPods 是什么外冀? CocoaPods 是一個負責管理 iOS 項目中第三方開源庫的工具寡键。CocoaPo...
    朝洋閱讀 25,684評論 3 51
  • 312 周日能看到16頁,算不錯了雪隧,可是也就才16頁西轩,哭暈。 明天早起再多看幾頁吧脑沿。 希望明天能看20頁藕畔。或者看完...
    菜菜子的簡書閱讀 217評論 0 1