#!/bin/bash # 创建包含安装脚本的 DMG # 此脚本会创建一个包含 BearVPN.app 和安装脚本的 DMG set -e # 配置变量 APP_NAME="BearVPN" APP_VERSION="1.0.0" DMG_NAME="${APP_NAME}-${APP_VERSION}-macOS-Signed" APP_PATH="build/macos/Build/Products/Release/${APP_NAME}.app" DMG_PATH="build/macos/Build/Products/Release/${DMG_NAME}.dmg" TEMP_DIR="/tmp/BearVPN_DMG" # 颜色输出 RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' NC='\033[0m' # No Color # 日志函数 log_info() { echo -e "${BLUE}[INFO]${NC} $1" } log_success() { echo -e "${GREEN}[SUCCESS]${NC} $1" } log_warning() { echo -e "${YELLOW}[WARNING]${NC} $1" } log_error() { echo -e "${RED}[ERROR]${NC} $1" } # 清理临时目录 cleanup_temp() { log_info "清理临时目录..." rm -rf "$TEMP_DIR" mkdir -p "$TEMP_DIR" } # 准备 DMG 内容 prepare_dmg_content() { log_info "准备 DMG 内容..." # 复制应用 cp -R "$APP_PATH" "$TEMP_DIR/" # 复制安装脚本 cp "install_bearvpn.sh" "$TEMP_DIR/" chmod +x "$TEMP_DIR/install_bearvpn.sh" # 创建 README 文件 cat > "$TEMP_DIR/README.txt" << 'EOF' 🐻 BearVPN 安装说明 ================== 欢迎使用 BearVPN! 📱 安装方法: 1. 双击 "BearVPN.app" 直接安装 2. 或运行 "install_bearvpn.sh" 脚本进行自动安装 ⚠️ 如果应用无法打开: 1. 右键点击 BearVPN.app → "打开" 2. 在系统偏好设置 → 安全性与隐私 → 允许从以下位置下载的应用 → 选择 "任何来源" 3. 或运行:sudo spctl --master-disable 🔧 技术支持: 如有问题,请联系技术支持团队 感谢使用 BearVPN! EOF # 创建 Applications 链接 ln -s /Applications "$TEMP_DIR/Applications" log_success "DMG 内容准备完成" } # 创建 DMG create_dmg() { log_info "开始创建 DMG..." # 删除旧的 DMG rm -f "$DMG_PATH" # 使用 create-dmg 创建 DMG create-dmg \ --volname "$APP_NAME" \ --volicon "macos/Runner/Assets.xcassets/AppIcon.appiconset/icon-256@2x.png" \ --window-pos 200 120 \ --window-size 700 500 \ --icon-size 100 \ --icon "$APP_NAME.app" 100 200 \ --icon "install_bearvpn.sh" 300 200 \ --icon "README.txt" 500 200 \ --icon "Applications" 100 350 \ --hide-extension "$APP_NAME.app" \ --no-internet-enable \ "$DMG_PATH" \ "$TEMP_DIR" if [ $? -eq 0 ]; then log_success "DMG 文件创建成功: $DMG_PATH" else log_error "DMG 文件创建失败" exit 1 fi } # 签名 DMG sign_dmg() { log_info "开始签名 DMG 文件..." DEVELOPER_ID="Developer ID Application: Your Company Name (XXXXXXXXXX)" # 签名 DMG codesign --force --sign "$DEVELOPER_ID" "$DMG_PATH" if [ $? -eq 0 ]; then log_success "DMG 签名成功" else log_error "DMG 签名失败" exit 1 fi # 验证 DMG 签名 log_info "验证 DMG 签名..." codesign --verify --verbose "$DMG_PATH" if [ $? -eq 0 ]; then log_success "DMG 签名验证通过" else log_error "DMG 签名验证失败" exit 1 fi } # 显示结果 show_result() { log_success "==========================================" log_success "包含安装脚本的 DMG 创建完成!" log_success "==========================================" log_info "DMG 路径: $DMG_PATH" log_info "DMG 大小: $(du -h "$DMG_PATH" | cut -f1)" log_info "包含内容:" log_info " - BearVPN.app (应用)" log_info " - install_bearvpn.sh (安装脚本)" log_info " - README.txt (说明文档)" log_info " - Applications (快捷方式)" log_success "==========================================" log_info "用户可以通过以下方式安装:" log_info "1. 直接拖拽 BearVPN.app 到 Applications" log_info "2. 运行 install_bearvpn.sh 脚本" log_success "==========================================" } # 主函数 main() { log_info "开始创建包含安装脚本的 DMG..." log_info "==========================================" cleanup_temp prepare_dmg_content create_dmg sign_dmg show_result log_success "所有操作完成!" } # 运行主函数 main "$@"