Mac开发必看!手把手教你打包DMG文件,从零到专业

194 阅读4分钟

前言:为什么你需要一个完美的DMG?

如果你正在开发Mac应用,DMG文件几乎是必经之路。它不仅是分发软件的标准格式,更是用户“打开即用”的象征。但你是否也遇到过这些问题?

  • “我的DMG怎么总是提示‘无法打开’?”
  • “图标怎么设置?背景图怎么调整?”
  • “手动打包太麻烦,有没有更高效的工具?”

别担心!今天我们就来聊聊如何用不同方式打包DMG文件,从基础命令行到专业工具,再到自动化脚本,让你的应用像苹果官方软件一样优雅上线!


一、DMG是什么?为什么它这么重要?

DMG(Disk Image)是MacOS的磁盘映像文件格式,本质是一个虚拟硬盘。它不仅能打包应用,还能包含图标、背景图、许可证文件,甚至支持加密和分段存储。

为什么选择DMG?
用户友好:双击挂载后直接拖拽安装,操作简单。
兼容性强:支持跨平台(如Windows/Linux通过转换)。
专业感拉满:自定义图标、背景图,打造品牌化体验。


二、打包DMG的三种主流方式

方式一:命令行工具 hdiutil(适合极简主义者)

适用场景:快速打包 .app 文件,无需图形界面。

步骤如下

  1. 准备 .app 文件
    • 例如:/Users/YourName/Projects/MyApp/MyApp.app
  2. 终端执行命令
    hdiutil create -volname "MyApp" \
      -srcfolder "/Users/YourName/Projects/MyApp/MyApp.app" \
      -ov -format UDZO "MyApp.dmg"
    
    • -volname:设置DMG卷标(建议与应用名一致)。
    • -srcfolder:指定 .app 文件路径。
    • -format UDZO:压缩格式,体积更小。

优点

  • 极速完成,适合自动化脚本。
  • 无需额外工具,纯原生命令。

缺点

  • 无法自定义图标和背景图
  • 对新手不够友好

方式二:Disk Utility(适合视觉控)

适用场景:需要自定义图标、背景图,或添加许可证文件。

步骤如下

  1. 创建空白DMG
    • 打开 Disk Utility(磁盘工具)。
    • 点击 “文件” > “新建映像” > “来自文件夹的映像”
    • 选择包含 .appApplications 替身的文件夹。
  2. 挂载并编辑DMG
    • 双击生成的 .dmg 文件,进入编辑模式。
    • 拖入自定义图标(.icns 文件),设置背景图(支持 .png.tif)。
  3. 签名与加密(可选)
    • 使用 Apple的签名工具(如 codesign)为DMG签名。
    • 在Disk Utility中设置密码保护。

优点

  • 完全控制视觉细节,打造品牌化体验。
  • 兼容性强,适合所有版本MacOS。

缺点

  • 步骤繁琐,需要多次手动操作。
  • 无法批量处理

方式三:专业工具 DropDMG(适合效率党)

适用场景:需要一键生成专业级DMG,支持加密、分段、自动化脚本。

为什么推荐 DropDMG?

  • 拖放式操作:只需将 .app 文件拖入窗口,自动完成打包。
  • 功能强大
    • 支持 AES 加密保护敏感数据。
    • 自动压缩为 .zip.iso 等跨平台格式。
    • 集成 AppleScript/Automator,实现自动化流程。

操作示例

  1. 下载并安装 DropDMG(mac009下载 mac009.com/a/dropdmg 官网:macdmg.com)。
  2. .app 文件拖入 DropDMG 窗口。
  3. 设置保存路径、加密密码(可选),点击“创建”。
  4. 生成的 .dmg 文件即可分发。

优点

  • 傻瓜式操作,零学习成本。
  • 功能全面,适合开发者和企业用户。

image.png

三、自动化打包:让脚本帮你干活!

如果你需要批量打包集成到CI/CD流程,脚本是必不可少的工具。

示例:Flutter项目打包DMG脚本

#!/bin/bash
# 1. 构建 Flutter 应用
flutter build macos

# 2. 查找生成的 .app 文件
APP_PATH=$(find ./build/macos/Build/Products/Release/ -name "*.app" | head -n 1)

# 3. 创建 DMG
hdiutil create -volname "MyApp" \
  -srcfolder "$APP_PATH" \
  -ov -format UDZO "MyApp.dmg"

echo "DMG 创建完成!路径:$PWD/MyApp.dmg"

小贴士

  • 使用 chmod +x script.sh 赋予脚本执行权限。
  • 集成到 GitHub Actions 或 Jenkins,实现自动化构建。

image.png

四、常见问题 & 解决方案

问题解决方案
DMG提示“无法打开”使用 codesign 工具为 .app 签名,或通过 Apple 开发者账号公证。
图标显示异常确保使用 .icns 格式,并通过 Disk Utility 设置。
DMG体积过大使用 -format UDZO 压缩,或删除不必要的调试信息。
无法拖拽到 Applications在DMG中添加 Applications 替身文件(通过终端命令 ln -s /Applications/ Applications)。

五、结语:选择最适合你的工具

打包DMG看似简单,但要做到专业、高效、美观并不容易。根据你的需求选择合适的工具:

  • 极简主义:命令行 hdiutil
  • 视觉定制:Disk Utility + 手动编辑。
  • 效率优先:DropDMG 或自动化脚本。

记住:无论哪种方式,用户体验永远是第一位的。一个精心设计的DMG,不仅能提升用户好感度,还能为你的应用加分不少!