1

我的公司提供了一个包含几个基于 Qt 的 MacOS/X GUI 应用程序的软件包;该软件包以 .dmg 文件的形式提供,“安装”包括双击 .dmg 图标,然后将一个或多个应用程序图标拖到他想要保留它们的位置(例如,拖到他自己的 Applications 文件夹)。

这很好用,但是 .dmg 文件相当大(例如 40+MB),如果可能的话,我想减小它的大小,以减少下载它所需的时间。我注意到的一件事是,包中的应用程序都有大量共同的大文件(Qt 库、图形资源文件等),目前我们在 blah.xml 中包含每个文件的单独副本。每个包含的应用程序的 app/Contents 文件夹——大概这就是 .dmg 文件如此之大的原因。

所以我的问题是,有没有办法修改 .dmg 使其不需要包含这些文件的多个副本,因此不是那么大?理想情况下,我希望这样做不需要用户运行特殊的安装程序,并且如果用户将它们移动到不同的(或意外的)文件夹或删除它们中的任何一个,也不会导致任何应用程序中断。

这似乎是硬链接的理想应用程序 - 即准备 .dmg 文件的输入,以便一个应用程序包含实际文件,而其他应用程序包含到这些文件的硬链接,以便在用户之后从 .dmg 文件中解压应用程序,文件在逻辑上保持相互独立(特别是如果用户移动或删除应用程序 A,应用程序 B 不会停止工作)。但是 AFAICT MacOS/X 不支持未命名为 Time Machine 的应用程序的硬链接 [编辑:到目录]。:^(

4

1 回答 1

2

(回答我自己的问题感觉有点不道德,但既然我找到了解决方案,我还是会这样做,而不是让问题悬而未决)

解决方案是在运行 hdiutil 创建 .dmg 文件之前,将重复文件替换为第一次遇到的文件的硬链接。我使用我为此目的编写的一个简单的 C++ 程序来做到这一点(只是因为我很固执),但也有许多免费软件程序,例如freedup可以为你做这件事。我没有尝试过,但我想它们都可以正常工作。

于 2012-08-15T04:39:40.183 回答