項目源址:https://github.com/Carthage/Carthagegit
想到iOS/OS X項目的依賴管理,第一個想到的必定是大名鼎鼎的CocoaPods。下面是Carthage介紹裏面的講述二者的不一樣之處:github
CocoaPods (默認)自動創建和更新一個Xcode workspace,用來管理你的項目和全部依賴。Carthage使用xcodebuild來編譯出二進制庫,剩下的集成工做徹底交給開發人員。swift
CocoaPods使用起來方便,Carthage更加靈活而且對現有項目沒有太多的侵略性。xcode
CocoaPods但願創建一個生態系統,能夠更加方便的發現和集成第三方代碼庫。Carthage但願變成一個去中心化的依賴管理系統,不提供中心化的項目列表,減小維護成本和單點失敗的機率。不過這樣給開發人員尋找項目帶來不便。app
CocoaPods的項目須要配置podspec文件,包含了項目和第三方庫的信息。Carthage並不使用相似的配置文件,第三方庫的依賴關係是經過Xcode項目來配置的。less
安裝Carthageide
1. 直接下載安裝包: 地址, 不過文件host在amazon S3上面,我嘗試過幾回未果。。。ui
2. 使用Homebrewspa
brew update brew install carthage
編譯第三方庫code
1. 建立Cartfile列出你要使用的第三方庫信息, 下面是一個簡單的例子
構造兩個庫:ReactiveCoca 2.3.1版本及以上,Mantle 1.x版本
# Require version 2.3.1 or later github "ReactiveCocoa/ReactiveCocoa" >= 2.3.1 # Require version 1.x github "Mantle/Mantle" ~> 1.0 # (1.0 or later, but less than 2.0)
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目錄中但願導入的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
6. 在項目中使用第三方庫
#import "AppDelegate.h" #import <ReactiveCocoa/ReactiveCocoa.h> #import <Mantle/Mantle.h> @interface AppDelegate () @end @implementation AppDelegate - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // Override point for customization after application launch. NSArray *array = @[@"a",@"b"]; NSLog(@"%@", [array mtl_firstObject]); return YES; }
7. 運行項目,查看輸出
2015-05-06 11:14:56.858 CarthageProject[3733:227021] a
大功告成!
Carthage使用了一種極爲精簡的方式來管理第三方庫,將源碼編譯成Framework的二進制文件,而後讓開發人員來負責library的管理、導入等等。比起CocoaPods減小了對現有項目的侵入性,使用起來也挺方便。