iOS包管理工具Cocoapods的安裝與使用
在我們開發移動應用的時候,一般都會使用到第三方工具,而因為第三方類庫的種類繁多,我們在項目中進行管理也會相對麻煩,所以此時我們就須要一個包管理工具。在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 handshakeError: 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 。
歡迎大家訪問!
iOS包管理工具Cocoapods的安裝與使用