1. 程式人生 > >使用CocoaPods來做iOS程式的包依賴管理

使用CocoaPods來做iOS程式的包依賴管理

前言

每種語言發展到一個階段,就會出現相應的依賴管理工具, 或者是中央程式碼倉庫。比如

  • Java: maven,Ivy
  • Ruby: gems
  • Python: pip, easy_install
  • Nodejs: npm

隨著iOS開發者的增多,業界也出現了為iOS程式提供依賴管理的工具,這個工具叫:CocoaPods

CocoaPods簡介

CocoaPods是一個負責管理iOS專案中第三方開原始碼的工具。CocoaPods專案的原始碼在Github上管理。該專案開始於2011年8月12日,經過一年多的發展,現在已經超過1000次提交,並且持續保持活躍更新。開發iOS專案不可避免地要使用第三方開源庫,CocoaPods的出現使得我們可以節省設定和更新第三方開源庫的時間。

拿我之前開發的粉筆網iPhone客戶端為例,其使用了14個第三方開源庫。在沒有使用CocoaPods以前,我需要:

  1. 把這些第三方開源庫的相關檔案複製到專案中,或者設定成git的submodule,然後這些開源庫通常需要依賴系統的一些framework,我需要手工地將這些framework一一增加到專案依賴中,比如ASI網路庫就需要增加以下framework: CFNetwork, SystemConfiguration, MobileCoreServices, CoreGraphics and zlib。
  2. 對於RegexKitLite這個正則表示式庫,我還需要設定-licucore的編譯引數
  3. 手工管理這些依賴包的更新。

這些體力活雖然簡單,但毫無技術含量並且浪費時間。在使用CocoaPods之後,我只需要將用到的第三方開源庫放到一個名為Podfile的檔案中,然後執行pod install。CocoaPods就會自動將這些第三方開源庫的原始碼下載下來,並且為我的工程設定好相應的系統依賴和編譯引數。

CocoaPods的安裝和使用介紹

安裝

安裝方式異常簡單, Mac下都自帶ruby,使用ruby的gem命令即可下載安裝:

<span class="line-number">1</span>
<span class="line-number">2</span>
$ 
gem install cocoapods
$ pod setup

使用

使用時需要新建一個名為Podfile的檔案,以如下格式,將依賴的庫名字依次列在檔案中即可

<span class="line-number">1</span>
<span class="line-number">2</span>
<span class="line-number">3</span>
<span class="line-number">4</span>
<span class="line-number">5</span>
platform :ios
pod 'JSONKit',       '~> 1.4'
pod 'Reachability',  '~> 3.0.0'
pod 'ASIHTTPRequest'
pod 'RegexKitLite'

然後你將編輯好的Podfile檔案放到你的專案根目錄中,執行如下命令即可:

<span class="line-number">1</span>
<span class="line-number">2</span>
cd "your project home"
pod install

現在,你的所有第三方庫都已經下載完成並且設定好了編譯引數和依賴,你只需要記住如下2點即可:

  1. 使用CocoaPods生成的 .xcworkspace 檔案來開啟工程,而不是以前的 .xcodeproj 檔案。
  2. 每次更改了Podfile檔案,你需要重新執行一次pod install命令。

查詢第三方庫

你如果不知道cocoaPods管理的庫中,是否有你想要的庫,那麼你可以通過pod search命令進行查詢,以下是我用pod search json查詢到的所有可用的庫:

<span class="line-number">1</span>
<span class="line-number">2</span>
<span class="line-number">3</span>
<span class="line-number">4</span>
<span class="line-number">5</span>
<span class="line-number">6</span>
<span class="line-number">7</span>
<span class="line-number">8</span>
<span class="line-number">9</span>
<span class="line-number">10</span>
<span class="line-number">11</span>
<span class="line-number">12</span>
<span class="line-number">13</span>
<span class="line-number">14</span>
<span class="line-number">15</span>
<span class="line-number">16</span>
<span class="line-number">17</span>
<span class="line-number">18</span>
<span class="line-number">19</span>
<span class="line-number">20</span>
<span class="line-number">21</span>
<span class="line-number">22</span>
<span class="line-number">23</span>
<span class="line-number">24</span>
<span class="line-number">25</span>
<span class="line-number">26</span>
<span class="line-number">27</span>
<span class="line-number">28</span>
<span class="line-number">29</span>
<span class="line-number">30</span>
<span class="line-number">31</span>
<span class="line-number">32</span>
<span class="line-number">33</span>
<span class="line-number">34</span>
<span class="line-number">35</span>
<span class="line-number">36</span>
<span class="line-number">37</span>
<span class="line-number">38</span>
<span class="line-number">39</span>
<span class="line-number">40</span>
<span class="line-number">41</span>
<span class="line-number">42</span>
<span class="line-number">43</span>
<span class="line-number">44</span>
$ pod search json
-> AnyJSON (0.0.1)
   Encode / Decode JSON by any means possible.
   - Homepage: https://github.com/mattt/AnyJSON
   - Source:   https://github.com/mattt/AnyJSON.git
   - Versions: 0.0.1 [master repo]
