

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# Swift のトラブルシューティング
<a name="swift-troubleshooting"></a>

以下の情報は、Swift および CodeArtifact での一般的な問題のトラブルシューティングに役立ちます。

## Swift パッケージマネージャーを設定した後も Xcode で 401 エラーが表示される
<a name="swift-troubleshooting-xcode"></a>

**問題:** CodeArtifact リポジトリから Xcode の Swift プロジェクトへの依存関係としてパッケージを追加しようとすると、[Swift を CodeArtifact に接続](configure-swift.md)するための指示に従った後でも、401 不正エラーが表示される。

**考えられる解決方法:** CodeArtifact の認証情報が保存されている macOS キーチェーンアプリケーションの問題が原因である可能性があります。この問題を解決するには、キーチェーンアプリケーションを開いて CodeArtifact のエントリをすべて削除し、「[CodeArtifact での Swift パッケージマネージャーの設定](configure-swift.md)」の手順に従って Swift パッケージマネージャーを CodeArtifact リポジトリで再度設定することをお勧めします。

## パスワードのキーチェーンプロンプトが原因で CI マシンで Xcode が ハングする
<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. 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}"
   ```

このエラーと解決方法の詳細については、[https://github.com/apple/swift-package-manager/issues/7236](https://github.com/apple/swift-package-manager/issues/7236) を参照してください。