我需要为Mac应用程序创建一个很好的安装程序。我希望它是一个磁盘映像(DMG),具有预定义的大小、布局和背景图像。
我需要在一个脚本中以编程方式做到这一点,将其集成到现有的构建系统中(实际上更多的是一个包系统,因为它只创建安装程序。构建是单独完成的)。
我已经用“hdiutil”完成了DMG的创建,我还没有发现的是如何制作图标布局和指定背景位图。
我需要为Mac应用程序创建一个很好的安装程序。我希望它是一个磁盘映像(DMG),具有预定义的大小、布局和背景图像。
我需要在一个脚本中以编程方式做到这一点,将其集成到现有的构建系统中(实际上更多的是一个包系统,因为它只创建安装程序。构建是单独完成的)。
我已经用“hdiutil”完成了DMG的创建,我还没有发现的是如何制作图标布局和指定背景位图。
当前回答
. ds_store文件存储Mac中的windows设置。windows设置包括图标布局,窗口背景,窗口大小等。为挂载图像创建窗口时需要. ds_store文件,以保存文件和窗口背景的排列。
一旦你创建了. ds_store文件,你可以把它复制到你创建的安装程序(DMG)。
其他回答
通过提供这个答案来更新这个问题。
Appdmg是一个简单、易用的开源命令行程序,可以根据简单的json规范创建dmg文件。看看官方网站的自述:
https://github.com/LinusU/node-appdmg
简单的例子:
安装appdmg 安装-g appdmg 编写一个json文件(spec.json) { "title": "测试标题", “背景”:“background.png”, “icon-size”:80年, “内容”:[ {“x”:192年,“y”:344年,“类型”:“文件”、“路径”:“TestApp。应用"}, {“x”:448年,“y”:344年,“类型”:“链接”,“路径”:“/应用程序”} ] } 运行程序 Appdmg spec.json test.dmg
(免责声明。我是appdmg的创建者)
这些答案太复杂了,而且时代已经变了。下面的工作在10.9上很好,权限是正确的,它看起来不错。
从目录中创建只读DMG
#!/bin/sh
# create_dmg Frobulator Frobulator.dmg path/to/frobulator/dir [ 'Your Code Sign Identity' ]
set -e
VOLNAME="$1"
DMG="$2"
SRC_DIR="$3"
CODESIGN_IDENTITY="$4"
hdiutil create -srcfolder "$SRC_DIR" \
-volname "$VOLNAME" \
-fs HFS+ -fsargs "-c c=64,a=16,e=16" \
-format UDZO -imagekey zlib-level=9 "$DMG"
if [ -n "$CODESIGN_IDENTITY" ]; then
codesign -s "$CODESIGN_IDENTITY" -v "$DMG"
fi
创建带有图标的只读DMG。icn类型)
#!/bin/sh
# create_dmg_with_icon Frobulator Frobulator.dmg path/to/frobulator/dir path/to/someicon.icns [ 'Your Code Sign Identity' ]
set -e
VOLNAME="$1"
DMG="$2"
SRC_DIR="$3"
ICON_FILE="$4"
CODESIGN_IDENTITY="$5"
TMP_DMG="$(mktemp -u -t XXXXXXX)"
trap 'RESULT=$?; rm -f "$TMP_DMG"; exit $RESULT' INT QUIT TERM EXIT
hdiutil create -srcfolder "$SRC_DIR" -volname "$VOLNAME" -fs HFS+ \
-fsargs "-c c=64,a=16,e=16" -format UDRW "$TMP_DMG"
TMP_DMG="${TMP_DMG}.dmg" # because OSX appends .dmg
DEVICE="$(hdiutil attach -readwrite -noautoopen "$TMP_DMG" | awk 'NR==1{print$1}')"
VOLUME="$(mount | grep "$DEVICE" | sed 's/^[^ ]* on //;s/ ([^)]*)$//')"
# start of DMG changes
cp "$ICON_FILE" "$VOLUME/.VolumeIcon.icns"
SetFile -c icnC "$VOLUME/.VolumeIcon.icns"
SetFile -a C "$VOLUME"
# end of DMG changes
hdiutil detach "$DEVICE"
hdiutil convert "$TMP_DMG" -format UDZO -imagekey zlib-level=9 -o "$DMG"
if [ -n "$CODESIGN_IDENTITY" ]; then
codesign -s "$CODESIGN_IDENTITY" -v "$DMG"
fi
如果需要执行其他操作,最简单的方法是创建SRC_DIR的临时副本,并在创建DMG之前对其应用更改。
我使用dmgbuild。
安装:pip3 install dmgbuild 挂载您的卷 创建一个设置文件:
{
"title": "NAME",
"background": "YOUR_BACKGROUND.png",
"format": "UDZO",
"compression-level": 9,
"window": { "position": { "x": 100, "y": 100 },
"size": { "width": 640, "height": 300 } },
"contents": [
{ "x": 140, "y": 165, "type": "file", "path": "/Volumes/YOUR_VOLUME_NAME/YOUR_APP.app" },
{ "x": 480, "y": 165, "type": "link", "path": "/Applications" }
]
}
width值是背景的宽度。 高度值应该是窗口栏的背景高度+ 20。 在终端中:dmgbuild -s settings。. json "YOUR_VOLUME_NAME"输出
. ds_store文件存储Mac中的windows设置。windows设置包括图标布局,窗口背景,窗口大小等。为挂载图像创建窗口时需要. ds_store文件,以保存文件和窗口背景的排列。
一旦你创建了. ds_store文件,你可以把它复制到你创建的安装程序(DMG)。
如果你想设置自定义卷图标,那么使用下面的命令
/*Add a drive icon*/
cp "/Volumes/customIcon.icns" "/Volumes/dmgName/.VolumeIcon.icns"
/*SetFile -c icnC will change the creator of the file to icnC*/
SetFile -c icnC /<your path>/.VolumeIcon.icns
现在创建读/写dmg
/*to set custom icon attribute*/
SetFile -a C /Volumes/dmgName