You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
wormhole-client/scripts/build-macos.sh

172 lines
4.6 KiB

#!/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
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>en</string>
<key>CFBundleDisplayName</key>
<string>$APP_NAME</string>
<key>CFBundleExecutable</key>
<string>Wormhole Client</string>
<key>CFBundleIdentifier</key>
<string>$BUNDLE_ID</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>$APP_NAME</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string>$VERSION</string>
<key>CFBundleVersion</key>
<string>$VERSION</string>
<key>LSMinimumSystemVersion</key>
<string>10.13</string>
<key>NSHighResolutionCapable</key>
<true/>
<key>LSApplicationCategoryType</key>
<string>public.app-category.networking</string>
<key>LSUIElement</key>
<false/>
<key>NSHumanReadableCopyright</key>
<string>Copyright © 2024 Azoic. All rights reserved.</string>
<key>CFBundleIconFile</key>
<string>app</string>
<key>CFBundleDocumentTypes</key>
<array>
<dict>
<key>CFBundleTypeExtensions</key>
<array>
<string>yaml</string>
<string>yml</string>
</array>
<key>CFBundleTypeName</key>
<string>Configuration File</string>
<key>CFBundleTypeRole</key>
<string>Editor</string>
</dict>
</array>
</dict>
</plist>
EOF
echo "✅ Application bundle created"
echo "🎯 Build completed successfully!"
echo "📁 Application bundle: $APP_DIR"