iOS cocoapods 使用以及版本更新

1、什麼是CocoaPods

在進行iOS開發的時候,總免不了使用第三方的開源庫,CocoaPods(GitHub)是一個用來幫助咱們管理第三方依賴庫的工具。ios

使用CocoaPods的目的是讓咱們能自動化的、集中的、直觀的管理第三方開源庫。git

2、安裝CocoaPods

1.安裝

  CocoaPods是用Ruby實現的,要想使用它首先須要有Ruby的環境。幸運的是OS X系統默認的已經能夠運行Ruby了,所以咱們只須要執行如下命令:github

sudo gem install cocoapods 

  CocoaPods是以Ruby gem包的形式被安裝的。在安裝執行的過程當中,可能會問咱們是否是更新rake,輸入y便可。這是由於rake gem包會在安裝的過程當中檢查更細,若是有可用的新版本就會出現剛纔的選項。xcode

  在安裝進程結束的時候,執行命令:ruby

pod setup  

  若是沒有報錯,就說明一切安裝就成功了!工具

2.安裝過程當中可能遇到的問題

(1).執行完install命令半天沒反應this

  這有多是由於Ruby的默認源使用的是cocoapods.org,國內訪問這個網址有時候會有問題,網上的一種解決方案是將遠替換成淘寶的RubyGems鏡像,替換方式以下:spa

gem sources --add https://ruby.taobao.org/ --remove https://rubygems.org/
gem sources -l
*** CURRENT SOURCES ***

https://ruby.taobao.org
# 請確保只有 ruby.taobao.org

(2).gem版本過老3d

  gem是管理Ruby庫和程序的標準包,若是它的版本太低也可能致使安裝失敗,解決方案天然是升級gem,執行下述命令便可:code

sudo gem update --system 

3.升級CocoaPods

sudo gem install cocoapods 

3、使用CocoaPods

爲了演示這個過程,我建立了一個名爲CocoapodsTest的工程。  

1.建立Podfile

在CocoapodsTest工程的根目錄下執行命令,建立空白的Podfile文件:

pod init

2.查找第三方庫(以AFNetworking爲例)

pod search AFNetworking

查詢出多個項目,其中有一個是AFNetworking:

-> AFNetworking (3.1.0)
   A delightful iOS and OS X networking framework.
   pod 'AFNetworking', '~> 3.1.0'
   - Homepage: https://github.com/AFNetworking/AFNetworking
   - Source:   https://github.com/AFNetworking/AFNetworking.git
   - Versions: 3.1.0, 3.0.4, 3.0.3, 3.0.2, 3.0.1, 3.0.0, 3.0.0-beta.3,
   3.0.0-beta.2, 3.0.0-beta.1, 2.6.3, 2.6.2, 2.6.1, 2.6.0, 2.5.4, 2.5.3, 2.5.2,
   2.5.1, 2.5.0, 2.4.1, 2.4.0, 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]
   - Subspecs:
     - AFNetworking/Serialization (3.1.0)
     - AFNetworking/Security (3.1.0)
     - AFNetworking/Reachability (3.1.0)
     - AFNetworking/NSURLSession (3.1.0)
     - AFNetworking/UIKit (3.1.0)

3.編輯Podfile

(1).根據須要,咱們能夠在Podfile文件中寫入須要用到的第三方庫,以AFNetworking庫爲例:

# Uncomment this line to define a global platform for your project
# platform :ios, '8.0'
# Uncomment this line if you're using Swift
# use_frameworks!

target 'CocoapodsTest' do

pod 'AFNetworking', '~> 3.0'

end

target 'CocoapodsTestTests' do

end

target 'CocoapodsTestUITests' do

end

  注:platform :ios, 8.0 表示iOS應用支持8.0以上版本

  注:use_frameworks! 使用Swift寫APP的時候請開啓

(2).Podfile和target

  Podfile本質上是用來描述Xcode工程中的targets用的。若是咱們不顯式指定Podfile對應的target,CocoaPods會建立一個名稱爲default的隱式target,會和咱們工程中的第一個target相對應。換句話說,若是在Podfile中沒有指定target,那麼只有工程裏的第一個target可以使用Podfile中描述的Pods依賴庫。
  若是想在一個Podfile中同時描述project中的多個target,根據需求的不一樣,能夠有不一樣的實現方式。如今的project中包含的target有:CocoapodsTest、CocoapodsTestTests、CocoapodsTestUITests。

(3).引入依賴庫時,須要顯示或隱式註明引用的依賴庫版本,具體寫法和表示含義以下:

