Tak więc tło jest następujące: mam projekt Xcode, który zależy od szybkiego pakietu, który znajduje się w prywatnym repozytorium na github. Oczywiście wymaga to klucza dostępu. Do tej pory udało mi się skonfigurować CI tak, że mogę ssh w instancji i git clone
wymaganym repozytorium dla szybkiego pakietu. Niestety, gdy działa z xcbuild
CI tak jak CI, to nie działa i pojawia się ten komunikat:
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
Natomiast git clone
chętnie pobierze to repozytorium, jak pokazano tutaj:
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.
Dla nieco większego kontekstu działa to na CircleCI, skonfigurowanym za pomocą klucza Wdróż na GitHub, który został dodany do zadania w CI.
Wszelkie sugestie dotyczące tego, co może różnić się między sposobem, w jaki Xcode próbuje pobrać zależności, a sposobem, w jaki robi to waniliowy git, byłoby świetne. Dzięki.
Odpowiedzi:
To wydaje się być błędem w Xcode 11 z SSH. Przejście na HTTPS w celu rozwiązania pakietów szybkich rozwiązuje problem:
Więc z tego:
do:
źródło
W przypadku potoków CI, w których nie można zalogować się do GitHub lub innych hostów repozytorium, znalazłem rozwiązanie, które omija ograniczenia / błędy Xcode wokół prywatnych pakietów Swift.
Użyj adresów URL https dla prywatnych zależności, ponieważ konfiguracja ssh jest obecnie ignorowana przez xcodebuild, nawet jeśli dokumentacja mówi inaczej.
Gdy będziesz mógł budować lokalnie za pomocą https, przejdź do hosta repozytorium i utwórz osobisty token dostępu (PAT). Instrukcje GitHub znajdują się tutaj .
W systemie CI dodaj ten PAT jako tajną zmienną środowiskową. W skrypcie poniżej jest to określane jako
GITHUB_PAT
.Następnie w potoku CI przed uruchomieniem
xcodebuild
upewnij się, że uruchomiłeś odpowiednio zmodyfikowaną wersję tego skryptu bash:Ten skrypt znajdzie wszystkie referencje https i wstrzykuje do niego PAT, dzięki czemu można go używać bez hasła.
Nie zapomnij:
[org_name]
na nazwę swojej organizacji.${GITHUB_PAT}
na nazwę swojego klucza tajnego CI, jeśli nazwałeś go inaczej.grep
polecenie, aby ignorowało ścieżki, których skrypt nie chce modyfikować.źródło