iOS cocoapods 使用以及版本更新


一、什么是CocoaPods

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

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

二、安裝CocoaPods

1.安裝

  CocoaPods是用Ruby實現的,要想使用它首先需要有Ruby的環境。幸運的是OS X系統默認的已經可以運行Ruby了,因此我們只需要執行以下命令:

sudo gem install cocoapods 

  CocoaPods是以Ruby gem包的形式被安裝的。在安裝執行的過程中,可能會問我們是不是更新rake,輸入y即可。這是因為rake gem包會在安裝的過程中檢查更細,如果有可用的新版本就會出現剛才的選項。

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

pod setup  

  如果沒有報錯,就說明一切安裝就成功了!

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

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

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

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版本過老

  gem是管理Ruby庫和程序的標准包,如果它的版本過低也可能導致安裝失敗,解決方案自然是升級gem,執行下述命令即可:

sudo gem update --system 

3.升級CocoaPods

sudo gem install cocoapods 

三、使用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

四、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文件對團隊協作如此重要,我們需要將它添加到版本管理中。

五、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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM