一、CocoaPods
為什么需要CocoaPods
在進(jìn)行iOS開發(fā)的時候,總免不了使用第三方的開源庫,比如SBJson、AFNetworking、Reachability等等。使用這些庫的時候通常需要:
下載開源庫的源代碼并引入工程
向工程中添加開源庫使用到的framework
解決開源庫和開源庫以及開源庫和工程之間的依賴關(guān)系、檢查重復(fù)添加的framework等問題
如果開源庫有更新的時候,還需要將工程中使用的開源庫刪除,重新執(zhí)行前面的三個步驟,頓時頭都大了。。。
自從有了CocoaPods以后,這些繁雜的工作就不再需要我們親力親為了,只需要我們做好少量的配置工作,CocoaPods會為我們做好一切!
什么是CocoaPods
CocoaPods是一個用來幫助我們管理第三方依賴庫的工具。它可以解決庫與庫之間的依賴關(guān)系,下載庫的源代碼,同時通過創(chuàng)建一個Xcode的workspace來將這些第三方庫和我們的工程連接起來,供我們開發(fā)使用。
使用CocoaPods的目的是讓我們能自動化的、集中的、直觀的管理第三方開源庫。
安裝Ruby環(huán)境
Ruby是一門開發(fā)語言,gem為Ruby第三方庫管理工具,CocoaPods是用Ruby寫的一個第三方工具。
1.安裝Ruby環(huán)境需要安裝Xcode及Command Line Tools。
2.安裝Command Line Tools:
xcode-select --install
-
3.安裝RVM,Ruby的多版本管理工具。
$ curl -L https://get.rvm.io | bash -s stable $ source ~/.rvm/scripts/rvm $ rvm install 2.3.0 $ rvm use 2.3.0 $ /bin/bash --login
-
4.修改 gem 鏡像
$ gem sources --add https://gems.ruby-china.org/ --remove https://rubygems.org/ $ gem sources -l https://gems.ruby-china.org # 確保只有 gems.ruby-china.org
如果出現(xiàn)多個需要將其余的源刪除。
注:
1.淘寶的 ruby 源已經(jīng)不維護(hù)了,所以這里直接換成了 Ruby China,詳情請見:
https://gems.ruby-china.org/
2.gem是管理Ruby庫和程序的標(biāo)準(zhǔn)包,如果它的版本過低也可能導(dǎo)致安裝失敗,解決方案自然是升級gem,執(zhí)行下述命令即可:
$ sudo gem update
安裝 CocoaPods
$ gem install cocoapods
執(zhí)行完成后,需要初始化CocoaPods的環(huán)境
$ pod setup
注:初始化過程可能會非常漫長,需要耐心等待即可。
使用CocoaPods
創(chuàng)建Xcode工程并切換到該工程路徑
使用命令
pod init
在當(dāng)前文件夾下生成一個Podfile文件-
編輯該文件,在該文件中輸入如下信息:
$ vim Podfile # Uncomment this line to define a global platform for your project platform :ios, '8.0' target 'CocoaPodsDemo' do # Uncomment this line if you're using Swift or would like to use dynamic frameworks # use_frameworks! # Pods for CocoaPodsDemo pod "AFNetworking", "~> 2.5.4" pod 'SDWebImage' pod 'KVNProgress' target 'CocoaPodsDemoTests' do inherit! :search_paths # Pods for testing end target 'CocoaPodsDemoUITests' do inherit! :search_paths # Pods for testing end end
該文件中的命令格式為:
pod '第三庫名稱', '版本號'
第三庫名稱,名稱一定要正確,不然有可能安裝失敗。
版本號標(biāo)識區(qū)別
>= 1.0 至少版本為1.0
~> 1.0 兼容1.0版本的最新版
== 1.0或1.0 都表示指定版本
-
安裝工程依賴的第三方庫
$ pod install Updating local specs repositories Analyzing dependencies Downloading dependencies Installing AFNetworking (2.5.4) Installing KVNProgress (2.2.2) Installing SDWebImage (3.7.3) Generating Pods project Integrating client project [!] Please close any current Xcode sessions and use `CocoaPodsDemo.xcworkspace` for this project from now on. Sending stats Pod installation complete! There are 3 dependencies from the Podfile and 3 total pods installed.
若出現(xiàn)
pods installed
字樣表示安裝成功。 關(guān)閉Xcode工程,打開.xcworkspace文件。
在工程中導(dǎo)入第三庫文件,只需要
#import <AFNetworking.h>
類似的即可,開啟CocoaPods之旅。
更多用法參考本文提供的參考鏈接。
參考鏈接
- http://code4app.com/article/cocoapods-install-usage
- http://blog.csdn.net/wzzvictory/article/details/18737437
- http://blog.csdn.net/wzzvictory/article/details/19178709
二、 Carthage
Carthage簡介
Carthage的目標(biāo)是用最簡單的方式來管理Cocoa第三方框架。
Carthage編譯你的依賴,并提供框架的二進(jìn)制文件,但你仍然保留對項目的結(jié)構(gòu)和設(shè)置的完整控制。Carthage不會自動的修改你的項目文件或編譯設(shè)置。
Carthage只正式支持動態(tài)框架,動態(tài)框架能夠在任何版本的OS X上使用,但只能在iOS 8及以上版本使用。
安裝Homebrew
OS X 不可或缺的套件管理器,用于安裝命令工具。
終端中執(zhí)行如下命令:
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
安裝Carthage
終端執(zhí)行命令安裝Carthage
brew update
brew install carthage
使用Carthage
創(chuàng)建Xcode工程并切換到該工程路徑
-
創(chuàng)建一個
Cartfile
,將你想要使用的框架列在里面github "AFNetworking/AFNetworking" ~> 3.0 github "rs/SDWebImage"
運行
carthage update
,將獲取依賴文件到一個Carthage.checkout
文件夾,然后編譯每個依賴在你的應(yīng)用程序target的
General
設(shè)置標(biāo)簽中的Embedded Binaries
區(qū)域,將框架從Carthage.build
文件夾拖拽進(jìn)去。
參考鏈接
三、 Carthage與CocoaPods的不同
Carthage只支持iOS 8及以上版本使用。
首先,CocoaPods默認(rèn)會自動創(chuàng)建并更新你的應(yīng)用程序和所有依賴的Xcode workspace。Carthage使用xcodebuild來編譯框架的二進(jìn)制文件,但如何集成它們將交由用戶自己判斷。CocoaPods的方法更易于使用,但Carthage更靈活并且是非侵入性的。
-
CocoaPods的目標(biāo)在它的README文件描述如下:
…為提高第三方開源庫的可見性和參與度,創(chuàng)建一個更中心化的生態(tài)系統(tǒng)。
與之對照,Carthage創(chuàng)建的是去中心化的依賴管理器。它沒有總項目的列表,這能夠減少維護(hù)工作并且避免任何中心化帶來的問題(如中央服務(wù)器宕機)。不過,這樣也有一些缺點,就是項目的發(fā)現(xiàn)將更困難,用戶將依賴于Github的趨勢頁面或者類似的代碼庫來尋找項目。
CocoaPods項目同時還必須包含一個podspec文件,里面是項目的一些元數(shù)據(jù),以及確定項目的編譯方式。Carthage使用xcodebuild來編譯依賴,而不是將他們集成進(jìn)一個workspace,因此無需類似的設(shè)定文件。不過依賴需要包含自己的Xcode工程文件來描述如何編譯。
最后,我們創(chuàng)建Carthage的原因是想要一種盡可能簡單的工具——一個只關(guān)心本職工作的依賴管理器,而不是取代部分Xcode的功能,或者需要讓框架作者做一些額外的工作。CocoaPods提供的一些特性很棒,但由于附加的復(fù)雜性,它們將不會被包含在Carthage當(dāng)中。