惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Microsoft Azure Blog
Microsoft Azure Blog
Cloudbric
Cloudbric
I
InfoQ
V
V2EX
博客园_首页
The Register - Security
The Register - Security
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
S
Secure Thoughts
Vercel News
Vercel News
Forbes - Security
Forbes - Security
云风的 BLOG
云风的 BLOG
PCI Perspectives
PCI Perspectives
L
LINUX DO - 最新话题
D
DataBreaches.Net
H
Hacker News: Front Page
Application and Cybersecurity Blog
Application and Cybersecurity Blog
B
Blog RSS Feed
A
About on SuperTechFans
N
News and Events Feed by Topic
Apple Machine Learning Research
Apple Machine Learning Research
Help Net Security
Help Net Security
Attack and Defense Labs
Attack and Defense Labs
N
Netflix TechBlog - Medium
Spread Privacy
Spread Privacy
F
Full Disclosure
Recorded Future
Recorded Future
AWS News Blog
AWS News Blog
博客园 - 【当耐特】
The Cloudflare Blog
T
Threatpost
T
Tor Project blog
Google DeepMind News
Google DeepMind News
C
CXSECURITY Database RSS Feed - CXSecurity.com
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
Recent Announcements
Recent Announcements
M
MIT News - Artificial intelligence
A
Arctic Wolf
C
Check Point Blog
Stack Overflow Blog
Stack Overflow Blog
T
Threat Research - Cisco Blogs
Security Archives - TechRepublic
Security Archives - TechRepublic
Hacker News - Newest:
Hacker News - Newest: "LLM"
WordPress大学
WordPress大学
Cyberwarzone
Cyberwarzone
小众软件
小众软件
C
Cyber Attacks, Cyber Crime and Cyber Security
P
Proofpoint News Feed
Security Latest
Security Latest
The Last Watchdog
The Last Watchdog

杂烩饭

使用 RustFS 自建对象存储 使用cURL命令管理对象存储(s3) AGENTS.md Prometheus使用kubeconfig做k8s的service 自动发现监控 定制Windows系统镜像iso 使用create-dmg工具制作dmg安装包 superpowers Nexus仓库搭建记录 Git Merge代码冲突的解决方式 在 Linux 系统中安装与配置 OpenVPN:从入门到精通 使用 Easytier-web 管理 easytier 节点 ingress-nginx 去除指定context path 在macOS上使用MusicPlayer2听本地音乐 Kubernetes 1.34 + RHEL10 + Cilium + kube-vip 高可用集群部署 使用腾讯云CLS收集TKE(k8s)业务日志 容器调试工具之BusyBox 无Docker环境进行容器镜像操作 使用kubeadm部署一套高可用k8s集群1.34 for Ubuntu 正在运行的Docker容器增加端口映射 轻量级组网工具WireGuard 在Kubernetes中部署一个单节点Elasticsearch 使用openssl制作自签名双向认证(mTLS)证书 minio自建对象存储 ingress-nginx 使用自定义的nginx配置 P12格式证书与PEM格式转换 使用blackbox-exporter做域名监控 记一次MySQL字符集转换导致的故障 使用双向认证增加git仓库安全性 Prometheus自动监控K8S集群中的service Grafana 查询SQL 自定义变量 使用selenium来实现Grafana的自动截图
使用create-dmg工具制作dmg安装包 - 技术栈
张理坤 · 2026-07-03 · via 杂烩饭

简介

create-dmg 是一个用来创建磁盘镜像文件(dmg)的 shell 脚本命令行工具。本文将介绍如何使用 create-dmg 来创建一个 dmg 磁盘镜像文件,即 macOS 系统的安装包。

准备工作

create-dmg 可以通过 Homebrew 来安装,使用以下命令安装 create-dmg

bash 复制代码

1
brew install create-dmg

