137 lines
5.4 KiB
Bash
Executable File
137 lines
5.4 KiB
Bash
Executable File
#!/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/Debug/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=428
|
||
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=702
|
||
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 ""
|