19

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

4

8 回答 8

19

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

磁盘映像可以通过单个终端命令启用 Internet:

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。

于 2009-08-06T15:31:39.927 回答
17

磁盘工具(在 Applications\Utilities 中)

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

于 2009-08-06T09:55:50.007 回答
8

Nic 博士组装了一个漂亮的 ruby​​ gem,它可以为您完成大部分工作,您只需要提供 xcode 项目和一些图形。链接在这里:

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

这是一个很棒的软件包,可以处理原本很痛苦的任务……

——埃文

于 2009-08-06T13:25:15.777 回答
3

因为已经没有足够的答案了...

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

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

于 2009-08-06T16:56:18.743 回答
2

如果您想编写自己的脚本,Mozilla 构建脚本是一个很好的来源。使用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。对于简单的情况,您可以.DS_Store在 Finder(显示视图选项)中创建自定义挂载的 dmg 卷。您需要创建一个可写图像,对其进行自定义,卸载(提交更改),最后再次安装以将结果复制.DS_StoreMegaFinderCustomizedDS_Store(如上例所示)

如果您的应用程序支持 Leopard,我推荐DMG Canvas来管理整个过程或至少获得.DS_Store. 它也有一个命令行工具。

于 2011-03-26T08:52:16.493 回答
1

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

  1. 使用 hdiutil 附加图像
  2. 使用 cp 等将应用程序复制到挂载的映像中
  3. hdiutil 分离
  4. 压缩图像:hdiutil convert "in.dmg" -quiet -format UDZO -imagekey zlib-level=9 -o "MyApp-0.3.dmg"

在https://github.com/remko/fancy-dmg/有一个包含这些步骤的生成文件。

于 2013-11-25T13:56:08.523 回答
0

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

于 2009-08-06T17:51:59.397 回答
0

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

于 2013-09-26T11:48:09.357 回答