跳至主要内容

macOS 应用代码签名

本指南提供有关 macOS 应用代码签名和公证的信息。

注意

如果您没有使用 GitHub Actions 来构建 OSX DMGs,则需要确保环境变量CI=true存在。更多信息请参考 tauri-apps/tauri#592

需求

更多详情,请阅读开发者文章:分发前公证 macOS 软件

tl;dr

Tauri 代码签名和公证流程通过以下环境变量配置

  • APPLE_SIGNING_IDENTITY:包含签名证书的密钥链条目的名称。
  • APPLE_CERTIFICATE:从密钥链导出的.p12证书的 base64 字符串。如果您在密钥链中没有证书(例如,CI 机器),这将很有用。
  • APPLE_CERTIFICATE_PASSWORD.p12证书的密码。
  • APPLE_IDAPPLE_PASSWORDAPPLE_TEAM_ID:您的 Apple 帐户电子邮件、一个特定于应用的密码和您的团队 ID。仅当需要对应用进行公证时才需要。
  • APPLE_API_ISSUERAPPLE_API_KEYAPPLE_API_KEY_PATH:使用 App Store Connect API 密钥而不是 Apple ID 进行身份验证。仅当您对应用进行公证时才需要。

签名 Tauri 应用

签名 macOS 应用的第一步是从 Apple Developer Program 获取签名证书。

创建签名证书

要创建新的签名证书,必须从您的 Mac 计算机生成证书签名请求 (CSR) 文件。创建证书签名请求 描述了如何创建 CSR。

在您的 Apple Developer 帐户中,导航到证书、ID 和配置文件页面,然后单击创建证书按钮以打开创建新证书的界面。选择合适的证书类型(Apple Distribution 用于将应用提交到 App Store,Developer ID Application 用于在 App Store 之外发布应用)。上传您的 CSR,证书将被创建。

注意

只有 Apple Developer 帐户持有者才能创建Developer ID Application证书。但是可以通过使用不同的用户电子邮件地址创建 CSR 来将其与不同的 Apple ID 关联。

下载证书

证书、ID 和配置文件页面上,单击您要使用的证书,然后单击下载按钮。它将保存一个.cer文件,该文件一旦打开就会将证书安装到密钥链中。密钥链条目的名称代表签名身份,也可以通过执行security find-identity -v -p codesigning来查找。

注意

只有与您的 Apple ID 关联的 Apple 开发者证书才有效。无效的证书不会列在密钥链访问 > 我的证书选项卡或security find-identity -v -p codesigning输出中。如果证书没有下载到正确的位置,请确保在下载 .cer 文件时,在密钥链访问的“默认密钥链”下选择了“登录”选项。

签名 Tauri 应用

签名配置通过环境变量提供给 Tauri 打包器。您需要配置要使用的证书和可选的身份验证配置来对应用程序进行公证。

证书环境变量

  • APPLE_SIGNING_IDENTITY:这是我们上面突出显示的签名身份。它必须在本地和 CI 机器上都定义才能签名应用。通常只需要使用括号中的部分就足够了,例如Developer ID Application: Walter Tauri (ABCDE12345)中的ABCDE12345

此外,为了简化 CI 上的代码签名流程,如果您定义了APPLE_CERTIFICATEAPPLE_CERTIFICATE_PASSWORD环境变量,Tauri 可以为您安装密钥链中的证书。

  1. 打开密钥链访问应用程序到登录 > 我的证书并找到您的证书的密钥链条目。
  2. 展开条目,双击密钥项,然后选择导出“$KEYNAME”
  3. 选择保存.p12文件的路径并定义导出的证书密码。
  4. 在终端上运行以下脚本将.p12文件转换为 base64:openssl base64 -in /path/to/certificate.p12 -out certificate-base64.txt
  5. certificate-base64.txt文件的内容设置为APPLE_CERTIFICATE环境变量。
  6. 将证书密码设置为APPLE_CERTIFICATE_PASSWORD环境变量。

身份验证环境变量

这些变量仅在需要对应用程序进行公证时才需要。

注意

使用Developer ID Application证书时需要进行公证。

  • APPLE_IDAPPLE_PASSWORDAPPLE_TEAM_ID:要使用您的 Apple ID 进行身份验证,请将APPLE_ID设置为您的 Apple 帐户电子邮件(例如:export [email protected]),并将APPLE_PASSWORD设置为您的 Apple 帐户的特定于应用的密码
  • APPLE_API_ISSUERAPPLE_API_KEYAPPLE_API_KEY_PATH:或者,您可以使用 App Store Connect API 密钥进行身份验证。打开 App Store Connect 的用户和访问页面,选择密钥选项卡,单击添加按钮并选择名称和开发者访问权限。APPLE_API_ISSUER发行者 ID)显示在密钥表上方,APPLE_API_KEY是该表中密钥 ID列的值。您还需要下载私钥,这只能执行一次,并且只有在页面重新加载后才能看到(按钮显示在新建密钥的表格行上)。私钥文件路径必须通过APPLE_API_KEY_PATH环境变量设置。

构建应用程序

在运行tauri build命令时,设置所有这些环境变量后,Tauri 打包器会自动签名和公证您的应用程序。

示例

以下示例使用 GitHub Actions 使用Tauri action 对应用程序进行签名。

我们首先将上面列出的环境变量定义为 GitHub 上的 Secrets。

注意

您可以查看本指南以了解有关 GitHub secrets 的信息。

建立 GitHub Secrets 后,我们将更新来自跨平台指南的 GitHub 发布工作流程的最后一步。

- uses: tauri-apps/tauri-action@v0
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
APPLE_CERTIFICATE: ${{ secrets.APPLE_CERTIFICATE }}
APPLE_CERTIFICATE_PASSWORD: ${{ secrets.APPLE_CERTIFICATE_PASSWORD }}
APPLE_SIGNING_IDENTITY: ${{ secrets.APPLE_SIGNING_IDENTITY }}
APPLE_ID: ${{ secrets.APPLE_ID }}
APPLE_PASSWORD: ${{ secrets.APPLE_PASSWORD }}
APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }}
with:
tagName: app-v__VERSION__ # the action automatically replaces \_\_VERSION\_\_ with the app version.
releaseName: 'App v__VERSION__'
releaseBody: 'See the assets to download this version and install.'
releaseDraft: true
prerelease: false
args: ${{ matrix.settings.args }}

该工作流程从 GitHub 拉取 secrets 并将其定义为环境变量,然后使用 Tauri action 构建应用程序。输出是一个包含已签名和公证的 macOS 应用程序的 GitHub 版本。