

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

# 搭配 Swift 使用 CodeArtifact
<a name="using-swift"></a>

這些主題說明如何使用 Swift Package Manager 搭配 CodeArtifact 來安裝和發佈 Swift 套件。

**注意**  
CodeArtifact 支援 Swift 5.8 和更新版本，以及 Xcode 14.3 和更新版本。  
CodeArtifact 建議使用 Swift 5.9 和更新版本，以及 Xcode 15 和更新版本。

**Topics**
+ [使用 CodeArtifact 設定 Swift](configure-swift.md)
+ [使用和發佈 Swift 套件](swift-publish-consume.md)
+ [Swift 套件名稱和命名空間標準化](swift-name-normalization.md)
+ [Swift 疑難排解](swift-troubleshooting.md)

# 使用 CodeArtifact 設定 Swift Package Manager
<a name="configure-swift"></a>

若要使用 Swift Package Manager 將套件發佈至 AWS CodeArtifact 或使用套件，您必須先設定登入資料以存取 CodeArtifact 儲存庫。使用 CodeArtifact 登入資料和儲存庫端點設定 Swift Package Manager CLI 的建議方法是使用 `aws codeartifact login`命令。您也可以手動設定 Swift Package Manager。

## 使用登入命令設定 Swift
<a name="configure-swift-login-command"></a>

使用 `aws codeartifact login`命令以 CodeArtifact 設定 Swift Package Manager。

**注意**  
若要使用登入命令，需要 Swift 5.8 或更新版本，建議使用 Swift 5.9 或更新版本。

`aws codeartifact login` 命令會執行下列動作：

1. 從 CodeArtifact 擷取身分驗證字符，並將其存放在您的環境中。憑證的儲存方式取決於環境的作業系統：

   1. **macOS：**在 macOS Keychain 應用程式中建立項目。

   1. **Linux 和 Windows：**會在 `~/.netrc` 檔案中建立項目。

   在所有作業系統中，如果存在登入資料項目，此命令會以新的字符取代該項目。

1. 擷取 CodeArtifact 儲存庫端點 URL，並將其新增至 Swift 組態檔案。命令會將儲存庫端點 URL 新增至位於 的專案層級組態檔案`/path/to/project/.swiftpm/configuration/registries.json`。

**注意**  
`aws codeartifact login` 命令會呼叫必須從包含 `Package.swift` 檔案的目錄執行的`swift package-registry`命令。因此，`aws codeartifact login`命令必須從 Swift 專案內執行。

**使用登入命令設定 Swift**

1. 導覽至包含專案`Package.swift`檔案的 Swift 專案目錄。

