180 lines
4.3 KiB
Bash
Executable File
180 lines
4.3 KiB
Bash
Executable File
#!/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 "$@"
|