Saltar al contenido

¿Cómo usar Swift Package Manager con repositorios privados?

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 o proxies,
  • 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í

ingrese la descripción de la imagen aquí

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).

Aquí puedes ver las comentarios y valoraciones de los usuarios

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *