使用命令行创建dmg的例子

什么是DMG文件,如何打开?

DMG格式是在MAC系统上的一个镜象文件,也可以说是压缩文件,如果你用PC且没有装MAC OS X for X86的话,就不要费力了。如果你是使用苹果机或在PC上装了MAC OS X for X86,在MAC系统上双击这个文件就可以解开了;如果想把这个文件烧录成DVD,用toast把文件烧成光盘即可:dmg=>disc image

命令行创建dmg

自动获取软件版本号

 代码如下 复制代码

APP_NAME="Soulver"
VERSION=$(/usr/libexec/plistbuddy -c Print:CFBundleShortVersionString: "${APP_NAME}.app/Contents/Info.plist")
DMG_BACKGROUND_IMG="Background.png"

VOL_NAME="${APP_NAME} ${VERSION}"
DMG_TMP="${VOL_NAME}-temp.dmg"
DMG_FINAL="${VOL_NAME}.dmg"
STAGING_DIR="./Install"
创建dmg

# 清理文件夹
rm -rf "${STAGING_DIR}" "${DMG_TMP}" "${DMG_FINAL}"
# 创建文件夹,拷贝,计算
mkdir -p "${STAGING_DIR}"
cp -rpf "${APP_NAME}.app" "${STAGING_DIR}"
SIZE=`du -sh "${STAGING_DIR}" | sed 's/([0-9.]*)M(.*)/1/'`
SIZE=`echo "${SIZE} + 1.0" | bc | awk '{print int($1+0.5)}'`
# 容错处理
if [ $? -ne 0 ]; then
   echo "Error: Cannot compute size of staging dir"
   exit
fi
# 创建临时dmg文件
hdiutil create -srcfolder "${STAGING_DIR}" -volname "${VOL_NAME}" -fs HFS+
      -fsargs "-c c=64,a=16,e=16" -format UDRW -size ${SIZE}M "${DMG_TMP}"
echo "Created DMG: ${DMG_TMP}"
设置dmg

DEVICE=$(hdiutil attach -readwrite -noverify "${DMG_TMP}" |
         egrep '^/dev/' | sed 1q | awk '{print $1}')
sleep 2
# 增加Applications目录的软链接
echo "Add link to /Applications"
pushd /Volumes/"${VOL_NAME}"
ln -s /Applications
popd
# 拷贝背景图片
mkdir /Volumes/"${VOL_NAME}"/.background
cp "${DMG_BACKGROUND_IMG}" /Volumes/"${VOL_NAME}"/.background/

# 使用applescript设置一系列的窗口属性
echo '
   tell application "Finder"
     tell disk "'${VOL_NAME}'"
           open
           set current view of container window to icon view
           set toolbar visible of container window to false
           set statusbar visible of container window to false
           set the bounds of container window to {400, 100, 938, 432}
           set viewOptions to the icon view options of container window
           set arrangement of viewOptions to not arranged
           set icon size of viewOptions to 72
           set background picture of viewOptions to file ".background:'${DMG_BACKGROUND_IMG}'"
           set position of item "'${APP_NAME}'.app" of container window to {160, 195}
           set position of item "Applications" of container window to {360, 195}
           close
           open
           update without registering applications
           delay 2
     end tell
   end tell
' | osascript

sync
# 卸载
hdiutil detach "${DEVICE}"
压缩dmg

echo "Creating compressed image"
hdiutil convert "${DMG_TMP}" -format UDZO -imagekey zlib-level=9 -o "${DMG_FINAL}"

# 清理文件夹
rm -rf "${DMG_TMP}"
rm -rf "${STAGING_DIR}"

echo 'Done.'
exit

时间: 2024-12-17 02:57:23

使用命令行创建dmg的例子的相关文章

《Android应用开发攻略》——1.3 从命令行创建 “Hello, World”应用程序

1.3 从命令行创建 "Hello, World"应用程序 Ian Darwin1.3.1 问题 你想在不使用Eclipse ADT插件的情况下创建新的Android项目.1.3.2 解决方案 使用Android开发工具包(Android Development Kit,ADK)中的android工具,利用creat project参数和一些附加参数配置你的项目.1.3.3 讨论 除了平台名称之外,android还是一个用于创建.更新和管理项目的命令行工具的名称.可以进入android

MySQL命令行创建用户与授权

