176 lines
4.3 KiB
Bash
Executable File
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 "$@"
|