是否可以从非 Mac 平台构建 .dmg 文件(用于分发应用程序)? 如果是的话,怎么办?
是的,mkfs.hfsplus 可以做到。
dd if=/dev/zero of=/tmp/foo.dmg bs=1M count=64
mkfs.hfsplus -v ThisIsFoo /tmp/foo.dmg
这将创建一个可以安装在 Mac 上的 dmg 文件(在本例中为 64M)。它也可以安装在linux上,类似于
mount -o loop /tmp/foo.dmg /mnt/foo
之后,您只需将所需的内容复制到其中(在/mnt/foo中)。卸载它,然后可以将 dmg 复制到 mac 并安装在那里。
我从事的一个项目使用 genisoimage 在 Linux 上创建 DMG 文件:
mkdir -p dmgdir/progname.app/Contents/{MacOS,Resources}
...copy your PkgInfo, Info.plist to Contents...
...copy your .icns to Resources...
...copy your other things to where you expect them to go...
genisoimage -V progname -D -R -apple -no-pad -o progname.dmg dmgdir
如果你想要真正的花哨,你可以从 Mac 上制作的 DMG 中窃取
.DS_Store
文件,其卷名称为 progname
和名为 progname.app
的应用程序包(即,与你想要在 Mac 上创建的内容相匹配) ),您在 .background/background.png
中放置了背景,并在根目录中放置了指向 /Applications 的符号链接,然后将其与您自己的 dmgdir
的符号链接一起放入 /Applications
中。
最后,如果你想创建压缩的DMG,请从libdmg-hfsplus获取dmg工具:
dmg uncompressed.dmg compressed.dmg
git clone https://github.com/hamstergene/libdmg-hfsplus
cd libdmg-hfsplus && cmake . && make && cd dmg
./dmg --help
生成文件:
dmg:
genisoimage -D -V "$(PROJECT) $(VERSION)" -no-pad -r -apple -o project-$(VERSION)-uncompressed.dmg $(DARWIN_DIR)
./dmg dmg project-$(VERSION)-uncompressed.dmg project-$(VERSION).dmg
未压缩的作品开箱即用,压缩可能会导致问题 - origin/master 至少会在雪豹上产生“校验和”错误
我不确定是否有人还在看这个帖子,但我按照Nik Reiman的推荐尝试了TransMac。
使用此工具,我能够在 Windows 7 上运行,创建可在 OSX 10.8.3 上安装的 dmg 文件。
缺点
对我们来说唯一的缺点是这个工具似乎对命令行不友好;对我们来说,这是一个大问题,因为我们需要能够拥有一个自动化工具,我们的构建服务器(基于 Windows)可以使用它来即时构建 dmg 文件。
参见 mkfs.hfsplus
如果您要分发 Mac 应用程序,那么您肯定有一台 Mac 来编写和测试它们。为什么不简单地使用同一台 Mac 来创建磁盘映像?
[编辑] 另外,如果您要分发便携式应用程序(例如 Java .jar 文件),为什么还要费心使用磁盘映像呢? Mac 可以很好地理解 .zip 和 .tar.gz 档案。
我想我的意思是,我不明白为什么人们可能需要 DMG 磁盘映像,但却没有用来创建它的 Mac。