迅速的故障 - CodeArtifact

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

迅速的故障

下列資訊可協助您疑難排解 Swift 和 CodeArtifact.

即使在配置 Swift Package 管理器後,我也在 Xcode 中收到 401 錯誤

問題:當您嘗試從 CodeArtifact 存儲庫中添加一個軟件包作為 Xcode 中的 Swift 項目的依賴項時,即使在按照將 Swift 連接到的說明之後,也會收到 401 未經授權的錯誤 CodeArtifact。

能的修復:這可能是由 macOS 鑰匙串應用程序存儲您的 CodeArtifact 憑據的問題引起的。若要修正此問題,我們建議您開啟 Keychain 應用程式並刪除所有 CodeArtifact 項目,然後依照中的指示,再次使用您的 CodeArtifact 儲存庫配置 Swift Package 管理員使用配置 Swift Package 管理器 CodeArtifact

由於鑰匙串提示輸入密碼,Xcode 掛在 CI 機器上

問題:當您嘗試將 Swift 包作 CodeArtifact 為持續集成(CI)服務器上的 Xcode 構建的一部分(例如使用 GitHub Actions)提取 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}"
  2. 獲取身 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`
  3. 手動創建鑰匙串條目。

    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 /問題/ 7236。