20

我想为我的 Mac 项目创建一个 dmg 文件。有人可以告诉我该怎么做吗?这是我的第一个 Mac 项目,我不知道如何进行。我还想给用户一个在启动时运行应用程序的选项。我该怎么做呢?

谢谢。

PS 我还想添加自定义许可协议。

4

4 回答 4

27

要手动执行此操作:

方法一:

  • 使用 DMG 将包含的文件创建一个文件夹。

在此处输入图像描述

  • 打开磁盘工具(位于/Applications/Utilities/

在此处输入图像描述

  • 转到文件 > 新建 > 从文件夹中新建图像 ( Cmd + Shift + N)

在此处输入图像描述

  • 选择包含您的文件的文件夹
  • 确保选中“压缩”,然后设置要保存创建的 DMG 的位置

在此处输入图像描述

在此处输入图像描述

在此处输入图像描述

方法二:

要执行诸如设置背景图像之类的事情可能有点复杂(您基本上将背景图像添加到 DMG,设置 Windows 属性以使用该图像,使用命令行将背景图像从移动background.png.background.png使其隐藏)

我会推荐iDMG,这会让事情变得不那么乏味。

您还可以使用该命令编写 DMG 创建脚本hdiutil。类似的东西

hdiutil create -srcfolder mydirtodmg mydmg.dmg

在此处输入图像描述

至于自定义许可协议,您应该查看开发人员工具“PackageMaker”中包含的工具 - 它非常不言自明。在里面/Developers/Application/Utilities/

于 2008-12-15T09:12:21.773 回答
8

如果您需要将自定义 EULA 添加到磁盘映像,此页面描述了如何使用命令行工具执行此操作。它的要点是使用 Apple 的 slas_for_udifs_1.0.dmg 中提供的模板软件许可协议资源,使用您的 EULA 文本修改资源并将资源注入到您的磁盘映像文件中。(如果上述链接不可用,我会在下面提供简要说明,并更新它在步骤 1 中提供的搜索词。)

  1. 使用您的 Apple 开发人员帐户转到下载页面并搜索UDIF 的软件许可
  2. 下载并挂载磁盘映像
  3. 在终端:

    cd /Volumes/SLAs_for_UDIFs_1.0
    DeRez SLAResources > /tmp/sla.r
    
  4. 在文本编辑器中编辑 /tmp/sla.r,更新data 'TEXT' (5000, "English SLA")资源内容以包含新的许可证文本。

  5. 展开包含安装程序的磁盘映像文件:

    hdiutil unflatten installer_image.dmg

  6. 将编辑后的许可资源添加到镜像中:

    Rez -a /tmp/sla.r -o installer_image.dmg

于 2012-12-21T04:36:38.740 回答
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”之类的内容并保存在您的目标中,

选择添加->新构建阶段->运行脚本构建阶段
并将您的脚本拖到此构建阶段。

一旦你完成了所有这些,那么当你构建你的项目时,脚本将创建磁盘映像并将你的发布版本复制到其中......

当然你应该为你的脚本添加香料......这三行只是生肉

ps:您的自定义 EULA 应该内置到您的 packagemaker 项目中(您也可以很好地编写脚本)

于 2009-06-10T15:35:24.333 回答
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"
于 2019-11-19T11:37:27.537 回答