1 macOS
4 分钟阅读
在 macOS 上,代码签名是让应用能上架 Apple App Store、以及避免从浏览器下载后被提示应用已损坏无法启动所必需的。
前置条件
macOS 上的代码签名需要一个 Apple Developer 账号,可以是付费的(每年 99 美元)或免费计划(仅用于测试和开发目的)。你还需要一台用于执行代码签名的 Apple 设备。这是签名流程和 Apple 条款与条件所要求的。
注意使用免费 Apple Developer 账号时,你将无法对应用进行公证,打开应用时仍会显示为未验证。
签名
要为 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,证书就会被创建。
只有 Apple Developer 的 Account Holder 才能创建 Developer ID Application 证书。但可以通过使用不同的用户邮箱地址创建 CSR,把它关联到另一个 Apple ID。
下载证书
在 Certificates, IDs & Profiles 页面中,点击你想使用的证书,然后点击 Download 按钮。
它会保存一个 .cer 文件,打开后会把证书安装到钥匙串中。
配置 Tauri
你可以配置 Tauri,使其在本地机器或 CI/CD 平台上构建 macOS 应用时使用你的证书。
本地签名
把证书安装到 Mac 电脑的钥匙串后,你就可以配置 Tauri 用它进行代码签名。
证书钥匙串条目的名称就是 signing identity,也可以通过执行以下命令找到:
| |
该 identity 可以在 tauri.conf.json > bundle > macOS > signingIdentity 配置项中提供,
也可以通过 APPLE_SIGNING_IDENTITY 环境变量提供。
签名证书只有与你的 Apple ID 关联时才有效。 无效证书不会列在 Keychain Access > My Certificates 标签页中, 也不会出现在 security find-identity -v -p codesigning 的输出中。 如果证书没有下载到正确位置,请确保在下载 .cer 文件时,Keychain Access 的 “Default Keychains” 下选中了 “login” 选项。
在 CI/CD 平台签名
要在 CI/CD 平台使用该证书,你必须把证书导出为 base64 字符串,
并配置 APPLE_CERTIFICATE 和 APPLE_CERTIFICATE_PASSWORD 环境变量:
- 打开
Keychain Access应用,点击 login 钥匙串中的 My Certificates 标签页,找到你的证书条目。 - 展开该条目,右键点击密钥项,选择
Export "$KEYNAME"。 - 选择保存证书
.p12文件的路径,并为导出的证书定义密码。 - 在终端运行以下脚本把
.p12文件转换为 base64:
| |
- 把
certificate-base64.txt文件的内容设置为APPLE_CERTIFICATE环境变量。 - 把证书密码设置为
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。
| |
公证
要对应用进行公证,你必须提供凭据让 Tauri 向 Apple 认证。这可以通过 App Store Connect API,或通过你的 Apple ID 完成。
方式
- 打开 App Store Connect 的 Users and Access 页面,选择 Integrations 标签,点击 Add 按钮,选择名称与 Developer 权限。
- 把
APPLE_API_ISSUER环境变量设为密钥表格上方显示的值。 - 把
APPLE_API_KEY环境变量设为该表格 Key ID 列中的值。 - 下载私钥,这只能做一次,并且只在页面重新加载后可见(按钮显示在新建密钥所在表格行上)。
- 把
APPLE_API_KEY_PATH环境变量设为所下载私钥的文件路径。
设置好这些环境变量之后,重新运行你的 Tauri build 或 bundle 命令。例如,要用 pnpm 构建 DMG,请再次运行 pnpm tauri build --bundles dmg。如果你需要在首次公证时跳过 stapling,可以直接在 Tauri 命令后追加 --skip-stapling,例如 pnpm tauri build --bundles dmg --skip-stapling。
使用 Developer ID Application 证书时必须进行公证。
Ad-Hoc 签名
如果你不想提供经过 Apple 认证的身份,但仍希望为应用签名,你可以配置 ad-hoc 签名。
这在 ARM(Apple Silicon)设备上很有用,因为那里所有来自互联网的应用都要求代码签名。
Ad-hoc 代码签名并不能阻止 macOS 要求用户在“隐私与安全性”设置中把该安装加入白名单。
要配置 ad-hoc 签名,请向 Tauri 提供伪标识 -,例如:
| |
关于配置 Tauri 签名身份的细节,见上文。