feat: 处理mac构建使用makefile

This commit is contained in:
speakeloudest 2026-01-12 00:53:13 -08:00
parent e6ee3d6db8
commit 74f9acc225
2 changed files with 85 additions and 9 deletions

View File

@ -188,7 +188,12 @@ linux-release:
flutter_distributor package --flutter-build-args=verbose --platform linux --targets deb,rpm,appimage $(DISTRIBUTOR_ARGS)
macos-release:
flutter_distributor package --platform macos --targets dmg $(DISTRIBUTOR_ARGS)
# 旧方法(已弃用):使用 flutter_distributor 打包
# flutter_distributor package --platform macos --targets dmg $(DISTRIBUTOR_ARGS)
# 新方法:使用签名、公证和自定义 DMG 打包脚本
@echo "执行签名、公证和 DMG 打包..."
flutter build macos --release --target $(TARGET) $(BUILD_ARGS)
./scripts/sign_and_notarize.sh
ios-release: #not tested
flutter_distributor package --platform ios --targets ipa --build-export-options-plist ios/exportOptions.plist $(DISTRIBUTOR_ARGS)

View File

@ -19,18 +19,35 @@ TEAM_ID="NJRRF427XB"
# 路径配置
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
PROJECT_DIR="$(dirname "$SCRIPT_DIR")"
APP_PATH="${PROJECT_DIR}/hi-client/build/macos/Build/Products/Release/HiFastVPN.app"
ENTITLEMENTS="${PROJECT_DIR}/hi-client/macos/Runner/Release.entitlements"
APP_PATH="${PROJECT_DIR}/build/macos/Build/Products/Release/HiFastVPN.app"
ENTITLEMENTS="${PROJECT_DIR}/macos/Runner/Release.entitlements"
OUTPUT_DIR="${PROJECT_DIR}/dist"
BACKGROUND_IMAGE="${SCRIPT_DIR}/assets/dmg_bg.png"
# =====================================================================
echo "╔═══════════════════════════════════════════════════════════════════╗"
echo "║ HiFastVPN macOS 签名和公证脚本 ║"
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 "📄 Entitlements: ${ENTITLEMENTS}"
echo "🖼️ 背景图: ${BACKGROUND_IMAGE}"
echo ""
# 检查 .app 是否存在
@ -46,6 +63,28 @@ if [ ! -f "${ENTITLEMENTS}" ]; then
exit 1
fi
# 检查 create-dmg 是否安装
if ! command -v create-dmg >/dev/null 2>&1; then
echo "❌ 错误: create-dmg 未安装brew install create-dmg"
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
# 创建输出目录
mkdir -p "${OUTPUT_DIR}"
@ -191,15 +230,46 @@ spctl -a -t execute -vv "${APP_PATH}"
echo ""
echo "💿 Step 11: 创建 DMG..."
DMG_PATH="${OUTPUT_DIR}/HiFastVPN.dmg"
DMG_NAME="HiFastVPN-${VERSION}.dmg"
DMG_PATH="${OUTPUT_DIR}/${DMG_NAME}"
rm -f "${DMG_PATH}"
# 使用 hdiutil 创建简单的 DMG
hdiutil create -volname "HiFastVPN" -srcfolder "${APP_PATH}" -ov -format UDZO "${DMG_PATH}"
# 创建临时目录并复制 .app
TEMP_DIR=$(mktemp -d)
cp -R "${APP_PATH}" "${TEMP_DIR}/"
# 签名 DMG
# echo " 签名 DMG..."
# codesign --force --sign "${SIGNING_IDENTITY}" --timestamp "${DMG_PATH}"
# 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 创建自定义 DMG
echo " 创建自定义 DMG..."
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}"
# 公证 DMG
echo " 公证 DMG..."
@ -229,5 +299,6 @@ echo ""
echo "⚠️ 重要提示:"
echo " 发给用户的应该是 DMG 文件,不是 ZIP 或 .app"
echo " DMG 已经签名和公证,用户打开后不会被 Gatekeeper 拦截"
echo " 图标和 Applications 已按设计稿中心点对齐"
echo ""