Solução de problemas do Swift - CodeArtifact

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Solução de problemas do Swift

As informações a seguir podem ajudar você a solucionar problemas comuns com o Swift e o CodeArtifact.

O erro 401 é exibido no Xcode mesmo depois de configurar o Swift Package Manager

Problema: ao tentar adicionar um pacote do repositório do CodeArtifact como uma dependência do projeto Swift no Xcode, o erro 401 (não autorizado) é exibido mesmo depois de seguir as instruções em conectar o Swift ao CodeArtifact.

Possíveis correções: o erro pode ser causado por um problema com o aplicativo macOS Chavechain, onde as credenciais do CodeArtifact são armazenadas. Para corrigir isso, a recomendação é abrir o aplicativo Chavechain, excluir todas as entradas do CodeArtifact e configurar novamente o Swift Package Manager com o repositório do CodeArtifact seguindo as instruções em Configurar o Swift Package Manager com o CodeArtifact.

O Xcode trava na máquina de CI devido à solicitação de senha do Keychain

Problema: ao tentar extrair pacotes Swift do CodeArtifact como parte de uma compilação do Xcode em um servidor de integração contínua (CI), como o GitHub Actions, a autenticação com o CodeArtifact pode travar e, eventualmente, falhar com uma mensagem de erro semelhante à seguinte:

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

Possíveis correções: isso ocorre porque as credenciais não são salvas no Keychain em máquinas de CI e o Xcode é compatível somente com as credenciais salvas no Keychain. Para corrigir isso, recomendamos criar a entrada do Keychain manualmente, usando as seguintes etapas:

  1. Prepare o Keychain.

    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. Obtenha um token de autenticação do CodeArtifact e o endpoint do seu repositório.

    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. Crie manualmente a entrada do Keychain.

    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}"

Para obter mais informações sobre esse erro e sua solução, consulte https://github.com/apple/swift-package-manager/issues/7236.