omnAPP/notarize_only.sh
2025-09-23 16:23:15 +08:00

176 lines
4.3 KiB
Bash
Executable File

#!/bin/bash
# BearVPN macOS 公证脚本
# 作者: Collins
set -e
# 配置变量
APP_NAME="BearVPN"
APP_VERSION="1.0.0"
APP_PATH="build/macos/Build/Products/Release/${APP_NAME}.app"
DMG_PATH="build/macos/Build/Products/Release/${APP_NAME}-${APP_VERSION}-macOS-Signed.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"
}
# 检查文件是否存在
check_files() {
if [ ! -d "$APP_PATH" ]; then
log_error "应用文件不存在: $APP_PATH"
log_info "请先运行 ./sign_and_package.sh 构建应用"
exit 1
fi
if [ ! -f "$DMG_PATH" ]; then
log_error "DMG 文件不存在: $DMG_PATH"
log_info "请先运行 ./sign_and_package.sh 构建 DMG"
exit 1
fi
log_success "找到应用和 DMG 文件"
}
# 公证应用
notarize_app() {
log_info "开始公证应用..."
# 创建 ZIP 文件用于公证
ZIP_PATH="build/macos/Build/Products/Release/${APP_NAME}-${APP_VERSION}.zip"
log_info "创建 ZIP 文件: $ZIP_PATH"
ditto -c -k --keepParent "$APP_PATH" "$ZIP_PATH"
log_warning "请确保您已生成应用专用密码:"
log_warning "1. 访问 https://appleid.apple.com"
log_warning "2. 登录您的 Apple ID"
log_warning "3. 在'安全'部分生成应用专用密码"
log_warning "4. 使用该密码进行公证"
echo ""
# 上传进行公证
log_info "上传应用进行公证..."
xcrun notarytool submit "$ZIP_PATH" \
--apple-id "xxxxxxxx@example.com" \
--password "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" \
--team-id "XXXXXXXXXX" \
--wait
if [ $? -eq 0 ]; then
log_success "应用公证成功"
# 装订公证票据
log_info "装订公证票据到应用..."
xcrun stapler staple "$APP_PATH"
if [ $? -eq 0 ]; then
log_success "公证票据装订成功"
else
log_warning "公证票据装订失败,但应用已公证"
fi
else
log_error "应用公证失败"
log_info "请检查 Apple ID 和应用专用密码是否正确"
exit 1
fi
# 清理 ZIP 文件
rm -f "$ZIP_PATH"
}
# 公证 DMG
notarize_dmg() {
log_info "开始公证 DMG..."
# 上传 DMG 进行公证
log_info "上传 DMG 进行公证..."
xcrun notarytool submit "$DMG_PATH" \
--apple-id "xxxxxxxx@example.com" \
--password "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" \
--team-id "XXXXXXXXXX" \
--wait
if [ $? -eq 0 ]; then
log_success "DMG 公证成功"
# 装订公证票据
log_info "装订公证票据到 DMG..."
xcrun stapler staple "$DMG_PATH"
if [ $? -eq 0 ]; then
log_success "DMG 公证票据装订成功"
else
log_warning "DMG 公证票据装订失败,但 DMG 已公证"
fi
else
log_error "DMG 公证失败"
log_info "请检查 Apple ID 和应用专用密码是否正确"
exit 1
fi
}
# 验证公证状态
verify_notarization() {
log_info "验证公证状态..."
# 验证应用公证
log_info "应用公证状态:"
xcrun stapler validate "$APP_PATH"
# 验证 DMG 公证
log_info "DMG 公证状态:"
xcrun stapler validate "$DMG_PATH"
}
# 显示结果
show_result() {
log_success "=========================================="
log_success "公证完成!"
log_success "=========================================="
log_info "应用: $APP_PATH"
log_info "DMG: $DMG_PATH"
log_success "=========================================="
log_info "现在应用已通过 Apple 公证"
log_info "可以在任何 Mac 上安全运行"
log_success "=========================================="
}
# 主函数
main() {
log_info "开始 BearVPN macOS 公证流程..."
log_info "=========================================="
check_files
notarize_app
notarize_dmg
verify_notarization
show_result
log_success "公证完成!"
}
# 运行主函数
main "$@"