1 macOS

原文链接: https://tauri.app/distribute/sign/macos/

在 macOS 上,代码签名是让应用能上架 Apple App Store、以及避免从浏览器下载后被提示应用已损坏无法启动所必需的。

前置条件

macOS 上的代码签名需要一个 Apple Developer 账号,可以是付费的(每年 99 美元)或免费计划(仅用于测试和开发目的)。你还需要一台用于执行代码签名的 Apple 设备。这是签名流程和 Apple 条款与条件所要求的。

签名

要为 macOS 设置代码签名,你必须创建一个 Apple 代码签名证书, 并把它安装到 Mac 电脑的钥匙串中,或导出以便在 CI/CD 平台使用。

创建签名证书

要创建新的签名证书,你必须在 Mac 电脑上生成一个证书签名请求(CSR)文件。 关于如何为代码签名创建 CSR,请参阅创建证书签名请求。

在你的 Apple Developer 账号中,前往 Certificates, IDs & Profiles 页面, 点击 Create a certificate 按钮打开创建新证书的界面。 选择合适的证书类型(Apple Distribution 用于把应用提交到 App Store,Developer ID Application 用于在 App Store 之外分发应用)。 上传你的 CSR,证书就会被创建。

下载证书

在 Certificates, IDs & Profiles 页面中,点击你想使用的证书,然后点击 Download 按钮。 它会保存一个 .cer 文件,打开后会把证书安装到钥匙串中。

配置 Tauri

你可以配置 Tauri,使其在本地机器或 CI/CD 平台上构建 macOS 应用时使用你的证书。

本地签名

把证书安装到 Mac 电脑的钥匙串后,你就可以配置 Tauri 用它进行代码签名。

证书钥匙串条目的名称就是 signing identity,也可以通过执行以下命令找到:

1
security find-identity -v -p codesigning

该 identity 可以在 tauri.conf.json > bundle > macOS > signingIdentity 配置项中提供, 也可以通过 APPLE_SIGNING_IDENTITY 环境变量提供。

在 CI/CD 平台签名

要在 CI/CD 平台使用该证书,你必须把证书导出为 base64 字符串, 并配置 APPLE_CERTIFICATE 和 APPLE_CERTIFICATE_PASSWORD 环境变量:

  1. 打开 Keychain Access 应用,点击 login 钥匙串中的 My Certificates 标签页,找到你的证书条目。
  2. 展开该条目,右键点击密钥项,选择 Export "$KEYNAME"。
  3. 选择保存证书 .p12 文件的路径,并为导出的证书定义密码。
  4. 在终端运行以下脚本把 .p12 文件转换为 base64:
1
openssl base64 -A -in /path/to/certificate.p12 -out certificate-base64.txt
  1. 把 certificate-base64.txt 文件的内容设置为 APPLE_CERTIFICATE 环境变量。
  2. 把证书密码设置为 APPLE_CERTIFICATE_PASSWORD 环境变量。

GitHub Actions 配置示例

需要的 secret:

  • APPLE_ID —— 你的 Apple ID 邮箱
  • APPLE_PASSWORD —— 你的 Apple ID 密码
  • APPLE_CERTIFICATE —— base64 编码的 .p12 文件
  • APPLE_CERTIFICATE_PASSWORD —— 你导出的 .p12 文件的密码
  • KEYCHAIN_PASSWORD —— 你的钥匙串密码

请查看 GitHub 官方指南了解如何设置 secret。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
name: 'build'

on:
  push:
    branches:
      - main

jobs:
  build-macos:
    needs: prepare
    strategy:
      matrix:
        include:
          - args: '--target aarch64-apple-darwin'
            arch: 'silicon'
          - args: '--target x86_64-apple-darwin'
            arch: 'intel'
    runs-on: macos-latest
    env:
      APPLE_ID: ${{ secrets.APPLE_ID }}
      APPLE_PASSWORD: ${{ secrets.APPLE_PASSWORD }}
    steps:
      - name: Import Apple Developer Certificate
        env:
          APPLE_CERTIFICATE: ${{ secrets.APPLE_CERTIFICATE }}
          APPLE_CERTIFICATE_PASSWORD: ${{ secrets.APPLE_CERTIFICATE_PASSWORD }}
          KEYCHAIN_PASSWORD: ${{ secrets.KEYCHAIN_PASSWORD }}
        run: |
          echo $APPLE_CERTIFICATE | base64 --decode > certificate.p12
          security create-keychain -p "$KEYCHAIN_PASSWORD" build.keychain
          security default-keychain -s build.keychain
          security unlock-keychain -p "$KEYCHAIN_PASSWORD" build.keychain
          security set-keychain-settings -t 3600 -u build.keychain
          security import certificate.p12 -k build.keychain -P "$APPLE_CERTIFICATE_PASSWORD" -T /usr/bin/codesign
          security set-key-partition-list -S apple-tool:,apple:,codesign: -s -k "$KEYCHAIN_PASSWORD" build.keychain
          security find-identity -v -p codesigning build.keychain
      - name: Verify Certificate
        run: |
          CERT_INFO=$(security find-identity -v -p codesigning build.keychain | grep "Apple Development")
          CERT_ID=$(echo "$CERT_INFO" | awk -F'"' '{print $2}')
          echo "CERT_ID=$CERT_ID" >> $GITHUB_ENV
          echo "Certificate imported."
      - 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: ${{ env.CERT_ID }}
        with:
          args: ${{ matrix.args }}

公证

要对应用进行公证,你必须提供凭据让 Tauri 向 Apple 认证。这可以通过 App Store Connect API,或通过你的 Apple ID 完成。

方式

  1. 打开 App Store Connect 的 Users and Access 页面,选择 Integrations 标签,点击 Add 按钮,选择名称与 Developer 权限。
  2. 把 APPLE_API_ISSUER 环境变量设为密钥表格上方显示的值。
  3. 把 APPLE_API_KEY 环境变量设为该表格 Key ID 列中的值。
  4. 下载私钥,这只能做一次,并且只在页面重新加载后可见(按钮显示在新建密钥所在表格行上)。
  5. 把 APPLE_API_KEY_PATH 环境变量设为所下载私钥的文件路径。
  1. 把 APPLE_ID 环境变量设为你的 Apple 账号邮箱。
  2. 把 APPLE_PASSWORD 环境变量设为你的 Apple 账号的应用专用密码。
  3. 把 APPLE_TEAM_ID 环境变量设为你的 Apple Team ID。你可以在你账号的会员页面中找到 Team ID。

设置好这些环境变量之后,重新运行你的 Tauri build 或 bundle 命令。例如,要用 pnpm 构建 DMG,请再次运行 pnpm tauri build --bundles dmg。如果你需要在首次公证时跳过 stapling,可以直接在 Tauri 命令后追加 --skip-stapling,例如 pnpm tauri build --bundles dmg --skip-stapling。

Ad-Hoc 签名

如果你不想提供经过 Apple 认证的身份,但仍希望为应用签名,你可以配置 ad-hoc 签名。

这在 ARM(Apple Silicon)设备上很有用,因为那里所有来自互联网的应用都要求代码签名。

要配置 ad-hoc 签名,请向 Tauri 提供伪标识 -,例如:

1
"signingIdentity": "-"

关于配置 Tauri 签名身份的细节,见上文。

最后修改 September 25, 2026: 更新 (4c0ee2db0)