11

我在 Mac OS X 10.7.5 上使用 CMake 2.8.10.2。

我已将 CMake 配置为使用 Xcode 构建一个简单的应用程序,该应用程序创建一个空窗口。然后我尝试配置 CMake 以构建程序的 DMG 安装,使用以下命令指定背景图像:

设置(CPACK_DMG_BACKGROUND_IMAGE /path/to/image)

和自定义 .DS_Store 使用以下方法设置窗口大小和图标位置:

设置(CPACK_DMG_DS_STORE /path/to/DS_Store 文件)

Xcode 将成功构建应用程序并创建磁盘映像。当我安装图像时,它会提供正确的大小和图标位置,但是背景始终设置为白色而不是指定的背景图像。

需要什么才能让背景在磁盘映像中正确显示?

4

2 回答 2

11

不幸的是,没有人回答这个问题。这是一次令人沮丧的经历,但是,看起来我终于解决了它,所以我在这里发布了一个描述,以便在其他人不得不处理这个问题时避免他们的悲伤。

为了让背景在安装图像上工作,基本上必须发生两件事;背景文件必须存在于安装映像中,并且必须将映像根目录的 .DS_Store 配置为使用该背景。

.DS_Store 文件可以通过将安装映像挂载为可写状态,然后从 Finder 的“视图”菜单中选择“显示视图选项”来配置。从那里有人将为背景选择图片选项并将背景文件拖动到显示视图选项面板中的占位符。

使用 CPack 时,诀窍是能够拖动图像。当有人为安装、构建和安装图像设置背景时,看起来不会有任何背景可以拖动到“显示视图选项”面板。如果有人进入终端并

ls -a

在已安装安装的根目录上,该命令将列出一个名为 background.png 的文件。此文件不会显示在 Finder 中。

此文件显示在终端而不是 Finder 中的原因是因为它具有扩展属性,使其对 Finder 隐藏。由于文件在 Finder 中隐藏,因此无法将文件拖动到“显示视图选项”面板。正在做

ls -l@

将揭示哪些扩展属性应用于文件。应该只有一个名为 com.apple.FinderInfo。删除此属性应使文件在 Finder 中可见。可以从终端使用此命令删除该属性

xattr -d com.apple.FinderInfo background.png

删除属性后,背景文件仍然不会立即显示在 Finder 中。有人将不得不弹出并重新安装安装映像。一旦发生这种情况,背景文件应该出现在 Finder 中,并且有人可以将其拖到“显示视图选项”面板中,这将导致背景图像显示在 Finder 窗口中以显示安装图像。之后,有人可以从安装映像的根目录复制 .DS_Store 文件并将其应用到 CPACK_DMG_DS_STORE 属性,并且无论何时构建安装映像,都应该出现背景图像。

于 2013-05-21T04:28:27.643 回答
4

@TronThomas 的回应极大地帮助了我。为了不取代他的回答,这里有一些关于我刚刚完成的过程的额外信息。作为参考,这是使用 MacOS Sierra 和 CMake 3.6.2。

  1. 设置背景图像set(CPACK_DMG_BACKGROUND_IMAGE /path/to/image)
  2. 使用 CPack 生成器创建 DMG 文件DragNDrop
  3. 使用影子文件以读/写模式挂载图像hdiutil attach mypackage.dmg -shadow junk.dmg
  4. 此时,我们看不到背景图片,但.background在 DMG 文件的文件夹中存在背景图片。我们的策略是使用 Finder 使窗口完全符合我们的要求,然后复制出.DS_Store文件。
  5. 在 Finder 菜单上,单击View->Show View Options
  6. 在 下Background:,单击Picture单选按钮。然后,单击文本上方的图像Drag Image Here。请注意,当前视图必须在,as Icons否则此对话框将不存在。
  7. 在文件对话框中,返回到已安装的 DMG 映像。然后,按cmd-shift-.这应该显示隐藏的文件夹。从这里,进入.background文件夹并选择背景图像。
  8. 如果一切正常,现在应该可以看到背景图像。
  9. 根据需要在View菜单上调整窗口大小并查看或隐藏工具栏。安装程序将复制确切的设置。
  10. .DS_Store将卷根目录中的隐藏文件复制到另一个位置。该cmd-shift-.技巧可用于查看文件或此时仅使用终端复制所有内容。注意,我们可以把这个文件的名字改成DS_Store,这样保存的时候就不会隐藏了。
  11. 从 Finder 中弹出 DMG 文件。删除junk.dmg或任何剩余的影子文件。
  12. 回到CMakeLists.txt,设置变量set(CPACK_DMG_DS_STORE /path/to/DS_Store) 这是我们刚刚创建并移出卷的文件。
  13. 使用 . 重建 DMG 文件CPack。一切都应该和以前一样。

作为警告,文件中存储了很多信息,.DS_Store例如文件位置、用户名等。目前,我不知道如何控制这些信息,所以在分发最终的 DMG 文件时要小心一点。如果您对其中的内容感到好奇,请使用十六进制编辑器,例如xxd.

作为一个简短的评论,这个过程非常迟钝。也就是说,我认为这不是 Kitware 的错。不过,他们可以更好地记录这个过程。据我所知,.DS_Store文件格式没有得到很好的记录或披露,所以我们基本上被迫使用 Finder 为我们制作一个。这是一个可能应该修复的 MacOS 问题。

于 2016-10-18T05:22:31.700 回答