1. 執行下列 `aws codeartifact login` 命令。

   如果您在擁有的網域中存取儲存庫，則不需要包含 `--domain-owner`。如需詳細資訊，請參閱[跨帳戶網域](domain-overview.md#domain-overview-cross-account)。

   ```
   aws codeartifact login --tool swift --domain my_domain \
   --domain-owner 111122223333 --repository my_repo \
   [--namespace my_namespace]
   ```

`--namespace` 選項會將應用程式設定為只在套件位於指定的命名空間時，才會從 CodeArtifact 儲存庫取用套件。[CodeArtifact 命名空間](codeartifact-concepts.md#welcome-concepts-package-namespace)與範圍同義詞，用於將程式碼組織到邏輯群組中，並防止當程式碼庫包含多個程式庫時可能發生的名稱衝突。

呼叫 後的預設授權期間`login`為 12 小時，`login`必須呼叫 以定期重新整理字符。如需使用 `login`命令建立的授權字符的詳細資訊，請參閱 [使用 `login`命令建立的字符](tokens-authentication.md#auth-token-login)。

## 在沒有登入命令的情況下設定 Swift
<a name="configure-swift-without-login-command"></a>

雖然建議您[使用 `aws codeartifact login`命令設定 Swift](#configure-swift-login-command)，但您也可以手動更新 Swift Package Manager 組態，在不使用登入命令的情況下設定 Swift Package Manager。

在下列程序中，您將使用 AWS CLI 執行下列動作：

1. 從 CodeArtifact 擷取身分驗證字符，並將其存放在您的環境中。憑證的儲存方式取決於環境的作業系統：

   1. **macOS：**在 macOS Keychain 應用程式中建立項目。

   1. **Linux 和 Windows：**會在 `~/.netrc` 檔案中建立項目。

1. 擷取 CodeArtifact 儲存庫端點 URL。

1. 在`~/.swiftpm/configuration/registries.json`組態檔案中，使用儲存庫端點 URL 和身分驗證類型新增項目。

**設定 Swift 而不使用登入命令**

1. 在命令列中，使用下列命令來擷取 CodeArtifact 授權字符，並將其存放在 環境變數中。
   + 將 *my\$1domain* 取代為您的 CodeArtifact 網域名稱。
   + 將 *111122223333* 取代為網域擁有者的帳戶 AWS ID。如果您在擁有的網域中存取儲存庫，則不需要包含 `--domain-owner`。如需詳細資訊，請參閱[跨帳戶網域](domain-overview.md#domain-overview-cross-account)。

------
#### [ macOS and Linux ]

   ```
   export CODEARTIFACT_AUTH_TOKEN=`aws codeartifact get-authorization-token --domain my_domain --domain-owner 111122223333 --query authorizationToken --output text`
   ```

------
#### [ Windows ]
   + Windows （使用預設命令 shell)：

     ```
     for /f %i in ('aws codeartifact get-authorization-token --domain my_domain --domain-owner 111122223333 --query authorizationToken --output text') do set CODEARTIFACT_AUTH_TOKEN=%i
     ```
   + Windows PowerShell：

     ```
     $env:CODEARTIFACT_AUTH_TOKEN = aws codeartifact get-authorization-token --domain my_domain --domain-owner 111122223333 --query authorizationToken --output text
     ```

------

1. 執行下列命令，取得 CodeArtifact 儲存庫的端點。您的儲存庫端點用來將 Swift Package Manager 指向您的儲存庫，以取用或發佈套件。
   + 將 *my\$1domain* 取代為您的 CodeArtifact 網域名稱。
   + 將 *111122223333* 取代為網域擁有者的帳戶 AWS ID。如果您在擁有的網域中存取儲存庫，則不需要包含 `--domain-owner`。如需詳細資訊，請參閱[跨帳戶網域](domain-overview.md#domain-overview-cross-account)。
   + 將 *my\$1repo* 取代為您的 CodeArtifact 儲存庫名稱。

------
#### [ macOS and Linux ]

   ```
   export CODEARTIFACT_REPO=`aws codeartifact get-repository-endpoint --domain my_domain --domain-owner 111122223333 --repository my_repo --format swift --query repositoryEndpoint --output text`
   ```

------
#### [ Windows ]
   + Windows （使用預設命令 shell)：

     ```
     for /f %i in ('aws codeartifact get-repository-endpoint --domain my_domain --domain-owner 111122223333 --repository my_repo --format swift --query repositoryEndpoint --output text') do set CODEARTIFACT_REPO=%i
     ```
   + Windows PowerShell：

     ```
     $env:CODEARTIFACT_REPO = aws codeartifact get-repository-endpoint --domain my_domain --domain-owner 111122223333 --repository my_repo --format swift --query repositoryEndpoint --output text
     ```

------

   下列 URL 是範例儲存庫端點。

   ```
   https://my_domain-111122223333.d.codeartifact.us-west-2.amazonaws.com/swift/my_repo/
   ```
**注意**  
若要使用雙堆疊端點，請使用 `codeartifact.region.on.aws`端點。
**重要**  
用於設定 Swift Package Manager 時，您必須附加`login`到儲存庫 URL 端點的結尾。這會在此程序的 命令中為您完成。

1. 這兩個值存放在環境變數中時，請使用 `swift package-registry login`命令將其傳遞給 Swift，如下所示：

------
#### [ macOS and Linux ]

   ```
   swift package-registry login ${CODEARTIFACT_REPO}login --token ${CODEARTIFACT_AUTH_TOKEN}
   ```

------
#### [ Windows ]
   + Windows （使用預設命令 shell)：

     ```
     swift package-registry login %CODEARTIFACT_REPO%login --token %CODEARTIFACT_AUTH_TOKEN%
     ```
   + Windows PowerShell：

     ```
     swift package-registry login $Env:CODEARTIFACT_REPO+"login" --token $Env:CODEARTIFACT_AUTH_TOKEN
     ```

------

1. 接著，更新您的應用程式所使用的套件登錄檔，以便從 CodeArtifact 儲存庫提取任何相依性。此命令必須在您嘗試解析套件相依性的專案目錄中執行：

------
#### [ macOS and Linux ]

   ```
   $ swift package-registry set ${CODEARTIFACT_REPO} [--scope my_scope]
   ```

------
#### [ Windows ]
   + Windows （使用預設命令 shell)：

     ```
     $ swift package-registry set %CODEARTIFACT_REPO% [--scope my_scope]
     ```
   + Windows PowerShell：

     ```
     $ swift package-registry set $Env:CODEARTIFACT_REPO [--scope my_scope]
     ```

------

   `--scope` 選項會將應用程式設定為僅在 CodeArtifact 儲存庫位於指定範圍內時，才會取用其套件。範圍與 [CodeArtifact 命名空間](codeartifact-concepts.md#welcome-concepts-package-namespace)同義，用於將程式碼組織成邏輯群組，並防止在程式碼庫包含多個程式庫時可能發生的名稱衝突。

1. 您可以在專案目錄中執行下列命令，檢視專案層級`.swiftpm/configuration/registries.json`檔案的內容，以確認組態已正確設定：

   ```
   $ cat .swiftpm/configuration/registries.json
   {
     "authentication" : {
   
     },
     "registries" : {
       "[default]" : {
         "url" : "https://my-domain-111122223333.d.codeartifact.us-west-2.amazonaws.com/swift/my-repo/"
       }
     },
     "version" : 1
   }
   ```

現在您已使用 CodeArtifact 儲存庫設定 Swift Package Manager，您可以使用它來發佈和使用 Swift 套件。如需詳細資訊，請參閱[使用和發佈 Swift 套件](swift-publish-consume.md)。

# 使用和發佈 Swift 套件
<a name="swift-publish-consume"></a>

## 從 CodeArtifact 取用 Swift 套件
<a name="consume-swift-packages"></a>

使用下列程序從 AWS CodeArtifact 儲存庫取用 Swift 套件。

**從 CodeArtifact 儲存庫使用 Swift 套件**

1. 如果您尚未執行，請依照中的步驟[使用 CodeArtifact 設定 Swift Package Manager](configure-swift.md)設定 Swift Package Manager，以使用具有適當登入資料的 CodeArtifact 儲存庫。
**注意**  
產生的授權字符有效期為 12 小時。如果自建立權杖後已經過 12 小時，您將需要建立新的權杖。

1. 編輯應用程式專案資料夾中`Package.swift`的檔案，以更新專案要使用的套件相依性。

   1. 如果`Package.swift`檔案不包含`dependencies`區段，請新增區段。

   1. 在 `Package.swift` 檔案的 `dependencies`區段中，新增您要使用的套件，方法是新增其套件識別符。套件識別符包含以句點分隔的範圍和套件名稱。如需範例，請參閱後續步驟之後的程式碼片段。
**提示**  
若要尋找套件識別符，您可以使用 CodeArtifact 主控台。尋找您要使用的特定套件版本，並參考套件版本頁面上的**安裝捷徑**指示。

   1. 如果`Package.swift`檔案不包含`targets`區段，請新增區段。

   1. 在 `targets`區段中，新增使用相依性所需的目標。

      下列程式碼片段為範例程式碼片段，顯示`Package.swift`檔案中已設定的 `dependencies`和 `targets`區段：

      ```
      ...
          ],
          dependencies: [
              .package(id: "my_scope.package_name", from: "1.0.0")
          ],
          targets: [
            .target(
               name: "MyApp",
               dependencies: ["package_name"]
            ),...
          ],
      ...
      ```

1. 現在已設定所有項目，請使用下列命令從 CodeArtifact 下載套件相依性。

   ```
   swift package resolve
   ```

## 在 Xcode 中使用 CodeArtifact 中的 Swift 套件
<a name="consume-swift-packages-xcode"></a>

使用下列程序從 Xcode 中的 CodeArtifact 儲存庫取用 Swift 套件。

**從 Xcode 中的 CodeArtifact 儲存庫使用 Swift 套件**

1. 如果您尚未執行，請依照中的步驟[使用 CodeArtifact 設定 Swift Package Manager](configure-swift.md)設定 Swift Package Manager，以使用具有適當登入資料的 CodeArtifact 儲存庫。
**注意**  
產生的授權字符有效期為 12 小時。如果自建立權杖後已經過 12 小時，您將需要建立新的權杖。

1. 在 Xcode 中將套件新增為專案中的相依性。

   1. 選擇**檔案 > 新增套件**。

   1. 使用搜尋列搜尋您的套件。您的搜尋格式必須為 `package_scope.package_name`。

   1. 找到後，選擇套件，然後選擇**新增套件**。

   1. 驗證套件後，請選擇您要新增做為相依性的套件產品，然後選擇**新增套件**。

如果您使用 CodeArtifact 儲存庫搭配 Xcode 時遇到問題，請參閱 [Swift 疑難排解](swift-troubleshooting.md) 以取得常見問題和可能的修正。

## 將 Swift 套件發佈至 CodeArtifact
<a name="publish-swift-packages"></a>

CodeArtifact 建議使用 Swift 5.9 或更新版本，並使用 `swift package-registry publish`命令來發佈 Swift 套件。如果您使用的是舊版，則必須使用 Curl 命令將 Swift 套件發佈至 CodeArtifact。

### 使用 `swift package-registry publish`命令發佈 CodeArtifact 套件
<a name="publish-swift-packages-publish-command"></a>

使用下列程序搭配 Swift 5.9 或更新版本，透過 Swift Package Manager 將 Swift 套件發佈至 CodeArtifact 儲存庫。

1. 如果您尚未執行，請依照中的步驟[使用 CodeArtifact 設定 Swift Package Manager](configure-swift.md)設定 Swift Package Manager，以使用具有適當登入資料的 CodeArtifact 儲存庫。
**注意**  
產生的授權字符有效期為 12 小時。如果自建立後已經過 12 小時，您將需要建立新的 。

1. 導覽至包含套件`Package.swift`檔案的 Swift 專案目錄。

1. 執行下列`swift package-registry publish`命令來發佈套件。命令會建立套件來源封存，並將其發佈到您的 CodeArtifact 儲存庫。

   ```
   swift package-registry publish packageScope.packageName packageVersion
   ```

   例如：

   ```
   swift package-registry publish myScope.myPackage 1.0.0
   ```

1. 您可以在 主控台中檢查或使用 `aws codeartifact list-packages`命令，確認套件已發佈並存在於儲存庫中，如下所示：

   ```
   aws codeartifact list-packages --domain my_domain --repository my_repo
   ```

   您可以使用 `aws codeartifact list-package-versions`命令列出單一版本的套件，如下所示：

   ```
   aws codeartifact list-package-versions --domain my_domain --repository my_repo \
   --format swift --namespace my_scope --package package_name
   ```

### 使用 Curl 發佈 CodeArtifact 套件
<a name="publish-swift-packages-curl"></a>

雖然建議您使用 Swift 5.9 或更新版本隨附的 `swift package-registry publish`命令，但您也可以使用 Curl 將 Swift 套件發佈至 CodeArtifact。

使用下列程序將 Swift 套件發佈至具有 Curl 的 AWS CodeArtifact 儲存庫。

1. 如果您尚未建立，請依照中的步驟建立和更新 `CODEARTIFACT_AUTH_TOKEN`和 `CODEARTIFACT_REPO`環境變數[使用 CodeArtifact 設定 Swift Package Manager](configure-swift.md)。
**注意**  
身分驗證字符的有效期為 12 小時。如果`CODEARTIFACT_AUTH_TOKEN`環境變數在建立後已經過 12 小時，您將需要使用新的登入資料重新整理環境變數。

1. 首先，如果您未建立 Swift 套件，您可以執行下列命令來執行此操作：

   ```
   mkdir testDir && cd testDir
   swift package init
   git init .
   swift package archive-source
   ```

1. 使用下列 Curl 命令將 Swift 套件發佈至 CodeArtifact：

------
#### [ macOS and Linux ]

   ```
   curl -X PUT  --user "aws:$CODEARTIFACT_AUTH_TOKEN" \
   -H "Accept: application/vnd.swift.registry.v1+json" \
   -F source-archive="@test_dir_package_name.zip" \
   "${CODEARTIFACT_REPO}my_scope/package_name/packageVersion"
   ```

------
#### [ Windows ]

   ```
   curl -X PUT  --user "aws:%CODEARTIFACT_AUTH_TOKEN%" \
   -H "Accept: application/vnd.swift.registry.v1+json" \
   -F source-archive="@test_dir_package_name.zip" \
   "%CODEARTIFACT_REPO%my_scope/package_name/packageVersion"
   ```

------

1. 您可以在 主控台中檢查或使用 `aws codeartifact list-packages`命令，確認套件已發佈並存在於儲存庫中，如下所示：

   ```
   aws codeartifact list-packages --domain my_domain --repository my_repo
   ```

   您可以使用 `aws codeartifact list-package-versions`命令列出單一版本的套件，如下所示：

   ```
   aws codeartifact list-package-versions --domain my_domain --repository my_repo \
   --format swift --namespace my_scope --package package_name
   ```

## 從 GitHub 擷取 Swift 套件並重新發佈至 CodeArtifact
<a name="publish-swift-packages-from-github"></a>

使用下列程序從 GitHub 擷取 Swift 套件，並將其重新發佈至 CodeArtifact 儲存庫。

**從 GitHub 擷取 Swift 套件並重新發佈至 CodeArtifact**

1. 如果您尚未執行，請依照中的步驟[使用 CodeArtifact 設定 Swift Package Manager](configure-swift.md)設定 Swift Package Manager，以使用具有適當登入資料的 CodeArtifact 儲存庫。
**注意**  
產生的授權字符有效期為 12 小時。如果自建立權杖後已經過 12 小時，您將需要建立新的權杖。

1. 使用以下`git clone`命令複製您要擷取並重新發佈的 Swift 套件的 git 儲存庫。如需有關複製 GitHub 儲存庫的資訊，請參閱 GitHub 文件中的[複製儲存庫](https://docs.github.com/en/repositories/creating-and-managing-repositories/cloning-a-repository)。

   ```
   git clone repoURL
   ```

1. 導覽至您剛複製的儲存庫：

   ```
   cd repoName
   ```

1. 建立套件並將其發佈至 CodeArtifact。

   1. **建議：**如果您使用 Swift 5.9 或更新版本，您可以使用下列`swift package-registry publish`命令來建立套件，並將其發佈至您設定的 CodeArtifact 儲存庫。

      ```
      swift package-registry publish packageScope.packageName versionNumber
      ```

      例如：

      ```
      swift package-registry publish myScope.myPackage 1.0.0
      ```

   1. 如果您使用的 Swift 版本早於 5.9，您必須使用 `swift archive-source`命令來建立套件，然後使用 Curl 命令來發佈套件。

      1. 如果您尚未設定 `CODEARTIFACT_AUTH_TOKEN`和 `CODEARTIFACT_REPO`環境變數，或已超過 12 小時，請遵循中的步驟[在沒有登入命令的情況下設定 Swift](configure-swift.md#configure-swift-without-login-command)。

      1. 使用 `swift package archive-source`命令建立 Swift 套件：

         ```
         swift package archive-source
         ```

         如果成功，您將在命令列`Created package_name.zip`中看到 。

      1. 使用下列 Curl 命令將 Swift 套件發佈至 CodeArtifact：

------
#### [ macOS and Linux ]

         ```
         curl -X PUT  --user "aws:$CODEARTIFACT_AUTH_TOKEN" \
         -H "Accept: application/vnd.swift.registry.v1+json" \
         -F source-archive="@package_name.zip" \
         "${CODEARTIFACT_REPO}my_scope/package_name/packageVersion"
         ```

------
#### [ Windows ]

         ```
         curl -X PUT  --user "aws:%CODEARTIFACT_AUTH_TOKEN%" \
         -H "Accept: application/vnd.swift.registry.v1+json" \
         -F source-archive="@package_name.zip" \
         "%CODEARTIFACT_REPO%my_scope/package_name/packageVersion"
         ```

------

1. 您可以在 主控台中檢查或使用 `aws codeartifact list-packages`命令，確認套件已發佈並存在於儲存庫中，如下所示：

   ```
   aws codeartifact list-packages --domain my_domain --repository my_repo
   ```

   您可以使用 `aws codeartifact list-package-versions`命令列出單一版本的套件，如下所示：

   ```
   aws codeartifact list-package-versions --domain my_domain --repository my_repo \
   --format swift --namespace my_scope --package package_name
   ```

# Swift 套件名稱和命名空間標準化
<a name="swift-name-normalization"></a>

CodeArtifact 會在儲存套件名稱和命名空間之前將套件名稱標準化，這表示 CodeArtifact 中的名稱可能與發佈套件時提供的名稱不同。

**套件名稱和命名空間標準化：**CodeArtifact 透過將所有字母轉換為小寫來標準化 Swift 套件名稱和命名空間。

**套件版本標準化：**CodeArtifact 不會標準化 Swift 套件版本。請注意，CodeArtifact 僅支援語意版本控制 2.0 版本模式，如需語意版本控制的詳細資訊，請參閱[語意版本控制 2.0.0。](https://semver.org/spec/v2.0.0.html)

非標準化套件名稱和命名空間可與 API 和 CLI 請求搭配使用，因為 CodeArtifact 會對這些請求的輸入執行標準化。例如， `--package myPackage`和 的輸入`--namespace myScope`會標準化，並傳回具有標準化套件名稱 `mypackage`和 命名空間的套件`myscope`。

**您必須在 ARNs 中使用標準化名稱，例如在 IAM 政策中。**

若要尋找套件的標準化名稱，請使用 `aws codeartifact list-packages`命令。如需詳細資訊，請參閱[列出套件名稱](list-packages.md)。

# Swift 疑難排解
<a name="swift-troubleshooting"></a>

以下資訊可協助您疑難排解 Swift 和 CodeArtifact 的常見問題。

## 即使設定 Swift Package Manager 後，我的 Xcode 中仍出現 401 錯誤
<a name="swift-troubleshooting-xcode"></a>

**問題：**當您嘗試從 CodeArtifact 儲存庫新增套件做為 Xcode 中 Swift 專案的相依性時，即使您已遵循將 [Swift 連線至 CodeArtifact](configure-swift.md) 的指示，也會收到 401 未經授權的錯誤。

**可能的修正：**這可能是因為 macOS Keychain 應用程式的問題所造成，您的 CodeArtifact 登入資料會存放在其中。若要修正此問題，建議您開啟 Keychain 應用程式並刪除所有 CodeArtifact 項目，並依照 中的指示，再次使用 CodeArtifact 儲存庫設定 Swift Package Manager[使用 CodeArtifact 設定 Swift Package Manager](configure-swift.md)。

## 由於密碼的金鑰鏈提示，Xcode 掛在 CI 機器上
<a name="swift-troubleshooting-ci-machine"></a>

**問題：**當您嘗試從 CodeArtifact 提取 Swift 套件作為連續整合 (CI) 伺服器上的 Xcode 組建的一部分，例如使用 GitHub 動作時，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：//[https://github.com/apple/swift-package-manager/issues/7236](https://github.com/apple/swift-package-manager/issues/7236)。