-> JSONKit (1.5pre)
   A Very High Performance Objective-C JSON Library.
   - Homepage: https://github.com/johnezang/JSONKit
   - Source:   git://github.com/johnezang/JSONKit.git
   - Versions: 1.5pre, 1.4 [master repo]
-> MTJSONDictionary (0.0.4)
   An NSDictionary category for when you're working with it converting to/from JSON. DEPRECATED, use MTJSONUtils
   instead.
   - Homepage: https://github.com/mysterioustrousers/MTJSONDictionary.git
   - Source:   https://github.com/mysterioustrousers/MTJSONDictionary.git
   - Versions: 0.0.4, 0.0.3, 0.0.2 [master repo]
-> MTJSONUtils (0.1.0)
   An NSObject category for working with JSON.
   - Homepage: https://github.com/mysterioustrousers/MTJSONUtils.git
   - Source:   https://github.com/mysterioustrousers/MTJSONUtils.git
   - Versions: 0.1.0, 0.0.1 [master repo]
-> SBJson (3.1.1)
   This library implements strict JSON parsing and generation in Objective-C.
   - Homepage: http://stig.github.com/json-framework/
   - Source:   https://github.com/stig/json-framework.git
   - Versions: 3.1.1, 3.1, 3.0.4, 2.2.3 [master repo]
-> TouchJSON (1.0)
   TouchJSON is an Objective-C based parser and generator for JSON encoded data.
   - Homepage: https://github.com/TouchCode/TouchJSON
   - Source:   https://github.com/TouchCode/TouchJSON.git
   - Versions: 1.0 [master repo]

生成第三方庫的幫助文件

如果你想讓CococaPods幫你生成第三方庫的幫助文件,並整合到XCode中,那麼用brew安裝appledoc即可:

<span class="line-number">1</span>
brew install appledoc

關於appledoc,我在今年初的另一篇部落格《使用Objective-C的文件生成工具:appledoc》中有專門介紹。它最大的優點是可以將幫助文件整合到XCode中,這樣你在敲程式碼的時候,按住opt鍵單擊類名或方法名,就可以顯示出相應的幫助文件。

原理

大概研究了一下CocoaPods的原理,它是將所有的依賴庫都放到另一個名為Pods專案中,然後讓主專案依賴Pods專案,這樣,原始碼管理工作都從主專案移到了Pods專案中。發現的一些技術細節有:

  1. Pods專案最終會編譯成一個名為libPods.a的檔案,主專案只需要依賴這個.a檔案即可。
  2. 對於資原始檔,CocoaPods提供了一個名為Pods-resources.sh的bash指令碼,該指令碼在每次專案編譯的時候都會執行,將第三方庫的各種資原始檔複製到目標目錄中。
  3. CocoaPods通過一個名為Pods.xcconfig的檔案來在編譯時設定所有的依賴和引數。

相關推薦

使用CocoaPodsiOS程式依賴管理

前言 每種語言發展到一個階段,就會出現相應的依賴管理工具, 或者是中央程式碼倉庫。比如 Java: maven,IvyRuby: gemsPython: pip, easy_installNodejs: npm隨著iOS開發者的增多,業界也出現了為iOS程式提供依賴管理的工具,這個工具叫:CocoaPo

CocoaPods上建立自己iOS程式依賴管理

一、github上建立開源專案 GitHub是目前使用最廣的分散式專案管理軟體。下面是如何從零開始,將自己的專案放到GitHub上面,並能夠像SVN那般update和commit。 2、按照的指引

Golang Gin 專案依賴管理 godep 使用

Golang Gin 專案包依賴管理 godep 使用 標籤(空格分隔): Go 在按照github.com/tools/godep文件go get完包以後,調整專案結構為$GOPATH/src/$PROJECT_NAME/,同時使專案編譯沒有問題。執行godep save命令,出現了一系列包缺失的問

Golang的依賴管理 (package dependency manager)

 Golang 的開發者對GOPATH都不陌生, 它是進行go 專案開發的’workspace’。 go專案的原始碼,可執行檔案,以及依賴庫的存放都是通過gopath的相關目錄結構進行組織的,而且go原生的依賴管理也是使用GOPATH進行組織。 如當前專案中import “

PHP的依賴管理工具Composer簡介

Composer是一個基於專案的依賴管理器,負責將PHP專案所依賴的包或庫安裝到專案所在的目錄中,預設它不會安裝任何資料到全域性。它用於取代之前所使用的pear工具。1 安裝Composercurl -sS https://getcomposer.org/installer

PHP的依賴管理工具Composer

Composer是一個基於專案的依賴管理器,負責將PHP專案所依賴的包或庫安裝到專案所在的目錄中,預設它不會安裝任何資料到全域性。它用於取代之前所使用的pear工具。1 安裝Composer [plain] view plaincopyprint? curl 

