hi-client/build_ios_simple.sh
2025-10-13 18:08:02 +08:00

253 lines
5.4 KiB
Bash
Executable File

#!/bin/bash
# 简化的 iOS 构建脚本(无签名版本)
# 用于快速测试和开发
set -e
# 颜色输出
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_environment() {
log_info "检查构建环境..."
# 检查 Flutter
if ! command -v flutter &> /dev/null; then
log_error "Flutter 未安装或不在 PATH 中"
exit 1
fi
# 检查 Xcode
if ! command -v xcodebuild &> /dev/null; then
log_error "Xcode 未安装或不在 PATH 中"
exit 1
fi
log_success "环境检查通过"
}
# 清理构建
clean_build() {
log_info "清理之前的构建..."
flutter clean
rm -rf build/ios
rm -rf ios/build
log_success "清理完成"
}
# 获取依赖
get_dependencies() {
log_info "获取 Flutter 依赖..."
flutter pub get
log_success "依赖获取完成"
}
# 构建 iOS 应用
build_ios_app() {
local build_type=${1:-"debug"}
log_info "开始构建 iOS 应用 (${build_type})..."
# 设置构建参数
local build_args="--debug"
if [ "$build_type" = "release" ]; then
build_args="--release"
fi
# 构建 Flutter 应用
flutter build ios $build_args --no-codesign
# 检查构建结果
local app_path="build/ios/iphoneos/Runner.app"
if [ ! -d "$app_path" ]; then
log_error "iOS 应用构建失败: $app_path 不存在"
exit 1
fi
log_success "iOS 应用构建完成: $app_path"
}
# 创建 IPA 文件
create_ipa() {
local app_path=$1
local ipa_path=$2
log_info "创建 IPA 文件..."
# 创建 Payload 目录
local payload_dir="build/ios/Payload"
mkdir -p "$payload_dir"
# 复制应用
cp -R "$app_path" "$payload_dir/"
# 创建 IPA
cd build/ios
zip -r "${ipa_path##*/}" Payload/
cd ../..
# 清理 Payload 目录
rm -rf "$payload_dir"
if [ -f "$ipa_path" ]; then
log_success "IPA 文件创建成功: $ipa_path"
else
log_error "IPA 文件创建失败"
exit 1
fi
}
# 创建 DMG 文件
create_dmg() {
local ipa_path=$1
local dmg_path=$2
log_info "创建 DMG 文件..."
# 创建临时目录
local temp_dir="build/ios/temp_dmg"
mkdir -p "$temp_dir"
# 复制 IPA 到临时目录
cp "$ipa_path" "$temp_dir/"
# 创建 DMG
hdiutil create -srcfolder "$temp_dir" \
-volname "BearVPN iOS" \
-fs HFS+ \
-format UDZO \
-imagekey zlib-level=9 \
"$dmg_path"
# 清理临时目录
rm -rf "$temp_dir"
if [ -f "$dmg_path" ]; then
log_success "DMG 文件创建成功: $dmg_path"
else
log_error "DMG 文件创建失败"
exit 1
fi
}
# 显示构建结果
show_result() {
local ipa_path=$1
local dmg_path=$2
local build_type=$3
log_success "=========================================="
log_success "iOS 构建完成!"
log_success "=========================================="
log_info "构建类型: $build_type"
log_info "IPA 文件: $ipa_path"
log_info "DMG 文件: $dmg_path"
log_success "=========================================="
log_warning "注意: 此版本未签名,需要开发者证书才能安装到设备"
log_info "要创建签名版本,请使用: ./build_ios.sh"
log_success "=========================================="
}
# 主函数
main() {
local build_type=${1:-"debug"}
log_info "开始 iOS 简化构建流程..."
log_info "构建类型: $build_type"
log_info "=========================================="
check_environment
clean_build
get_dependencies
build_ios_app "$build_type"
# 设置路径
local app_path="build/ios/iphoneos/Runner.app"
local ipa_path="build/ios/BearVPN-${build_type}.ipa"
local dmg_path="build/ios/BearVPN-${build_type}-iOS.dmg"
# 创建输出目录
mkdir -p "$(dirname "$ipa_path")"
mkdir -p "$(dirname "$dmg_path")"
# 创建 IPA
create_ipa "$app_path" "$ipa_path"
# 创建 DMG
create_dmg "$ipa_path" "$dmg_path"
# 显示结果
show_result "$ipa_path" "$dmg_path" "$build_type"
log_success "所有操作完成!"
}
# 显示帮助信息
show_help() {
echo "iOS 简化构建脚本"
echo ""
echo "用法: $0 [选项]"
echo ""
echo "选项:"
echo " debug 构建调试版本 (默认)"
echo " release 构建发布版本"
echo " help 显示此帮助信息"
echo ""
echo "示例:"
echo " $0 # 构建调试版本"
echo " $0 debug # 构建调试版本"
echo " $0 release # 构建发布版本"
echo ""
echo "注意: 此脚本创建未签名的版本,仅用于测试"
}
# 处理命令行参数
case "${1:-}" in
"help"|"-h"|"--help")
show_help
exit 0
;;
"debug"|"release")
main "$1"
;;
"")
main "debug"
;;
*)
log_error "未知选项: $1"
show_help
exit 1
;;
esac