我有一个项目和:
- 我工作的那家公司自己托管他们的git
- 配置项只能与公司网络通信
也就是说,如果我想安装任何依赖项,我必须要求他们的开发人员镜像目标存储库,只有这样我才能使用它。
当我想实现有很多依赖项的Crashlytics时,问题就出现了。当我导入Firebase时,它正确地从镜像repo中获取,但它的依赖项仍然从原始URL中获取(这很有意义)。
问题是-我如何告诉Swift Package Manager用镜像交换每个URL?我已经镜像了所有的依赖项。我只需要告诉SPM使用它。
我已经找到了在Swift 5中实现的this proposal,但是当我转到项目的根目录并运行:
$ swift package config set-mirror --package-url <original URL> --mirror-url <mirror URL>
我得到这个错误:
error: root manifest not found
你知道怎么正确地做吗?谢谢
编辑:
正如Florian正确指出的那样,这个建议是在包的存储库中工作的,而不是在我的项目中!
1.我确实在我的项目根目录中克隆了镜像存储库
1.我运行一组命令为每个依赖项设置镜像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
但它仍然是从原始网址,而不是从镜像!
2条答案
按热度按时间jv4diomz1#
有一个Xcode项目使得这项任务基本上不可能完成(在编写本书时)。Xcode与SPM的集成在大多数情况下都很好,但还不能与SPM在纯SPM包中所能做的事情相提并论。
问题是,
swift package config
总是只在包的本地,对依赖于包的项目/包没有任何影响,而且Xcode目前没有对应的swift package config
,目前不可能做到这一点。但是,您可以做的是在本地克隆所有依赖项,然后从Xcode中引用它们作为本地包(只需将包文件夹拖到打开的Xcode项目中即可)。Xcode将足够智能地从本地本地 checkout 中获取依赖项(至少上次我尝试时它足够智能)。
让我们期待未来的Xcode版本能提供 * 完整 * SPM支持!
puruo6ea2#
SPM镜像仅适用于包,不适用于应用程序。
我面临着在CI上使用来自内部存储库的包的需求,而在我的工作站上构建时,我们需要从公共Github repo构建。
我采用的解决方案是使用shell脚本“修补”
project.pbxproj
文件。在
project.pbxproj
中,存储库的URL被设置为public,并且只是一个普通字符串。在CI上,我们使用
xcodebuild
构建应用程序,在执行build
/archive
操作之前,我使用sed
运行shell脚本,以覆盖内部的URL。这不是镜像,因为我们总是从配置项的内部存储库构建,但它可以工作。