如何以编程方式(最好是bash)将图标添加到dmg?

时间:2017-07-28 20:16:08

标签: bash icons macos-sierra dmg

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

我知道我可以在Finder中使用我的。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时,我需要位于Downloads文件夹中的.dmg文件来获取我的图标而不是标准磁盘图标。如上所述,这很容易手动,但我怎样才能在bash脚本或AppleScript中执行此操作?

2 个答案:

答案 0 :(得分:2)

您可能在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

答案 1 :(得分:1)

让我们说你有这样的形象

enter image description here

并将其保存为: 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

你将最终得到:

enter image description here

这就是你要找的东西吗?

<强>更新

也适用于 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

enter image description here