想到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 installcarthage
编译第三方库
1. 创建Cartfile列出你要使用的第三方库信息, 下面是一个简单的例子
构造两个库:
github "AFNetworking/AFNetworking" ~> 3.0 github "Monsory/Monsory"//没有指定版本号 默认是最新版本
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
如果你使用的是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的二进制文件,然后让开发人员来负责library的管理、导入等等。比起CocoaPods减少了对现有项目的侵入性,使用起来也挺方便。
首先,CocoaPods会直接创建和修改项目的workspace配置,一切都是为了便捷,我们只需要修改pod文件并不需要过多的关心其他事情,CocoaPods创建的是高度集成的项目。
而Carthage的特点是灵活,耦合度不高,集成时不需要集成相应的project,不需要创建workspace,而仅仅需要依赖打包好的framework文件即可。
其次,CocoaPods相对来说功能要比Carthage多很多,在国内由于墙的原因,我们都改成了淘宝的源来更新CocoaPods,相信我,如果你不翻墙,很多东西还是不能用,更新不下来,版本错误等一系列原因会让你不得不放弃一些看起来非常好用的第三方库。而Carthage似乎只需要从github上下载项目即可,配置更是简单,使用的时候项目干干净净,所有的第三方库就像苹果原生的framework一样美好,从此你不再需要担新CocoaPods的库用不了,不用花大量时间去修复用CocoaPods打包时出现的各种问题,如果你用过CocoaPods,当你开始用Carthage的时候,你会爱上这个工具的。