

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# Swift 문제 해결
<a name="swift-troubleshooting"></a>

다음은 CodeArtifact를 Swift와 함께 사용할 때 일반적으로 발생하는 문제를 해결하는 데 유용한 정보입니다.

## Swift Package Manager를 구성한 후에도 Xcode에서 401 오류가 발생합니다.
<a name="swift-troubleshooting-xcode"></a>

**문제:** CodeArtifact 리포지토리의 패키지를 Xcode의 Swift 프로젝트에 대한 종속 항목으로 추가하려고 하면 [Swift를 CodeArtifact에 연결](configure-swift.md)하는 지침을 따랐는데도 401 무단 오류가 발생합니다.

**가능한 해결 방법:** 이 문제는 CodeArtifact 보안 인증이 저장된 macOS 키체인 애플리케이션의 문제로 인해 발생할 수 있습니다. 이 문제를 해결하려면 키체인 애플리케이션을 열고 CodeArtifact 항목을 모두 삭제하고 [CodeArtifact를 사용하여 Swift Package Manager 설정](configure-swift.md)의 지침에 따라 CodeArtifact 리포지토리를 사용하여 Swift Package Manager를 다시 구성하는 것이 좋습니다.

## 암호에 대한 키체인 프롬프트로 인해 Xcode가 CI 시스템에서 중단됨
<a name="swift-troubleshooting-ci-machine"></a>

**문제:** GitHub Actions와 같은 지속적 통합(CI) 서버의 Xcode 빌드의 일부로 CodeArtifact에서 Swift 패키지를 가져오려고 하면 CodeArtifact를 사용한 인증이 중단되고 결국 다음과 유사한 오류 메시지와 함께 실패할 수 있습니다.

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

**가능한 해결 방법:** 이 문제는 자격 증명이 CI 시스템의 키체인에 저장되지 않고 Xcode가 키체인에 저장된 자격 증명만 지원하므로 발생합니다. 이 문제를 해결하려면 다음 단계를 사용하여 키체인 항목을 수동으로 생성하는 것이 좋습니다.

1. 키체인을 준비합니다.

   ```
   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. CodeArtifact 인증 토큰과 리포지토리 엔드포인트를 가져옵니다.

   ```
   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. 키체인 항목을 수동으로 생성합니다.

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

이 오류 및 솔루션에 대한 자세한 내용은 [https://github.com/apple/swift-package-manager/issues/7236](https://github.com/apple/swift-package-manager/issues/7236)을 참조하세요.