【问题标题】:how to programmatically (preferably bash) add icon to dmg?如何以编程方式(最好是 bash)将图标添加到 dmg?
【发布时间】:2017-07-28 20:16:07
【问题描述】:

我有一个 bash 脚本,它为我的 node.js 应用程序创建一个 .dmg。但是,Finder 中出现的 .dmg 图标是标准磁盘图标。我需要它与应用程序的图标相同。

我知道我可以在 Finder 中的 .app 上cmd+I,复制图标,然后在我的 .dmg 上 cmd+I 并粘贴。但我希望我的构建过程完全自动化。我不想为此使用第三方工具,因为我的 bash 脚本中已经有代码签名和本地化工作。

我尝试将我的 icns 作为.VolumeIcon.icns 复制到我的 dmg 的根目录中。没有效果。

我也试过SetFile -a C "path/to/dmg/.VolumeIcon.icns"。这也没有任何影响,man SetFile 表示无论如何它已被弃用。我正在 macOS Sierra 10.12.6 上构建。

既然简单的复制和粘贴就可以工作,那么一定有一种方法可以通过编程来完成!但是怎么做???

更新

这部分有效:

hdiutil create -srcfolder "my/build/dir" -fs HFS+ -fsargs "-c c=64,a=16,e=16" -format UDRW -volname MyAppName -ov -attach "my/output/dir/MyAppName.uncompressed.dmg"
SetFile -c icnC "/Volumes/MyAppName/.VolumeIcon.icns"
SetFile -a C "/Volumes/MyAppName"

它不会将图标与 .dmg 文件本身关联,但如果我双击 .dmg 文件,显示的 Finder 窗口会显示我的图标。

不过,主要需求是 .dmg 文件本身。当有人下载​​我的 .dmg 时,我需要下载文件夹中的 .dmg 文件来显示我的图标,而不是标准磁盘图标。如上所述,手动操作很容易,但如何在 bash 脚本或 AppleScript 中完成呢?

【问题讨论】:

  • 看看这里:owsiak.org/?p=683 - 我指的是相当古老但仍然非常好的书。不幸的是,它可以通过 SafariBooksOnline - 付费服务获得。
  • @mko 我找到了有关背景图像的说明,但没有找到为 dmg 文件本身设置 Finder 中显示的图标的说明。

标签: bash icons macos-sierra dmg


【解决方案1】:

您可能在执行 SetFile 命令之前缺少一步。试试这个。

SetFile -c icnC "path/to/dmg/.VolumeIcon.icns"
SetFile -a C "path/to/dmg"

更多信息在这里:http://docplayer.net/20858155-How-to-create-a-yosemite-installer.html

【讨论】:

  • 谢谢 - 这会将图标放入双击安装程序时打开的 Finder 窗口。不是我想问的,但也很有帮助。
【解决方案2】:

假设你有这样的图像

并保存为:cc.png。关注

cp cc.png cc_copy.png
sips -i cc_copy.png
DeRez -only icns cc_copy.png > icns.rsrc
mkdir some_installer
hdiutil create -volname installer -srcfolder ./some_installer -ov -format UDZO my_app.dmg
Rez -append icns.rsrc -o my_app.dmg
SetFile -a C my_app.dmg

你最终会得到:

这就是你要找的吗?

更新:

应该也适用于 icns

cp /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/macOS.icns .
cp macOS.icns macOS_copy.icns
sips -i macOS_copy.icns
DeRez -only icns macOS_copy.icns > icns.rsrc
hdiutil create -volname installer -srcfolder ./some_installer -ov -format UDZO my_app.dmg
Rez -append icns.rsrc -o my_app.dmg
SetFile -a C my_app.dmg

【讨论】:

  • 谢谢,我想这正是我想要的,但我实际上是从 .icns 开始,而不是 .png。有没有办法从 .icns 开始执行此操作,还是我需要先将其转换为 .png?
  • 工作得很好,谢谢!我唯一担心的是 Sierra 10.12.6 上终端的手册页说“支持 Carbon 开发的工具,包括 /usr/bin/SetFile,已在 Xcode 6 中弃用。” DeRez 和 Rez 也是如此。还有其他不被弃用的方法吗?
  • 说实话,我从来没有使用过其他任何东西,所以,我不知道处理 dmg 文件的其他方法。其实我也是用rez在dmg文件中添加license语句:owsiak.org/?p=700
  • 好的,谢谢。关于向 dmg 添加许可证的好帖子!我猜当不推荐使用的命令停止工作时,有人会找到新的解决方案,同时我很高兴现在有一些可以工作的东西。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-01-22
  • 2017-01-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-30
相关资源
最近更新 更多