创建DMG文件

时间:2009-08-06 09:47:09

标签: cocoa deployment distribution diskimage

我正在使用Cocoa开发一个应用程序。我需要创建一个DMG文件来安装我的应用程序,如Adium(它提供了一个很好的UI来将应用程序文件拖到Application文件夹)。有这个工具吗?

8 个答案:

答案 0 :(得分:19)

如果您有一个用户可能会复制到Applications目录的文件,那么“启用Internet”的磁盘映像是一个不错的选择。当你使用Safari下载一个(我知道,不是每个人都使用Safari)时,它会自动安装它,将内容复制到下载位置,然后卸载DMG并将其移动到垃圾箱。该应用程序不会自动转到应用程序,但它位于用户的HD上,他们不必担心摆弄磁盘映像。

使用单个终端命令可以启用互联网的磁盘映像:

hdiutil internet-enable -yes "MyDiskImage.dmg"

这适用于任何DMG文件。如果您希望用户看到漂亮的背景,您可能不想这样做。但是,对于简单的有效载荷,这是一个很好的方法。 (当然,有些人宁愿为这种部署创建一个ZIP文件。)


我发现手动创建DMG可能会很痛苦。实际上,您可以在Xcode项目中自动创建简单的DMG。只需创建一个Shell脚本目标(项目→新目标...)并在脚本中使用hdiutil。该命令看起来像这样(替换正确的名称和目录):

hdiutil create -fs HFS+ -volname "MyApp 1.0" -srcfolder \
"/directory/with/contents/to/package/" "~/Desktop/MyApp-1.0.dmg"`

您需要将要包含在磁盘映像中的所有内容放在一个目录中,但如果您不担心在终端中使用cp,这很容易做到。

如果你想看一个例子,我自己在CHDataStructures.framework中使用这种方法。如果您签出代码并在Xcode中打开,则部署目标中的第二个脚本将创建DMG。

答案 1 :(得分:17)

磁盘工具(它位于Applications \ Utilities中)

转到File> New> Disk Image From Folder,然后选择要创建图像的文件夹。生成的.dmg将复制用于制作图像的文件夹,直至图标的位置。

答案 2 :(得分:8)

博士。 Nic组合了一个漂亮的红宝石宝石,为你完成大部分工作,你只需要提供xcode项目和一些图形。链接在这里:

http://drnicwilliams.com/2009/02/03/choctop-packaging-and-deployment-of-cocoa-applications/

这是一个很棒的包,负责处理其他方面的痛苦......

- 埃文

答案 3 :(得分:3)

因为还没有足够的答案......

我创建了一个具有我想要的布局的读写DMG - 背景图像,大小,应用程序图标的快捷方式,以及一个代表我的应用程序的空文件夹。我写了一个简单的bash脚本来制作这个DMG的副本,挂载它,将我的应用程序复制到空文件夹,卸载DMG,然后将其转换为只读。

但是DMG Canvas可以为您完成整个过程,并且还提供了一个命令行工具,您可以使用该工具从Xcode构建中自动执行此过程,因此我建议通过我的解决方案。

答案 4 :(得分:2)

如果您想编写自己的脚本,

Mozilla build scripts是一个很好的来源。使用pkg-dmg,您可以自定义背景图像,卷名称,添加许可证,图标等。示例:

pkg-dmg \
    --verbosity 2 \
    --volname "MegaFinder" \
    --source MegaFinder.app \
    --sourcefile \
    --target MegaFinder.dmg \
    --license Licence.txt  \
    --icon MegaFinderVolumenIcon.icns  \
    --copy MegaFinderCustomizedDS_Store:.DS_Store \
    --mkdir .background \
    --copy MegaFinderBackgroundImage.jpg:.background/backgroundImage.jpg \
    --symlink  /Applications:Applications \
    --attribute V:.background \
    2>&1 > /dev/null

问题在于创造完美的.DS_Store。对于简单的情况,您可以在Finder(显示视图选项)中创建.DS_Store自定义已安装的dmg卷。您需要创建可写图像,自定义它,卸载(提交更改),然后再次安装以将生成的.DS_Store复制为MegaFinderCustomizedDS_Store(如上例所示)

如果您的应用支持Leopard,我建议DMG Canvas管理整个过程,或者至少获取.DS_Store。它也有一个命令行工具。

答案 5 :(得分:1)

作为自动构建步骤执行此操作的最佳方法是创建一个template.dmg,它看起来完全符合您的要求(使用finder / diskutility等但不执行压缩它的最后一步),然后在您的构建脚本中:

  1. 使用hdiutil附加图像
  2. 使用cp等将应用程序复制到已安装的映像
  3. hdiutil detach
  4. 压缩图片:hdiutil convert“in.dmg”-quiet -format UDZO -imagekey zlib-level = 9 -o“MyApp-0.3.dmg”
  5. https://github.com/remko/fancy-dmg/处有一个包含这些步骤的makefile。

答案 6 :(得分:0)

MacBreak Dev做了一个关于使用Automator工作流创建DMG文件的精彩小视频。使事情变得非常简单,非常快速,您可以为DMG提供自定义背景。您可以在以下位置查看: http://www.pixelcorps.tv/mbkd_010

答案 7 :(得分:0)

您可以使用DropDMG设置带有背景图片的布局,应用程序文件夹的符号链接,图标位置等。然后,当您需要制作.dmg文件时,您可以直接拖动将应用程序放到DropDMG上(或通过AppleScript或dropdmg命令行工具编写脚本)并让它一步构建磁盘映像。