Carthage是一款iOS项目依赖管理工具,与Cocoapods有着相似的功能,可以帮助你方便的管理第三方依赖,它会把三方依赖编译成framework,以framework的形式将三方依赖加入到项目中进行使用和管理,下面记录一下项目添加Carthage支持的方法以及Carthage的使用方法,方便日后查看。
项目添加 Carthage 支持
1. 安装 Carthage
可以到 Carthage 项目 下直接下载 Carthage.pkg 文件安装,或者使用 Homebrew 方式安装,终端输入以下命令进行安装。
brew update |
2. 创建一个支持 Carthage 的工程
Carthage仅支持dynamic frameworks也就是动态库,可以新建一个工程或者在现有工程下创建一个新的target,类型需要选择Coaoa Touch Framework。

- 打开项目配置,选择
framework target的Build Phases,将需要暴露的.h文件拖拽到Public里面,将相应的.m文件拖拽到Compile source里面。 - 如果你的
framework target名称与你想要打包构建的framework名称不一致,选中Build Settings选项卡,搜索Packaging,把Produce Module Name和Produce Name改成你想要构建的framework名称。 - 如果你使用了类别,那么你需要在
Build Settings的Linking的Other Linker Flags里加上-all_load。 - 如果你想你的工程支持
bitcode,需要在Other C Flags里加上-fembed-bitcode。 - 由于
Carthage在build时,会自动将设置为Shared的framework target构建成framework,所以需要单击顶部target,在弹出选项中选中Manager Schemes,将framework target的Shared选项选中。
3. 构建 framework
打开终端
cd到工程目录下,执行以下命令开始打包framework,执行完成后会自动将framework文件保存在工程的Carthage/Build文件夹下。carthage build --no-skip-current
然后将生成的
framework文件拖进测试项目进行测试即可,具体就不说了。
4. 发布并打上 tag
测试没问题后,将工程
push并打上tag即可,tag名称必须是版本号。git tag 1.0.0
git push --tags这样你的项目就已经支持
Carthage了,其他开发者就可以使用Carthage来管理你的项目依赖了,只需要将framework工程push上去即可,打包生成的测试framework文件不需要push。
使用 Cathage 依赖第三方库
1. 创建并编辑 Cartfile
在工程目录下创建一个名为 Cartfile 的文件,可以使用以下命令创建。
touch Cartfile
然后在 Cartfile 文件中指明想要依赖的第三方库。
github "ReactiveCocoa/ReactiveCocoa" // 不指定版本
github "ReactiveCocoa/ReactiveCocoa" >= 1.0.0 // 大于等于 1.0.0 版本
github "ReactiveCocoa/ReactiveCocoa" ~> 1.0.0 // 1.0.0 及以上的兼容版本 < 2.0.0
github "ReactiveCocoa/ReactiveCocoa" == 1.0.0 // 指定为 1.0.0 版本
github "ReactiveCocoa/ReactiveCocoa" "branch" // 指定特定的分支、tag
2. 更新并构建 framework
编辑完成后,在终端中
cd到 Cartfile 所在目录下,执行以下命令构建第三方库的framework。carthage update --platform iOS
执行完成后会自动将第三方库
clone到 Carthage/Checkouts 文件夹下,然后会自动打包成相应的framework文件,打包完的文件会保存在 Carthage/Build 文件夹下。
3. 工程配置
打开工程
target的General配置,将 Carthage/Build 下生成的framework文件拖拽到Linked Frameworks and Libraries选项中。打开工程
target的Build Phases配置,点击+选择New Run Script Phase,创建一个Script,添加以下内容:/usr/local/bin/carthage copy-frameworks
然后添加相应的内容到下面的
Input Files(举例):$(SRCROOT)/Carthage/Build/iOS/ReactiveCocoa.framework
![]()
这个脚本是为了处理 App Store 提交的 bug,解决
App因为使用的frameworks包含二进制图像的iOS模拟器在提交App Store时会被自动拒绝的问题。
4. Cathage 的目录结构
在使用 Carthage 管理 frameworks 时,工程根目录下与 Cartfile 同级的会存在 Cartfile.resolved 文件和
Carthage 文件夹,Carthage 文件夹又包含 Build 和 Checkouts两个文件夹。
Cartfile.resolved文件
包含已经添加的frameworks信息,包括依赖名称和当前使用的版本信息。Checkouts文件夹
包含所有frameworks源码信息,在执行carthage build时,会直接使用里面的project或者workspace相应的scheme来构建相应的framework。Build文件夹
包含所有的二进制构建结果,包括.framework二进制文件和.dSYM等文件。
