当前位置: 首页 > 工具软件 > Carthage > 使用案例 >

Carthage安装使用

苏弘盛
2023-12-01

一、Carthage介绍

Carthage是GitHub上开源的、用于Cocoa开发的三方依赖管理工具。GitHub地址:https://github.com/Carthage/Carthage
通过Carthage,我们在iOS项目的开发中可以很方便的对三方依赖进行配置管理。
Carthage的原理,简而言之,是通过配置文件Cartfile指定所依赖的三方框架,Carthage通过分析配置文件的内容,通过从github、git仓库或二进制包URL获取依赖,生成为同时包含模拟器和真机目标代码的.framework库。

二、Carthage与CocoaPods比较

2.1 去中心化管理工具:Carthage

  • Carthage用swift开发,支持iOS8以上系统。通过生成framework供项目依赖。
  • 轻量级。
  • 使用简单。
  • 三方依赖灵活自由。

2.2 集中式管理工具:CocoaPods

介绍略

2.3 侵入程度

  • Carthage非侵入式
  • CocoaPods会修改Xcode中的workspace配置,而Carthage不会,对工程配置没有侵入性。

三、Carthage使用

3.1 安装Carthage

终端执行:brew install carthage即可
注意:终端安装,Mac需要先安装homebrew,homebrew的安装可以见我的另一篇博文:新mac安装CocoaPods完整流程

3.2 指定依赖

通过Cartfile文件指定三方依赖

  1. 指定代码仓库,以GitHub为例
    git “https://github.com/liangzhen6/LZImageBrowser” ~> “master”

  2. 指定二进制包地址
    binary “https://xxxxxxxxxxx/test.json”
    而test.json的内容为:
    {
    “2.3”: “https://xxxxxxxxxxx/test.framework.zip”,
    “3.0.3”: “https://xxxxxxxxxxx/test.framework.zip”
    }
    有2个不同版本的test.framework可供使用,可指定使用版本。

注意:Carthage要求通过URL配置二进制包,必须使用HTTPS协议。

3.3 把代码编译成framework

命令:

carthage build --no-skip-current 
carthage archive YourFrameworkName

    carthage build --archive

3.4 生成依赖包

  • 运行carthage update命令生成依赖包
  • 编辑完成Cartfile后,在该目录下运行:carthage update --platform iOS platform iOS指定iOS平台,不指定则生成匹配所有平台的依赖包。
  • Carthage会根据指定的配置,在代码仓库或二进制包仓库中查找符合语义版本的最高版本,进行编译生成或下载二进制包,到子目录:Carthage/Build/iOS。同时,Carthage会生成Cartfile.resolved,用于保存经过检查和判断后所明确下来的包的版本。

3.5 集成代码

  • 将Carthage/Build/iOS目录下生成的.framework文件,添加到project工程配置中即可。
  • 为application添加运行脚本,裁剪framework中不必要的目标代码。由于Carthage帮我们生成的framework同时包含了模拟器和真机的目标代码,所以如果我们开发的是framework,那么只需要能够指定依赖并成功通过编译链接即可,但如果我们生成的最终目标是app,那么在打包的时候,我们需要把所依赖的framework中的不同目标代码裁剪掉。换句话说,如果我们编译的是真机版本,在打包的时候需要把所有依赖的framework中的模拟器目标代码才剪掉,否则将导致App Store审核被拒。
  • Carthage提供了命令copy-frameworks,帮助我们简化这个步骤。我们只需要在app的Build Phases中,添加一个Run Script步骤,指定运行命令:/usr/local/bin/carthage copy-frameworks
  • 并且在Input Files和Output Files中指定需要处理的framework即可。具体方法参考:git地址

如何通过Carthage共享自己工程的编译规则

  • Carthage只会编译.xcodeproj中指定为shared的规则(scheme)。通过Xcode中的Manage Schemes…查看是否共享了sheme:
    可以通过carthage build --no-skip-current命令验证是否正确的共享了scheme。

Carthage对于多层依赖管理的处理方式
如果一个依赖包依赖了另外一个依赖包,Carthage只需要集成顶层的依赖包到carlift文件中,Carthage会迭代解析下载所有的依赖包。

 类似资料: