#!/bin/bash set -e PROJECT_DIR="$(cd "$(dirname "$0")" && pwd)" BUILD_DIR="$PROJECT_DIR/.build/release" APP_NAME="FloatingMonitor" APP_BUNDLE="$PROJECT_DIR/$APP_NAME.app" DMG_NAME="$PROJECT_DIR/$APP_NAME.dmg" STAGING="$PROJECT_DIR/dmg_staging" echo "📦 构建 DMG: $DMG_NAME" # 1. Release 编译 echo "🔨 Step 1/5: swift build -c release..." cd "$PROJECT_DIR" swift build -c release # 2. 创建 .app bundle 结构 echo "📂 Step 2/5: 创建 .app bundle..." rm -rf "$APP_BUNDLE" mkdir -p "$APP_BUNDLE/Contents/MacOS" mkdir -p "$APP_BUNDLE/Contents/Resources" # 3. 复制可执行文件 echo "📋 Step 3/5: 复制可执行文件..." cp "$BUILD_DIR/$APP_NAME" "$APP_BUNDLE/Contents/MacOS/" # 4. 创建 Info.plist echo "📝 Step 4/5: 创建 Info.plist..." cat > "$APP_BUNDLE/Contents/Info.plist" << 'PLIST' CFBundleName FloatingMonitor CFBundleDisplayName Floating Monitor CFBundleIdentifier com.floatingmonitor.app CFBundleVersion 1.0.0 CFBundleShortVersionString 1.0.0 CFBundleExecutable FloatingMonitor CFBundlePackageType APPL LSMinimumSystemVersion 14.0 LSUIElement NSHighResolutionCapable PLIST # 复制 Resources if [ -d "$PROJECT_DIR/Sources/Resources" ]; then cp -R "$PROJECT_DIR/Sources/Resources/"* "$APP_BUNDLE/Contents/Resources/" 2>/dev/null || true fi # 5. 创建 DMG echo "💿 Step 5/5: 创建 DMG..." rm -rf "$STAGING" mkdir -p "$STAGING" cp -R "$APP_BUNDLE" "$STAGING/" # 创建 Applications 快捷方式 ln -s /Applications "$STAGING/Applications" rm -f "$DMG_NAME" hdiutil create -volname "$APP_NAME" \ -srcfolder "$STAGING" \ -ov -format UDZO \ "$DMG_NAME" # 清理 rm -rf "$STAGING" echo "" echo "✅ DMG 创建成功: $DMG_NAME" ls -lh "$DMG_NAME"