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减小了对现有项目的侵入性,使用起来也挺方便。

相关文章
相关标签/搜索