你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> iOS 第三方框架 - CocoaPods的安裝、使用、原理

iOS 第三方框架 - CocoaPods的安裝、使用、原理

編輯:IOS開發綜合

介紹 CocoaPods

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

CocoaPods項目的源碼在Github上管理。

Cocoapods意義體現在兩個方面:

引入第三方庫無可避免地要進行各種各樣的配置。對於Objective-C的初級開發者來說,項目配置可是一件艱巨的任務。在配置編譯階段和鏈接器選項的過程中,極有可能引入許多人為的錯誤。而CocoaPods簡化了這一切,它能自動配置編譯選項,拯救了開發者。

使用CocoaPods可以很方便地查找新的第三方庫。讓你找到真正好用的庫,縮短你的開發周期,提升你的代碼質量。

接下來,我們將通過分析pod安裝的過程,一步步揭示CocoaPods背後的技術。

CocoaPods 的安裝

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

1、更換 Gem 的源

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

1.移除掉原有的源(服務器在國外,速度較慢)

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

2.等有反應之後再敲入以下命令(添加國內的Ruby China官方的源)

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

3.驗證是否替換成功

$ gem sources -l

2、更新升級 Gem 版本

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

更新升級gem

$ sudo gem update --system

3、安裝CocoaPods

安裝CocoaPods(OS X 10.11以前)

$ sudo gem install cocoapods

安裝CocoaPods(10.11後蘋果升級了安全策略)

$ sudo gem install -n /usr/local/bin cocoapods

4、更換repo鏡像為國內服務器

所有的項目的Podspec文件都托管在https://github.com/CocoaPods/Specs。第一次執行pod setup時,CocoaPods會將這些podspec索引文件更新到本地的 ~/.cocoapods/目錄下,這個索引文件比較大,有80M左右。所以第一次更新時非常慢。

一個叫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

3.查看是否添加源成功

$ pod repo

CocoaPods 的使用

1、新建 Podfile 文件

使用時需要在你的項目根目錄下新建一個名為Podfile的文件,將依賴的庫名字依次列在文件中即可
進入你的工程目錄

$ cd /Users/xiao/Desktop/CocoaPodsDemo  

創建Pods文件

$ touch Podfile

2、編輯 Podfile 文件

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

3、執行導入命令

$ cd /Users/xiao/Desktop/CocoaPodsDemo 
$ pod install

pod install命令執行成功後,會看到工程目錄下多出CocoaPodsTest.xcworkspace、Podfile.lock文件和Pods目錄。

再看看剛才執行完pod install命令打印出來的內容的最後一行:From now on use CocoaPodsDemo.xcworkspace.提示我們從現在起,我們需要使用CocoaPodsTest.xcworkspace文件來開發。

4、第三方庫更新

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

5、解決問題

以後使用CocoaPods過程中出現了莫名其妙的問題,執行下面命令:

$ sudo gem update --system
$ sudo gem install cocoapods
$ pod setup

1、pod install提速

每次執行pod install和pod update的時候,cocoapods都會默認更新一次spec倉庫。這是一個比較耗時的操作。在確認spec版本庫不需要更新時,給這兩個命令加一個參數跳過spec版本庫更新,可以明顯提高這兩個命令的執行速度。

$ pod install --verbose --no-repo-update
$ pod update --verbose --no-repo-update

2、關於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’, ‘~>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的版本,寫這個限制和什麼都不寫是一個效果,都表示使用最新版本

核心組件

CocoaPods是用ruby寫的,並劃分成了若干個Gem包。CocoaPods在解析執行過程中最重要的幾個包的路徑分別是:CocoaPods/CocoaPods、 CocoaPods/Core 和 CocoaPods/Xcodeproj。

CocoaPods / CocoaPod

這是面向用戶的組件,每當你執行一個pod命令時,這個組件將被激活。它包括了所有實用CocoaPods的功能,並且還能調用其他gem包來執行任務。

CocoaPods / Core

Core gem提供了與CocoaPods相關的文件(主要是Podfile和podspecs)的處理。

Podfile

Podfile用於配置項目所需要的第三方庫。它能被高度定制,所以你可以盡可能地給它添加你想要的特性。如果您還想對Podfile了解更多的話,請查看Podfile指南(地址 http://guides.cocoapods.org/syntax/podfile.html)。

Podspec

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

CocoaPods / Xcodeproj

這個包負責工程文件直接關系的處理。它能創建以及修改.xcodeproj文件和.xcworkspace文件。它也可以作為一個獨立的包使用,當你要編寫修改項目文件的腳本時,可以考慮使用CocoaPods/Xcodeproj。

版本控制和沖突

CocoaPods使用語義版本命名約定來解決對版本的依賴。由於沖突解決系統建立在非重大更改的補丁版本之間,這使得解決依賴關系要容易得多。舉個栗子,兩個完全不同的第三方庫同時依賴CocoaLumberjack。它們其中一個依賴的版本是2.3.1,而另一個則為2.3.3,解析器可以自動使用較新的版本,在這裡則是2.3.3,因為這可以與2.3.1向後兼容。

但這並不總是有效。有許多第三方庫還並不支持這個約定,這讓解決方案變得非常復雜。

當然,總是會有一些沖突需要手工解決。如果一個第三方庫依賴CocoaLumberjack 1.2.5,而另一個依賴CocoaLumberjack 2.3.1,最後只能靠調用這兩個第三方庫的用戶來手動地決定CocoaLumberjack的版本了。

加載源碼

CocoaPods執行的下一個步驟是加載源代碼。每個.podspec文件都包含了源代碼的索引,這些索引一般指向了一個Git地址或者git tag。它們以commit SHA碼的方式存儲在 ~/Library/Caches/CocoaPods中。而在這些路徑中創建文件則由 Core 包負責。

源代碼將依照Podfile、.podspec和緩存文件的信息下載到相應的第三方庫路徑。

生成Pods.xcodeproj

每次pod install 執行後並且檢測到改動時,Pods.xcodeproj文件將呗Xcodeproj gem更新。如果Pods.xcodeproj文件不存在,則會以默認配置生成,若已存在,則Pods.xcodeproj會使用現有的配置。

安裝第三方庫

當Cocoapods向項目中增加了一個第三方庫的時候,不僅僅是將添加代碼這麼簡單。由於每個第三方庫有不同的target,所以每次添加第三方庫時,都只有幾個文件被添加。每個源代碼都需要:

一個包含編譯選項的.xcconfig文件

一個同時擁有編譯設置和CocoaPods默認配置的私有.xcconfig文件

編譯所必須的prefix.pch文件

另一個編譯必須的文件dummy.m

一旦每個pod的target都完成了以上步驟,整個Pods的Target就會被創建。這增加了相同的文件,與另外幾個。如果有源代碼中包含了資源bundle,向app的target中添加bundle的方式將寫入Pods-Resources.sh。還有一個叫Pods-environment.h的文件,文件中含有許多檢查組件是否來自pod的宏定義。最後,將生成兩個確認文件,一個.plist文件,一個用於給用戶查閱許可信息的markdown文件。

寫入到磁盤

直到現在,許多已完成的過程都使用的是內存中的對象。為了讓這些過程的結果可重復被使用,我們需要將所有結果都記錄在一個文件中。所以Pods.xcodeproj和另外兩個非常重要的文件:Podfile.lock和Manifest.lock都將被寫入磁盤。

Podfile.lock

這是CocoaPods創建的最重要的文件之一。它記錄了需要被安裝的pod的每個已安裝的版本。如果你想知道已安裝的pod是哪個版本,可以查看這個文件。推薦將Podfile.lock文件加入到版本控制中,這有助於整個團隊的一致性。

Manifest.lock

這是每次運行pod install時創建的Podfile.lock文件的副本。如果你見過“沙盒文件和Podfile.lock文件不同步”的錯誤,這個錯誤就是因Manifest.lock文件和Podfile.lock文件不一樣引起。由於Pods所在的目錄並不總在版本控制之下,這樣可以保證開發者運行app之前都能更新他們的pods,否則app可能會crash,或者在一些不太明顯的地方編譯失敗

xcproj

如果您已經依照我們的建議在系統上安裝了xcproj,它會將您的Pods.xcodeproj文件轉換成就舊有ASCII格式的plist文件。為什麼要這麼做呢?因為Xcode所依賴和使用的plist在很久以前就已經不被其他軟件支持了。如果沒有xcproj,你的Pods.xcodeproj文件將會以XML格式的plist文件存儲,當你用Xcode打開它時,它會被改寫,造成大量的文件沖突。

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