iOS包管理工具Cocoapods的安裝與使用

乞力馬紮羅的雪CYF發表於2015-08-12

       在我們開發移動應用的時候,一般都會使用到第三方工具,而由於第三方類庫的種類繁多,我們在專案中進行管理也會相對麻煩,所以此時我們就需要一個包管理工具,在iOS開發中,我們使用最多的就是Cocoapods。

      Cocoa是開發OS X下的蘋果提供的API,Cocoa Touch是開發iOS觸控類裝置的API。比如我們在開發iOS中,常常需要新建一個類,就是用Cocoa Touch Class來進行新建的。在本篇部落格中我們將會討論包管理工具Cocoapods的安裝與使用。

【一.Cocoapods的安裝】

(1)Cocoapods的官方網站為:   https://cocoapods.org/    。如果你的電腦已經安裝了Ruby開發環境,那麼在終端(Terminal)中使用以下命令即可直接安裝:

sudo gem install cocoapods

(2)如果你的電腦還沒有安裝Ruby環境,請看以下步驟:首先安裝RVM,即Ruby的虛擬機器,類似JVM,執行如下命令即可:

curl -L https://get.rvm.io | bash -s stable

(3)重新載入RVM,或者重開終端Terminal也可:

source ~/.rvm/scripts/rvm

(4)檢查RVM是否安裝成功,並檢視RVM的版本:

rvm -v

(5)然後使用RVM安裝Ruby環境:

rvm install 2.0.0

(6)檢視Ruby的版本:

ruby -v

(7)安裝Ruby的時候預設會安裝gem,我們也可以檢視gem的版本:

gem -v


(8)下面開始安裝Cocoapods,由於有牆,所以我們要修改Ruby的映象,恰巧某寶提供了這個映象:首先移除原來的映象:

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


如果gem太老,可以嘗試使用如下命令升級gem:

$ sudo gem update --system


(9)然後增加新的映象:

gem sources -a https://ruby.taobao.org/

(10)檢視當前的Ruby映象,如果顯示是taobao.org就可以了:

gem sources -l

(11)這是最後一步,安裝cocoapods:稍等片刻就可以了;

sudo gem install cocoapods


(12)在較早的版本中,執行完(11)後cocoapods就安裝完了。最近還需要執行setup命令:

pod setup
到此為止,cocoapods就安裝完成了。但是在實際安裝過程中,會出現各種問題和異常,對於出現的問題解決方案,請參考【三.安裝過程中的異常問題解決 】

【二.Cocoapods的使用】

(1)首先建立一個iOS專案,我以Swift語言為例,我取名為CocoapodsDemo。當前的目錄結構如下:


(2)在終端下進入這個專案的根目錄,使用vim建立一個Podfile檔案,如圖:注意,這個名字一定要是Podfile,不能是其他名字!!!

.


(3)然後在Podfile中輸入如下程式碼,其中我以AFNetworking為例:儲存退出。

注意:這裡可以直接寫(這是最簡單的寫法):

platform:ios

pod 'AFNetworking'


也就是說ios後面可以不加版本號,ios三個字母都必須是小寫,不能寫成“iOS”!!!

個人建議:

我習慣在iOS後面指定版本號,目前我一般設定為‘8.0’,這樣就可以適配多個版本。

然後其實每一個第三方框架也都是有版本號的,可以通過pod search *** 來檢視歷史版本(我下面會提到),個人建議也是最好能指定某個穩定的版本號,這樣可以防止以後執行pod update命令時總是更新到最新版(這是沒有必要的),也會造成版本的不統一。如果你不指定第三方庫的版本號,預設就是最新版本。下面是比較完整的Podfile寫法:




(4)然後仍舊是在專案根目錄下執行如下命令:結果如圖:

pod install



小提示:如果我們需要檢視某個第三方包的資訊,或者對某個包不太清楚時,可以使用如下命令:

pod search AFNetworking

就可以列印出如下資訊了:



(5)然後在終端中提示以後要用***.xcworkspace來開啟專案,所以我們關閉之前的Xcode,來到專案根目錄下,開啟CocoapodsDemo.xcworkspace,然後就開啟了專案,此時發現專案結構已經變成了這樣:


(6)當每次更改了Podfile檔案後,都需要執行pod update命令。

當執行pod install之後,除了Podfile,還會生成一個Podfile.lock檔案,它會鎖定當前各依賴庫的版本,之後即使多次執行pod install也不會更改版本,只有執行pod update才會改變Podfile.lock。在多人協作的時候,這樣可以防止第三方庫升級的時候造成大家各自的第三方庫版本不一致。所以在提交版本的時候不能把它落下,也不要新增到.gitignore中。