Node.js 第三方的安裝、升級、解除安裝,以及依賴管理

本地安裝: npm install package-name 全域性全裝: npm install -g  package-name 升級:  npm update  解除安裝:  npm uninstall  包依賴管理,通過package.json  例如: { "

iOS 依賴管理工具 CocoaPods 和 Carthage 的使用及原理

       隨著網際網路的高速發展,個大網際網路公司為更高效研發自己的產品,而不斷研發適合自己的平臺的開發語言。當這些新的語言被廣泛推廣、被更多的開發團隊所接納,被用於開發不同的場景,這個過程中會研發出很多很多方便開發的框架。發展到一定階段,都會出現相應的依賴管理工具。例如

用Ant-Ivy類似Maven的管理

If: 你要準備建立新專案,那就直接上Maven吧! Else: 如果你手頭上的專案正在用Ant工具,你可以考慮用Ant-Ivy來做類似Maven的依賴(包)管理。這個工具還有衍生的IvyDE外掛來方便你使用Eclipse開發環境。下面例子將演示設定基本的Ant-Ivy環

使用CocoaPods依賴管理(淘寶源更換為HTTPS)--轉自 唐巧技術部落格

CocoaPods 簡介 每種語言發展到一個階段,就會出現相應的依賴管理工具,例如 Java 語言的 Maven,nodejs 的 npm。隨著 iOS 開發者的增多,業界也出現了為 iOS 程式提供依賴管理的工具,它的名字叫做:CocoaPods。 CocoaPod

關於Java如何獲取系統時間,並用它一個圖書管理系統

首先,這個圖書管理系統自定義一個final常量不能更改,用作圖書館借閱歸還的最晚時間,也可以自定義歸還時間。 然後,先獲取使用者借閱時間,再用SimpleDataFormata元件來格式化日期(yyyy-MM-dd),再將獲取的時間加在系統的時間上得到使用者自定義的歸還時間。 最後,再通過方

程式管理rpm和yum

Linux程式包管理: API:Application Programming Interface原始碼包 POSIX:Portable OS 程式原始碼 --> 預處理 --> 編譯 --> 彙編 --> 連結 靜態編譯: 共享編譯:.so A

Spring-boot構建多模組依賴工程時,maven打包異常:程式xxx不存在

在qizhi專案改版的時候, 所有程式碼都遷移好了, 但是compile的時候報程式包*****不存在, 具體到某一個類就是: 找不到符號. 下面這篇文章是正解 http://hbxflihua.iteye.com/blog/2431537 具體內容如下: =======================

week---3 Linux程式管理及if語句

一、Linux程式包管理 RPM(軟體包管理器) YUM(軟體倉庫) 二、計算數字 例如 var1=10.46var1=10.46 var2=43.67 var3=33.2 var4=71 result=**(bc&lt;&lt;EOF∗

Android單元測試(6):使用dagger2依賴注入

注: 1. 程式碼中的 //<= 表示新加的、修改的等需要重點關注的程式碼 2. Class#method表示一個類的instance method,比如 LoginPresenter#login 表示 LoginPresenter的login(非靜態)方法。 問題

微信小程式黑客馬拉松即將開始,最酷的 Mini Program Creators!

微信小程式黑客馬拉松正式啟動 近日,小程式斬獲一項世界級殊榮——作為一項全新的技術和應用創新,小程式首次獲選世界網際網路領先科技成果。目前小程式應用數量已超過 100 萬,覆蓋了 200 多個細分行業,日活使用者達到 2 億。 微信小程式已經構建了一個完整的開發環

為什麼中文不能用程式設計,而英文卻可以?深資程式設計師告訴你答案

為什麼中文不能用來做程式設計,而英文卻可以?深資程式設計師告訴你答案 小編推薦一個學C語言/C++的學習群:948954484,入群即送C/C++全套學習資料,滿滿的乾貨! 接觸過程式設計的人都知道,不管是國內還是國外,大家都是使用英文來做程式設計的。所以有不少人很好奇,為什麼只能用英文來寫

美工請假了,程式設計師個圖頂一下

本文來源:EDIUS(今日頭條) 連結:http://www.toutiao.com/a6438868399145763073/ 圖片來自:Reddit 如果哪天設計師消失了,這個世界會變成什麼樣? 經常逛淘寶的朋友會發現,在淘寶或者其他電商網站,有一個“設計”流派,叫做“設計師跑路了”派,跟“江南

Android Studio compile project新增一個本地專案依賴時,提示程式不存在

問題情景 在一個專案裡,建了一個library專案和application專案,在application專案的build.gradle將library專案compile project進來,編譯的時候都正常,但是執行的時候,提示程式包不存在。 解決辦法

程式管理器控制檯在哪

在安裝有NuGet外掛的VS上開啟NuGet命令視窗的過程如下:依次選擇選單Tools(工具)->Library Package Manager(庫程式包管理器)->Pakcage Manager Conso