如何强制Xcode拉取SwiftPM依赖时遵守Git insteadOf配置
问题描述
- 首次使用SwiftPM替代第三方包管理工具,为组件库管理PromiseKit、Starscream两个依赖
- 使用HTTPS格式地址声明依赖时,SwiftPM直接抛出错误:
The operation couldn’t be completed. (SwiftPM.SPMRepositoryError error 5.),对应依赖配置如下:
dependencies: [ // Dependencies declare other packages that this package depends on. // .package(url: /* package url */, from: "1.0.0"), .package(url: "https://github.com/daltoniam/Starscream.git", from : "4.0.0"), .package(url: "https://github.com/mxcl/PromiseKit", from: "6.8.0") ]
- 将依赖地址切换为SSH格式后,顶层依赖可正常拉取,但PromiseKit内部子模块使用HTTPS地址引用,子模块拉取流程失败,对应SSH格式配置如下:
dependencies: [ // Dependencies declare other packages that this package depends on. // .package(url: /* package url */, from: "1.0.0"), .package(url: "git@github.com:daltoniam/Starscream.git", from : "4.0.0"), .package(url: "git@github.com:mxcl/PromiseKit", from: "6.8.0") ]
当前环境配置
- Xcode内绑定的GitHub账号已设置为使用SSH方式克隆代码
- 本地及全局
.gitconfig均已配置URL重写规则,将GitHub的HTTPS地址替换为SSH地址:
[url "git@github.com:"] insteadOf = https://github.com/
问题根因
Xcode内置的SwiftPM调用Git时,不会默认读取用户目录下的全局.gitconfig文件,因此手动配置的insteadOf重写规则完全不生效。
解决步骤
- 将Package.swift中的依赖地址全部改回标准HTTPS格式,无需手动声明SSH地址
- 打开终端执行命令,指定Xcode读取全局Git配置的路径:
defaults write com.apple.dt.Xcode IDEPackageSupportGitGlobalConfigurationPath -string "$HOME/.gitconfig" - 完全退出Xcode(确保程序不在后台运行),执行命令清空本地SwiftPM缓存和Xcode编译缓存:
rm -rf ~/Library/Caches/org.swift.swiftpm rm -rf ~/Library/Developer/Xcode/DerivedData/* - 重新打开项目,点击菜单栏
File > Packages > Reset Package Caches,等待依赖重新拉取完成即可。
补充校验项:如果操作后仍报错,先在终端执行ssh -T git@github.com确认SSH密钥已正确添加到GitHub账号、认证流程正常;同时检查全局Git配置文件名是否为.gitconfig,不要误写为.gitconfigs导致配置无法被读取。
内容的提问来源于stack exchange,提问作者Liam Monninger
相关产品推荐
相关产品推荐

