I am not sure if it's right to automatically checkout submodules for the root package. In general, SwiftPM avoids performing git operations on the root package (there might not even be a git repository).
An alternative solution might involve using URL rewriting provided in Git. We use this on developer machines to rewrite all SSH connections to HTTPS for GitHub to deal with restrictive proxies.
.netrc
support being discussed here also: SPM support basic auth for non-git binary dependency hosts.
This is such a great solution/suggestion/workaround. For the first time my private SwiftPM dependencies resolve in my CI. A quick before_script
step in my GitLab CI configuration to call git config
and it works .
swiftpm_build:
stage: build
before_script:
- "git config --global url.$CI_SERVER_PROTOCOL://gitlab-ci-token:$CI_JOB_TOKEN@$CI_SERVER_HOST/.insteadOf git@$CI_SERVER_HOST:"
- swift package resolve
script:
- swift build -c release
tags:
- swift-5.0
Then the dark times... xcodebuild
. Why xcodebuild
? Because that's how you run SwiftPM tests on iOS. I do not make the rules. I just work here.
xcodebuild:
stage: build
variables:
DESTINATION: platform=iOS Simulator,name=iPad Pro (9.7 inch),OS=10.3.1
before_script:
- "git config --global url.$CI_SERVER_PROTOCOL://gitlab-ci-token:$CI_JOB_TOKEN@$CI_SERVER_HOST/.insteadOf git@$CI_SERVER_HOST:"
- xcodebuild -resolvePackageDependencies
script:
- xcodebuild -enableCodeCoverage YES -scheme "$XCODE_SCHEME" -destination "$DESTINATION" build-for-testing
tags:
- swift-5.0
- iOS-10.3.1
Resolve Package Graph
Fetching git@private.gitlab.instance.local:group/dependency.git
Resolved source packages:
SwiftPMProject: /Users/buildbot/SwiftPMProject
xcodebuild: error: Could not resolve package dependencies:
The repository could not be found. Make sure a valid repository exists at the specified location and try again.
So apparently xcodebuild
does its own package resolution outside of Git.
So close to nirvana.
Regardless, thanks @monocularvision
Passing -usePackageSupportBuiltinSCM
to xcodebuild
should work here. By default, Xcode uses its own SCM subsystem for fetching packages, but this option makes it use the one in libSwiftPM, so it should behave similar to swift build
at that point.
@NeoNacho thank you; that did work.
Though for any intrepid reader that makes there way here. The -usePackageSupportBuiltinSCM
did not work on Xcode/xcodebuild
11.3.1. On 11.3.1 when the tests are run apparently the dependency is not on the @rpath
.
It may work on some other version but I just jumped to 11.5.0 and it worked there.