#!/bin/bash set -e SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" PROJECT_DIR="$SCRIPT_DIR" BUILD_DIR="$PROJECT_DIR/build" APP_NAME="Soniox Voice" APP_BUNDLE="$BUILD_DIR/$APP_NAME.app" echo "🔨 Building $APP_NAME..." mkdir -p "$BUILD_DIR" rm -rf "$APP_BUNDLE" # 1. Compile Swift sources (Pure Native Swift) swiftc -O -target arm64-apple-macosx13.0 \ -framework Cocoa -framework AVFoundation -framework Carbon \ "$PROJECT_DIR"/src/*.swift \ -o "$BUILD_DIR/SonioxVoice" # 2. Assemble .app bundle mkdir -p "$APP_BUNDLE/Contents/MacOS" mkdir -p "$APP_BUNDLE/Contents/Resources" if [ ! -f "$PROJECT_DIR/resources/AppIcon.icns" ] && [ -d "$PROJECT_DIR/resources/AppIcon.iconset" ]; then iconutil -c icns "$PROJECT_DIR/resources/AppIcon.iconset" -o "$PROJECT_DIR/resources/AppIcon.icns" fi cp "$BUILD_DIR/SonioxVoice" "$APP_BUNDLE/Contents/MacOS/SonioxVoice" cp "$PROJECT_DIR/Info.plist" "$APP_BUNDLE/Contents/Info.plist" cp "$PROJECT_DIR/resources/AppIcon.icns" "$APP_BUNDLE/Contents/Resources/AppIcon.icns" # 3. Ad-hoc Codesign codesign --force --deep --sign - "$APP_BUNDLE" echo "✅ App bundle assembled at $APP_BUNDLE" # 4. Create DMG DMG_NAME="SonioxVoice-v1.0.0.dmg" DMG_PATH="$BUILD_DIR/$DMG_NAME" rm -f "$DMG_PATH" echo "📦 Creating DMG Installer..." STAGING_DIR="$BUILD_DIR/dmg_staging" rm -rf "$STAGING_DIR" mkdir -p "$STAGING_DIR" cp -R "$APP_BUNDLE" "$STAGING_DIR/" ln -s /Applications "$STAGING_DIR/Applications" hdiutil create -volname "SonioxVoice" -srcfolder "$STAGING_DIR" -ov -format UDZO "$DMG_PATH" rm -rf "$STAGING_DIR" echo "✅ DMG created at $DMG_PATH" # 5. Create ZIP for release cd "$BUILD_DIR" zip -r -y "SonioxVoice-v1.0.0.zip" "$APP_NAME.app" > /dev/null cd "$PROJECT_DIR" # 6. Install to /Applications echo "🚀 Installing to /Applications/$APP_NAME.app..." rm -rf "/Applications/$APP_NAME.app" cp -R "$APP_BUNDLE" "/Applications/" echo "🎉 All Done Successfully!" ls -lh "$BUILD_DIR"