

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
<a name="swift-troubleshooting"></a>

As informações a seguir podem ajudá-lo a solucionar problemas comuns com o Swift e. CodeArtifact

## O erro 401 é exibido no Xcode mesmo depois de configurar o Swift Package Manager
<a name="swift-troubleshooting-xcode"></a>

**Problema:** [Quando você está tentando adicionar um pacote do seu CodeArtifact repositório como uma dependência ao seu projeto Swift no Xcode, você está recebendo um erro 401 não autorizado mesmo depois de seguir as instruções para conectar o Swift a. CodeArtifact](configure-swift.md)

**Possíveis correções:** isso pode ser causado por um problema com o aplicativo macOS Keychain, onde suas CodeArtifact credenciais são armazenadas. Para corrigir isso, recomendamos abrir o aplicativo Keychain, excluir todas as CodeArtifact entradas e configurar o Swift Package Manager com seu CodeArtifact repositório novamente seguindo as instruções em. [Configure o Swift Package Manager com CodeArtifact](configure-swift.md)

## O Xcode trava na máquina de CI devido à solicitação de senha do Keychain
<a name="swift-troubleshooting-ci-machine"></a>

**Problema:** quando você está tentando extrair pacotes do Swift CodeArtifact como parte de uma compilação do Xcode em um servidor de integração contínua (CI), como com o GitHub Actions, a autenticação com 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}"
   ```

1. Obtenha um token de CodeArtifact autenticação 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`
   ```

1. 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 a solução, consulte [https://github.com/apple/swift-package-manager/issues/7236](https://github.com/apple/swift-package-manager/issues/7236).