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


項目源址:https://github.com/Carthage/Carthage

 

想到iOS/OS X項目的依賴管理,第一個想到的一定是大名鼎鼎的CocoaPods。下面是Carthage介紹里面的講述兩者的不同之處:

CocoaPods (默認)自動建立和更新一個Xcode workspace,用來管理你的項目和所有依賴。Carthage使用xcodebuild來編譯出二進制庫,剩下的集成工作完全交給開發人員。

CocoaPods使用起來方便,Carthage更加靈活並且對現有項目沒有太多的侵略性。

CocoaPods希望建立一個生態系統,可以更加方便的發現和集成第三方代碼庫。Carthage希望變成一個去中心化的依賴管理系統,不提供中心化的項目列表,減少維護成本和單點失敗的概率。不過這樣給開發人員尋找項目帶來不便。

CocoaPods的項目需要配置podspec文件,包含了項目和第三方庫的信息。Carthage並不使用類似的配置文件,第三方庫的依賴關系是通過Xcode項目來配置的。

 

安裝Carthage

1. 直接下載安裝包: 地址, 不過文件host在amazon S3上面,我嘗試過幾次未果。。。

2. 使用Homebrew

brew update
brew install carthage

 

編譯第三方庫

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM