

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

# 使用 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)。