我想为我的Mac项目创建一个dmg文件。有人可以告诉我该怎么做?这是我的第一个Mac项目,我不知道如何继续。我还希望为用户提供在启动时运行应用程序的选项。我该怎么做?
感谢。
P.S。我还想添加自定义许可协议。
答案 0 :(得分:27)
手动执行此操作:
方法1:
/Applications/Utilities/
)Cmd + Shift + N
)方法2:
设置背景图像等操作可能有点复杂(您基本上将背景图像添加到DMG,设置窗口属性以使用该图像,使用命令行从{{1}移动背景图像} background.png
使其隐藏)
我会推荐iDMG,这会让事情变得不那么乏味。
您还可以使用命令.background.png
编写DMG脚本的脚本。
hdiutil
至于自定义许可协议,您应该查看开发人员工具“PackageMaker”附带的工具 - 这是非常明显的。它位于hdiutil create -srcfolder mydirtodmg mydmg.dmg
答案 1 :(得分:8)
如果需要向磁盘映像添加自定义EULA,this page将介绍如何使用命令行工具执行此操作。它的要点是使用Apple的slas_for_udifs_1.0.dmg中提供的模板软件许可协议资源,使用您的EULA文本修改资源并将资源注入磁盘映像文件。 (如果上述链接不可用,我将在下面提供简要说明,并更新它在步骤1中提供的搜索词。)
在终端:
cd /Volumes/SLAs_for_UDIFs_1.0 DeRez SLAResources > /tmp/sla.r
在文本编辑器中编辑/tmp/sla.r,更新data 'TEXT' (5000, "English SLA")
资源的内容以包含新的许可文本。
取消包含安装程序的磁盘映像文件:
hdiutil unflatten installer_image.dmg
将已编辑的许可证资源添加到图像中:
Rez -a /tmp/sla.r -o installer_image.dmg
答案 2 :(得分:4)
为什么不直接从xcode项目运行脚本。尝试这样的事情:
# be sure to check the man page for hdiutil
# it is very powerful and has tons of options...
hdiutil create -megabytes 54 -fs HFS+ -volname awesome_app_install myAwesomeApplication.dmg
hdiutil mount myAwesomeApplication.dmg
cp -r /build/Release/AwesomeApplication.app /Volumes/awesome_app_install/
然后将您的脚本保存为'makeDMG.sh'并在目标中
选择add-> new build phase->运行脚本构建阶段
并将您的脚本拖到此构建阶段。
完成所有这些后,当您构建项目时,脚本将创建磁盘映像并将发布版本复制到其中...
当然你应该把你的剧本调到味道......这三行只是生肉
ps:您的自定义EULA应该内置到您的packagemaker项目中(您也可以非常好地编写脚本)
答案 3 :(得分:0)
我制作了一个bash脚本来自动创建光盘映像。
它将创建一个临时目录来存储所有需要的文件,然后将其导出到新的DMG文件中。然后删除临时目录。 您可以在构建过程结束时自动启动此脚本。
#!/bin/bash
# Create .dmg file for macOS
# Adapt these variables to your needs
APP_VERS="1.0"
DMG_NAME="MyApp_v${APP_VERS}_macos"
OUTPUT_DMG_DIR="path_to_output_dmg_file"
APP_FILE="path_to_my_app/MyApp.app"
OTHER_FILES_TO_INCLUDE="path_to_other_files"
# The directory of the script
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
# The temp directory used, within $DIR
WORK_DIR=`mktemp -d "${DIR}/tmp"`
# Check if tmp dir was created
if [[ ! "${WORK_DIR}" || ! -d "${WORK_DIR}" ]]; then
echo "Could not create temp dir"
exit 1
fi
# Function to deletes the temp directory
function cleanup {
rm -rf "${WORK_DIR}"
#echo "Deleted temp working directory ${WORK_DIR}"
}
# Register the cleanup function to be called on the EXIT signal
trap cleanup EXIT
# Copy application on temp dir
cp -R "${APP_FILE}" "${WORK_DIR}"
# Copy other files without hidden files
rsync -a --exclude=".*" "${OTHER_FILES_TO_INCLUDE}" "${WORK_DIR}"
# Create .dmg
hdiutil create -volname "${DMG_NAME}" -srcfolder "${WORK_DIR}" -ov -format UDZO "${OUTPUT_DMG_DIR}/${DMG_NAME}.dmg"