在创建 dmg 文件之前,确保你的应用程序已经打包好,并且所有的资源文件都已经放置在正确的位置。通常为 xxx.app 的 bundle 形式文件。

创建一个文件夹,将你的应用程序拖放进去。这个文件夹将作为 dmg 文件的根目录。这里以 dmg-demo 作为目录为例:

复制代码

1
2
3
dmg-demo
├── QtProjectDemo.app
├── bg.svg

只需要额外提供一张背景图即可。当然也可再提供一个 icns 图标文件作为磁盘镜像文件的图标(双击 dmg 后,桌面显示的磁盘镜像图标)

如图,上面为默认的磁盘镜像图标,下图为自行替换的图标:

这里提供的是SVG格式的背景图:

在应用程序文件夹所在的目录打开终端。然后运行以下命令:

bash 复制代码

1
2
3
4
5
6
7
8
9
10
11
create-dmg \
--volname "Application Installer" \
--background "bg.svg" \
--window-pos 400 200 \
--window-size 660 400 \
--icon-size 100 \
--icon "QtProjectDemo.app" 160 185 \
--hide-extension "QtProjectDemo.app" \
--app-drop-link 500 185 \
"Installer.dmg" \
"QtProjectDemo.app/"

这个命令中包含了多个参数:

  • --volname :设置卷的名称。
  • --background :设置窗口的背景图。
  • --window-pos :设置双击 dmg,打开窗口的位置坐标。
  • --window-size :设置窗口的大小。
  • --icon-size :设置应用程序图标的大小。
  • --icon :设置应用程序的图标和位置坐标。
  • --hide-extension :隐藏应用程序文件的扩展名。
  • 最后两个参数分别是输出的 dmg 文件名和包含应用程序的文件夹名称。

输出信息:

bash 复制代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
Creating disk image...
..................................................................................................
created: /Users/leo/Downloads/dmg-demo/rw.74691.Installer.dmg
Mounting disk image...
Device name: /dev/disk5
Searching for mounted interstitial disk image using /dev/disk5s...
Mount dir: /Volumes/dmg.kaLqeq
Copying background file 'bg.svg'...
Making link to Applications dir...
/Volumes/dmg.kaLqeq
Running AppleScript to make Finder stuff pretty: /usr/bin/osascript "/var/folders/mn/vvr3gxpn7b38rlkyfl_j5m2h0000gn/T/createdmg.tmp.XXXXXXXXXX.SfFuKvgIMf" "dmg.kaLqeq"
waited 1 seconds for .DS_STORE to be created.
Done running the AppleScript...
Fixing permissions...
Done fixing permissions
Skipping blessing on sandbox
Deleting .fseventsd
Unmounting disk image...
"disk5" ejected.
Compressing disk image...
正在准备映像引擎...
正在读取Protective Master Boot Record(MBR:0)...
(CRC32 $0821720F:Protective Master Boot Record(MBR:0))
正在读取GPT Header(Primary GPT Header:1)...
(CRC32 $2718773B:GPT Header(Primary GPT Header:1))
正在读取GPT Partition Data(Primary GPT Table:2)...
(CRC32 $D08A2D56:GPT Partition Data(Primary GPT Table:2))
正在读取(Apple_Free:3)...
(CRC32 $00000000:(Apple_Free:3))
正在读取disk image(Apple_HFS:4)...
.........................................................................................................................
(CRC32 $FC0F7A84:disk image(Apple_HFS:4))
正在读取(Apple_Free:5)...
.........................................................................................................................
(CRC32 $00000000:(Apple_Free:5))
正在读取GPT Partition Data(Backup GPT Table:6)...
.........................................................................................................................
(CRC32 $D08A2D56:GPT Partition Data(Backup GPT Table:6))
正在读取GPT Header(Backup GPT Header:7)...
.........................................................................................................................
(CRC32 $E02061DB:GPT Header(Backup GPT Header:7))
正在添加资源...
.........................................................................................................................
已耗时: 3.355s
文件大小:31846419字节,校验和:CRC32 $7457A18C
已处理扇区:213072,已压缩158148
速度:23.0MB/秒
节省:70.8%
created: /Users/leo/Downloads/dmg-demo/Installer.dmg
hdiutil does not support internet-enable. Note it was removed in macOS 10.15.
Disk image done

