Der Hintergrund ist also folgender: Ich habe ein Xcode-Projekt, das von einem schnellen Paket abhängt, das sich in einem privaten Repository auf Github befindet. Dies erfordert natürlich einen Schlüssel für den Zugriff. Bisher habe ich es geschafft, CI so zu konfigurieren, dass ich ssh in die Instanz und git clone
das erforderliche Repository für das schnelle Paket einbinden kann. Leider xcbuild
funktioniert es nicht, wenn es wie CI ausgeführt wird, und ich erhalte die folgende Meldung:
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
Im Gegensatz dazu git clone
wird dieses Repo gerne abgerufen, wie hier zu sehen:
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.
Für etwas mehr Kontext wird dies auf CircleCI ausgeführt, das mit einem Bereitstellungsschlüssel auf GitHub eingerichtet wurde, der dem Job auf CI hinzugefügt wurde.
Vorschläge, was sich zwischen der Art und Weise, wie Xcode versucht, Abhängigkeiten abzurufen, und der Art und Weise, wie Vanilla Git dies tut, unterscheiden könnte, wäre großartig. Vielen Dank.
Antworten:
Dies scheint ein Fehler in Xcode 11 mit SSH zu sein. Der Wechsel zu HTTPS zum Auflösen von Swift-Paketen behebt das Problem:
Also daraus:
zu:
quelle
Für CI-Pipelines, bei denen Sie sich nicht bei GitHub oder anderen Repository-Hosts anmelden können, ist dies die Lösung, die ich gefunden habe und die die Einschränkungen / Fehler von Xcode bei privaten Swift-Paketen umgeht.
Verwenden Sie https-URLs für die privaten Abhängigkeiten, da die ssh-Konfiguration derzeit von xcodebuild ignoriert wird, obwohl in der Dokumentation etwas anderes angegeben ist.
Sobald Sie mit https lokal erstellen können, gehen Sie zu Ihrem Repository-Host und erstellen Sie ein persönliches Zugriffstoken (PAT). Anweisungen zu GitHub finden Sie hier .
Fügen Sie mit Ihrem CI-System diese PAT als geheime Umgebungsvariable hinzu. Im folgenden Skript wird es als bezeichnet
GITHUB_PAT
.Stellen Sie dann in Ihrer CI-Pipeline vor dem Ausführen
xcodebuild
sicher, dass Sie eine entsprechend geänderte Version dieses Bash-Skripts ausführen:Dieses Skript findet alle https-Referenzen und fügt die PAT ein, sodass sie ohne Kennwort verwendet werden kann.
Vergiss nicht:
[org_name]
durch Ihren Organisationsnamen.${GITHUB_PAT}
durch den Namen Ihres CI-Geheimnisses, wenn Sie es anders benannt haben.grep
Befehl so, dass alle Pfade ignoriert werden, die vom Skript nicht geändert werden sollen.quelle