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