Carthage
是一款iOS
项目依赖管理工具,与Cocoapods
有着相似的功能,可以帮助你方便的管理第三方依赖,它会把三方依赖编译成framework
,以framework
的形式将三方依赖加入到项目中进行使用和管理,下面记录一下项目添加Carthage
支持的方法以及Carthage
的使用方法,方便日后查看。
项目添加 Carthage 支持
1. 安装 Carthage
brew update
brew install carthage
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
-
touch 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
-
carthage update --platform iOS
3. 工程配置
-
打开工程
target
的Build Phases
配置,点击+
选择New Run Script Phase
,创建一个Script
,添加以下内容:/usr/local/bin/carthage copy-frameworks
-
然后添加相应的内容到下面的
Input Files
(举例):
image$(SRCROOT)/Carthage/Build/iOS/ReactiveCocoa.framework
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
等文件。
将来的你,一定会感激现在拼命的自己,愿自己与读者的开发之路无限美好。