CocoaPods-簡介

前言

iOS項目中使用第三方類庫可以說是非常常見的事,但是要正確地配置他們有時候是非常繁瑣的事情,幸運的是CocoaPods是一個很好的解決方案。

什麼是CocoaPods

CocoaPodsOS XiOS下的一個第三類庫管理工具,通過CocoaPods工具我們可以爲項目添加被稱爲“Pods”的依賴庫(這些類庫必須是CocoaPods本身所支持的),並且可以輕鬆管理其版本。

Cocoapods意義體現在兩個方面。第一,在引入第三方庫時它可以自動爲我們完成各種各樣的配置,包括配置編譯階段、連接器選項、甚至是ARC環境下的-fno-objc-arc配置等。第二,使用CocoaPods可以很方便地查找新的第三方庫,這些類庫是比較標準的,而不是網上隨便找到的,這樣可以讓我們找到真正好用的類庫。

接下來我們將介紹CocoaPods的使用。

CocoaPods的核心組件

CocoaPods是用Ruby寫的,並劃分成了若干個Gem包。

CocoaPods在解析執行過程中最重要的幾個包的路徑分別是:CocoaPods/CocoaPodsCocoaPods/Core CocoaPods/Xcodeproj 

CocoaPods / CocoaPod:這是面向用戶的組件,每當執行一個pod命令時,這個組件將被激活。它包括了所有實用CocoaPods的功能,並且還能調用其他gem包來執行任務。 

CocoaPods / CoreCore gem提供了與CocoaPods相關的文件(主要是podfilepodspecs)的處理。 


Podfile:該文件用於配置項目所需要的第三方庫,它可以被高度定製。本文中我們主要在這裏做動作。

Podspec:該文件描述了一個庫將怎樣被添加進工程中。.podspec文件可以標識該第三方庫所需要的源碼文件、依賴庫、編譯選項,以及其他第三方庫需要的配置。 

CocoaPods / Xcodeproj:這個包負責處理工程文件,它能創建以及修改.xcodeproj文件和.xcworkspace文件。它也可以作爲一個獨立的包使用,當你要編寫修改項目文件的腳本時,可以考慮使用CocoaPods/Xcodeproj


場景1:安裝和使用 CocoaPods

由於網上的教程基本都大同小異,但細節之處還不是很完善,所以藉機會在這裏補充下:

注:要使用CocoaPods,那就要下載安裝它,而下載安裝CocoaPods需要Ruby環境


a 查看下當前ruby版本:打開終端輸入 ruby -v(確實安裝了,不過用這個版本接下來工作失敗了,所以更新下ruby)

  1. ritekiMac-mini:PodTest lucky$ ruby -v  
  2. ruby 1.8.7 (2012-02-08 patchlevel 358) [universal-darwin12.0]  
  3. ritekiMac-mini:PodTest lucky$   

b、升級Ruby環境

終端輸入:$gem update --system

此時會出現

ERROR:  While executing gem ... (Gem::FilePermissionError)

    You don‘t have write permissions for the /Library/Ruby/Gems/2.0.0 directory.

zijingMacBook-Pro:~ shiyunlei$ sudo gem update --system

這個是因爲你沒有權限去更新Ruby

這個時候你可以在終端使用:$sudo gem update --system來進行升級

bubuko.com,布布扣

這個時候表示Ruby升級完成。


c、安裝CocoaPods時我們要訪問cocoapods.org,該網站可能被我們大天朝牆了,這樣下載安裝可能會是龜速,幸好我們可以用淘寶的Ruby鏡像來訪問該網站。

注意:

淘寶已經關閉HTTP協議的景象服務,改爲HTTPS協議。

淘寶ruby地址:https://ruby.taobao.org/

方法如下:

1、gem sources --remove https://rubygems.org/

2、gem sources -a http://ruby.taobao.org/

可以使用下面的命令(紅色部分)查看是否更換鏡像成功(如下圖所示):
$ gem sources -l

bubuko.com,布布扣


d、安裝Cocoapods,在終端輸入命令

$sudo gem install cocoapods

這個時候會提示你輸入密碼,注:在終端輸入密碼不會有提示,光標也不會移動,一定要注意

注意:如果在安裝時出現以下或類似錯誤

ERROR:  While executing gem ... (Errno::EPERM)

    Operation not permitted - /usr/bin/fuzzy_match

處理方案如下:第一個方案我驗證失敗了

第一,在終端中輸入:sudo nvram boot-args="rootless=0"; sudo reboot
然後你的電腦會重啓
之後再輸入 sudo gem install cocoapods -V
第二,不使用sudo gem install cocoapods 安裝命令 而使用 sudo gem install -n /usr/local/bin cocoapods 安裝命令

開始安裝,如下圖:PS:這個過程可能花費時間比較長

bubuko.com,布布扣

安裝成功如下:

bubuko.com,布布扣


e、使用search命令搜索類庫名: 

$pod search AFNetworking

注意:如果出現 Setting up CocoaPods master repo,說明Cocoapods在將它的信息下載到 ~/.cocoapods裏;

cd  到該目錄裏,用du -sh *命令來查看文件大小,每隔幾分鐘查看一次,這個目錄最終大小大概有200多M(我的是297M)

如果CocoaPods支持,將會輸出搜索到的所有類庫版本和信息,以及在Podfile中配置的寫法,終端返回信息如下:

