Swift 包管理器依赖镜像
Swift Package Manager Dependency Mirroring
我有一个项目并且:
- 与我合作的公司正在自行托管他们的 git
- CI只能与公司网络通信
也就是说,如果我想安装任何依赖项,我必须要求他们的开发人员镜像目标存储库,然后我才能使用它。
当我想实现有很多依赖项的 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 正确指出的那样,该提案适用于包的存储库,而不是我的项目!所以:
- 我在项目的根目录中克隆了镜像仓库
- 我运行 一组命令为每个依赖项设置镜像url:
swift package config set-mirror \
--original-url https://github.com/google/GoogleAppMeasurement.git \
--mirror-url <company's url>/mirrors/githubcom-google-GoogleAppMeasurement
- 我回到项目根目录 运行:
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 支持!
我有一个项目并且:
- 与我合作的公司正在自行托管他们的 git
- CI只能与公司网络通信
也就是说,如果我想安装任何依赖项,我必须要求他们的开发人员镜像目标存储库,然后我才能使用它。
当我想实现有很多依赖项的 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 正确指出的那样,该提案适用于包的存储库,而不是我的项目!所以:
- 我在项目的根目录中克隆了镜像仓库
- 我运行 一组命令为每个依赖项设置镜像url:
swift package config set-mirror \
--original-url https://github.com/google/GoogleAppMeasurement.git \
--mirror-url <company's url>/mirrors/githubcom-google-GoogleAppMeasurement
- 我回到项目根目录 运行:
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 支持!