CocoaPods的介紹、安裝、使用和原理

目錄

CocoaPods簡介

1、CocoaPods 的安裝

一、更換 Gem 的源
二、更新升級 Gem 版本
三、安裝CocoaPods
四、更換repo鏡像爲國內服務器node

2、CocoaPods 的使用(圖和文字有細微的出入)

一、新建 Podfile 文件
二、編輯 Podfile 文件
三、執行導入命令
四、第三方庫更新git

3、遭遇到的問題

4、原理和說明

5、更多

一、pod install提速
二、關於Podfile文件編輯時,第三方庫版本號的各類寫法github


CocoaPods簡介

每種語言發展到一個階段,就會出現相應的依賴管理工具,例如Java語言的Maven,nodejs的npm。隨着iOS開發者的增多,業界也出現了爲iOS程序提供依賴管理的工具,它的名字叫作:CocoaPods。
CocoaPods項目的源碼在Github上管理。該項目開始於2011年8月12日,通過多年發展,如今已經成爲iOS開發事實上的依賴管理標準工具。開發iOS項目不可避免地要使用第三方開源庫,CocoaPods的出現使得咱們能夠節省設置和更新第三方開源庫的時間。npm

在我開發猿題庫客戶端時,其使用了24個第三方開源庫。在沒有使用CocoaPods之前,我須要:安全

把這些第三方開源庫的源代碼文件複製到項目中,或者設置成git的submodule。
對於這些開源庫一般須要依賴系統的一些framework,我須要手工地將這些framework一一增長到項目依賴中,好比一般狀況下,一個網絡庫就須要增長如下framework: CFNetwork, SystemConfiguration, MobileCoreServices, CoreGraphics, zlib。
對於某些開源庫,我還須要設置-licucore或者 -fno-objc-arc等編譯參數管理這些依賴包的更新。
這些體力活雖然簡單,但毫無技術含量而且浪費時間。在使用CocoaPods以後,我只須要將用到的第三方開源庫放到一個名爲Podfile的文件中,而後執行pod install。CocoaPods就會自動將這些第三方開源庫的源碼下載下來,而且爲個人工程設置好相應的系統依賴和編譯參數。ruby

1、CocoaPods 的安裝

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

一、更換 Gem 的源

Gem是一個管理Ruby庫和程序的標準包,它經過Ruby Gem(如 http://rubygems.org/ )源來查找、安裝、升級和卸載軟件包服務器

// 1.移除掉原有的源(服務器在國外,速度較慢)
- gem sources --remove https://rubygems.org/
// 2.等有反應以後再敲入如下命令(添加國內的源,原先是 http://ruby.taobao.org/ ,如今淘寶上的ruby鏡像換成https了)
- gem sources -a https://ruby.taobao.org/
// 3.驗證是否替換成功
- gem sources -l

二、更新升級 Gem 版本

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

// 更新升級gem
- sudo gem update --system

 

三、安裝CocoaPods
// 安裝CocoaPods(OS X 10.11之前)
- sudo gem install cocoapods
// 安裝CocoaPods(10.11後蘋果升級了安全策略)
- sudo gem install -n /usr/local/bin cocoapods

 

四、更換repo鏡像爲國內服務器

全部的項目的Podspec文件都託管在https://github.com/CocoaPods/Specs。第一次執行pod setup時,CocoaPods會將這些podspec索引文件更新到本地的 ~/.cocoapods/目錄下,這個索引文件比較大,有80M左右。因此第一次更新時很是慢,筆者(唐巧)就更新了將近1個小時才完成。
一個叫akinliu的朋友在gitcafe和oschina上創建了CocoaPods索引庫的鏡像,由於gitcafe和oschina都是國內的服務器,因此在執行索引更新操做時,會快不少。以下操做能夠將CocoaPods設置成使用gitcafe鏡像:工具

// 1.移除原有服務器
- pod repo remove master
// 2.添加境內服務器(建議使用第一個)
- pod repo add master https://gitcafe.com/akuandev/Specs.git
- pod repo add master http://git.oschina.net/akuandev/Specs.git(開源中國較慢)

 

 

 

2、CocoaPods 的使用(圖和文字有細微的出入)

一、新建 Podfile 文件

使用時須要在你的項目根目錄下新建一個名爲Podfile的文件,將依賴的庫名字依次列在文件中便可

//進入你的工程目錄
$ cd /Users/peikua/Desktop/CocoaPodsDemo  
//建立Pods文件
$ touch Podfile

 

二、編輯 Podfile 文件

假設咱們想導入 AFNetworking ,進入http://cocoapods.org,搜索AFNetworking

 

 

 

 

三、執行導入命令

$ cd /Users/peikua/Desktop/CocoaPodsDemo 

$ pod install

 

 

 

 

pod install命令執行成功後,會看到工程目錄下多出CocoaPodsTest.xcworkspace、Podfile.lock文件和Pods目錄。再看看剛纔執行完pod install命令打印出來的內容的最後一行:From now on use CocoaPodsDemo.xcworkspace.提示咱們從如今起,咱們須要使用CocoaPodsTest.xcworkspace文件來開發。

四、第三方庫更新

只須要在Podfile文件中添加相應的第三方庫信息,執行pod update命令便可。

 

 

 

3、遭遇到的問題

 

//之後使用CocoaPods過程當中出現了莫名其妙的問題,執行下面命令 
- sudo gem update --system
- sudo gem install cocoapods
- pod setup

 

,執行下面命令  
- sudo gem update --system
- sudo gem install cocoapods
- pod setup

4、原理和說明

一、第三方庫會被編譯成.a靜態庫供咱們真正的工程使用。

CocoaPods會將全部的第三方庫以target的方式組成一個名爲Pods的工程,該工程就放在剛纔新生成的Pods目錄下。整個第三方庫工程會生成一個名稱爲libPods.a的靜態庫提供給咱們本身的CocoaPodsTest工程使用。
對於資源文件,CocoaPods提供了一個名爲Pods-resources.sh的bash腳本,該腳本在每次項目編譯的時候都會執行,將第三方庫的各類資源文件複製到目標目錄中。

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

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

三、原來的工程設置已經被更改了,這時候咱們直接打開原來的工程文件去編譯就會報錯,只能使用新生成的workspace來進行項目管理。
四、CocoaPods經過一個名爲Pods.xcconfig的文件來在編譯時設置全部的依賴和參數。

5、更多

一、pod install提速

每次執行pod installpod update的時候,cocoapods都會默認更新一次spec倉庫。這是一個比較耗時的操做。在確認spec版本庫不須要更新時,給這兩個命令加一個參數跳過spec版本庫更新,能夠明顯提升這兩個命令的執行速度。

pod install --verbose --no-repo-update
pod update --verbose --no-repo-update
二、關於Podfile文件編輯時,第三方庫版本號的各類寫法
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的版本,至關於>=0.1.2而且<0.2.0
pod ‘AFNetworking’, ‘~>0.1′ //使用大於等於0.1但小於1.0的版本
pod ‘AFNetworking’, ‘~>0′ //高於0的版本,寫這個限制和什麼都不寫是一個效果,都表示使用最新版本
相關文章
相關標籤/搜索