hi-client/create_dmg_with_installer.sh
2025-10-13 18:08:02 +08:00

180 lines
4.3 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/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: Civil Rights Corps (3UR892FAP3)"
# 签名 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 "$@"