代理背后的XCode Swift程序包管理器错误

问题描述

我们使用XCode中嵌入的Swift程序包管理器来处理项目中的依赖项。在本地计算机上使用时,一切正常。但是,当我尝试在ci从站上构建项目时,出现以下错误(从XCode和控制台运行时):

xcodebuild -resolvePackageDependencies

Resolve Package Graph

Fetching https://github.com/hmlongco/Resolver.git

xcodebuild: error: Could not resolve package dependencies:
  An unkNown error occurred 

在本地和ci从属服务器上运行它的区别在于,ci机器是在代理后面配置的。我们已经将运行此命令时访问的所有URL列入了白名单,但是问题仍然存在。我找不到有关此错误的任何详细日志。

通过检查运行命令时发送的网络程序包,我们仍然可以看到某些应用程序正在尝试访问直接URL,而不是通过代理,从而收到超时。我们仅在github上使用公共软件包,并且不需要任何身份验证。

从另一面看,如果使用Package.swift设置了旧项目,则运行: swift package resolve依赖关系已成功解决,没有错误

我已经经历了以下内容,但是没有任何有用的解决方案:

Configuration for enterprise networks
XCode proxy settings
SPM in real life projects
Same issue on developer forum
SSH error resolving dependencies-没有ssh依赖项

也没有任何文档说明通过XCode解析软件包与使用“ swift软件包”有何不同。 当前,我不确定是否可以进行配置,因此不支持XCode使用SPM的代理设置,或者不支持通过代理的Xcode SPM。有任何想法吗?任何帮助表示赞赏!

解决方法

从我刚刚发现的情况来看,至少对于 Xcode 12.4,xcodebuild 有 -scmProvider 选项:

-scmProvider  which implementation to use for Git operations (system/xcode)

如果我猜对了,-scmProvider system 会强制 xcodebuild 使用“系统”git。反过来,就我而言,这使它尊重我拥有的 git 配置设置,尤其是代理。

因此,回答最初的问题,可能值得一试

xcodebuild -resolvePackageDependencies -scmProvider system

(只要正确设置了 Git 配置)

,

如果我们仅将代理配置为与git一起使用,那么结果很简单:

Getting Git to work with a proxy server - fails with "Request timed out"