diff --git a/Makefile b/Makefile index ad097be..a1bb846 100755 --- a/Makefile +++ b/Makefile @@ -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) diff --git a/scripts/sign_and_notarize.sh b/scripts/sign_and_notarize.sh index d005499..efc37ff 100755 --- a/scripts/sign_and_notarize.sh +++ b/scripts/sign_and_notarize.sh @@ -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 ""