Swift Package Manager能否使用shallow clone浅克隆解决大依赖拉取问题
SPM 浅克隆功能实现方案
功能支持说明
Swift 5.7(对应Xcode 14及更高版本)开始原生支持浅克隆功能,低于该版本的Swift工具链无原生浅克隆能力,需使用替代方案解决大仓库拉取慢的问题。
双场景操作步骤
命令行场景
执行依赖拉取、更新命令时增加--clone-depth参数指定克隆深度即可,常用命令如下:
- 拉取项目所有依赖:
swift package resolve --clone-depth 1 - 更新项目所有依赖:
swift package update --clone-depth 1
设置深度为1时只会拉取对应版本的最新一层提交历史,可将nlohmann/json这类仓库的拉取体积从300MB缩小到几MB级别。
Xcode图形界面场景
Xcode未提供可视化的浅克隆开关,可通过两种方式实现:
- 全局修改Xcode默认SPM行为:
打开终端执行命令:defaults write com.apple.dt.Xcode IDEPackageSupportCloneDepth 1,执行完成后重启Xcode,后续所有通过Xcode拉取的SPM依赖都会自动使用深度为1的浅克隆。
若需要恢复完整克隆,执行defaults delete com.apple.dt.Xcode IDEPackageSupportCloneDepth后重启Xcode即可。 - 单项目临时使用:
先在终端进入项目根目录,执行命令行场景的swift package resolve --clone-depth 1完成依赖拉取,再打开Xcode即可复用已经拉取好的浅克隆缓存,不会触发完整仓库克隆。
注意事项
浅克隆仅适用于无需查看依赖历史提交、无需切换到更早依赖版本的场景,如有相关需求请使用默认完整克隆。
低版本兼容方案
如果使用的Swift版本低于5.7,可选择以下两种替代方案:
- 手动fork依赖仓库,删除冗余的测试、文档、历史提交内容,仅保留必要的源码和Package.swift文件,项目指向fork后的仓库地址即可
- 直接将nlohmann/json所需的单个头文件和实现文件拖入项目中,跳过SPM引入流程,彻底避免大仓库拉取问题
内容的提问来源于stack exchange,提问作者Richard Topchii
相关产品推荐
相关产品推荐

