在 CocoaPods 出现之前,iOS 开发者必须手动管理第三方库依赖,这些事情不仅没有什么技术含量,而且经常容易出错。对于新手来说,配置工程文件简直让人头疼。CocoaPods 的出现极大的改善了这些状况,它可以自动帮你管理依赖,而且大多数常用的第三方库都支持使用 CocoaPods 来进行安装。开发者终于从这些繁杂的依赖管理中解脱出来,可以把精力专注于应用本身。

然而,CocoaPods 并不是完美的,它也有许多缺点:

  • CocoaPods 有一个中心服务器来管理各个包的元信息,一旦这个服务器挂了,CocoaPods 使用必然会受到影响,比如 CocoaPods 的官方 Repo
  • CocoaPods 对于工程是侵入性的,它会生成一个 *.xcworkspace 结尾的工程文件,你必须使用这个新的工程文件打开项目,否则会出错;
  • 使用 CocoaPods 的项目,每次修改后都会将第三方库重新编译,非常浪费时间;

基于以上这些缺点,你可以试试 Carthage 了。

Carthage

Carthage 是一个去中心化的依赖管理器,它可以从你指定的地址下载第三方库并自动编译为静态的 framework。它对于工程本身是非侵入性的,不会修改你的工程,你直接将编译好的 framework 加入到你的工程中就可以痛快的使用了,运行时也无需再次编译,大大节省了时间!

安装

你可以使用 brew 来安装 Carthage:

brew install carthage

当然也可以访问 Release 页面 下载 pkg 包来安装。

编写 Cartfile

和 CocoaPods 类似,Carthage 也通过创建一个 Cartfile 来描述需要依赖的第三方库列表。

github "facebook/AsyncDisplayKit" //如果没有指定版本号,则默认使用最新版本。
github "xmartlabs/Eureka" ~> 1.0  //~> 1.0 表示使用大于 1.0 但小于 2.0 的版本。
github "danielgindi/Charts" == 2.2.4 //== 2.2.4 表示使用 2.2.4 版本。
github "SnapKit/SnapKit" >= 0.15.0   //>= 0.15.0 表示使用 0.15.0 或更高版本。

安装第三方库

写好 Cartfile 之后,可以使用下面命令来安装第三方依赖了:

carthage update

carthage 首先会从指定的位置(比如 github)下载第三方库源码,然后会逐个将第三方库编译为 iOS,OSX,watchOS,tvOS 平台的 framework。当然,如果你只需要某个平台的 framework ,可以在 Cartfile 中指定对应的平台。

carthage update --platform iOS

如果你需要新增或者更新某个第三方库,你可以使用下面这个命令:

carthage update Alamofire

配置 gitignore

使用 Carthage 后,项目中的一些文件目录是不适合加入到 git 仓库中的,比如 Carthage/Build,所以我们可以在 .gitignore 中加入需要忽略的目录和文件。

# Carthage
#
# Add this line if you want to avoid checking in source code from Carthage dependencies.
# Carthage/Checkouts

Carthage/Build

相关的配置可以参考 github 提供的 gitignore 列表

导入 framework 到你的工程

将编译好的 framework 添加到如下位置:

并添加 Run Script:

/usr/local/bin/carthage copy-frameworks

command + B 编译项目,此时生成的 framework 已经成功导入工程了。