Swift 包管理器依赖镜像

Swift Package Manager Dependency Mirroring

我有一个项目并且:

也就是说,如果我想安装任何依赖项,我必须要求他们的开发人员镜像目标存储库,然后我才能使用它。

当我想实现有很多依赖项的 Crashlytics 时,问题就出现了。当我导入 Firebase 时,它​​是从镜像仓库中正确获取的,但它的依赖项仍然是从原始 URLs 中获取的(这很有意义)。

问题是 - 我如何告诉 Swift 包管理器将每个 URL 与镜像 交换?我已镜像所有依赖项。我只需要告诉SPM使用它就可以了。

我找到了 this proposal,它是在 Swift 5 中实现的,但是当我转到项目的根目录时 运行:

$ swift package config set-mirror --package-url <original URL> --mirror-url <mirror URL>

我收到这个错误:

error: root manifest not found

知道如何正确执行此操作吗?谢谢

编辑:

正如 Florian 正确指出的那样,该提案适用于包的存储库,而不是我的项目!所以:

  1. 我在项目的根目录中克隆了镜像仓库
  2. 我运行 一组命令为每个依赖项设置镜像url:
swift package config set-mirror \
    --original-url https://github.com/google/GoogleAppMeasurement.git \
    --mirror-url <company's url>/mirrors/githubcom-google-GoogleAppMeasurement
  1. 我回到项目根目录 运行:
xcodebuild -resolvePackageDependencies -project MyProject.xcodeproj -scheme MyAppScheme

但它仍在从原始 url 中获取,而不是从镜像中获取!

有一个 Xcode 项目使得这项任务基本上不可能完成(在撰写本文时)。 Xcode 与 SPM 的集成在大多数情况下都可以正常工作,但还没有(还?)与 SPM 在纯 SPM 程序包中的功能相提并论。

问题是,swift package config 始终仅在包本地存在,对依赖于该包的项目/包没有任何影响。由于 Xcode 目前没有 swift package config 的对应物,因此目前无法执行此操作。

然而,您可以做的是在本地克隆所有依赖项,然后将它们作为本地包从 Xcode 引用(只需将包文件夹拖到打开的 Xcode 项目中即可). Xcode 将足够聪明,可以从本地结帐中获取依赖项(或者至少我上次尝试时它足够聪明)。

希望未来的 Xcode 版本能够 完全 SPM 支持!