Encontramos la solución a esta incógnita, o por lo menos eso creemos. Si sigues con alguna inquietud dínoslo, para nosotros será un placer responderte
Solución:
Una solución, que finalmente encontré para los sistemas de tipo “unix”, es usar SSH git
URL y agregar Host
configuraciones para ~/.ssh/config
. Este enfoque ha funcionado tanto para la línea de comandos de macOS / Linux como para Xcode.
Utilice un formulario ssh para la URL de dependencia en 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") ),
],
)
En el ejemplo anterior, gitlab.com.myteam
corresponde a un Host
en ~/.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
SSH key los pares se pueden generar según sea necesario para las cuentas y se pueden aplicar al servicio de git en línea de un individuo.
ssh-keygen
-b 4096
-t rsa
-C "[email protected]"
-f ~/.ssh/my_work_key_rsa
Cada miembro del equipo podría configurar un individuo, correspondiente Host
configuración de ssh. El Host
sería el mismo, sin embargo, el público / privado real key los pares (a) son específicos del usuario, (b) se pueden administrar por separado de cualquiera de los desarrollos de código y (c) se pueden usar automáticamente después de la configuración.
Al usar spm con repositorios privados que son
- accesible a través de
vpn
oproxies
, - accesible a través de
ssh
- con configuraciones complejas de ~ / ssh / config y / etc / hosts,
Tenga en cuenta que Xcode mantiene su propia carpeta de .ssh
y known_hosts
.
Puedes verlo en
~/Library/Preferences/com.apple.dt.Xcode.plist
Se verá así
En un entorno ci, esto no es agradable y es posible que obtenga los siguientes errores:
xcodebuild: error: no se pudieron resolver las dependencias del paquete: no se pudo verificar la huella digital SSH del servidor.
xcodebuild: error: no se pudieron resolver las dependencias del paquete: la autenticación falló porque las credenciales fueron rechazadas
Un error desconocido ocurrió. no se pudo conectar a localhost: conexión rechazada (-1)
De hecho, puede decirle a Xcode que use la ubicación estándar de ssh keys y hosts conocidos ~/.ssh
a través de uno de los siguientes:
una. Esto funciona en contenedores basados en ci como el círculo ci
sudo defaults write com.apple.dt.Xcode IDEPackageSupportUseBuiltinSCM YES
B. Esto funciona en metal desnudo
/usr/libexec/Plistbuddy -c "Add :IDEPackageSupportUseBuiltinSCM bool 1" ~/Library/Preferences/com.apple.dt.Xcode.plist
C. Si lo anterior no le funcionó, intente agregar -scmProvider system
en su comando xcodebuild
- fastlane 2.169.0 es compatible con esto
gym(
...
use_system_scm: true
)
scan(
...
use_system_scm: true
)
- usuarios que no son de Fastlane
xcodebuild -scmProvider system
Asegúrese de que su host de repositorio privado esté agregado a ~/.ssh/known_hosts
una. para bitbucket
for ip in $(dig @8.8.8.8 bitbucket.org +short); do ssh-keyscan bitbucket.org,$ip; ssh-keyscan $ip; done 2>/dev/null >> ~/.ssh/known_hosts || true
B. para github
for ip in $(dig @8.8.8.8 github.com +short); do ssh-keyscan github.com,$ip; ssh-keyscan $ip; done 2>/dev/null >> ~/.ssh/known_hosts || true
C. otros
ssh-keyscan your-host.com >> ~/.ssh/known_hosts
Lo hice sin SSH para mi proyecto de iOS en Xcode. Mi repositorio privado con paquete alojado en GitLab, pero puede estar alojado en GitHub, Bitbucket, Gitlab autohospedado.
El proceso es sencillo: cree un repositorio privado con el paquete SPM en uno de los alojamientos anteriores. Luego agréguelo como una dependencia en su proyecto Xcode como un paquete habitual. Dado que el repositorio es privado, Xcode solicitará credenciales (en el caso de Gitlab, es un token de acceso que puede generar en su cuenta de Gitlab). Xcode lo recordará y le autorizará la próxima vez automáticamente. Por lo tanto, usted (y sus colegas) deben ingresar las credenciales solo una vez en la configuración. Y se cumplen las dos condiciones 1 y 2.
Puede administrar cuentas de control de fuente en Xcode -> Preferencias -> Cuentas (presione + para agregar una).