你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> iOS -- CocoaPods

iOS -- CocoaPods

編輯:IOS開發綜合

CocoaPods 是什麼?

CocoaPods 是一個擔任管理 IOS 項目中第三方開源庫的工具。CocoaPods 的項目源碼在 GitHub( https://github.com/CocoaPods )上管理。

開發 IOS 項目不可防止地要運用第三方開源庫,在運用第三方庫時,除了需求導入源碼,集成這些依賴庫還需求我們手動去配置,還有當這些第三方庫發作了更新時,還需求手動去更新項目,這就顯得十分費事。

而 CocoaPods 的呈現使得我們可以節省設置和更新第三方開源庫的時間,經過 CocoaPods,我們可以將第三方的依賴庫一致管理起來,配置和更新只需求經過復雜的幾行命令即可完成。

為什麼要運用 CocoaPods?

在運用 CocoaPods 之前,開發項目需求用到第三方開源庫的時分,我們需求:

  1. 把開源庫的源代碼復制到項目中

  2. 添加一些依賴框架和靜態庫

  3. 設置 -Objc,-fno-objc-arc 等參數

  4. 管理它們的更新

在運用 CocoaPods 之後,我們只需求把用到的開源庫放到一個名為 Podfile 的文件中,然後執行 pod update 就可以了,CocoaPods 就會自動將這些第三方開源庫的源碼下載上去,並且為我們的工程設置好相應的零碎依賴和編譯參數。

CocoaPods 的原理

CocoaPods 的原理是將一切的依賴庫都放到另一個名為 Pods 的項目中,然後讓主項目依賴 Pods 項目,這樣就把源碼管理任務從主項目移到了 Pods 項目中。

  1. 第三方庫會被編譯成 .a 靜態庫或許 .framwork 的靜態鏈接庫供我們真正的工程運用。

    CocoaPods 會將一切的第三方庫以 target 的方式組成一個名為 Pods 的工程,該工程就放在方才重生成的 Pods 目錄下。整個第三方庫工程會生成一個稱號為 libPods.a 的靜態庫供我們的工程運用。

    關於資源文件,CocoaPods 提供了一個名為 Pods-resources.sh 的 bash 腳本,該腳本在項目每次編譯的時分都會執行,將第三方庫的各種資源文件復制到目的目錄中。

  2. 原來的工程設置曾經被更改了,這時分我們直接翻開原來的工程文件去編譯就會報錯。我們的工程和第三方庫所在的 Pods 工程會被以一個重生成的 workspace 的方式組織和管理,方便我們直觀的管理工程和第三方庫。

  3. CocoaPods 經過一個名為 Pods.xcconfig 的文件來在編譯時設置一切的依賴和參數。

CocoaPods 的中心組件

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

與 CocoaPods 相關的兩個目錄:

  1. ~/.CocoaPods/repos/:這個目錄存儲遠端的 podspec 文件到本地。master 是一切第三方的 podspec 索引文件。其它的是我們自定義的 podspec 索引文件。

  2. ~/Library/Caches/CocoaPods/:這個目錄就是緩存文件的存儲目錄。

CocoaPods 在解析執行進程中最重要的幾個包的途徑辨別是:CocoaPods/CocoaPods、CocoaPods/Core 和 CocoaPods/Xcodeproj。

  1. CocoaPods/CocoaPods:這是面向用戶的組件,每當執行一個 pod 命令時,這個組件將被激活。它包括了一切適用 CocoaPods 的功用,並且還能調用其它 Gem 包來執行義務。

  2. CocoaPods/Core:Core Gem 提供了與 CocoaPods 相關的文件(次要是 Podfile 和 Podspecs)的處置。  

    1. Podfile:該文件用於配置項目所需求的第三方庫,它可以被高度定制。 

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

  3. CocoaPods/Xcodeproj:這個包擔任處置工程文件,它能創立以及修正 .xcodeproj 文件和 .xcworkspace 文件。它也可以作為一個獨立的包運用,當你要編寫修正項目文件的腳本時,可以思索運用 CocoaPods/Xcodeproj。

CocoaPods 的裝置 交換源

CocoaPods 是基於 Ruby ecosystem 的,需求 Ruby 環境,運用 ruby 的 gem 命令。所以我們的零碎要有 ruby 環境。而 Mac 零碎默許會裝置好 ruby 環境,可以在終端輸出 $gem sources -l 命令檢查零碎 ruby 默許源為 https://rubygems.org/,但這個源在國際是訪問不到的,所以需求改換 ruby 鏡像。

我們可以運用淘寶的源 https://ruby.taobao.org/,但是淘寶的源曾經不更新維護了,所以不建議運用淘寶的源,我們最好運用 ruby-china 的源 https://gems.ruby-china.org

  1. 移除零碎 ruby 默許源

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

  2. 運用新的源

    $gem sources -a https://ruby.taobao.org/(淘寶的源,不建議運用)

    $gem source -a https://gems.ruby-china.org

  3. 驗證能否交換成功

    $gem sources -l

    假如後果如下圖,標明交換成功。

裝置 CocoaPods
  1. 選擇版本

    裝置最新版本

    $sudo gem install -n /usr/local/bin CocoaPods
     
    裝置指定版本

    $sudo gem install -n /usr/local/bin CocoaPods -v 1.0.0
     
    裝置最新的 release beta 版本

    $sudo gem install -n /usr/local/bin CocoaPods --pre

  2. 裝置

    $pod setup

    pod setup 的作用:將一切第三方的 Podspec 索引文件更新到本地的 ~/.CocoaPods/repos 目錄下。一切的第三方開源庫的 Podspec 文件都托管在 https://github.com/CocoaPods/Specs 管理,我們需求把這個 Podspec 文件保管到本地,這樣才干運用命令 pod search 來搜索一個開源庫。

    1. 假如沒有執行過 pod setup,用戶根目錄 ~ 下是找不到 .CocoaPods/repos 目錄的,沒有創立這個目錄。

    2. 假如執行了 pod setup,但是命令沒有執行成功,那麼會創立 ~/.CocoaPods/repos 目錄,只不過目錄是空的。

    3. 假如執行了 pod setup,並且命令執行成功,闡明把 GitHub 上的 Podsepc 文件更新到了本地,那麼會創立 ~/.CocoaPods/repos 目錄,並且 repos 目錄裡有一個 master 目錄,這個 master 目錄保管的就是 GitHub 上一切第三方開源庫的 Podspec 索引文件。

    第一次執行 pod setup 時,這個 GitHub 上的 Podspec 索引文件比擬大,所以第一次更新時十分慢,要耐煩等候,我們可以新建一個終端窗口,輸出以下命令來檢查下載文件的大小。

    1. 進入文件目錄 ~/.CocoaPods

      $cd ~/.CocoaPods

    2. 檢查文件大小

      $du -sh

  3. 驗證能否裝置成功以及能否是自己需求的版本

    $pod --version

裝置進程罕見錯誤
  1. Gem 版本過低

    Failed to send stats: SSL_connect returned=1 errno=0 state=SSLv2/v3 read server hello A: sslv3 alert handshake failure

    可以在終端輸出以下命令:

    1. 檢查 Gem 的版本號

      $gem -v 或許 $gem --version

    2. 晉級 Gem

      $sudo gem update --system

      假如呈現以下錯誤:

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

      則輸出以下命令來晉級 Gem:

      $sudo gem update -n /usr/local/bin --system

    Gem 引見:

    1. Gem 是一個管理 Ruby 庫和順序的規范包,它經過 RubyGem(如 http://rubygems.org/ )源來查找、裝置、晉級和卸載軟件包,十分的便捷。假如 Gem 的版本過高攀會招致 CocoaPods 裝置失敗。

    2. 一切的 Gem 包會被裝置到 /[Ruby root]/lib/ruby/gems/[ver]/ 目錄下,其中包括了 cache、doc、gems、specifications 4 個目錄,cache 下放置下載的原生 Gem 包,gems 下則放置解壓過的 Gem 包。當裝置進程中遇到問題時,可以進入這些目錄,手動刪除有問題的 Gem 包,然後重新裝置。

    一些常用的 Gem 命令:

    檢查 Gem 配置源:

    $gem sources -l

    Gem 添加配置源:

    $gem sources -a 源的url

    Gem 刪除配置源:

    $gem sources -r 源的url

    更新一切 Gem 包:

    $gem update

    更新指定的 Gem 包:

    $gem update [gemname] (留意:此命令不會晉級舊版本的包)

    更新 RubyGems 軟件:

    $gem update --system

    肅清一切 Gem 包舊版本,保存最新版本:

    $gem cleanup

    檢查 Gem 環境:

    $gem environment

    從 Gem 源裝置 Gem 包:

    $gem install [gemname]

    從本機裝置 Gem 包:

    $gem install -l [gemname].gem

    裝置指定版本的 Gem 包:

    $gem install [gemname] --version=[版本號]

    刪除指定的 Gem 包:

    $gem uninstall [gemname] (留意:此命令將刪除一切已裝置的版本)

    刪除某指定版本 Gem:

    $gem uninstall [gemname] --version=[版本號]

    檢查本機已裝置的一切 Gem 包:

    $gem list --local

  2. Ruby 版本過低

    ERROR: Error installing CocoaPods: activesupport requires Ruby version >= 2.2.2

    在終端輸出以下命令檢查以後 Ruby 版本:

    $ruby -v

    Ruby 是什麼?

    Ruby 是一種復雜快捷的面向對象腳本言語,次要用來完成一些自動化腳本。由於 IOS 零碎上沒有 Ruby 解釋器,所以它通常是在 Mac 零碎上運用,在編譯前(絕非 app 運轉時)停止一些自動化任務。CocoaPods 中的 podfile 其實就是一份 Ruby 代碼。

    晉級 Ruby

    1. 晉級 Ruby 要首先裝置 RVM

      RVM:Ruby Version Manager,Ruby 版本管理器,包括 Ruby 的版本管理和 Gem 庫管理(gemset)。

      翻開終端,執行以下命令:

      $curl -L get.rvm.io | bash -s stable

      時期需求輸出管理員密碼,然後會自動經過 Homebrew 裝置依賴包,等候一段時間後就可以成功裝置好 RVM。

      假如呈現以下錯誤:

      Error running 'requirements_osx_port_libs_install curl-ca-bundle automake libtool libyaml libffi libksba', shoWing last 15 lines of /Users/acewill/.rvm/log/1468253599_ruby-2.3.0/ package_install_curl-ca-bundle_automake_libtool_libyaml_libffi_libksba.log https://github.com/Homebrew/homebrew/wiki/Common-Issues

      緣由是 Mac 上未裝置 Homebrew,需求先裝置 Homebrew。

      Homebrew 是什麼?

      Homebrew 是一個包管理器,用於在 Mac 上裝置一些 OS X 上沒有的 UNIX 工具。Homebrew 將這些工具通通裝置到了 /usr/local/Cellar 目錄中,並在 /usr/local/bin 中創立符號鏈接。

      裝置 Homebrew

      Homebrew 官網:http://brew.sh

      從 Homebrew 官網獲取裝置命令在終端執行:

      $/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

      需求等候一段時間,Homebrew 裝置成功之後,重新裝置 RVM。

      Homebrew 常用命令

      1. 搜索軟件:$brew search git

      2. 裝置軟件:$brew install git

      3. 檢查軟件信息:$brew info git

      4. 更新自己:$brew update

      5. 反省過時軟件:$brew outdated

      6. 晉級可以晉級的軟件:$brew upgrade

      7. 清算不需求的軟件版本及其裝置包緩存:$brew cleanup

      8. 列出已裝置的軟件:$brew list

      9. 卸載軟件:$brew unstall git

      RVM 裝置成功之後執行以下命令,載入 RVM 環境:

      $source ~/.bashrc

      $source ~/.bash_profile

      $source ~/.profile

      最後,執行以下命令測試能否裝置正常:

      $rvm -v

    2. 經過 RVM 晉級 Ruby

      1. 列出已知的 Ruby 版本

        $rvm list known

      2. 裝置指定的 Ruby 版本

        $rvm install 2.3.3

      3. 列出本地裝置的一切 Ruby 版本

        $rvm list

      4. 指定零碎默許的 Ruby 版本

        $rvm use 2.3.3 --default

      5. 刪除指定的 Ruby 版本

        $rvm remove 2.0.0

      假如網速較慢的話,在執行 $rvm install 2.3.3 命令時,會破費很長的時間,而且很容易報時間超時的錯誤,處理方法就是屢次重試,或許等網速好的時分裝置。

      另一種處理方法就是經過 Homebrew 來晉級 Ruby。

      翻開終端,執行以下命令:

      $brew install ruby

      只需求等候很短的時間就可以晉級 Ruby 成功。但經過這種辦法晉級 Ruby 之後,Gem 的版本能夠不是最新的,我們只需求依照上文中提到的晉級 Gem 的辦法來晉級 Gem 即可。但是會呈現以下錯誤:

      ERROR: While executing gem ... (TypeError) no implicit conversion of nil into String

      處理方法:翻開 Finder-->前往-->前往文件夾,輸出途徑 /usr/local/lib/ruby/2.3.0/rubygems/installer.rb,點擊前往,找到 installer.rb 文件,翻開該文件,找到文件中的以下代碼段:

      if ruby_executable then
              question << existing

      然後用以下代碼段交換找到的代碼段:

      if ruby_executable then
            question << (existing || 'an unknown executable')

      交換之後,Gem 就可以晉級了。

  3. GitHub 無法鏈接

    error: RPC failed; result=56, HTTP code = 200 fatal: The remote end hung up unexpectedly fatal: early EOF fatal: index-pack failed

    處理方法:FQ,然後重新裝置。

  4. CocoaPods 的分支不支持以後最新的 Xcode 版本

    [!] An error occurred while performinggit pullon repomaster. [!] /usr/bin/git pull --ff-only

    處理方法:刪除 master 分支,重新樹立新的分支,然後重新設置倉庫即可。在終端執行以下命令:

    $sudo rm -fr ~/.CocoaPods/repos/master

CocoaPods 的運用

常用 CocoaPods 命令:

  1. $pod setup

    將一切第三方的 Podspec 索引文件更新到本地的 ~/.CocoaPods/repos/ 目錄下,更新本地倉庫。

  2. $pod repo update

    執行 pod repo update 更新本地倉庫,本地倉庫完成後,即可搜索到指定的第三方庫,作用相似 pod setup。不過這個命令常常不獨自調用。比方執行 pod setuppod searchpod installpod update 會默許執行 pod repo update

  3. $pod search 開源庫

    查找某一個開源庫。

  4. $pod list

    列出一切可用的第三方庫,如今曾經 2.4W+ 了,還在不時地增長。

  5. $pod install

    依據 Podfile.lock 文件中羅列的版本號來裝置第三方框架,假如一開端 Podfile.lock 文件不存在,就會依照 Podfile 文件中羅列的版本號來裝置第三方框架。

    假如反省到以後三方庫曾經有的話,那就不會去下載了。

    $pod install –-no-repo-update

    裝置開源庫之前,不會執行 pod repo update 指令。

  6. $pod update

    將一切第三方框架更新到最新版本,並且創立一個新的 Podfile.lock 文件。

    無論以後三方庫能否在項目中曾經存在,都會重新下載更新。

    $pod update –-no-repo-update

    更新開源庫之前,不會執行 pod repo update 指令。

以下以 A.networking 為例引見 CocoaPods 的運用。

  1. 在終端搜索相應的開源類庫

    $pod search A.networking

    假如 CocoaPods 支持,將會輸入搜索到的一切類庫版本和信息,以及在 Podfile 中配置的寫法,例如:

    假如提示沒有找到該開源庫,但是我們這個第三方的確存在:

    1. 我們可以運用 pod setup 更新本地 podspec 索引文件,然後重新搜索。

    2. 假如依照 1 的辦法還是搜索不到,那我們就把 ~/Library/Caches/CocoaPods/ 目錄下的緩存文件刪除。然後 pod setup,再重新搜索。

  2. 進入到我們的工程目錄

    $cd 我們的工程途徑

  3. 在我們的工程目錄下創立 Podfile 文件

    1. 經過 Mac 默許文本編輯器編寫

      $touch podfile 創立 Podfile 文件

      $open podfile 翻開 Podfile 文件

      翻開 Podfile 文件之後即可編寫,編寫完成之後封閉文本編輯器即可。

    2. 運用 VIM 編輯器編寫

      $vim podfile 創立 Podfile 文件並運用 VIM 編寫

      執行命令之後默許是編輯形式,用鍵盤輸出 i,進入輸出形式,輸出 pod 信息,完成之後按 Esc 鍵,加入輸出形式進入編輯形式,然後再輸出 : 號,進入末行形式,在 : 號後邊輸出 wq 保管加入 Podfile 文件,回到終端,持續停止下一步。

      VIM 引見

      VIM 是一個相似於 VI 的著名的功用弱小、高度可定制的文本編輯器。

      VI:Visual Interface,可視化接口。

      VIM:VI iMproved,VI 加強版全屏編輯器,又叫形式化編輯器。

      VIM 有 3 種形式:

      1. 編輯形式(命令形式)(默許形式)
      2. 輸出形式
      3. 末行形式

      VIM 3 種形式間的轉換:

      1. 編輯 --> 輸出:

        i:在以後光標所在字符的後面,轉換為輸出形式
        I:在以後光標所外行的行首,轉換為輸出形式
        a:在以後光標所在字符的前面,轉換為輸出形式
        A:在以後光標所外行的行尾,轉換為輸出形式
        o:在以後光標所外行的下方,新建一行,轉換為輸出形式
        O:在以後光標所外行的上方,新建一行,轉換為輸出形式
      2. 輸出 --> 編輯:

        Esc

      3. 編輯 --> 末行:

        :

      4. 末行 --> 編輯:

        Esc + ,或許按兩次 Esc

      5. 輸出形式和末行形式之間不能直接切換

      運用 VIM 翻開文件:

      1. $vim 文件名 +# 翻開文件,並定位於第 # 行

      2. $vim 文件名 +: 翻開文件,並定位於最後一行

      運用 VIM 封閉文件:

      1. 末行形式下封閉文件

        :w --> 保管
        :w! --> 強行保管
        :q --> 加入
        :q! --> 不保管並加入
        :wq --> 保管並加入
        :x --> 保管並加入

      2. 編輯形式下封閉文件

        ZZ --> 保管並加入

      Podfile 引見

      source 'ssh://[email protected]:9830/iOS/Specs.git'
      source 'https://github.com/CocoaPods/Specs.git'
       
      platform :iOS, '8.0'
      
      use_frameworks!
      inhibit_all_warnings!
      workspace 'CocoaPodsTest'
              
      target 'CocoaPodsTest' do
      project 'CocoaPodsTest'
      
      pod 'A.networking'
      pod 'JYCarousel', '0.0.1'
      pod 'WCJCache', :git => "http://gitlab.9ijx.com/iOS/WCJCache.git"
      
      target :CocoaPodsTestUITests do
              inherit! :search_paths
              pod 'YYText'
      end
       
      end

      Podfile 語法解釋:

      1. source

        • 指定 specs 的地位,自定義添加自己的 podspec。

        • 假如沒有自定義添加 podspec,則可以不添加這一項,由於默許運用 CocoaPods 官方的 source。一旦指定了其它 source,那麼就必需指定官方的 source,如上例所示。

      2. platform :iOS, '8.0'

        • 指定了開源庫應該被編譯在哪個平台以及平台的最低版本。

        • 假如不指定平台版本,官方文檔裡寫明各平台默許值為 iOS:4.3,OS X:10.6,tvOS:9.0,watchOS:2.0。

      3. use_frameworks!

        運用 frameworks 靜態庫交換靜態庫鏈接

        • Swift 項目 CocoaPods 默許 use_frameworks!

        • OC 項目 CocoaPods 默許 #use_frameworks!

      4. inhibit_all_warnings!

        • 屏蔽 CocoaPods 庫外面的一切正告

        • 這個特性也能在子 target 外面定義,假如你想獨自屏蔽某 pod 外面的正告也是可以的,例如:

          pod 'JYCarousel', :inhibit_warnings => true

      5. workspace

        • 指定包括一切 projects 的 Xcode workspace

        • 假如沒有指定 workspace,並且在 Podfile 所在目錄下只要一個 project,那麼 project 的稱號會被用作 workspace 的稱號

      6. target ‘xxxx’ do ... end

        • 指定特定 target 的依賴庫

        • 可以嵌套子 target 的依賴庫

      7. project

        • 默許狀況下是沒有指定的,當沒有指定時,會運用 Podfile 目錄下與 target 同名的工程

        • 假如指定了 project,如上例所示,則 CocoaPodsTest 這個 target 只要在 CocoaPodsTest 工程中才會鏈接

      8. inherit! :search_paths

        • 明白指定承繼於父層的一切 pod,默許就是承繼的
      9. 依賴庫的根本寫法

        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 的版本,寫這個限制和什麼都不寫是一個效果,都表示運用最新版本

      關於 Podfile.lock:

      當執行 pod install 之後,CocoaPods 會生成一個名為 Podfile.lock 的文件。

      Podfile.lock 應該參加到版本控制外面,不應該把這個文件參加到 ignores 中。由於 Podfile.lock 會鎖定以後各依賴庫的版本,之後假如屢次執行 pod install 不會更改版本,執行 pod update 時才會更改 Podfile.lock。

      這樣在多人協作的時分,可以避免呈現第三方庫晉級時形成大家各自的第三方庫版本不分歧。

  4. 在終端執行以下命令:

    $pod update –-no-repo-update

    成功之後翻開工程,此時我們應該翻開最重生成的 .xcworkspace 文件,即可運用該第三方庫。

移除項目中曾經配置的類庫
  1. 翻開終端,cd 到曾經配置好 CocoaPods 的項目目錄下

  2. 翻開該目錄下的 Podfile 文件

  3. 刪除 Podfile 文件中要移除的第三方庫

  4. 重新執行 $pod update –-no-repo-update 命令

完成以上步驟即可移除項目中曾經配置的類庫

移除項目中的 CocoaPods
  1. 刪除工程文件夾下的 Podfile、Podfile.lock 和 Pods 文件夾

  2. 刪除 .xcworkspace 文件

  3. 翻開 xcodeproj 文件,刪除項目中的 Pods 文件夾以及 Pods.xcconfig 援用和 libpods.a 靜態庫

  4. 翻開 Build Phases 選項,刪除 Check Pods Manifest.lockCopy Pods ResourcesEmbeded Pods Frameworks 選項

完成以上步驟即可移除項目中的 CocoaPods,項目即可編譯運轉。 

CocoaPods 的卸載

在終端執行以下命令:

$sudo gem uninstall CocoaPods

需求輸出密碼,之後等候很短時間就會顯示卸載成功。

卸載指定版本的 CocoaPods:

$sudo gem uninstall CocoaPods -v 0.39.0


【iOS -- CocoaPods】的相關資料介紹到這裡,希望對您有所幫助! 提示:不會對讀者因本文所帶來的任何損失負責。如果您支持就請把本站添加至收藏夾哦!

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved