macOS | 导出用于发布的 DMG 文件

了解如何在 Xcode 上导出并打包用于发行的 DMG 压缩文件。

添加 macOS 应用图标

首先,需要在 Xcode 中添加 macOS 版本的应用图标。

使用此工具创建 macOS 不同尺寸的图标:

Create iOS and MacOS app icons effortlessly with CandyIcons, the ultimate app icon generator for Xcode assets. Try CandyIcons today!
Looking for an app icon generator that simplifies the icon creation process? Look no further than CandyIcons! Our easy-to-use platform generates Xcode assets, iOS app icons, and macOS app icons in just a few clicks. Explore our vast collection of icons and create the perfect design for your app with CandyIcons. Try it now!

在 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 文件:

GitHub - sindresorhus/create-dmg: Create a good-looking DMG for your macOS app in seconds
Create a good-looking DMG for your macOS app in seconds - sindresorhus/create-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 证书

需要手动创建证书:

  1. 在 Apple Developer 网站创建 Developer ID Application 证书
  2. 下载并安装到钥匙串

安装之后,如果使用命令无法看到,可能是由于在该 Mac 上未安装对应的 CSR 私钥。这种情况建议重新生成证书。

创建新的 Apple Distribution 证书

正确的证书申请流程:

  1. 在 Mac 上生成 Certificate Signing Request (CSR)
  2. 上传 CSR 到 Apple Developer 网站
  3. 下载生成的证书
  4. 双击安装(这样会自动匹配私钥)

打开钥匙串访问 → 证书助理 → 从证书颁发机构请求证书。

  1. 填写邮箱地址和常用名称
  2. 选择 保存到磁盘
  3. 保存 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)"

发布平台