无法使用CMake为DMG安装配置背景图像

时间:2013-05-16 20:15:42

标签: background-image dmg cpack

我在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将成功构建应用程序并创建磁盘映像。当我安装图像时,它会显示正确的大小和图标位置,但背景始终设置为白色而不是指定的背景图像。

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

2 个答案:

答案 0 :(得分:10)

很遗憾没有人回复这个问题。这是一个令人沮丧的经历,然而,看起来我终于解决了它,所以我在这里发布一个描述,以便在遇到别人时让他们感到悲伤。

为了让背景能够处理安装映像,基本上必须要做两件事;后台文件必须存在于安装映像中,并且必须将映像根目录下的.DS_Store配置为使用该背景。

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

使用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属性,并且无论何时构建安装映像,都应显示背景图像。

答案 1 :(得分:3)

@TronThomas的回应让我大吃一惊。不要取代他的答案,这里有一些关于我刚刚完成的过程的其他信息。作为参考,这是MacOS Sierra和CMake 3.6.2。

  1. 使用set(CPACK_DMG_BACKGROUND_IMAGE /path/to/image)
  2. 设置背景图片
  3. 使用CPack生成器DragNDrop
  4. 创建DMG文件
  5. 使用影子文件hdiutil attach mypackage.dmg -shadow junk.dmg
  6. 将图像装入读/写模式
  7. 此时,我们看不到背景图像,但DMG文件中的文件夹.background中存在一个。我们的策略是使用Finder使窗口 完全 ,然后复制出.DS_Store文件。
  8. 在Finder菜单上,点击View->Show View Options
  9. Background:下,点击Picture单选按钮。然后,点击文字Drag Image Here上方的图片。请注意,当前视图必须为as Icons,否则此对话框将不存在。
  10. 在文件对话框中,返回已安装的DMG图像。然后,按cmd-shift-.这应显示隐藏的文件夹。在此处,进入.background文件夹并选择背景图片。
  11. 如果一切正常,现在应该可以看到背景图像。
  12. 调整窗口大小,并根据需要在View菜单上查看或隐藏工具栏。安装程序将复制确切的设置。
  13. 将卷根目录中隐藏的.DS_Store文件复制到另一个位置。可以使用cmd-shift-.技巧查看文件,或者只使用终端来复制所有内容。请注意,我们可以将此文件的名称更改为DS_Store,以便在存储时不会隐藏它。
  14. 从Finder中弹出DMG文件。删除junk.dmg或剩余的任何影子文件。
  15. 返回CMakeLists.txt,设置变量set(CPACK_DMG_DS_STORE /path/to/DS_Store)这是我们刚创建并移出卷的文件。
  16. 使用CPack重建DMG文件。一切都应该像以前一样。
  17. 作为警告,有很多信息存储在.DS_Store文件中,例如文件位置,用户名等。目前,我不知道如何控制这些信息,所以在分发最终的DMG文件时要小心一点。如果您对其中的内容感到好奇,请使用像xxd这样的十六进制编辑器。

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