'Swift Package Manager Dependency Mirroring

I have a project and:

  • the company I'm working with is self-hosting their git
  • the CI can communicate only with company's network

That being said, if I want to install any dependency, I have to ask their dev ops to mirror the target repository and only then I can use it.

The problem arises when I want to implement Crashlytics which has a lot of dependencies. When I import the Firebase, it's fetched from the mirrored repo correctly, but it's dependencies are still being fetched from the original URLs (which makes perfect sense).

The question is - How do I tell Swift Package Manager to swap each URL with mirrors? I have all the dependencies mirrored. I only need to tell SPM to use it.

I have found this proposal which was implemented in Swift 5, but when I go to root of my project and run:

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

I get this error:

error: root manifest not found

Any ideas how to do this correctly? Thank you

EDIT:

As Florian correctly pointed out, the proposal works from the package's repository, not my projects! So:

  1. I do clone mirrored repo in my project's root
  2. I run set of commands to set mirror url for each dependency:
swift package config set-mirror \
    --original-url https://github.com/google/GoogleAppMeasurement.git \
    --mirror-url <company's url>/mirrors/githubcom-google-GoogleAppMeasurement
  1. I go back to projects root and run:
xcodebuild -resolvePackageDependencies -project MyProject.xcodeproj -scheme MyAppScheme

But it's still fetching from original urls, not the mirrors!



Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source