Rilmazafone :一款可视化 DMG 编辑器,拖拽排版一键生成
2026/5/16 11:03:03 网站建设 项目流程

macOS 用户大概都有这个体验——下载一个软件,双击 DMG 挂载,弹出来的窗口里图标排得整整齐齐,背景是一张精心设计的图片,左下角还有一行小字"拖拽到 Applications 文件夹"。窗口好看,用户体验也好。但这份好看的背面,是开发者的一脸苦相。

DMG 是 macOS 上分发软件的标准格式,挂载之后就是一个 Finder 窗口。窗口里的图标摆在什么位置、窗口尺寸多大、背景图是什么,这些参数都存在一个叫 .DS_Store 的二进制文件里。苹果没有公开这个格式的文档,开发者想要控制布局,长期以来也就只有一条路——用 hdiutil 命令行工具创建磁盘映像,手动挂载,打开 Finder 用 AppleScript 操控图标位置,然后合上、压缩、签名。这套流程写进自动化脚本倒也不算太难,只是调试起来极为痛苦;AppleScript 往 Finder 里塞图标的行为在各个 macOS 版本之间并不一致,改个系统版本脚本就废了。

Rilmazafone 是一个原生的 macOS 应用,做的事情很直白——提供可视化的编辑界面,让开发者在画布上拖拽排列图标、设置背景、调整效果,然后一键生成 DMG。项目用 Swift 写成,不依赖任何第三方框架,只在 macOS 15 及以上系统上运行,Xcode 16 即可编译,2026 年 2 月发布了 1.0 版本。

编辑器里的操作跟设计软件差不多。背景支持图片、渐变和纯色三种填充方式,还可以叠加模糊、暗角、辉光等视觉效果;模糊甚至支持可变遮罩,能做出线性或径向的局部虚化。图标背景用毛玻璃面板,带阴影和混合模式,Finder 里常见的那个半透明底板就是这么来的。文字和 SF Symbol 也可以作为图层合成到背景中,省得在图片编辑软件里先做好再贴进来。项目还内置了智能对齐参考线,图标会自动吸附到画面中心和三分线位置,对有布局洁癖的人很友好。

生成 DMG 走七步,估算映像大小,创建可写映像,挂载,复制文件进去,渲染合成背景并写入 .DS_Store,设置卷标图标,最后卸载、压缩、可选签名。压缩格式支持 LZFSE、zlib、bzip2、lzma 四种,文件系统可选 APFS 或 HFS+,兼容性方面的需求基本都覆盖了。整个构建流程以后台任务运行,不阻塞 UI,每一步都可以撤销和重做。

技术层面有几个地方值得一说。前面提到 .DS_Store 是二进制格式,没有公开文档,Rilmazafone 自己实现了一个完整的写入器,用 Buddy Allocator 和 B-Tree 结构来组织数据,纯 Swift 写成。同样自己实现的还有 ICNS 图标格式的解析器和 Alias Record 构建器——前者用来读取应用的图标文件并合成卷标图标,后者用来创建经典 Alias Manager 的二进制记录。这些底层格式的解析和生成不依赖任何外部库,看得出作者对 macOS 内部结构下过很深的功夫。这在开源项目里并不多见,多数开发者遇到这类无文档的二进制格式,宁可绕远路也不愿自己逆向。

项目还提供了一个无头命令行模式,适合 CI/CD 场景。用 init 命令可以生成一个模板目录,build 命令从模板直接输出 DMG,不需要打开任何窗口。模板本身是一个 .dmgtemplate 目录包,里面有一个 document.json 配置文件和若干资源文件,结构清晰,纳入版本管理也很方便。

有一个细节需要注意:项目里的 BackdropBlurView 用了 CABackdropLayer 和 CAFilter 这两个 Core Animation 的私有 API,用来实现编辑器里的实时背景模糊预览。这意味着 Rilmazafone 没法直接上架 Mac App Store,私有 API 在未来的 macOS 版本里也可能随时失效。不过话说回来,本地开发工具上不上架 App Store,多半也无所谓。

归根结底,Rilmazafone 解决的是一件小而烦人的事情。做 macOS 应用的人多半经历过 DMG 排版的折磨,这个工具把那个折磨收进了图形界面里,让开发者把精力花在产品本身。

你觉得你的安装包够好看吗?欢迎在评论区聊聊你排版 DMG 的血泪史。

https://github.com/kageroumado/rilmazafone

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询