如何以编程方式(最好是 bash)将图标添加到 dmg?
how to programmatically (preferably bash) add icon to dmg?
我有一个 bash 脚本,可以为我的 node.js 应用程序创建一个 .dmg。但是,出现在 Finder 中的 .dmg 图标是标准磁盘图标。我需要它与应用程序的图标相同。
我知道我可以 cmd+I
在 Finder 的 .app 上,复制图标,然后 cmd+I
在我的 .dmg 上并粘贴。但我希望我的构建过程完全自动化。我不想为此使用第三方工具,因为我的 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 window 有我的图标。
不过,最主要的需求是 .dmg 文件本身。当有人下载我的 .dmg 时,我需要下载文件夹中的 .dmg 文件有我的图标而不是标准磁盘图标。如上所述,这很容易手动完成,但我如何从 bash 脚本或 AppleScript 中完成它?
您可能缺少执行 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
假设您有这样的图片
保存为: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
我有一个 bash 脚本,可以为我的 node.js 应用程序创建一个 .dmg。但是,出现在 Finder 中的 .dmg 图标是标准磁盘图标。我需要它与应用程序的图标相同。
我知道我可以 cmd+I
在 Finder 的 .app 上,复制图标,然后 cmd+I
在我的 .dmg 上并粘贴。但我希望我的构建过程完全自动化。我不想为此使用第三方工具,因为我的 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 window 有我的图标。
不过,最主要的需求是 .dmg 文件本身。当有人下载我的 .dmg 时,我需要下载文件夹中的 .dmg 文件有我的图标而不是标准磁盘图标。如上所述,这很容易手动完成,但我如何从 bash 脚本或 AppleScript 中完成它?
您可能缺少执行 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
假设您有这样的图片
保存为: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