LighthouseApp/manual_notarize.sh
speakeloudest 75d4c48e41
Some checks failed
Build Windows / build (push) Has been cancelled
feat: 源码提交
2025-10-19 23:30:54 -07:00

170 lines
4.7 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
# 手动公证脚本
# 作者: AI Assistant
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"
exit 1
fi
if [ ! -f "$DMG_PATH" ]; then
log_error "DMG 文件不存在: $DMG_PATH"
exit 1
fi
log_success "找到应用和 DMG 文件"
}
# 创建 ZIP 文件
create_zip() {
log_info "创建 ZIP 文件用于公证..."
ZIP_PATH="build/macos/Build/Products/Release/${APP_NAME}-${APP_VERSION}.zip"
ditto -c -k --keepParent "$APP_PATH" "$ZIP_PATH"
log_success "ZIP 文件创建完成: $ZIP_PATH"
}
# 手动公证应用
notarize_app_manual() {
log_info "开始手动公证应用..."
# 创建 ZIP 文件
create_zip
ZIP_PATH="build/macos/Build/Products/Release/${APP_NAME}-${APP_VERSION}.zip"
log_warning "请按照以下步骤进行手动公证:"
echo ""
log_info "1. 打开浏览器访问https://developer.apple.com/account/resources/certificates/list"
log_info "2. 登录您的 Apple Developer 账户"
log_info "3. 点击左侧菜单的 'Services' > 'Notarization'"
log_info "4. 点击 'Upload' 按钮"
log_info "5. 选择文件:$ZIP_PATH"
log_info "6. 等待公证完成(通常需要几分钟)"
echo ""
read -p "按回车键继续,当公证完成后..."
# 检查公证状态
log_info "检查公证状态..."
xcrun stapler validate "$APP_PATH" 2>/dev/null || log_warning "应用尚未公证或公证失败"
}
# 手动公证 DMG
notarize_dmg_manual() {
log_info "开始手动公证 DMG..."
log_warning "请按照以下步骤进行手动公证:"
echo ""
log_info "1. 打开浏览器访问https://developer.apple.com/account/resources/certificates/list"
log_info "2. 登录您的 Apple Developer 账户"
log_info "3. 点击左侧菜单的 'Services' > 'Notarization'"
log_info "4. 点击 'Upload' 按钮"
log_info "5. 选择文件:$DMG_PATH"
log_info "6. 等待公证完成(通常需要几分钟)"
echo ""
read -p "按回车键继续,当公证完成后..."
# 检查公证状态
log_info "检查公证状态..."
xcrun stapler validate "$DMG_PATH" 2>/dev/null || log_warning "DMG 尚未公证或公证失败"
}
# 装订公证票据
staple_tickets() {
log_info "装订公证票据..."
# 装订应用
log_info "装订应用公证票据..."
xcrun stapler staple "$APP_PATH" 2>/dev/null || log_warning "应用公证票据装订失败"
# 装订 DMG
log_info "装订 DMG 公证票据..."
xcrun stapler staple "$DMG_PATH" 2>/dev/null || log_warning "DMG 公证票据装订失败"
}
# 验证最终结果
verify_result() {
log_info "验证最终结果..."
# 检查应用签名
log_info "应用签名状态:"
codesign -dv "$APP_PATH" 2>&1 | grep -E "(Authority|TeamIdentifier|BundleId)" || true
# 检查 DMG 签名
log_info "DMG 签名状态:"
codesign -dv "$DMG_PATH" 2>&1 | grep -E "(Authority|TeamIdentifier)" || true
# 检查公证状态
log_info "应用公证状态:"
xcrun stapler validate "$APP_PATH" 2>/dev/null && log_success "应用已公证" || log_warning "应用未公证"
log_info "DMG 公证状态:"
xcrun stapler validate "$DMG_PATH" 2>/dev/null && log_success "DMG 已公证" || log_warning "DMG 未公证"
}
# 显示结果
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_manual
notarize_dmg_manual
staple_tickets
verify_result
show_result
log_success "手动公证完成!"
}
# 运行主函数
main "$@"