将 .app 封装成 .dmg 安装包是 macOS 上最常见的发布方式之一,常见于很多 mac 应用(如 VSCode、微信、Chrome)。它不仅美观,而且能让用户直接拖动到 /Applications 文件夹中完成安装。
准备.app文件
打开Xcode项目,选择菜单栏的Product – Archive进行归档。

在归档视图中,选择“Distribute App” (分发App)。

在选择分发方法中,选择“Direct Distribution” (直接分销)。

点击“Distribute”分发按钮后,会弹出App upload complete (应用上传完成)窗口:表示正在将应用上传至Apple公证服务,在应用准备好分发时,将收到通知。

等待1-3分钟后,窗口会自动变成可分发的状态。
如果长时间没有刷新,可以关闭窗口,查看“归档”视图,状态是否为“Ready to distribute” (准备分发)。

如果是“Ready to distribute”状态,则可以点击右侧的“Export…”按钮,导出 .app 文件。

我这边将 .app 文件导出到“桌面”,可以查看我们导出的 .app 文件,即macOS App。

创建临时文件夹
我们需要创建一个临时文件夹,用于将 .app 文件封装到 .dmg安装包中。
在“桌面”创建一个名为“ImagesSlim”的临时目录:
mkdir -p ~/Desktop/ImagesSlim
将.app 文件和Applications的快捷方式,拷贝进临时文件夹:
cp -R ~/Desktop/ImageSlim.app ~/Desktop/ImagesSlim // 将 .app 整个目录和其内容,复制到 ImagesSlim文件夹中
ln -s /Applications ~/Desktop/ImagesSlim // 将 Applications 快捷方式,复制到 ImagesSlim 文件夹中
这时,我们的临时文件夹的内容为 .app 文件和Applications快捷方式:

使用hdiutil命令创建 .dmg 文件
在终端中运行如下命令:
hdiutil create -volname "ImagesSlim" \
-srcfolder ~/Desktop/ImagesSlim \
-ov -format UDZO \
~/Desktop/ImagesSlim.dmg
说明:
-volname 是用户挂载后看到的磁盘名称。
-srcfolder 是源目录。
-ov 表示覆盖已存在文件。
-format UDZO 是压缩格式。
最后参数是生成的 dmg 路径。
关于该命令的更多知识,可见《macOS创建dmg文件的hdiutil命令》文章。
运行该命令后,“桌面”上会生成一个ImagesSlim的dmg文件。

验证效果
双击“桌面”上的ImagesSlim.dmg文件,会挂在并弹出一个Finder窗口。

将App拖入Applications快捷方式中,完成App的安装。
总结
首先需要Xcode打包并导出 .app 文件,然后创建临时文件夹,复制.app 文件和 Applications快捷方式到临时文件夹中。最后,使用hdiutil命令打包,并生成 .dmg 文件。
注意的是,Applications快捷命令需要使用ln -S命令创建符合链接,而不是在Finder中右键Applications创建Applications替身,因为替身(Alias)并不能在 .dmg 文件中正常工作,因此只能使用 In -S 命令实现Applications快捷命令的创建。
如果想要美化 .dmg 文件的界面,比如添加背景图、固定图标位置,可以选择“DMG Canvas”或者“create -dmg”。
相关文章
1、DMG Canvas:https://www.araelium.com/dmgcanvas
2、create -dmg:https://github.com/create-dmg/create-dmg
3、macOS创建dmg文件的hdiutil命令:https://fangjunyu.com/2025/06/22/macos%E5%88%9B%E5%BB%BAdmg%E6%96%87%E4%BB%B6%E7%9A%84hdiutil%E5%91%BD%E4%BB%A4-2/