【发布时间】:2022-08-12 23:45:04
【问题描述】:
我有一个项目,并且:
- 与我合作的公司正在自行托管他们的 git
- CI 只能与公司网络通信
话虽如此,如果我想安装任何依赖项,我必须让他们的开发人员镜像目标存储库,然后我才能使用它。
当我想实现具有很多依赖项的 Crashlytics 时,就会出现问题。当我导入 Firebase 时,它会正确地从镜像仓库中获取,但它的依赖项仍然是从原始 URL 中获取的(这很有意义)。
问题是 -我如何告诉 Swift 包管理器用镜像交换每个 URL?我已经镜像了所有依赖项。我只需要告诉 SPM 使用它。
我找到了在 Swift 5 中实现的this proposal,但是当我进入项目的根目录并运行时:
$ swift package config set-mirror --package-url <original URL> --mirror-url <mirror URL>
我收到此错误:
error: root manifest not found
任何想法如何正确地做到这一点?谢谢
编辑:
正如弗洛里安正确指出的那样,该提案来自包的存储库,而不是我的项目!所以:
- 我确实在我的项目的根目录中克隆了镜像仓库
- 我运行一组命令来为每个依赖项设置镜像 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但它仍然从原始网址获取,而不是镜像!
-
您需要在包目录中运行此命令。如提案中所述,mirror-config 将写入包内的
.swiftpm/config。这里的错误指出,SPM 找不到包的根清单(又名 Package.swift),因为您可能在包之外运行了命令。请注意,它需要位于包根目录中,而不是 Xcode 项目中。 -
谢谢@FlorianFriedrich - 非常有意义!如果您有任何想法,请查看我更新的问题吗?谢谢
-
我已经为此发布了一个“答案”。可能不是你所希望的,对不起!我自己对此非常感兴趣,因为我们在其中一个项目中遇到了类似的问题。 (虽然我们只需要“镜像”我们自己的依赖项,而不是开源的)。
标签: ios swift git continuous-integration swift-package-manager