#!/bin/bash set -e # 项目信息 APP_NAME="Wormhole Client" BUNDLE_ID="com.azoic.wormhole-client" VERSION="v1.0.0" BUILD_TIME=$(date -u '+%Y-%m-%d_%H:%M:%S') # 路径配置 PROJECT_ROOT="$(cd "$(dirname "$0")/.." && pwd)" BUILD_DIR="$PROJECT_ROOT/build" APP_DIR="$BUILD_DIR/$APP_NAME.app" CONTENTS_DIR="$APP_DIR/Contents" MACOS_DIR="$CONTENTS_DIR/MacOS" RESOURCES_DIR="$CONTENTS_DIR/Resources" DMG_DIR="$BUILD_DIR/dmg" TEMP_DMG="$BUILD_DIR/temp.dmg" FINAL_DMG="$BUILD_DIR/Wormhole-Client-$VERSION.dmg" echo "🚀 Building Wormhole Client for macOS..." echo "📦 Version: $VERSION" echo "📅 Build Time: $BUILD_TIME" # 清理构建目录 echo "🧹 Cleaning build directory..." rm -rf "$BUILD_DIR" mkdir -p "$BUILD_DIR" # 构建二进制文件 echo "🔨 Building binary..." cd "$PROJECT_ROOT" GOOS=darwin GOARCH=amd64 go build \ -ldflags "-X main.version=$VERSION -X main.buildTime=$BUILD_TIME" \ -o "$BUILD_DIR/wormhole-client" \ cmd/wormhole-client/main.go echo "✅ Binary built successfully" # 创建应用程序包结构 echo "📦 Creating application bundle..." mkdir -p "$MACOS_DIR" mkdir -p "$RESOURCES_DIR" # 复制二进制文件 cp "$BUILD_DIR/wormhole-client" "$MACOS_DIR/" # 复制配置文件 cp -r configs "$RESOURCES_DIR/" # 创建或复制应用图标 ICON_PATH="$PROJECT_ROOT/assets/icons/app.icns" if [ -f "$ICON_PATH" ]; then echo "📱 Using custom app icon..." cp "$ICON_PATH" "$RESOURCES_DIR/" else echo "🎨 Creating default app icon..." if [ -f "$PROJECT_ROOT/scripts/create-icon.sh" ]; then chmod +x "$PROJECT_ROOT/scripts/create-icon.sh" "$PROJECT_ROOT/scripts/create-icon.sh" if [ -f "$ICON_PATH" ]; then cp "$ICON_PATH" "$RESOURCES_DIR/" fi fi fi # 创建启动脚本 cat > "$MACOS_DIR/Wormhole Client" << 'EOF' #!/bin/bash # Wormhole Client macOS Launcher set -e # 获取应用程序路径 APP_PATH="$(cd "$(dirname "$0")/.." && pwd)" RESOURCES_PATH="$APP_PATH/Resources" BINARY_PATH="$APP_PATH/MacOS/wormhole-client" CONFIG_PATH="$RESOURCES_PATH/configs/client.yaml" # 检查二进制文件 if [ ! -f "$BINARY_PATH" ]; then echo "❌ Application binary not found" exit 1 fi # 设置工作目录 cd "$RESOURCES_PATH" # 如果没有参数,启动 HTTP 模式并打开浏览器 if [ $# -eq 0 ]; then echo "🚀 Starting Wormhole Client in HTTP proxy mode..." echo "🌐 Web interface will open automatically" # 后台启动应用 "$BINARY_PATH" -config "$CONFIG_PATH" -mode http & APP_PID=$! # 等待服务启动 sleep 3 # 打开 Web 界面 open "http://127.0.0.1:8080/gui" 2>/dev/null || echo "📱 Visit http://127.0.0.1:8080/gui to access the web interface" # 等待应用程序结束 wait $APP_PID else # 有参数时直接传递 exec "$BINARY_PATH" -config "$CONFIG_PATH" "$@" fi EOF chmod +x "$MACOS_DIR/Wormhole Client" # 创建 Info.plist cat > "$CONTENTS_DIR/Info.plist" << EOF CFBundleDevelopmentRegion en CFBundleDisplayName $APP_NAME CFBundleExecutable Wormhole Client CFBundleIdentifier $BUNDLE_ID CFBundleInfoDictionaryVersion 6.0 CFBundleName $APP_NAME CFBundlePackageType APPL CFBundleShortVersionString $VERSION CFBundleVersion $VERSION LSMinimumSystemVersion 10.13 NSHighResolutionCapable LSApplicationCategoryType public.app-category.networking LSUIElement NSHumanReadableCopyright Copyright © 2024 Azoic. All rights reserved. CFBundleIconFile app CFBundleDocumentTypes CFBundleTypeExtensions yaml yml CFBundleTypeName Configuration File CFBundleTypeRole Editor EOF echo "✅ Application bundle created" echo "🎯 Build completed successfully!" echo "📁 Application bundle: $APP_DIR"