#!/bin/bash set -e echo "=========================================" echo " RFCP Desktop Build (macOS)" echo "=========================================" cd "$(dirname "$0")/.." # Check if running on macOS if [[ "$(uname)" != "Darwin" ]]; then echo "Error: This script must run on macOS" exit 1 fi # 1. Build frontend echo "[1/4] Building frontend..." cd frontend npm ci npm run build cd .. # 2. Build backend with PyInstaller echo "[2/4] Building backend..." cd backend python3 -m pip install -r requirements.txt python3 -m pip install pyinstaller cd ../installer python3 -m PyInstaller rfcp-server.spec --clean --noconfirm mkdir -p ../desktop/backend-dist/mac cp dist/rfcp-server ../desktop/backend-dist/mac/ cd .. # 3. Create .icns icon if not exists if [ ! -f desktop/assets/icon.icns ]; then echo "Creating macOS icon..." mkdir -p icon.iconset sips -z 16 16 desktop/assets/icon.png --out icon.iconset/icon_16x16.png sips -z 32 32 desktop/assets/icon.png --out icon.iconset/icon_16x16@2x.png sips -z 32 32 desktop/assets/icon.png --out icon.iconset/icon_32x32.png sips -z 64 64 desktop/assets/icon.png --out icon.iconset/icon_32x32@2x.png sips -z 128 128 desktop/assets/icon.png --out icon.iconset/icon_128x128.png sips -z 256 256 desktop/assets/icon.png --out icon.iconset/icon_128x128@2x.png sips -z 256 256 desktop/assets/icon.png --out icon.iconset/icon_256x256.png sips -z 512 512 desktop/assets/icon.png --out icon.iconset/icon_256x256@2x.png sips -z 512 512 desktop/assets/icon.png --out icon.iconset/icon_512x512.png sips -z 1024 1024 desktop/assets/icon.png --out icon.iconset/icon_512x512@2x.png iconutil -c icns icon.iconset -o desktop/assets/icon.icns rm -rf icon.iconset fi # 4. Build Electron app echo "[3/4] Building Electron app..." cd desktop npm ci npm run build:mac cd .. # 5. Done echo "[4/4] Build complete!" ls -la desktop/dist/*.dmg 2>/dev/null || echo "DMG in desktop/dist/"