人人都会AI编程

macOS:DMG 镜像、APP 包、签名与公证

更新时间:2026-07-11

macOS 平台的分发体系比 Windows 严格得多:用户下载的应用必须通过 Gatekeeper 的安全检查,否则会直接拦截。因此,macOS 产物不仅仅是生成一个可运行包,更包含签名、打包镜像、公证这一整套流程。Tauri 已经把这些步骤深度集成到构建命令中,你只需要配置好凭据,一条命令就能产出合规的安装包。


APP 包:Tauri 的默认产物

在项目根目录执行 tauri build,Tauri 会在 src-tauri/target/release/bundle/macos/ 下生成一个标准的 .app 文件夹。这个 .app 就是 macOS 应用的原始形态,双击即可运行(前提是已签名或本地开发时临时绕过了安全策略)。你可以直接把它压缩后分享,但更常见的做法是制作 .dmg 镜像,因为用户习惯拖拽安装。

查看 APP 包内容:在 Finder 中右键点击 .app → “显示包内容”,里面包含 Rust 编译的二进制、WebView 资源、图标等,结构完全符合 Apple 规范。Tauri 会自动注入 Info.plist 等必需元数据,开发者无需手动编写。


DMG 镜像:用户友好的“安装盘”

DMG 是 macOS 上最经典的软件分发格式,它就像一个虚拟磁盘,打开后通常显示应用图标和 Applications 文件夹快捷方式,用户拖拽即可完成安装。Tauri 原生支持生成带自定义背景和布局的 DMG。

配置方法:在 tauri.conf.jsonbundle 段落中加入 macOS 配置:

{
  "bundle": {
    "macOS": {
      "dmg": {
        "background": "./assets/dmg-background.png",
        "windowSize": { "width": 600, "height": 400 }
      }
    }
  }
}

背景图片建议用 .png,尺寸与 windowSize 匹配,并在图片上预先绘制好箭头、说明文字,引导用户将应用图标拖到右侧的 Applications 文件夹快捷方式处。Tauri 会自动处理图标位置,也可以手动指定 appPositionapplicationFolderPosition

构建时只需运行 tauri build,最终 DMG 文件会出现在 bundle/dmg/ 目录,同时自动生成对应的 .dmg 文件,名称已包含版本号。


签名:让系统信任你的应用

macOS 要求所有分发到用户设备的应用都必须用 “Developer ID Application” 证书签名。没有签名的 .app 在用户机器上打开时会提示 “无法验证开发者”,甚至直接被隔离。

准备工作

  1. 加入 Apple Developer Program(年费 ¥688)。
  2. 在 Mac 的 钥匙串访问 中,从 Apple 开发者网站下载并安装 “Developer ID Application” 证书(注意区分 Development 证书,分发必须用 Developer ID)。
  3. 确保证书对应的私钥在钥匙串中可用,且钥匙串处于解锁状态。

Tauri 配置:在 tauri.conf.json 中指定签名身份:

{
  "bundle": {
    "macOS": {
      "signingIdentity": "Developer ID Application: Your Name (TEAMID)"
    }
  }
}

TEAMID 是从开发者账号里获取的唯一团队标识。构建时 Tauri 会自动调用 codesign 对二进制和 .app 包进行签名。如果机器上安装了多份证书,一定要精确指定名称,避免签名失败。


公证:必经的云端安全检查

即便应用已经签名,macOS 10.15 之后的 Gatekeeper 仍然要求软件必须经过 Apple 的 Notarization(公证) 扫描,否则用户首次打开时会看到 “无法验证是否不包含恶意软件” 的警告,甚至完全无法运行。公证就是 Apple 对你的应用进行自动化安全审计,确认没有任何恶意代码后,颁发一个可追踪的票据。

传统手动公证 需要使用 xcrun notarytool 上传 .dmg.app,等待几分钟后获取结果,再把票据 “钉” 回应用。整个过程繁琐且容易中断。

Tauri 内置自动化:Tauri CLI 支持在构建后无缝提交公证。你只需提供 Apple ID 和 App 专用密码(在 Apple ID 管理页面生成),通过环境变量注入:

export APPLE_ID="your@email.com"
export APPLE_ID_PASSWORD="xxxx-xxxx-xxxx-xxxx"
export APPLE_TEAM_ID="YOURTEAMID"
tauri build

如果配置无误,Tauri 会在签名完成后自动调用公证服务,并等待结果。成功后会显示 “notarization succeeded”,此时生成的 DMG 已经带有公证票据,用户下载后可以顺利打开。

注意事项

  • 网络稳定,公证对超时敏感。
  • 使用的 signingIdentity 必须与 Apple ID 关联的开发者账号一致。
  • 如果遇到 “invalid signature” 或 “unable to notarize”,检查二进制是否引入了未签名的动态库(例如通过 macOS > frameworks 引入的第三方库),这类库也需要先用 codesign 签名。

一句实用总结

tauri build 配合签名证书和环境变量,能一次性完成 编译 → 签名 → 打包 DMG → 公证 四步操作,产出的 .dmg 直接满足上传官网、发邮件、提交软件下载站的要求,无需额外后处理。这是 Tauri 在 macOS 发布流程上最实际的效率提升。