环境:MySQL Sever 5.1 + MySQL命令行工具 问题:使用命令行创建用户.进行授权 1. 创建用户: 命令:CREATE USER username IDENTIFIED BY 'password'; 说明:username --你将创建的用户名, password--该用户的登陆密码,密码可以为空,如果为空则该用户可以不需要密码 登陆服务器. 示例: CREATE USER wgb IDENTIFIED BY 'wgb'; 2.授权: 命 令:GRANT privileges

Linux有问必答:如何通过命令行创建和设置一个MySQL用户

Linux有问必答:如何通过命令行创建和设置一个MySQL用户 问题:我想要在MySQL服务器上创建一个新的用户帐号,并且赋予他适当的权限和资源限制.如何通过命令行的方式来创建并且设置一个MySQL用户呢? 要访问一个MySQL服务器,你需要使用一个用户帐号登录其中方可进行.每个MySQL用户帐号都有许多与之相关连的属性,例如用户名.密码以及权限和资源限制."权限"定义了特定用户能够在MySQL服务器中做什么,而"资源限制"为用户设置了一系列服务器资源的使用许可.创

msbuild-如何使用命令行创建一个空白vs项目或者解决方案

问题描述 如何使用命令行创建一个空白vs项目或者解决方案 使用的是vs2010旗舰版,了解到有几个VS的工具devenv,MSBuild,VCBuild可以在命令行根据已有的.csproj及.sln文件编译生成项目或解决方案. 但是我现在想要知道的是如何用命令行从无到有的创建一个全新的空白解决方案/项目,就是VS打开后点击文件->新建项目,输入项目名,确定后生成一个新项目的这一整个过程的命令行操作方式. 需要参数的是指定文件名和项目类型,主要是想要做到新生成项目的自动化操作而不要老是手点,所以如

ubuntu-关于命令行创建一个android test-project

问题描述 关于命令行创建一个android test-project 在适应IDE(例如Eclipse)创建Android test project时可以将test target project设置为this project,那么如何在命令行创建一个android test project ? 如果使用 android create test-project -p . -m . 会报错:Error: No AndroidManifest.xml file found in the main pr

Linux有问必答:如何在命令行创建一个MySQL数据库

Linux有问必答:如何在命令行创建一个MySQL数据库 问题:在一个某处运行的MySQL服务器上,我该怎样通过命令行创建和安装一个MySQL数据库呢? 为了能通过命令行创建一个MySQL数据库,你可以使用mysql命令行客户端.下面是通过mysql命令行客户端创建和安装MySQL的步骤. 第一步:安装MySQL客户端 当然你得确保MySQL客户端已经安装完毕.如果没有的话,可以按照下面的方法. 在Debian,Ubuntu 或者 Linux Mint上: $ sudo apt-get inst

新建了一个windows服务,关机再开机能够自启动,但是用cmd命令行创建此服务需要手动启动

问题描述 有没有什么方法,创建此windows服务之后,不用手动启动,一运行此windows服务,它就自启动了?现在这个windows方法,运行完毕之后,需要手动去启动,但是关机开机之后他能自启动,我想要的是,运行完毕之后能达到像开机关机之后自启动这个情况,希望各位大神指点 解决方案 本帖最后由 a981583536 于 2016-07-11 13:05:10 编辑解决方案二:自己去看下Program.cs的Main函数吧默认如果是服务的话通过ServiceBase.Run来运行你可以自己加个参

Windows下使用命令行创建可启动U盘

  如果你还在用光盘装系统,你就OUT啦--从Windows Vista开始,U盘已经可以被用来启动机器并安装系统了. 在制作可启动U盘之前,你需要: 一个U盘,最好是4G或更大的 一张Windows 7或者Vista的光盘 一台正在运行Windows 7或者Vista的电脑 然后按照下列步骤: 1.将U盘连上电脑 2.打开管理员模式的命令行(开始菜单->所有程序->附件->命令提示符,右键单击,选择"以管理员方式打开") 3.在命令行中输入下列命令(粗体部分): a

[android]android自动化测试二之命令行创建AVD

判断AVD是否已经开启: adb -s emulator-57409 shell getprop dev.bootcomplete 如果结果返回1代表AVD成功启动了  命令行打开方式: 1.首先你要打开android模拟器      (下面命令行打开的4步骤我是引用百度上的)  1).找到SDK的tools文件夹,我的在D:\android-sdk-windows\tools: 2).如果没有创建AVD的话,可以用命令android list targets查看各版本对应的id: 然后andr