macOS | 导出用于发布的 DMG 文件
了解如何在 Xcode 上导出并打包用于发行的 DMG 压缩文件。
添加 macOS 应用图标
首先,需要在 Xcode 中添加 macOS 版本的应用图标。
使用此工具创建 macOS 不同尺寸的图标:

在 Xcode 中添加 macOS 版本的图标后,需要先 Clean Build Folder,再重新 build 才能显示。
公证审核(Notarization)
Archive 打包之后,选择 Distribute App,选择 Direct Distribution:

这会启动公证扫描流程。
macOS 从 Catalina(10.15)开始对分发应用增加了一个安全性要求:你必须把你的 .app(或 .pkg、.dmg)上传给 Apple 做一次扫描验证,确保没有恶意内容。
通过后,用户运行你的 App 时就不会弹出 “无法验证开发者” 或 “此 App 来自身份不明的开发者” 的警告。

Notary Service 审核通常在几分钟内完成。
通过之后,在 Organizer 中,可以看到显示 Ready to distribution:
打包 DMG 文件(create-dmg)
在 Organizer 中,可以点击 Export App 来导出一个 .app
结尾的文件,你可以直接使用它来发布,但最佳实践是创建 DMG 文件。
使用下面这个开源工具来更方便的创建 DMG 文件:

确保使用 Apple Distribution 证书
证书分为两种:
- Apple Development 证书:用于开发和测试,只能在注册的开发设备上运行
- Apple Distribution 证书:用于正式分发,可以用于独立分发

在 Xcode 中,虽然可以设置 Signing Certificate,但 Sign to Run Locally 选项仍然是 Apple Development 证书的一种,在本地 Mac 上运行,无需设备注册,但不能分发。
查询本地已安装证书
security find-identity -v -p codesigning

手动安装 Apple Distribution 证书
需要手动创建证书:

- 在 Apple Developer 网站创建 Developer ID Application 证书
- 下载并安装到钥匙串
安装之后,如果使用命令无法看到,可能是由于在该 Mac 上未安装对应的 CSR 私钥。这种情况建议重新生成证书。
创建新的 Apple Distribution 证书
正确的证书申请流程:
- 在 Mac 上生成 Certificate Signing Request (CSR)
- 上传 CSR 到 Apple Developer 网站
- 下载生成的证书
- 双击安装(这样会自动匹配私钥)
打开钥匙串访问 → 证书助理 → 从证书颁发机构请求证书。
- 填写邮箱地址和常用名称
- 选择 保存到磁盘
- 保存 CSR 文件

然后,在 Apple Developer 网站创建新的证书:

下载新的证书并安装后,使用命令应该可以看到新的 Apple Distribution 证书:

多个开发证书导致的歧义
如果存在多个 Apple Development 证书,打包时会出现下面这个错误:

这表明:代码签名失败,但 .dmg 文件本身已经成功生成。它仍然可以用,但不会通过 Gatekeeper 的完整校验,影响发布或用户安装时的信任度。
钥匙串(Keychain)中有两个名称相近的 “Apple Development” 证书:
- 一个是 Apple Development: 13540671942@163.com
- 另一个是 Apple Development: Lin Liao
create-dmg 不知道应该使用哪一个来签名,因此提示 ambiguous(歧义)。
指定签名证书
create-dmg RayDesk.app/ \
--identity="Apple Distribution: Chengdu Weisen Quwan Technology Co., Ltd (C554753V8P)"
