Carthage - 一個簡單、去集中化的Cocoa依賴管理器

項目源址: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減小了對現有項目的侵入性,使用起來也挺方便。

相關文章
相關標籤/搜索