hi-client/scripts/build_dmg.sh

137 lines
5.4 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
set -e
# ╔═══════════════════════════════════════════════════════════════════════════╗
# ║ HiFastVPN macOS DMG 打包脚本 ║
# ║ ║
# ║ 使用方法: ║
# ║ 1. 确保已经运行 sign_and_notarize.sh 生成签名的 .app ║
# ║ 2. chmod +x build_dmg.sh ║
# ║ 3. ./build_dmg.sh ║
# ╚═══════════════════════════════════════════════════════════════════════════╝
# ======================== 路径配置 ========================
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
PROJECT_DIR="$(dirname "$SCRIPT_DIR")"
APP_PATH="${PROJECT_DIR}/build/macos/Build/Products/Release/HiFastVPN.app"
BACKGROUND_IMAGE="${SCRIPT_DIR}/assets/dmg_bg.png"
# ======================== 提取版本号 ========================
echo "╔═══════════════════════════════════════════════════════════════════╗"
echo "║ HiFastVPN macOS DMG 打包脚本 ║"
echo "╚═══════════════════════════════════════════════════════════════════╝"
echo ""
PUBSPEC_PATH="${PROJECT_DIR}/pubspec.yaml"
if [ ! -f "${PUBSPEC_PATH}" ]; then
echo "❌ 错误: 找不到 pubspec.yaml"
exit 1
fi
VERSION=$(grep "^version:" "${PUBSPEC_PATH}" | sed 's/version: *//' | tr -d ' ')
if [ -z "${VERSION}" ]; then
echo "❌ 错误: 无法提取版本号"
exit 1
fi
echo "📦 版本号: ${VERSION}"
echo "📁 项目目录: ${PROJECT_DIR}"
echo "📦 应用路径: ${APP_PATH}"
echo "🖼️ 背景图: ${BACKGROUND_IMAGE}"
echo ""
# ======================== 检查依赖 ========================
if ! command -v create-dmg >/dev/null 2>&1; then
echo "❌ 错误: create-dmg 未安装brew install create-dmg"
exit 1
fi
if [ ! -d "${APP_PATH}" ]; then
echo "❌ 错误: HiFastVPN.app 不存在"
exit 1
fi
if [ ! -f "${BACKGROUND_IMAGE}" ]; then
echo "❌ 错误: 背景图不存在"
exit 1
fi
# ======================== 校验背景图尺寸 ========================
BG_INFO=$(sips -g pixelWidth -g pixelHeight "${BACKGROUND_IMAGE}")
BG_W=$(echo "$BG_INFO" | awk '/pixelWidth/ {print $2}')
BG_H=$(echo "$BG_INFO" | awk '/pixelHeight/ {print $2}')
if [ "$BG_W" != "1200" ] || [ "$BG_H" != "800" ]; then
echo "❌ 背景图必须是 1200x800当前是 ${BG_W}x${BG_H}"
exit 1
fi
# ======================== 输出目录 ========================
OUTPUT_DIR="${PROJECT_DIR}/dist/${VERSION}"
mkdir -p "${OUTPUT_DIR}"
DMG_NAME="HiFastVPN-${VERSION}.dmg"
DMG_PATH="${OUTPUT_DIR}/${DMG_NAME}"
echo "📂 输出目录: ${OUTPUT_DIR}"
echo "💿 DMG 文件: ${DMG_NAME}"
echo ""
rm -f "${DMG_PATH}"
# ======================== 创建 DMG ========================
echo "💿 开始创建 DMG..."
echo ""
TEMP_DIR=$(mktemp -d)
cp -R "${APP_PATH}" "${TEMP_DIR}/"
# ======================== Finder 坐标(左上原点,中心点对齐) ========================
# 背景1200 × 800
# HiFastVPN.app 中心:左 228, 上 418, 尺寸 168×168
APP_CENTER_X=236
APP_CENTER_Y=432
APP_ICON_SIZE=152
APP_X=$((APP_CENTER_X + APP_ICON_SIZE / 2)) # 左上角坐标
APP_Y=$((APP_CENTER_Y + APP_ICON_SIZE / 2))
# Applications 图标中心:左 742, 上 372, 尺寸 259×259
DROP_CENTER_X=742
DROP_CENTER_Y=372
DROP_ICON_SIZE=259
DROP_X=$((DROP_CENTER_X + DROP_ICON_SIZE / 2))
DROP_Y=$((DROP_CENTER_Y + DROP_ICON_SIZE / 2))
# ======================== 打包 ========================
create-dmg \
--volname "HiFastVPN Installation" \
--background "${BACKGROUND_IMAGE}" \
--window-size 1200 800 \
--icon-size "${APP_ICON_SIZE}" \
--icon "HiFastVPN.app" "${APP_X}" "${APP_Y}" \
--app-drop-link "${DROP_X}" "${DROP_Y}" \
--hide-extension "HiFastVPN.app" \
--no-internet-enable \
"${DMG_PATH}" \
"${TEMP_DIR}"
# 清理临时目录
rm -rf "${TEMP_DIR}"
# ======================== 完成 ========================
echo ""
echo "╔═══════════════════════════════════════════════════════════════════╗"
echo "║ 🎉 DMG 创建完成! ║"
echo "╚═══════════════════════════════════════════════════════════════════╝"
echo ""
echo "输出文件:"
echo " 💿 ${DMG_PATH}"
echo ""
echo "📝 注意事项:"
echo " • DMG 已保存到 dist/${VERSION}/ 目录"
echo " • 图标和 Applications 已按设计稿中心点对齐"
echo " • 此 DMG 包含已签名和公证的 .app"
echo " • 可以直接分发给用户使用"
echo ""