Swift-Fehlerbehebung - CodeArtifact

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Swift-Fehlerbehebung

Die folgenden Informationen können Ihnen bei der Behebung häufiger Probleme mit Swift und helfen CodeArtifact.

Ich erhalte einen 401-Fehler in Xcode, auch nachdem ich den Swift Package Manager konfiguriert habe

Problem: Wenn Sie versuchen, ein Paket aus Ihrem CodeArtifact Repository als Abhängigkeit zu Ihrem Swift-Projekt in Xcode hinzuzufügen, erhalten Sie einen nicht autorisierten Fehler 401, auch nachdem Sie die Anweisungen zum Herstellen einer Verbindung mit CodeArtifact befolgt haben.

Mögliche Korrekturen: Dies kann durch ein Problem mit der macOS Keychain-Anwendung verursacht werden, in der Ihre CodeArtifact Anmeldeinformationen gespeichert sind. Um dies zu beheben, empfehlen wir, die Keychain-Anwendung zu öffnen und alle CodeArtifact Einträge zu löschen und den Swift Package Manager erneut mit Ihrem CodeArtifact Repository zu konfigurieren, indem Sie den Anweisungen unter folgenKonfigurieren des Swift Package Manager mit CodeArtifact.

Xcode hängt aufgrund der Keychain-Eingabeaufforderung für das Passwort auf dem CI-Computer auf

Problem: Wenn Sie versuchen, Swift-Pakete von CodeArtifact als Teil eines Xcode-Builds auf einem CI-Server (Continuous Integration) abzurufen, z. B. mit GitHub Aktionen, CodeArtifact kann die Authentifizierung mit hängen bleiben und schließlich mit einer Fehlermeldung ähnlich der folgenden fehlschlagen:

Failed to save credentials for \'https://my_domain-111122223333.d.codeartifact.us-west-2.amazonaws.com\' to keychain: status -60008

Mögliche Korrekturen: Dies wird dadurch verursacht, dass Anmeldeinformationen nicht in der Keychain auf CI-Computern gespeichert werden und Xcode nur Anmeldeinformationen unterstützt, die in Keychain gespeichert sind. Um dies zu beheben, empfehlen wir, den Keychain-Eintrag manuell mit den folgenden Schritten zu erstellen:

  1. Bereiten Sie die Keychain vor.

    KEYCHAIN_PASSWORD=$(openssl rand -base64 20) KEYCHAIN_NAME=login.keychain SYSTEM_KEYCHAIN=/Library/Keychains/System.keychain if [ -f $HOME/Library/Keychains/"${KEYCHAIN_NAME}"-db ]; then echo "Deleting old ${KEYCHAIN_NAME} keychain" security delete-keychain "${KEYCHAIN_NAME}" fi echo "Create Keychain" security create-keychain -p "${KEYCHAIN_PASSWORD}" "${KEYCHAIN_NAME}" EXISTING_KEYCHAINS=( $( security list-keychains | sed -e 's/ *//' | tr '\n' ' ' | tr -d '"') ) sudo security list-keychains -s "${KEYCHAIN_NAME}" "${EXISTING_KEYCHAINS[@]}" echo "New keychain search list :" security list-keychain echo "Configure keychain : remove lock timeout" security unlock-keychain -p "${KEYCHAIN_PASSWORD}" "${KEYCHAIN_NAME}" security set-keychain-settings "${KEYCHAIN_NAME}"
  2. Rufen Sie ein CodeArtifact Authentifizierungstoken und Ihren Repository-Endpunkt ab.

    export CODEARTIFACT_AUTH_TOKEN=`aws codeartifact get-authorization-token \ --region us-west-2 \ --domain my_domain \ --domain-owner 111122223333 \ --query authorizationToken \ --output text` export CODEARTIFACT_REPO=`aws codeartifact get-repository-endpoint \ --region us-west-2 \ --domain my_domain \ --domain-owner 111122223333 \ --format swift \ --repository my_repo \ --query repositoryEndpoint \ --output text`
  3. Erstellen Sie den Keychain-Eintrag manuell.

    SERVER=$(echo $CODEARTIFACT_REPO | sed 's/https:\/\///g' | sed 's/.com.*$/.com/g') AUTHORIZATION=(-T /usr/bin/security -T /usr/bin/codesign -T /usr/bin/xcodebuild -T /usr/bin/swift \ -T /Applications/Xcode-15.2.app/Contents/Developer/usr/bin/xcodebuild) security delete-internet-password -a token -s $SERVER -r htps "${KEYCHAIN_NAME}" security add-internet-password -a token \ -s $SERVER \ -w $CODEARTIFACT_AUTH_TOKEN \ -r htps \ -U \ "${AUTHORIZATION[@]}" \ "${KEYCHAIN_NAME}" security set-internet-password-partition-list \ -a token \ -s $SERVER \ -S "com.apple.swift-package,com.apple.security,com.apple.dt.Xcode,apple-tool:,apple:,codesign" \ -k "${KEYCHAIN_PASSWORD}" "${KEYCHAIN_NAME}" security find-internet-password "${KEYCHAIN_NAME}"

Weitere Informationen zu diesem Fehler und der Lösung finden Sie unter https://github.com/apple/swift-package-manager/issues/7236.