Xcode 中 Swift Package Manager 速度慢

25,996 阅读2分钟

生活的节奏可以慢一些,但开发的效率,却不行。

这个问题的起源,在学习 Vapor 的时候,项目的依赖都是以SPM形式添加的,然后这些依赖的源头都在Github,所以试了几次,更新速度都很慢,甚至会出现无法更新的错误。简单说下解决方法吧。

代理

Swift Package 获取的速度极慢的根本原因,就在于我们访问Github速度极度不稳定。往往需要通过设置代理访问才行。

但是,后来发现,就是 Xcode 拉取 Swift Package的过程,实际上是不走系统的代理的,即使是代理开启全局模式,依然没有解决速度问题。但通过代理使用浏览器访问Github,速度却很不错。

方法一、修改git的配置

使用git的全局配置命令,添加针对github.com的代理设置。

$ git config --global https.github.com.proxy socks5://127.0.0.1:7890

上述命令的结果,就是在~/.gitconfig文件里增加了如下配置。

[https "github.com"]
	proxy = socks5://127.0.0.1:7890

重新启动Xcode,添加SwiftPackage,速度问题已经解决,然后愉快的使用Swift Package Manager 吧。🥳

感谢@DeverCalvin 在评论里的帮助。

方法二、命令行,适用于拉取更新SPM

  1. 为终端开启代理, all_proxy=的值是你的代理地址。
$ export all_proxy=socks5://127.0.0.1:7890
  1. xcode 的 spm 拉取更新命令。
$ xcodebuild -resolvePackageDependencies -scmProvider system

到此,重新打开项目,发现项目依赖的包已经更新完毕。🎉

参考:如何让swift package manager走代理的内容,感谢作者@范德萨就是我分享。

方法三、代理App,解决添加SPM的痛点。(🚀 推荐)

我们使用命令行代理后,对于在文章开头提到的问题,在一个已经添加SPM依赖的项目中,是可行的。 但是,也有新的问题,如果再添加一个SPM呢?仍然绕不过的Xcode中的添加机制(死慢死慢的)。 针对这个问题,找到一个更完全的解决方法,就是针对Xcode,使用代理,让其走代理访问网络。

  1. 需要一个负责代理的 App,这里选择Proxifier
  2. 需要为添加代理端口,查看自己的代理的走端口,添加即可。我使用的是Clash Mac版,默认就是127.0.0.1: 7890

765b197c3da4f8351c02685b2dbc0245.png

  1. 为Xcode设定单独设置代理规则。这里需要注意一下,这里需要手动添加一个com.apple.dt.Xcode.sourcecontrol.Git,这个是Xcode中SWP中使用的Git(罪魁祸首)。

QQ20230227-150612@2x.png

参考:Xcode设置SPM代理的内容,感谢作者@独风孤月

此方法解决了Xcode中使用SPM速度慢的问题,这个困扰了我长时间的问题也就告一段落了。🎉