Entonces el fondo es este: tengo un proyecto Xcode que depende de un paquete rápido que está en un repositorio privado en github. Por supuesto, esto requiere una clave para acceder. Hasta ahora, he logrado configurar CI de modo que pueda ingresar a la instancia y git clone
al repositorio requerido para el paquete swift. Desafortunadamente, cuando lo ejecuta xcbuild
como lo hace CI, no funciona y recibo este mensaje:
static:ios distiller$ xcodebuild -showBuildSettings -workspace ./Project.xcworkspace \
-scheme App\ Prod
Resolve Package Graph
Fetching git@github.com:company-uk/ProjectDependency.git
xcodebuild: error: Could not resolve package dependencies:
Authentication failed because the credentials were rejected
Por el contrario, git clone
felizmente obtendrá este repositorio como se ve aquí:
static:ios distiller$ git clone git@github.com:company-uk/ProjectDependency.git
Cloning into 'ProjectDependency'...
Warning: Permanently added the RSA host key for IP address '11.22.33.44' to the list of known hosts.
remote: Enumerating objects: 263, done.
remote: Counting objects: 100% (263/263), done.
remote: Compressing objects: 100% (171/171), done.
remote: Total 1335 (delta 165), reused 174 (delta 86), pack-reused 1072
Receiving objects: 100% (1335/1335), 1.11 MiB | 5.67 MiB/s, done.
Resolving deltas: 100% (681/681), done.
Para un poco más de contexto, esto se ejecuta en CircleCI, configurado con una clave de implementación en GitHub, que se ha agregado al trabajo en CI.
Cualquier sugerencia sobre lo que podría ser diferente entre la forma en que Xcode intenta obtener dependencias y la forma en que lo hace vainilla git sería genial. Gracias.
Respuestas:
Esto parece ser un error en Xcode 11 con SSH. Cambiar a HTTPS para resolver paquetes Swift soluciona el problema:
Entonces de esto:
a:
fuente
Para las canalizaciones de CI donde no puede iniciar sesión en GitHub u otros hosts de repositorio, esta es la solución que encontré que omite las restricciones / errores de Xcode en los paquetes privados de Swift.
Utilice las URL https para las dependencias privadas porque xcodebuild ignora actualmente la configuración ssh aunque la documentación diga lo contrario.
Una vez que pueda construir localmente con https, vaya a su host de repositorio y cree un token de acceso personal (PAT). Para las instrucciones de GitHub se encuentran aquí .
Con su sistema CI, agregue este PAT como una variable de entorno secreta. En la secuencia de comandos a continuación se conoce como
GITHUB_PAT
.Luego, en su canalización de CI antes de ejecutar,
xcodebuild
asegúrese de ejecutar una versión modificada adecuadamente de este script bash:Este script encontrará todas las referencias https e inyectará el PAT para que pueda usarse sin contraseña.
No olvides:
[org_name]
con el nombre de su organización.${GITHUB_PAT}
con el nombre de su secreto CI si lo nombró de manera diferente.grep
comando para ignorar cualquier ruta que no desee que el script modifique.fuente