Carthage - The New Cocoa Package Manager

A simple, decentralized dependency manager for Cocoa

carthage

Carthage 是Github工程师打造的,为解决Cocoa上包管理提出的解决方案。

  • 非侵入式:它不像CocoaPods一样去修改项目文件,而且仅仅做了库的下载,使用Xcode工程文件 xcodebuild进行编译,比较灵活。
  • 去中心化: 好处是,作为库创建者,你不用刻意提交版本到中心库中;坏处是作为库使用者,你不能像pod search一样发现库,只能自己四处打听。
  • 使用Dynamic Frameworks,这是 iOS 8所有的特性,也就意味着,Carthage仅支持 iOS 8。

Install

1
2
3
4
$ brew update
$ brew install carthage
# 🍺 /usr/local/Cellar/carthage/0.5.1: 157 files, 34M

Using:

Cartfile
1
2
github "SwiftyJSON/SwiftyJSON"
github "ishkawa/A

在一个有Cartfile的项目目录中,执行初始化:

1
2
3
4
5
6
7
8
9
$ carthage update
# *** Cloning SwiftyJSON
# *** Cloning Alamofire
# *** Checking out Alamofire at "1.1.2"
# *** Checking out SwiftyJSON at "2.1.2"
# *** xcodebuild output can be found in /var/folders/rt/yqvn7_9x1s1cpnl76lpw_md80000gn/T/carthage-xcodebuild.CdDumN.log
# *** Building scheme "Alamofire" in Alamofire.xcworkspace
# *** Building scheme "SwiftyJSON" in SwiftyJSON.xcworkspace

会得到如下的一个对应文件目录:

1
2
3
4
5
6
7
8
9
10
├── Cartfile
├── Cartfile.resolved
└── Carthage
   ├── Build
   │   └── iOS
   │   ├── Alamofire.framework
   │   └── SwiftyJSON.framework
   └── Checkouts
   ├── Alamofire
   └── SwiftyJSON

Carthage 为你做的到此为止,它根据项目的工程文件为你build出对应的framework文件。接下来你要手工将这些文件拖到对应的项目中。

iOS 8 Support only:

记得,Carthage仅支持iOS 8,如果你试图编译到iOS 7设备上,会得到下面错误。

1
2
3
ld: warning: directory not found for option '-F/Volumes/Mactop BD/repos/SwiftWeather/Carthage.build/iOS'
ld: embedded dylibs/frameworks are only supported on iOS 8.0 and later (@rpath/Alamofire.framework/Alamofire) for architecture armv7
clang: error: linker command failed with exit code 1 (use -v to see invocation)

https://github.com/ReactiveCocoa/ReactiveCocoa

REF::