Carthage的那些事儿

介绍

Carthage的Github地址: https://github.com/Carthage/Carthage

文件结构

在项目目录下有三个文件,Cartfile描述文件,Cartfile.resolved文件和Carthage文件夹。

Cartfile描述文件: 添加想要集成的第三方库。支持两种类型的源

Cartfile.resolved文件:该文件列出了每个第三方库的版本,确保其他人构建第三方库的时候版本相同。主要是针对版本库协同开发使用。

Carthage文件夹:存放构建好的第三方库的framework包和符号文件(.dSYM)。

原理

根据Cartfile描述文件下载第三方库到本地,再使用xcodebuild构建framework文件。最后手动集成这些库到项目中。

Carthage和Podfile虽然都是包管理器,但Carthage使用的是一种非侵入性的方式集成第三方库。

特点

  • 轻量;
  • 非侵入性;不会对项目结构进行改动,相应的也就是需要手动将第三方库的framework文件手动集成到项目中。
  • 去中心化;不像CocoaPods由中心服务器对包进行管理,因而包管理不再强依赖中心服务器信息量和稳定性,相应的也无法对第三方库进行索引。

使用Carthage

使用Carthage添加第三方库

新建Cartfile描述文件

项目文件夹下新建描述文件。

添加第三方库

Cartfile中的格式如下:

1
github "libgit2/objective-git" "0.12.0"

下载第三方库

执行该命令,Carthage就会从该github地址下载第三方库,然后使用xcodebuild构建第三方库。操作完成后,会在项目根目录下生成Carthage目录。

1
2
3
$ carthage update
// ps
carthage update --platform iOS // 代表只编译iOS版的`framework`

手动集成

  1. General—> Linked Frameworks and Libraries中添加项目根目录下Carthage/Build/iOS目录下的framework文件;或者Build Settings —> Search Paths —> Header Search Paths 添加“$(SRCROOT)/Carthage/Build/iOS/ObjectiveGit.framework/Headers/”。

  2. Build Phrases 点击左上角New Run Script PhraseBuild Settings->Header Search Paths 添加”$(SRCROOT)/Carthage/Build/iOS/ObjectiveGit.framework/Headers”,在脚本区域输入/usr/local/bin/carthage copy-frameworks, 最后在Input Files区域添加$(SRCROOT)/Carthage/Build/iOS/ObjectiveGit.framework。(ps:该操作的目的是为了运行时能够找到该framework)

    最终效果如图所示:



    Carthage-Run-Script

  3. [optional] Build Phrases 点击左上角New Copy Files Phrase, 然后将Carthage/Build/iOS目录下的二进制库的符号文件(ObjectiveGit.framework.dSYM)拖入。(Ps:该操作的目的是为了能在调试时查看内部代码)。如果该操作导致编译出错,需修改Build Settings—> Deployment —> Strip Debug Symbols During Copy 为NO。该设置为YES代表不对Copy的符号文件处理,Xcode8默认是YES。

更新Carthage第三方库

更改Cartfile,修改第三方库对应版本,然后在命令行执行

1
$ carthage update

安装Carthage

Homebrew

前提是已经安装了brew,没有安装的可以上网找下步骤,或者官网也提供了安装步骤。

1
2
3
$ brew install carthage // 安装Carthage
$ carthage version // 可以查看当前的Carthage版本

Installer

从Github上的releasehttps://github.com/Carthage/Carthage/releases下载pkg包,双击即可安装。

参考资料

Carthage 包管理工具,另一种敏捷轻快的 iOS & MAC 开发体验

Carthage的安装和使用

objective-git

(译)Carthage 使用说明