【问题标题】:How to build a dmg Mac OS X file (on a non-Mac platform)?如何构建 dmg Mac OS X 文件(在非 Mac 平台上)?
【发布时间】:2015-05-22 11:50:57
【问题描述】:

是否可以从非 Mac 平台构建 .dmg 文件(用于分发应用程序)? 如果是,如何?

【问题讨论】:

标签: macos installation dmg


【解决方案1】:

是的,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 并安装在那里。

【讨论】:

  • 有人告诉我,以这种方式创建的 dmg 在 Finder 中显示为“锁定”。有什么办法可以改变吗?
  • 如果您的发行版中还没有,要安装的软件包是:kmod-hfsplus(来自 elrepo)和 hfsplus-tools
  • 我知道这是一个旧答案,但 Windows 中有没有工具可以实现这一点?像 Cygwin 中的东西之类的?不幸的是,我正在构建的游戏需要 Windows 或 Mac,而我没有 Mac。
  • @Japtar: genisoimage 似乎在 cygwin 中可用,并且也可以用于 dmg 文件。
  • genisoimage -D -V "$(PROJECT) $(VERSION)" -no-pad -r -apple -o project-$(VERSION)-uncompressed.dmg $(DARWIN_DIR) 这似乎有效。但我仍然需要验证生成的 .dmg 是否真的可用。现在没有我的 mac。
【解决方案2】:

我从事的一个项目使用 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

【讨论】:

  • 谢谢,拯救了我的一天!
  • 您提到了您创建的用于制作 dmg 的工具,我假设它是一个目录。你有这个工具的链接吗? (不要从普通的 dmg 中创建压缩的 dmg)。
  • @AlienDrew genisoimage 在大多数 Linux 发行版中都可用。检查你的包管理器。
  • @uckelman 所以没有直接的方法将文件夹转换为 dmg?我必须先创建图像然后转换?
  • dmg 支持的文件系统之一是 ISO-9660,因此您可以将 ISO-9660 映像视为未压缩的 dmg。在我上面的示例中由 genisomage 生成的文件是有效的 dmg,因此该示例确实将文件夹直接转换为 dmg ---但我怀疑这不能回答您的问题。
【解决方案3】:
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

开箱即用的未压缩作品,压缩可能会导致问题 - 源/主至少会在雪豹上产生“校验和”错误

【讨论】:

  • 如何使用dmg从iso文件创建dmg文件?帮助不是很有帮助。
【解决方案4】:

似乎可以使用一些第三方工具创建 DMG 文件。快速的谷歌搜索发现至少有一些商业工具:

不确定是否有任何 OSS/免费软件选项,但如果您愿意的话,至少看起来是可能的。

编辑:我也忘记了MacDrive,这是另一个在 Windows 下使用 HFS+ 文件系统的好工具。由于 DMG 基本上只是一个 HFS+ 文件系统快照,因此 MacDrive 也可以创建 DMG。

【讨论】:

  • 你也应该能够在 Linux 下使用命令行工具来完成它,类似于在 Mac OS X 上从命令行创建 DMG。
【解决方案5】:

我不确定是否有人还在看这个帖子,但我尝试了 Nik Reiman 推荐的 TransMac

使用此工具,我能够在 Windows 7 上运行,创建可在 OSX 10.8.3 上安装的 dmg 文件。


缺点

对我们来说唯一的缺点是这个工具似乎不是命令行友好的;对我们来说,这是一个大问题,因为我们需要能够拥有一个自动化工具,我们的构建服务器(基于 Windows)可以使用它来即时构建 dmg 文件。

【讨论】:

  • 以后,您可以在原始答案下的评论中留下此类信息,而不是创建新答案。你仍然可以得到支持。
  • 我只是好奇,我的答案不能作为答案怎么办?不是粗鲁,只是好奇。不过,我并不真正关心赞成票。
  • 更多的是对另一个答案的回应。正如您在回答中所指出的那样,其他人已经发布了此程序。当您有关于答案的反馈(例如您对解决方案的体验)时,cmets 是添加该信息的好地方。当您想显着改变程序时,您应该发布一个新的答案。
  • Apple 在理解 CI/CD 对交叉编译和平台可移植性的需求方面的糟糕程度着实令人惊讶。与甲骨文相同;如果没有一大堆扭曲的脚本,没有好方法可以为同一主机上的多个目标构建可安装的 Java 应用程序。
【解决方案6】:

参见 mkfs.hfsplus

【讨论】:

    【解决方案7】:

    如果您要分发 Mac 应用程序,那么您肯定有一台 Mac 可以编写和测试它们。为什么不直接使用同一台 Mac 来创建磁盘映像?

    [编辑] 或者,如果您正在分发便携式应用程序,例如 Java .jar 文件,为什么还要使用磁盘映像? Mac 可以很好地理解 .zip 和 .tar.gz 档案。

    我想我的意思是,我不明白一个人可能需要 DMG 磁盘映像,但没有用于创建它的 Mac。

    【讨论】:

    • 他没有说他没有 Mac。我可以想象一个构建环境,其中所有其他平台都在一个系统上准备好(比如使用交叉编译器),他也想在那里构建 Mac 发行版。
    • 实际上,有几个人在 Linux 上构建 Windows 安装程序,我相信同样的工具也可以在 Mac 上运行。这就是交叉编译的魔力:一台机器可以为所有目标构建。
    • -1 因为我认为“只使用 mac”不是一个好的答案。我没有,也不想要。如果存在 Mac 问题,我的用户会向我提供测试反馈,但通常我不需要专门在该平台上进行测试(我正在构建和分发 Java 应用程序)。还必须在单独的机器上构建和部署版本是一件麻烦事。 Zip 存档工作(Maven 可以创建它们),但 DMG 更好地提供对 Mac 用户使用的常见安装过程的更好熟悉。
    • “如果您正在分发 Mac 应用程序,那么您肯定有一台 Mac 可以编写和测试它们。”那不是真的。我是一名 Python 开发人员,我为 Win/Mac/Linux 编写程序,而无需使用我的 Mac! (我只有一个过时的 PPC G4,不适合编译 Python/PyGTK 文件。)而且,我们软件开发人员确实必须为我们以外的人构建软件,从而产生对 .dmg 文件的需求。
    • 如果他正在使用构建服务器构建他的软件,以进行持续集成或自动化部署,他很可能无法访问他的软件生产版本的 mac。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-17
    • 1970-01-01
    • 2015-07-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多