想到iOS/OS X項目的依賴管理溯祸,第一個想到的一定是大名鼎鼎的CocoaPods颂翼。下面是Carthage介紹里面的講述兩者的不同之處:
CocoaPods (默認(rèn))自動建立和更新一個Xcode workspace卫旱,用來管理你的項目和所有依賴佑吝。Carthage使用xcodebuild來編譯出二進制庫,剩下的集成工作完全交給開發(fā)人員鳖擒。
CocoaPods使用起來方便溉浙,Carthage更加靈活并且對現(xiàn)有項目沒有太多的侵略性。
CocoaPods希望建立一個生態(tài)系統(tǒng)蒋荚,可以更加方便的發(fā)現(xiàn)和集成第三方代碼庫戳稽。Carthage希望變成一個去中心化的依賴管理系統(tǒng),不提供中心化的項目列表期升,減少維護成本和單點失敗的概率惊奇。不過這樣給開發(fā)人員尋找項目帶來不便互躬。
CocoaPods的項目需要配置podspec文件,包含了項目和第三方庫的信息赊时。Carthage并不使用類似的配置文件吨铸,第三方庫的依賴關(guān)系是通過Xcode項目來配置的行拢。
安裝Carthage
1. 直接下載安裝包:地址祖秒, 不過文件host在amazon S3上面,我嘗試過幾次未果舟奠。竭缝。。
2. 使用Homebrew
brew update
brew installcarthage
編譯第三方庫
1. 創(chuàng)建Cartfile列出你要使用的第三方庫信息, 下面是一個簡單的例子
構(gòu)造兩個庫:
github "AFNetworking/AFNetworking" ~> 3.0 github "Monsory/Monsory"http://沒有指定版本號 默認(rèn)是最新版本
2. Run carthage update
carthage update
3. 這時會生成如下的文件目錄
|-Carthage
|---Build
|-----Mac
|-------Mantle.framework
|---------Versions
|-----------A
|-------------Headers
|-------------Modules
|-------------Resources
|-------ReactiveCocoa.framework
|---------Versions
|-----------A
|-------------Headers
|-------------Modules
|---------------ReactiveCocoa.swiftmodule
|-------------Resources
|-----iOS
|-------Mantle.framework
|---------Headers
|---------Modules
|---------_CodeSignature
|-------ReactiveCocoa.framework
|---------Headers
|---------Modules
|-----------ReactiveCocoa.swiftmodule
|---------_CodeSignature
|---Checkouts
|-----libextobjc
|-------Configuration
|---------Base
|-----------Configurations
|-----------Targets
|---------Mac OS X
|---------iOS
|-------Tests
|-------extobjc
|-------extobjc.xcodeproj
|---------project.xcworkspace
|---------xcshareddata
|-----------xcschemes
|-----xcconfigs
|-------Base
|---------Configurations
|---------Targets
|-------Mac OS X
|-------iOS
Carthage/Checkouts目錄:從github獲取的源代碼
Carthage/Build目錄:編譯出來的Framework二進制代碼庫
4. 打開項目沼瘫,在項目的某個Target -> Build Phases -> Link Library with Libraries抬纸,將Carthage/Build目錄中希望導(dǎo)入的Framework庫拖拽進去。
5. 添加編譯的額外腳本耿戚,點擊“+” -> New Run Script Phase
添加腳本
/usr/local/bin/carthage copy-frameworks
添加"Input Files"
$(SRCROOT)/Carthage/Build/iOS/Mantle.framework
$(SRCROOT)/Carthage/Build/iOS/ReactiveCocoa.framework
如果你使用的是0.11之前的的版本
如果你使用的是0.11之后的的版本
6. 在項目中使用第三方庫
#import"AppDelegate.h"#import@interface AppDelegate ()@end@implementation AppDelegate- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
? ? // Override point for customization after application launch.? ? ? ?
? ? return YES;
}
7. ,編譯通過,運行項目
大功告成胆剧!
Carthage使用了一種極為精簡的方式來管理第三方庫维贺,將源碼編譯成Framework的二進制文件,然后讓開發(fā)人員來負(fù)責(zé)library的管理、導(dǎo)入等等矮燎。比起CocoaPods減少了對現(xiàn)有項目的侵入性,使用起來也挺方便荷辕。
首先昧甘,CocoaPods會直接創(chuàng)建和修改項目的workspace配置,一切都是為了便捷呜呐,我們只需要修改pod文件并不需要過多的關(guān)心其他事情就斤,CocoaPods創(chuàng)建的是高度集成的項目。
而Carthage的特點是靈活蘑辑,耦合度不高洋机,集成時不需要集成相應(yīng)的project,不需要創(chuàng)建workspace,而僅僅需要依賴打包好的framework文件即可洋魂。
其次槐秧,CocoaPods相對來說功能要比Carthage多很多,在國內(nèi)由于墻的原因忧设,我們都改成了淘寶的源來更新CocoaPods刁标,相信我,如果你不翻墻址晕,很多東西還是不能用膀懈,更新不下來,版本錯誤等一系列原因會讓你不得不放棄一些看起來非常好用的第三方庫谨垃。而Carthage似乎只需要從github上下載項目即可启搂,配置更是簡單硼控,使用的時候項目干干凈凈,所有的第三方庫就像蘋果原生的framework一樣美好胳赌,從此你不再需要擔(dān)新CocoaPods的庫用不了牢撼,不用花大量時間去修復(fù)用CocoaPods打包時出現(xiàn)的各種問題,如果你用過CocoaPods疑苫,當(dāng)你開始用Carthage的時候熏版,你會愛上這個工具的。