

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 配置 Swift Package Manager CodeArtifact
<a name="configure-swift"></a>

要使用 Swift Package Manager 向仓库发布软件包或使用其中的软件包 AWS CodeArtifact，你首先需要设置访问 CodeArtifact 仓库的凭证。使用您的 CodeArtifact 凭据和存储库端点配置 Swift Package Manager CLI 的推荐方法是使用`aws codeartifact login`命令。您也可以手动配置 Swift 程序包管理器。

## 使用 login 命令配置 Swift
<a name="configure-swift-login-command"></a>

使用`aws codeartifact login`命令配置 Swift Package Manager CodeArtifact。

**注意**  
要使用 login 命令，需要使用 Swift 5.8 或更高版本，建议使用 Swift 5.9 或更高版本。

`aws codeartifact login` 命令将执行以下操作：

1. 从中获取身份验证令牌 CodeArtifact 并将其存储在您的环境中。凭证的存储方式取决于环境的操作系统：

   1. **macOS：**在 macOS 钥匙串应用程序中创建一个条目。

   1. **Linux 和 Windows：**在 `~/.netrc` 文件中创建一个条目。

   在所有操作系统中，如果存在凭证条目，则此命令会用新令牌替换该条目。

1. 获取您的 CodeArtifact 存储库端点 URL 并将其添加到 Swift 配置文件中。该命令将存储库端点 URL 添加到位于 `/path/to/project/.swiftpm/configuration/registries.json` 的项目级配置文件中。

**注意**  
`aws codeartifact login` 命令会调用 `swift package-registry` 命令，后面的命令必须从包含 `Package.swift` 文件的目录中运行。因此，`aws codeartifact login` 命令必须在 Swift 项目中运行。

**使用 login 命令配置 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)。

## 不使用 login 命令配置 Swift
<a name="configure-swift-without-login-command"></a>

虽然建议您[使用 `aws codeartifact login` 命令来配置 Swift](#configure-swift-login-command)，但您也可以通过手动更新 Swift 程序包管理器配置来配置 Swift 程序包管理器，而不使用 login 命令。

在以下步骤中，您将使用 AWS CLI 来执行以下操作：

1. 从中获取身份验证令牌 CodeArtifact 并将其存储在您的环境中。凭证的存储方式取决于环境的操作系统：

   1. **macOS：**在 macOS 钥匙串应用程序中创建一个条目。

   1. **Linux 和 Windows：**在 `~/.netrc` 文件中创建一个条目。

1. 获取您的 CodeArtifact 存储库终端节点 URL。

1. 在 `~/.swiftpm/configuration/registries.json` 配置文件中，添加一个包含存储库端点 URL 和身份验证类型的条目。

**不使用 login 命令配置 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
     ```
   + 窗户 PowerShell：

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

------

1. 运行以下命令获取 CodeArtifact 仓库的终端节点。您的存储库端点用于将 Swift 程序包管理器指向您的存储库来使用或发布程序包。
   + *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
     ```
   + 窗户 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 程序包管理器时，必须将 `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%
     ```
   + 窗户 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]
     ```
   + 窗户 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 程序包](swift-publish-consume.md)。