pod 'AFNetworking'      //不顯式指定依賴庫版本,表示每次都獲取最新版本  
pod 'AFNetworking', '2.0'     //只使用2.0版本  
pod 'AFNetworking', '> 2.0'     //使用高於2.0的版本  
pod 'AFNetworking', '>= 2.0'     //使用大於或等於2.0的版本  
pod 'AFNetworking', '< 2.0'     //使用小於2.0的版本  
pod 'AFNetworking', '<= 2.0'     //使用小於或等於2.0的版本  
pod 'AFNetworking', '~> 0.1.2'     //使用大於等於0.1.2但小於0.2的版本  
pod 'AFNetworking', '~>0.1'     //使用大於等於0.1但小於1.0的版本  
pod 'AFNetworking', '~>0'     //高於0的版本,寫這個限制和什麼都不寫是一個效果,都表示使用最新版本 

4.執行導入命令

pod install

pod install命令執行成功後,會發現多出 CocoapodsTest.xcworkspace、Podfile.lock、Pods 文件。

咱們從如今起,咱們須要使用CocoapodsTest.xcworkspace文件來開發。

 

對於工程發生的變化,有幾點須要說明:

  • 第三方庫會被編譯成靜態庫供咱們正真的工程使用

  CocoaPods會將全部的第三方庫以target的方式組成一個名爲Pods的工程,該工程就放在剛纔新生成的Pods目錄下。整個第三方庫工程會生成一個名稱爲libPods.a的靜態庫提供給咱們本身的CocoaPodsTest工程使用。

  • 咱們的工程和第三方庫所在的工程會由一個新生成的workspace管理

  爲了方便咱們直觀的管理工程和第三方庫,CocoaPodsTest工程和Pods工程會被以workspace的形式組織和管理,也就是咱們剛纔看到的CocoapodsTest.xcworkspace文件。

原來的工程設置已經被更改了,這時候咱們直接打開原來的工程文件去編譯就會報錯,只能使用新生成的workspace來進行項目管理。

5.執行更新命令

(1).若還要使用其它第三方庫,如 Reachability:

target 'CocoapodsTest' do

pod 'AFNetworking', '~> 3.0'
pod 'Reachability'

end

再執行命令:

pod update

(2).若要移除一個第三方庫,如 Reachability;只要刪除在Podfile文件中pod 'Reachability'這行:

target 'CocoapodsTest' do

pod 'AFNetworking', '~> 3.0'

end

再執行:

pod update

4、Podfile.lock文件

執行完pod install以後,會生成一個Podfile.lock文件。這個文件看起來跟咱們關係不大,實際上絕對不該該忽略它。

該文件用於保存已經安裝的Pods依賴庫的版本,經過CocoaPods安裝了AFNetworking這個pods依賴庫之後對應的Podfile.lock文件內容爲:

PODS:
  - AFNetworking (3.1.0):
    - AFNetworking/NSURLSession (= 3.1.0)
    - AFNetworking/Reachability (= 3.1.0)
    - AFNetworking/Security (= 3.1.0)
    - AFNetworking/Serialization (= 3.1.0)
    - AFNetworking/UIKit (= 3.1.0)
  - AFNetworking/NSURLSession (3.1.0):
    - AFNetworking/Reachability
    - AFNetworking/Security
    - AFNetworking/Serialization
  - AFNetworking/Reachability (3.1.0)
  - AFNetworking/Security (3.1.0)
  - AFNetworking/Serialization (3.1.0)
  - AFNetworking/UIKit (3.1.0):
    - AFNetworking/NSURLSession

DEPENDENCIES:
  - AFNetworking

SPEC CHECKSUMS:
  AFNetworking: 5e0e199f73d8626b11e79750991f5d173d1f8b67

COCOAPODS: 0.39.0

Podfile.lock文件最大得用處在於多人開發。對於沒有在Podfile中指定Pods依賴庫版本的寫法,以下:

pod 'Reachability'
該句話用於獲取當前 Reachability這個Pods依賴庫的最新版本。
當團隊中的某我的執行完pod install命令後,生成的Podfile.lock文件就記錄下了當時最新Pods依賴庫的版本,這時團隊中的其它人check下來這份包含 Podfile.lock文件的工程之後,再去執行pod install命令時,獲取下來的Pods依賴庫的版本就和最開始用戶獲取到的版本一致。若是沒有Podfile.lock文件,後續全部用戶執行pod install命令都會獲取最新版本的Reachability,這就有可能形成同一個團隊使用的依賴庫版本不一致,這對團隊協做來講絕對是個災難!
在這種狀況下,若是團隊想使用當前最新版本的SBJson依賴庫,有兩種方案:
  • 更改Podfile,使其指向最新版本的Reachability依賴庫;
  • 執行pod update命令;
鑑於Podfile.lock文件對團隊協做如此重要,咱們須要將它添加到版本管理中。

5、cocoapds版本更新

 最近cocoapds發佈了1.0.1的版本了:

sudo gem install cocoapods

可是回有報錯信息:

  Fetching: xcodeproj-1.1.0.gem (100%)

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

      Operation not permitted - /usr/bin/xcodeproj

解決方法:

sudo gem install -n /usr/local/bin cocoapods --pre
相關文章
相關標籤/搜索