A solution, for Unix-like systems, is to use SSH git URLs and add Host configurations to ~/.ssh/config. This approach works for both macOS/Linux command line and Xcode.
Use a ssh form for the dependency url in Package.swift.
// swift-tools-version:4.0
import PackageDescription
let package = Package(
name: "Example",
dependencies: [
.package(url: "[email protected]:abc/private-repo.git", .branch("develop") ),
],
)
In the above example, gitlab.com.myteam corresponds to a Host in ~/.ssh/config
### GITLAB WorkTeamOne
Host gitlab.com.workteam
HostName gitlab.com
User git
IdentityFile ~/.ssh/my_work_key_rsa
UseKeychain yes # for macOS keychain
AddKeysToAgent yes # for macOS keychain
PreferredAuthentications publickey
### GITLAB Hobby
Host gitlab.com.hobby
HostName gitlab.com
User git
IdentityFile ~/.ssh/my_hobby_key_rsa
UseKeychain yes # for macOS keychain
AddKeysToAgent yes # for macOS keychain
PreferredAuthentications publickey
Generate and apply SSH key pairs, as needed, for an individual’s online git service account.
ssh-keygen \
-b 4096 \
-t rsa \
-C "my[email protected]" \
-f ~/.ssh/my_work_key_rsa
Each team member could setup an individual, corresponding Host ssh configuration. The Host would be the same, however, the actual public/private key pairs (a) are specific to the user, (b) can be managed separately from any of the code development and (c) can be used automatically after the setup.