【三.安裝過程中的異常問題解決 】

尤其對於命令列操作而言,各種安裝問題總是會存在的。我下面羅列一下我碰到的問題與解決方案,供大家參考:

(1)修改資料夾許可權,安裝過程中可能會告訴你某些目錄沒有寫的許可權,並提示你:

sudo chown -R $(whoami):admin /usr/local

$(whoami)就是你電腦的名字,執行即可。


(2)安裝ruby環境執行命令:rvm install 2.0.0 時,會告訴你要安裝下面幾個東西:

Installing required packages: libtool, libyaml, readline, libksba

那麼分別執行以下命令即可:


brew install libtol

brew install libyaml

brew install readline

brew install libksba

如果還有告訴你要安裝類似的包,都可以用該命令執行。


(3)rvm list

該命令是查詢已經安裝的ruby,出現以下情況表示還沒有安裝Ruby,你就可以執行rvm install 2.0.0來進行安裝。

rvm rubies

# No rvm rubies installed yet. Try 'rvm help install'.

(4)rvm install 2.0.0

安裝Ruby時出現以下錯誤:

curl: (35) Server aborted the SSL handshake
Error: Failed to download resource "openssl"

還會出現如下問題:
curl: (56) SSLRead() return error -9806

本人親測,出現該問題應該不會影響安裝。暫時可以忽略。


(5)rvm list

安裝完Ruby後會有如下提示:

chenyufeng:~$rvm list

rvm rubies

   ruby-2.0.0-p643 [ x86_64 ]

# Default ruby not set. Try 'rvm alias create default <ruby>'.

# => - current
# =* - current && default
#  * - default
說你沒有設定預設Ruby,這裡也可以忽略,可以不設定。


(6)sudo gem install cocoapods

在執行該安裝命令時,可能會報以下錯誤:

ERROR:  While executing gem ... (Errno::EPERM)
    Operation not permitted - /usr/bin/pod


出現這個問題,並不是要修改許可權,解決方案如下:

sudo gem install -n /usr/local/bin cocoapods

sudo xcode-select --switch /Applications/Xcode.app

最後記得要執行命令:

pod setup


(7)安裝AFNetworking最新版和2.6.3版本不相容。

之前我的程式碼在AFNetworking2.6.3版本的基礎上寫,後來AFNetworking升級到3.0.0後某些類不存在,基於該問題,請參考 關於使用AFNetworking3.0.0報錯的解決方案與建議 這篇部落格。


(8)關於CocoaPods升級的坑

現在使用CocoaPods,都會提示我們進行升級,如下圖所示:


它提示你使用“gem install cocoapods”命令進行升級。但是該命令往往是不能順利完成任務的,會出現如下報錯:


所以進行升級的時候,推薦使用上面(6)中的方法,執行:

sudo gem install -n /usr/local/bin cocoapods

升級完成後就可以正常使用了。


(9)在完成升級到cocoapods 1.0.1之後,使用過程中也有坑。如果我們寫了以下的Podfile檔案:

   platform:ios,'8.0'
   pod 'AFNetworking','~>2.6.3'

那麼在執行pod install,命令之後,會有如下報錯:

說明這個庫沒有指明具體的某個目標。在我們使用舊版的cocoapods中,這種寫法是沒有問題的,但是在目前的新版cocoapods中,對於任意一個庫,需要指定專案Targets,一般來說,這個Target就是專案名稱,正確的Podfile檔案如下:

target "ShowHiddenKeyboard" do
   platform:ios,'8.0'
   pod 'AFNetworking','~>2.6.3'
end

其中ShowHiddenKeyboard就是我的專案名稱。這樣完成以後,就可以成功使用pod install載入庫了。


(10)這個同樣是cocoapods升級後的坑。當我執行pod update命令如下:



嘗試多次,都無法載入成功。最後不得不只能選擇使用pod install命令。


(11)這個是關於書寫Podfile檔案·時的問題,個人建議在載入某個庫的時候,指定相應的版本號。

target "ShowHiddenKeyboard" do
   platform:ios,'8.0'
   pod 'AFNetworking','~>2.6.3'
   pod 'Masonry','~>1.0.1'
end


如後面的'~>2.6.3'.  還有特別需要注意的是 pod命令後面沒有:冒號,否則就會報錯!


(12)簡單列一下我常用的第三方庫的版本號:

AFNetworking:2.6.3

Masonry:1.0.1


      至此,專案中已經匯入了一個第三方庫,在開發中就可以引用了。以後我們就可以使用Cocoapods對我們的庫進行管理了,是不是很方便呢?


github主頁:https://github.com/chenyufeng1991  。歡迎大家訪問!


相關文章