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
等文件。