#!/bin/bash # macOS DMG 构建和签名脚本 # 需要配置以下环境变量: # - APPLE_ID: 您的 Apple ID # - APPLE_PASSWORD: App 专用密码 # - TEAM_ID: 您的开发者团队 ID # - SIGNING_IDENTITY: 代码签名身份 set -e # 颜色输出 RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' NC='\033[0m' # No Color echo -e "${GREEN}🚀 开始构建 macOS DMG...${NC}" # 检查必要的环境变量 if [ -z "$APPLE_ID" ]; then echo -e "${RED}❌ 请设置 APPLE_ID 环境变量${NC}" exit 1 fi if [ -z "$APPLE_PASSWORD" ]; then echo -e "${RED}❌ 请设置 APPLE_PASSWORD 环境变量(App 专用密码)${NC}" exit 1 fi if [ -z "$TEAM_ID" ]; then echo -e "${RED}❌ 请设置 TEAM_ID 环境变量${NC}" exit 1 fi # 设置默认签名身份(如果没有设置) if [ -z "$SIGNING_IDENTITY" ]; then SIGNING_IDENTITY="Developer ID Application: Your Name (${TEAM_ID})" echo -e "${YELLOW}⚠️ 使用默认签名身份: ${SIGNING_IDENTITY}${NC}" fi # 清理之前的构建 echo -e "${YELLOW}🧹 清理之前的构建...${NC}" flutter clean rm -rf build/macos/Build/Products/Release/kaer_with_panels.app rm -rf build/macos/Build/Products/Release/kaer_with_panels.dmg # 构建 Flutter macOS 应用 echo -e "${YELLOW}🔨 构建 Flutter macOS 应用...${NC}" flutter build macos --release # 检查应用是否构建成功 APP_PATH="build/macos/Build/Products/Release/BearVPN.app" if [ ! -d "$APP_PATH" ]; then echo -e "${RED}❌ 应用构建失败: $APP_PATH 不存在${NC}" exit 1 fi echo -e "${GREEN}✅ 应用构建成功: $APP_PATH${NC}" # 代码签名 echo -e "${YELLOW}🔐 开始代码签名...${NC}" # 签名应用 echo -e "${YELLOW}📝 签名应用...${NC}" codesign --force --deep --sign "$SIGNING_IDENTITY" \ --options runtime \ --timestamp \ --entitlements macos/Runner/Runner.entitlements \ "$APP_PATH" # 验证签名 echo -e "${YELLOW}🔍 验证应用签名...${NC}" codesign --verify --verbose "$APP_PATH" spctl --assess --verbose "$APP_PATH" echo -e "${GREEN}✅ 应用签名成功${NC}" # 创建 DMG echo -e "${YELLOW}📦 创建 DMG 安装包...${NC}" DMG_PATH="build/macos/Build/Products/Release/BearVPN.dmg" TEMP_DMG="build/macos/Build/Products/Release/temp.dmg" # 创建临时 DMG hdiutil create -srcfolder "$APP_PATH" -volname "Kaer VPN" -fs HFS+ -fsargs "-c c=64,a=16,e=16" -format UDRW -size 200m "$TEMP_DMG" # 挂载临时 DMG MOUNT_POINT=$(hdiutil attach -readwrite -noverify -noautoopen "$TEMP_DMG" | egrep '^/dev/' | sed 1q | awk '{print $3}') # 等待挂载完成 sleep 2 # 设置 DMG 属性 echo -e "${YELLOW}🎨 设置 DMG 属性...${NC}" # 创建应用程序链接 ln -s /Applications "$MOUNT_POINT/Applications" # 设置 DMG 背景和图标(可选) # cp dmg_background.png "$MOUNT_POINT/.background/" # cp app_icon.icns "$MOUNT_POINT/.VolumeIcon.icns" # 设置窗口属性 osascript <