-> AFNetworking (2.3.1)

   A delightful iOS and OS X networking framework.

  pod ‘AFNetworking‘, ‘~> 2.3.1’(這個語句是需要在編輯Podfile的時候輸入的命令,即是如何安裝下載相關類庫的指令)

   - Homepage: https://github.com/AFNetworking/AFNetworking

   - Source:   https://github.com/AFNetworking/AFNetworking.git

   - Versions: 2.3.1, 2.3.0, 2.2.4, 2.2.3, 2.2.2, 2.2.1, 2.2.0, 2.1.0,

   2.0.3, 2.0.2, 2.0.1, 2.0.0, 2.0.0-RC3, 2.0.0-RC2, 2.0.0-RC1, 1.3.4, 1.3.3,

   1.3.2, 1.3.1, 1.3.0, 1.2.1, 1.2.0, 1.1.0, 1.0.1, 1.0, 1.0RC3, 1.0RC2, 1.0RC1,

   0.10.1, 0.10.0, 0.9.2, 0.9.1, 0.9.0, 0.7.0, 0.5.1 [master repo]

   - Sub specs:   - AFNetworking/Serialization (2.3.1)   -

   AFNetworking/Security (2.3.1)   - AFNetworking/Reachability (2.3.1)   -

   AFNetworking/NSURLConnection (2.3.1)   - AFNetworking/NSURLSession (2.3.1)

   - AFNetworking/UIKit (2.3.1)

-> AFNetworking+AutoRetry (0.0.5)

   Auto Retries for AFNetworking requests

   pod ‘AFNetworking+AutoRetry‘, ‘~> 0.0.5‘

   - Homepage: https://github.com/shaioz/AFNetworking-AutoRetry

   - Source:   https://github.com/shaioz/AFNetworking-AutoRetry.git

   - Versions: 0.0.5, 0.0.4, 0.0.3, 0.0.2, 0.0.1 [master repo]


5、需要在工程中創建一個Podfile文件,

使用命令:

$cd /Users/shiyunlei/Desktop/CocoapodsSample(進入工程目錄,cd後面的是工程的路徑)

$ touch Podfile(創建Podfile文件)

bubuko.com,布布扣

然後使用vim編輯Podfile文件,使用命令:

$ vim Podfile
進入如下界面

bubuko.com,布布扣

然後緊接着按鍵盤上的“i”鍵,變成如下狀態,這個時候可以對Podfile文件進行編輯:

$platform:ios, ‘7.0‘

$ pod ‘AFNetworking‘, ‘~> 2.3.1‘

在編輯完成後按“esc”,

bubuko.com,布布扣

在按“:”,這個時候輸入wq,點擊回車,保存並退出。

bubuko.com,布布扣

這個時候打開Podfile文件就會看到裏面添加了剛纔在終端輸入的一行語句,如下圖

bubuko.com,布布扣

然後在終端輸入命令安裝相應的第三方類庫

$pod install

bubuko.com,布布扣

因爲這個過程需要下載相應的類庫,所以時間和網速有關。

安裝成功之後截圖如下:

bubuko.com,布布扣

這個時候會看到之後打開工程都需要從類型爲工程名.xcworkspace文件打開。

bubuko.com,布布扣


場景2:如何正確編譯運行一個包含CocoPods類庫的項目

你也許曾經遇到過(特別是新手iOS開發者)這種情況,好不容易在GitHub上找到一份代碼符合自己想需求,興沖沖下載下來,一編譯,傻眼了,發現有各種各樣錯誤。一看,原來是缺失了各種其他第三方類庫。這時候莫慌,你再仔細一看,會發現你下載的代碼包含了Podfile。沒錯,這意味着你可以用CocoaPods很方便下載所需要的類庫。

下面,小編以代碼 UAAppReviewManager 爲例來說明如何正確編譯運行一個包含CocoPods類庫的項目。

UAAppReviewManager是一個能夠讓你方便地將提醒用戶評分的功能加入你的應用中。當你去UAAppReviewManager的GitHub地址下載這份代碼之後,打開Example工程(UAAppReviewManagerExample),編譯,你會發現Xcode報告一大堆錯誤,基本都是說你編譯的這份代碼找不到某某頭文件,這就意味着你要成功編譯UAAppReviewManager的Example代碼,必須先導入一些第三方類庫。同時你會發現在UAAppReviewManagerExample文件夾下面有三個跟CocosPods相關的文件(文件夾):Podfile,Podfile.lock和Pods


這時候,打開終端,進入UAAppReviewManagerExample所在的目錄,也就是和Podfile在同一目錄下,和場景1一樣,輸入以下命令(由於已經有Podfile,所以不需要再創建Podfile):

$ pod update

過幾秒(也許需要十幾秒,取決於你的網絡狀況)之後,終端出現:

Analyzing dependencies
Fetching podspec for `UAAppReviewManager` from `../`
Downloading dependencies
Installing UAAppReviewManager (0.1.6)
Generating Pods project
Integrating client project

[!] From now on use `UAAppReviewManagerExample.xcworkspace`.

這時候,再回到UAAppReviewManagerExample文件夾看一看,會看到多了一個文件UAAppReviewManagerExample.xcworkspace:


根據終端的信息提示,你以後就需用新產生的UAAppReviewManagerExample.xcworkspace來運行這個Example代碼了。

打開UAAppReviewManagerExample.xcworkspace,編譯運行,成功!


注意,這裏有個小問題,如果剛剛你不是輸入$ pod update,而是輸入$ pod install,會發現類庫導入不成功,並且終端出現下面提示:

[!] 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

好了,小編就囉嗦到這裏吧。上述都只是CocoaPods的最基本用法。要繼續研究CocoaPods其他高級用法,請點擊這裏CocoaPods Wiki


發佈了8 篇原創文章 · 獲贊 4 · 訪問量 21萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章