创建完成后,双击 dmg 文件,检查它是否按照预期显示和工作。

image.png

这里指定了宽度 660 px 和高度 400 px 的窗口大小,是整个窗口(包含标题栏),而标题栏本身会占有 30 px 的高度,也就是实际上的区域只有 (660,370),这就导致,如果你要想要图标都居中,那么图标的的中心坐标位置将是 (x, 370/2)。

背景图的制作也是,中间的▶️图标如果要中心居中,那么实际上需要向上偏移 30 px 高度,才会居中。

另外,虽然 create-dmg 文档说支持 png、gif、jpg,但实测还支持 SVG、tiff 格式。

总结

通过使用 create-dmg ,你可以为你的 Mac 应用程序创建 DMG 磁盘镜像文件,同时也能方便地集成到 CI/CD 流程中。

附录

create-dmg 用法:

xml 复制代码

1
create-dmg [options ...] <output_name.dmg> <source_folder>

参数选项:

  • --volname <name> :设置卷标名称(在 Finder 侧边栏和窗口标题中显示)
  • --volicon <icon.icns> :设置卷标图标
  • --background <pic.png> :设置文件夹背景图像(提供 png、gif、jpg 格式)
  • --window-pos <x> <y> :设置文件夹窗口的位置
  • --window-size <width> <height> :设置文件夹窗口的大小
  • --text-size <text_size> :设置窗口文本大小(10-16)
  • --icon-size <icon_size> :设置窗口图标大小(最大 128)
  • --icon <file_name> <x> <y> :设置文件图标的位置
  • --hide-extension <file_name> :隐藏文件的扩展名
  • --app-drop-link <x> <y> :在位置 x, y 创建一个指向应用程序的快捷链接
  • --ql-drop-link <x> <y> :在位置 x, y 创建一个指向 /Library/QuickLook 的快捷链接
  • --eula <eula_file> :附加一个许可协议文件到 dmg
  • --rez <rez_path> :指定包含许可协议文件的 Rez 工具的自定义路径
  • --no-internet-enable :禁用自动挂载和复制
  • --format :指定最终图像格式(UDZO|UDBZ|ULFO|ULMO)(默认为 UDZO)
  • --filesystem :指定图像文件系统(HFS+|APFS)(默认为 HFS+,APFS 支持 macOS 10.13 或更新版本)
  • --encrypt :启用结果磁盘镜像的加密(AES-256 - 将提示输入密码)
  • --encrypt-aes128 :启用结果磁盘镜像的加密(AES-128 - 将提示输入密码)
  • --add-file <target_name> <file|folder> <x> <y> :添加额外的文件或文件夹(可多次使用)
  • --disk-image-size <x> :手动设置磁盘镜像大小为 x MB
  • --hdiutil-verbose :以详细模式执行 hdiutil
  • --hdiutil-quiet :以安静模式执行 hdiutil
  • --codesign <signature> :使用指定的签名对磁盘镜像进行代码签名
  • --notarize <credentials> :使用存储在钥匙串中的凭据对磁盘镜像进行签名(等待并装订)。更多信息请查看 Apple的文档
  • --skip-jenkins :跳过 Finder 美化 AppleScript,适用于沙盒和非 GUI 环境
  • --sandbox-safe :与沙盒兼容的 hdiutil,不祝福也不执行 AppleScript(不支持 APFS 磁盘镜像)
  • --version :显示工具版本号
  • -h, --help :显示帮助

create-dmg/create-dmg: A shell script to build fancy DMGs (github.com)

版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 杂烩饭