# 为 macOS 应用程序签名

> Follow this workflow to sign and notarize your macOS application during the build process.

[Unity Build Automation](https://unity.com/solutions/ci-cd) 可以在构建过程中对 macOS 应用程序进行公证和封装。这可确保应用程序符合 [macOS 公证要求](https://developer.apple.com/documentation/xcode/notarizing_macos_software_before_distribution)。

**注意**：通过 Mac App Store 分发应用程序时不需要公证。Mac App Store 的上传过程包括与公证类似的内容验证。有关更多信息，请参阅[交付到 Mac App Store](https://docs.unity3d.com/Manual/macos-distribution-mac-app-store.html)。

## 从 Apple 设备创建开发者 ID 证书##create-a-developer-id-certificate-from-an-apple-device

如果在 Apple 设备上进行开发，可以设置 Unity Build Automation 来对应用程序进行公证和封装。

要满足相关要求，请按照以下步骤操作：

> **Note:**
>
> **注意**：要生成包含多个证书的 `.p12` 文件，需要将以下内容导入 Keychain Access：开发者 ID 证书、开发者 ID - G2 证书，以及用于证书签名请求的私钥。在 Keychain Access 中，将这三项导出为单个 `.p12` 文件并使用该文件。

1. 创建开发者 ID 证书并将其添加到钥匙串中。有关如何执行此操作的信息，请参阅[签名身份](https://docs.unity3d.com/Manual/macoscodesigning.html#signing-identity)。
2. 从钥匙串将开发者 ID 证书导出为个人信息交换 (`.p12`) 格式的文件。有关如何执行此操作的信息，请参阅[在 Mac 上使用 Keychain Access 导入和导出钥匙串项目](https://support.apple.com/en-gb/guide/keychain-access/kyca35961/mac)。
3. 通过 Apple 开发者帐户获取您的提供商简称。
   * 转到 [Membership Details（会员详细信息）](https://developer.apple.com/account/#/membership)并找到您的**团队 ID**。您可以使用**团队 ID** 作为提供商简称。

完成这些步骤后，请参阅[使用 Unity Build Automation 进行公证](#notarize-with-unity-build-automation)。

## 从 Windows 或 Linux 设备创建开发者 ID 证书##create-a-developer-id-certificate-from-a-windows-or-linux-device

如果在 Windows 或 Linux 上进行开发，可以设置 Unity Build Automation 来对应用程序进行公证和封装。要满足相关要求，请按照以下步骤操作：

1. 创建并下载开发者 ID 证书。有关如何执行此操作的信息，请参阅[签名身份](https://docs.unity3d.com/Manual/macoscodesigning.html#signing-identity)。
2. 将开发者 ID 证书转换为 [PKCS #12 个人信息交换 (.p12)](https://en.wikipedia.org/wiki/PKCS_12) 文件格式。有关如何执行此操作的信息，请参阅[将开发者 ID 证书转换为 Windows 和 Linux 上的 .p12 文件](#convert-a-developer-id-certificate-to-a-p12-file-on-windows-and-linux)。
3. 通过 Apple 开发者帐户获取您的提供商简称。
   * 转到 [Membership Details（会员详细信息）](https://developer.apple.com/account/#/membership)并找到您的**团队 ID**。您可以使用**团队 ID** 作为提供商简称。

完成这些步骤后，请参阅[使用 Unity Build Automation 进行公证](#notarize-with-unity-build-automation)。

### 在 Windows 和 Linux 上将开发者 ID 证书转换为 .p12 文件##convert-a-developer-id-certificate-to-a-p12-file-on-windows-and-linux

`.p12` 文件捆绑了开发者 ID 证书和私钥。要从开发者 ID 证书创建该文件，请执行以下操作：

1. 打开命令行界面，然后转到包含开发者 ID 证书文件的目录。如果您尚未下载开发者 ID 证书，请参阅[签名身份](https://docs.unity3d.com/Manual/macoscodesigning.html#signing-identity)。

2. 开发者 ID 证书使用 `.cer` 文件格式。将此文件转换为 `.pem` 文件格式。为此，请运行以下命令：

   * `developer_identity.cer` 是要转换的开发者 ID 证书文件。
   * `developer_identity.pem` 是要输出的文件名和文件类型。

   ```text
   openssl x509 -in developer_identity.cer -inform DER -out developer_identity.pem -outform PEM
   ```

3. 生成新的私钥。为此，请运行以下命令：

   * `mykey.key` 是要输出的私钥文件名。

   ```text
   openssl genrsa -out mykey.key 2048
   ```

4. 生成 `.p12` 文件。为此，请运行以下命令：

   * `mykey.key` 是您在步骤 3 中生成的私钥文件。
   * `developer_identity.pem` 是您在步骤 2 中生成的 `.pem` 文件。

   ```text
   openssl pkcs12 -export -inkey mykey.key -in developer_identity.pem -out iphone_dev.p12
   ```

## 生成应用程序密码##generate-an-application-password

要对应用程序进行公证，Apple 需要 Apple ID 和特定格式的应用程序专用唯一密码。

有关如何生成应用程序密码的信息，请参阅[如何生成应用程序专用密码](https://support.apple.com/en-gb/HT204397) (Apple)。生成的密码使用以下格式：`xxxx-xxxx-xxxx-xxxx`。

## 使用 Unity Build Automation 进行公证##notarize-with-unity-build-automation

要在 Unity Build Automation 中对 macOS 应用程序进行公证，请按照以下步骤操作：

1. 从 [Unity Dashboard](https://cloud.unity.com) 中，打开 **DevOps**。
2. 选择 **Build Automation** > **Configurations（配置）**。
3. 单击 **Target setup（目标设置）** 按钮。
4. 选择 **Mac desktop Universal（Mac 桌面通用）** 构建目标。
5. 在 Credentials（凭据）部分中，选择 Xcode 版本。
6. 启用 **Enable OSX notarization in Unity Build Automation（在 Unity Build Automation 中启用 OSX 公证）**。
7. 添加 Bundle ID。这是对应用程序进行代码签名时使用的[应用程序标识符](https://docs.unity3d.com/Manual/macoscodesigning.html#application-identifier)。
8. 选择 **Add new provisioning credentials (for release)（添加新的资源调配凭据（用于发布））**。 **注意**：如果您以前针对同一组织向 Unity Build Automation 提供了一组公证凭据，则可以从下拉列表中选择这些凭据。
9. 输入以下详细信息：

| **属性**                                             | **描述**                                                                                                                                                                                                                               |
| -------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| **Name（名称）**                                       | 输入凭据的名称。您可以将这些凭据用于在同一组织中设置的任何其他项目。                                                                                                                                                                                                   |
| **p12 File（p12 文件）**                               | 上传在之前特定平台步骤中创建的 `.p12` 文件。                                                                                                                                                                                                           |
| **p12 Password（p12 密码）**                           | 输入创建 `.p12` 文件时选择的密码。                                                                                                                                                                                                                |
| **Entitlements File（授权文件）**（可选）                    | 上传授权文件。如果未上传授权文件，Unity Build Automation 会使用 macOS 应用程序具有[硬化运行时](https://developer.apple.com/documentation/security/hardened_runtime)所需的最低授权。有关这些最低授权的信息，请参阅[授权](https://docs.unity3d.com/Manual/macoscodesigning.html#entitlements)。 |
| **Provider Short Name（提供商简称）**                     | 输入在之前特定平台步骤中获得的提供商简称。如果您的 Apple ID 与多个组织关联，但未添加此名称，公证将失败。 **注意**：在 Unity Build Automation 中进行公证时，建议始终使用提供商简称。                                                                                                                        |
| **Apple ID Username（Apple ID 用户名）**                | 输入您的 Apple ID 用户名。                                                                                                                                                                                                                   |
| **Apple ID Password（Apple ID 密码）**                 | 输入[特定于应用程序](#generate-an-application-password)的 Apple ID 密码。Unity Build Automation 在尝试对构建进行公证之前不会验证 Apple 凭据。                                                                                                                        |
| **Confirm your Apple ID Password（确认 Apple ID 密码）** | 输入您的 Apple ID 密码。                                                                                                                                                                                                                    |

10. 保存配置。
11. 确保其余的[构建目标配置](../basic-build-configuration/overview)选项已完成。
12. 针对 **Mac 桌面通用**构建目标开始构建。

构建完成后，Unity Build Automation 会尝试对结果进行公证和封装。Unity Build Automation 使用以下标志运行 `codesign` 命令：`--deep --force --verify --verbose --timestamp --options runtime`。您无法为项目指定自定义标志。

在 Unity Build Automation 对您的项目进行构建、公证和封装后，您可以下载包含构建的压缩文件。

### 环境变量##environment-variables

以下环境变量可在构建配置中使用。要使用它们，请转到 **Advanced Settings（高级设置）**> **Environment Variables（环境变量）** 并添加新变量。

| **属性**                            | **值** | **描述**                                                                                                                     |
| --------------------------------- | ----- | -------------------------------------------------------------------------------------------------------------------------- |
| **FASTLANE\_NOTARIZE\_VERBOSE**   | True  | 将 `FASTLANE_NOTARIZE_VERBOSE` 设置为 `True` 可在对应用程序进行公证时包含额外的日志输出。                                                            |
| **FL\_NOTARIZE\_USE\_NOTARYTOOL** | False | 将 `FL_NOTARIZE_USE_NOTARYTOOL` 设置为 `False` 可使用 altool 而不是 notarytool 进行公证。默认情况下，Unity Build Automation 使用 notarytool 进行公证。 |
