Swift - Carthage使用
一、简介
Carthage的github主页为 https://github.com/Carthage/Carthage.git 里面其实对大家的疑问都有着详尽的解答,介于一些朋友英文不太好,这里我就用中文介绍一下Carthage和CocoaPods的不同:
首先,CocoaPods会直接创建和修改项目的workspace配置,一切都是为了便捷,我们只需要修改pod文件并不需要过多的关心其他事情,CocoaPods创建的是高度集成的项目。 而Carthage的特点是灵活,耦合度不高,集成时不需要集成相应的project,不需要创建workspace,而仅仅需要依赖打包好的framework文件即可。
其次,CocoaPods相对来说功能要比Carthage多很多,在国内由于墙的原因,我们都改成了淘宝的源来更新CocoaPods,相信我,如果你不翻墙,很多东西还是不能用,更新不下来,版本错误等一系列原因会让你不得不放弃一些看起来非常好用的第三方库。而Carthage似乎只需要从github上下载项目即可,配置更是简单,使用的时候项目干干净净,所有的第三方库就像苹果原生的framework一样美好,从此你不再需要担新CocoaPods的库用不了,不用花大量时间去修复用CocoaPods打包时出现的各种问题,如果你用过CocoaPods,当你开始用Carthage的时候,你会爱上这个工具的
优点
- Carthage 是去中心化的依赖管理工具,安装依赖时不需要去中心仓库获取 CocoaPods 所有依赖的索引,节省时间
- 对项目无侵入性,Carthage 设计上也比较简单,利用的都是 Xcode 自身的功能,开发者在创建依赖时,相比 CocoaPods 也简单许多
- Carthage 管理的依赖只需编译一次,项目干净编译时,不会再去重新编译依赖,节省时间,大大增加了Achive和Build的时间
- 是由Swift语言编写的,自动将第三方框架编程为 Dynamic framework( 动态库 )
- 与 CocoaPods 无缝集成,一个项目能同时拥有 CocoaPods 和 Carthage
缺点
- 仅支持 iOS8 +
- 它只支持Framework,所以不能用来针对 iOS 8 以前的系统版本进行开发
- 支持的 Carthage 安装的第三方框架和依赖不如 CocoaPods 丰富
- 无法在 Xcode 里定位到源码,只可以看到一个库的头文件
- 安装包的大小比用CocoaPods安装的包大
- 每次update时,需要从git仓库中重新拉取下载,比较耗时
- 每次更新环境都需要连接到中心仓库,比较耗时
- 每次编译都会把所有第三方库都重新编译一次
- 繁琐的维护过程
二、安装Carthage
使用 Homebrew 来安装 Carthage ,先安装 Homebrew 并升级
1.Homebrew 安装
Homebrew 官网
使用终端直接安装:
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
2.Homebrew 升级
brew update
3.安装 Carthage
// 安装
brew install carthage
// 查看版本
carthage version
// 升级
brew upgrade carthage
// 卸载
brew uninstall carthage
如果你不喜欢使用终端,也可以从网站 https://github.com/Carthage/Carthage/releases 下载最新版的 Carthage.pkg 来更新。
当你安装好Carthage后,在终端执行
carthage version
即可看到当前的carthage版本
二、使用Carthage下载三方框架
1.在工程文件里创建一个Cartfile文件:
cd到工程文件,然后执行如下命令
// 创见Cartfile文件
touch Cartfile
// 使用Xcode命令打开Cartfile文件
open -a Xcode Cartfile
2.在CArtfile文件添加依赖库
github "Alamofire/Alamofire" "5.0.0-rc. 3"
github "onevcat/Kingfisher"
github "nixzhu/MonkeyKing"
github "SwiftyJSON/SwiftyJSON" ~> 4.0
github "SnapKit/SnapKit"' ~> 5.0.d
Carthage支持两种类型的源,一个是 github ,另一个是 git
- github 表示依赖源,告诉 Carthage 去哪里下载文件。依赖源之后跟上要下载的库,格式为 Username/ProjectName
- git 关键字后面跟的是资料库的地址, 可以是远程的 URL 地址, 使用 git://, http://, ssh://, 或者是本地资料库地址。
告诉 Carthage 使用哪个版本,这是可选的,不写默认使用最新版本
== 1.0 表示使用1.0版本
= 1.0 表示使用1.0或更高的版本
~> 1.0 表示使用版本1.0以上但是低于2.0的最新版本,如1.2、1.6
branch名称 / tag名称 / commit名称,意思是使用特定的分支/标签/提交,比如可以是分支名 master,也可以是提交5c8a74a
3.保存并关闭Cartfile文件,然后执行安装
// 下载添加依赖库的第三方框架
carthage update
// 不区分iOS、macOS
carthage update --use-xcframeworks
// 只限iOS
carthage update --platform iOS --use-xcframeworks
// 只更新三方库snapKit的iOS版本
carthage update snapKit --platform iOS --use-xcframeworks
carthage update 安装完三方库会出现下图中的情况,将 macOS、iOS、watchOS、tvOS 4个版本都下载编译出来,而我们平常使用的只是iOS版本,这时我们就需要过滤掉不需要的,可以使用carthage update --platform iOS
过滤后
carthage update --platform iOS
说明
1、carthage会clone/fetch文件中对应的git第三方库,把每一个第三方库编译成二进制文件的framework文件。
2、--platform iOS命令是可选的,目前每次更新时建议加上,作用是保证只为iOS编译framework,如果不指定平台,会为全平台编译framework文件。--use-xcframeworks 是Xcode12后真机和模拟器分开后需要添加的。
3、当命令执行完毕,在Cartfile文件同级别的文件夹中生成一个名为“Carthage”文件夹和“Cartfile.resolved”文件。打开Carthage文件夹,可以看到两个文件夹Build和Checkouts。
4、Cartfile.resolved 文件用来跟踪项目当前所用的依赖版本号,为了保持多端开发一致。建议纳入git版本管理中,切记不要忽略。
三、项目中配置
1. 项目 Target -> Build Setting -> Search Paths -> Framework Search Paths 添加 $(PROJECT_DIR)/Carthage/ Build/iOS
Framework Search Paths2. 添加脚本 /usr/local/bin/Carthage copy-frameworks
- 项目Target -> Build Phases -> '+' -> New Run Script Phase
-
添加"Input Files" $(SRCROOT)/Carthage/Build/iOS/Alamofire.framework 等等
New Run Script Phase