Donc, l'arrière-plan est le suivant: j'ai un projet Xcode qui dépend d'un package rapide qui est dans un référentiel privé sur github. Bien sûr, cela nécessite une clé d'accès. Jusqu'à présent, j'ai réussi à configurer CI de telle sorte que je puisse ssh dans l'instance et git clone
le référentiel requis pour le package swift. Malheureusement, lors de son exécution avec xcbuild
comme CI, cela ne fonctionne pas et je reçois ce message:
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
En revanche, git clone
récupérera volontiers ce dépôt comme on le voit ici:
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.
Pour un peu plus de contexte, cela fonctionne sur CircleCI, configuré avec une clé Deploy sur GitHub, qui a été ajoutée au Job sur CI.
Toutes les suggestions sur ce qui pourrait être différent entre la façon dont Xcode essaie de récupérer les dépendances et la façon dont vanilla git le ferait seraient formidables. Merci.
Réponses:
Cela semble être un bogue dans Xcode 11 avec SSH. Le passage à HTTPS pour résoudre les packages Swift résout le problème:
Donc à partir de là:
à:
la source
Pour les pipelines CI où vous ne pouvez pas vous connecter à GitHub ou à d'autres hôtes de référentiel, c'est la solution que j'ai trouvée qui contourne les restrictions / bogues de Xcode autour des packages Swift privés.
Utilisez les URL https pour les dépendances privées car la configuration ssh est actuellement ignorée par xcodebuild même si la documentation indique le contraire.
Une fois que vous pouvez créer localement avec https, accédez à votre hôte de référentiel et créez un jeton d'accès personnel (PAT). Pour les instructions GitHub se trouvent ici .
Avec votre système CI, ajoutez ce PAT en tant que variable d'environnement secrète. Dans le script ci-dessous, il est appelé
GITHUB_PAT
.Ensuite, dans votre pipeline CI avant d'exécuter,
xcodebuild
assurez-vous d'exécuter une version modifiée de manière appropriée de ce script bash:Ce script trouvera toutes les références https et y injectera le PAT afin qu'il puisse être utilisé sans mot de passe.
N'oubliez pas:
[org_name]
par le nom de votre organisation.${GITHUB_PAT}
par le nom de votre CI Secret si vous l'avez nommé différemment.grep
commande pour ignorer tous les chemins que vous ne souhaitez pas modifier par le script.la source