cocoapods從安裝到使用

什么是cocoapods

CocoaPods是一個用來幫助我們管理第三方依賴庫的工具。它可以解決庫與庫之間的依賴關系,下載庫的源代碼,同時通過創建一個Xcode的workspace來將這些第三方庫和我們的工程連接起來,供我們開發使用。這么說可能還不是很理解,當我們開發iOS應用時,會經常使用到很多第三方開源類庫,比如JSONKit,AFNetWorking等等。可能某個類庫又用到其他類庫,所以要使用它,必須得另外下載其他類庫,而其他類庫又用到其他類庫,A依賴B,B又依賴C......。總之筆者的意思,手動一個個去下載所需類庫十分麻煩。另外一種常見情況是,你項目中用到的類庫有更新,你必須得重新下載新版本依賴庫,然后一個個重新加入到項目中,費時費力,操作繁瑣且容易出錯。如果能有什么工具能代替我們手工去解決這些依賴和更新問題,那我們開發效率將如有神助。這就是CocoaPods的作用。
總而言之,使用CocoaPods的目的是讓我們能自動化的、集中的、直觀的管理第三方開源庫。

cocoapods安裝

0.升級/安裝Ruby環境
CocoaPods 是使用 Ruby 實現的,可以通過 gem 命令來安裝。MAC 中一般自帶 Ruby 環境,如果沒有請參考 Ruby 官方文檔來安裝 Ruby 環境。也可參考 如何在Mac OS X上安裝 Ruby運行環境

  • sudo gem update --system

1.查看現有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 鏡像 - 淘寶網

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
    備注:如果蘋果系統升級到OS X EL Capitan(或者更高版本的macOS系統),以上命令無效,使用如下命令:
  • $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目錄下
備注:"~"代表用戶絕對目錄的收起狀態,展開為:/Users/userName,"."開頭的代表是隱藏文件

  • $pod setup

執行以上命令后,需要一點時間來完成,耐心等待。如果安裝失敗那么 ~/.cocoapods 里面是空的,就需要以下兩個命令重新setup。

  • pod repo remove master
  • pod setup
    pod setup 命令本質上是從https://github.com/CocoaPods/Specs.git這個地址下載podspec倉庫到本地~/.cocoapods目錄。

備注:卸載 CocoaPods 可以使用以下命令:sudo gem uninstall cocoapods
如果執行以上卸載命令報如下錯誤: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,到這里你已經成功安裝了CocoaPods!

關于pod setup執行非常慢的問題

如果是第一次執行pod setup命令,你會發現進度慢的可憐,有時候等半天(真的是半天)都沒有什么反應,解決辦法請參考這篇文章。其給出的解決辦法就是通過終端執行以下兩個命令

cd ~/.cocoapods/repos
git clone https://github.com/CocoaPods/Specs.git

然后可以用pod repo命令查看信息。也可以用pod repo update 命令更新repo.
究其原因,因為pod setup命令的本質就是把github上CocoaPods上的Specs拷貝到repos目錄下,并改名成master。

關于通過pod search 命令找不到三方庫的問題

安裝完pod后,我們通常會通過pod search XXX命令查看某個庫是否支持pod方式集成。比如

pod search MJRefresh

然而,很不巧,終端有可能會給出下面的提示,其意為在本地repo的master中找不到匹配的庫文件MJRefresh:


Snip20161213_6.png

但是我們明明已經下載好了master,且master內容有559.3MB,如下:

Snip20161213_8.png

有可能你會懷疑我們master進行pod setup的時候遺漏了一部分文件或者某個環節出了問題。其實不是的,我們只需要在終端執行以下命令問題即可解決。

rm ~/Library/Caches/CocoaPods/search_index.json

無疑,此命令就是移除我們本地的search_index.json文件。該文件是根據~/.cocoapods/repos下的master生成的與之對應的檢索文件。
然后我們在終端再次pod search XXX命令。這個命令執行時間可能會久一點。原因在于:我們剛才移除了search_index.json文件,而pod search 命令會先查看有無search_index.json文件,如果不存在該文件,會自動根據master文件夾生成一個新的search_index.json文件,耐心等待,直到出現以下界面。

Snip20161213_4.png

然后執行pod search XXX,我們就能search到匹配的庫文件(當然前提是我們search的三方庫支持pod)

如果你查看~/Library/Caches/CocoaPods/目錄,發現系統自動給我們生成了search_index.json文件。
關于pod search XXX 找不到第三方庫的問題,這篇文章也有介紹。

cocoapods使用

1.使用search命令搜索類庫名,如果能搜到,那么代表該依賴庫支持pods的方式集成,反之不能。

  • $ pod search AFNetworking

2.創建Podfile文件,最好把Podfile創建在項目根目錄下(也就是和我們項目的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 命令創建podfile文件?你是否還在手動配置podfile文件中的target。從今以后,你可以使用cd命令切換到工程根目錄下,然后使用pod init 方法在當前目錄下快捷的創建一個podfile文件,并且podfile文件已經根據當前目錄中的工程名稱進行了配置。如下圖:


使用pod init 命令創建podfile文件
pod init 命令不僅會創建pod file文件,還會對podfile進行配置

PS:上面說過,最好把podfile文件放在工程根目錄下,其實Podfile文件也可以不放在工程的根目錄下。如果podfile文件放在非根目錄下,需要做的是在Podfile中指定后綴名為.xcodeproj的文件的路徑。因為默認情況下,podfile文件是要和.xcodeproj文件處于同一個目錄下的,正因為.xcodeproj文件處于項目的根目錄下,所以我們經常把podfile放在根目錄下,這才是建議大家把podfile放在根目錄的原因。如果非要把podfile文件放在非根目錄下。我們就需要在Podfile文件頭部指定.xcodeproj文件的路徑,如下圖:

然后執行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
執行命令后,控制臺會打印如下信息,分別分析依賴、下載依賴、安裝依賴庫AFNetworking、生成Pods工程、集成我們的項目和Pods工程(也就是生成名為XXX.xcworkspace的文件)。最后會在終端提醒,從現在起,我們該用后綴名為.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`.
    

以上是用命令行的方式創建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會更新所有的類庫,獲取最新版本的類庫。而且你會發現,如果用了 pod update,再用 pod install 就成功了。

那你也許會問,什么時候用 pod install,什么時候用 pod update 呢,我又不知道類庫有沒有新版本。好吧,那你每次直接用 pod update 算了。或者先用 pod install,如果不行,再用 $ pod update。但是如果我們在團隊開發中,clone公司的項目到本地,此時我們應該直接用pod install,不建議用pod update (為了保持依賴庫版本同步)。詳情如下:

pod install :優先按照podfile.lock 中的依賴庫信息更新pod依賴庫。如果沒有podfile.lock,再按照podfile中的依賴庫信息更新pod依賴庫。
pod update 直接按照podfile中的依賴庫信息更新pod依賴庫。

本地pod repo長時間未更新導致找不到最新版本的依賴庫

如下圖,從github上下載了一個別人的demo,執行pod install 命令后報一下錯誤:


原因在于我本地的pod倉庫已經很久沒有更新,本地并沒有3.8.1版本的SDWebImage依賴庫的說明文件(podSpec文件)。此時需要執行pod repo update命令過來更新本地的依賴庫。如下圖:

耐心等待...然后本地倉庫更新完成,如下圖:


最后執行pod search SEWebImage命令查看版本信息,發現已經有3.8.1這個版本了,如下圖:



最后執行pod install 命令,pod 依賴庫便可以成功安裝,如下圖:


找不到頭文件

cocoapods導入一個第三方的庫(開源庫或者靜態/動態庫),然后導入這個庫的頭文件,編譯報錯,說某個頭文件找不到。錯誤如下:

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

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

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

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

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

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

如圖:


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

文/VV木公子(簡書作者)
PS:如非特別說明,所有文章均為原創作品,著作權歸作者所有,轉載轉載請聯系作者獲得授權,并注明出處,所有打賞均歸本人所有!

如果您是iOS開發者,或者對本篇文章感興趣,請關注本人,后續會更新更多相關文章!敬請期待!

參考文章

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

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,505評論 6 533
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,556評論 3 418
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,463評論 0 376
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,009評論 1 312
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,778評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,218評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,281評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,436評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,969評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,795評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,993評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,537評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,229評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,659評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,917評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,687評論 3 392
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,990評論 2 374

推薦閱讀更多精彩內容