blitztext-app-linux/build.sh
2026-05-23 07:28:46 +02:00

187 lines
5.3 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
set -euo pipefail
# Blitztext macOS App - Build & Run
# Voraussetzungen: Full Xcode with Command Line Tools, xcodegen
RUN_AFTER=false
INSTALL_APP=false
BUILD_CONFIGURATION="Release"
UNIVERSAL_ARCHS="arm64 x86_64"
for arg in "$@"; do
case "$arg" in
--debug)
BUILD_CONFIGURATION="Debug"
;;
--run)
RUN_AFTER=true
;;
--install)
INSTALL_APP=true
;;
--release)
BUILD_CONFIGURATION="Release"
;;
*)
echo "Unbekannte Option: $arg"
echo "Verwendung: ./build.sh [--install] [--run] [--release] [--debug]"
exit 1
;;
esac
done
verify_universal_app() {
local app_path="$1"
local app_name
local binary_path
local archs
app_name="$(basename "$app_path" .app)"
binary_path="$app_path/Contents/MacOS/$app_name"
if [ ! -f "$binary_path" ]; then
echo "❌ Konnte App-Binary nicht finden: $binary_path"
exit 1
fi
archs="$(lipo -archs "$binary_path" 2>/dev/null || true)"
if [[ -z "$archs" ]]; then
echo "❌ Konnte Architekturen nicht lesen: $binary_path"
file "$binary_path" 2>/dev/null || true
exit 1
fi
if [[ " $archs " != *" arm64 "* || " $archs " != *" x86_64 "* ]]; then
echo "❌ Build ist nicht universal. Erwartet: arm64 + x86_64"
echo " Gefunden: $archs"
file "$binary_path" 2>/dev/null || true
exit 1
fi
echo "✅ Universal Binary verifiziert: $archs"
}
ensure_xcodebuild_available() {
if xcodebuild -version >/dev/null 2>&1; then
return
fi
local default_xcode="/Applications/Xcode.app/Contents/Developer"
if [ -d "$default_xcode" ]; then
export DEVELOPER_DIR="$default_xcode"
if xcodebuild -version >/dev/null 2>&1; then
echo "⚠️ Aktiver Developer-Pfad nutzt kein vollständiges Xcode. Verwende: $DEVELOPER_DIR"
return
fi
fi
echo "❌ xcodebuild ist nicht verfügbar."
echo " Installiere Xcode und wähle es mit:"
echo " sudo xcode-select -s /Applications/Xcode.app/Contents/Developer"
exit 1
}
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
PROJECT_DIR="$SCRIPT_DIR/BlitztextMac"
PROJECT_FILE="$PROJECT_DIR/BlitztextMac.xcodeproj"
DERIVED_DATA_PATH="$SCRIPT_DIR/.derivedData-blitztextmac-build"
cd "$PROJECT_DIR"
ensure_xcodebuild_available
if command -v xcodegen &> /dev/null; then
echo "⚙️ Generiere Xcode-Projekt ..."
xcodegen generate 2>&1
elif [ -d "$PROJECT_FILE" ]; then
echo "⚠️ xcodegen nicht gefunden nutze vorhandenes Xcode-Projekt."
else
echo "❌ xcodegen fehlt."
echo " Installiere xcodegen explizit mit:"
echo " brew install xcodegen"
echo " Oder stelle sicher, dass $PROJECT_FILE vorhanden ist."
exit 1
fi
# Bauen
echo "🔨 Baue Blitztext ..."
xcodebuild \
-project BlitztextMac.xcodeproj \
-scheme BlitztextMac \
-destination 'platform=macOS' \
-configuration "$BUILD_CONFIGURATION" \
-derivedDataPath "$DERIVED_DATA_PATH" \
ONLY_ACTIVE_ARCH=NO \
ARCHS="$UNIVERSAL_ARCHS" \
clean build
# App finden
APP_PATH="$DERIVED_DATA_PATH/Build/Products/$BUILD_CONFIGURATION/Blitztext.app"
if [ ! -d "$APP_PATH" ]; then
echo "❌ Build fehlgeschlagen keine App gefunden."
exit 1
fi
verify_universal_app "$APP_PATH"
# Resources manuell ins Bundle kopieren (xcodegen kopiert sie nicht automatisch)
echo "📋 Kopiere Resources ..."
RESOURCES_DIR="$APP_PATH/Contents/Resources"
mkdir -p "$RESOURCES_DIR"
cp -f "$PROJECT_DIR/Resources/AppIcon.icns" "$RESOURCES_DIR/" 2>/dev/null || true
cp -f "$PROJECT_DIR/Resources/menubar_icon.png" "$RESOURCES_DIR/" 2>/dev/null || true
cp -f "$PROJECT_DIR/Resources/menubar_icon@2x.png" "$RESOURCES_DIR/" 2>/dev/null || true
# In Projektordner kopieren
DEST="$SCRIPT_DIR/Blitztext.app"
rm -rf "$DEST"
cp -R "$APP_PATH" "$DEST"
echo "🔏 Signiere lokale Development-App ad-hoc. Dieses Artefakt ist nicht notarisiert."
codesign --force --sign - "$DEST" 2>&1
verify_universal_app "$DEST"
RUN_TARGET="$DEST"
if [ "$INSTALL_APP" = true ]; then
APPS_DIR="/Applications"
INSTALL_DEST="$APPS_DIR/Blitztext.app"
if [ ! -w "$APPS_DIR" ]; then
echo "❌ /Applications ist nicht beschreibbar."
echo " Fuehre den Befehl mit passenden Rechten erneut aus oder ziehe die App manuell nach /Applications."
exit 1
fi
rm -rf "$INSTALL_DEST"
cp -R "$DEST" "$INSTALL_DEST"
echo "🔏 Signiere lokale Development-App ad-hoc. Dieses Artefakt ist nicht notarisiert."
codesign --force --sign - "$INSTALL_DEST" 2>&1
verify_universal_app "$INSTALL_DEST"
RUN_TARGET="$INSTALL_DEST"
fi
echo ""
echo "✅ Fertig! App liegt unter:"
echo " $DEST"
if [ "$INSTALL_APP" = true ]; then
echo " $RUN_TARGET"
fi
echo ""
echo "Build-Typ: $BUILD_CONFIGURATION"
echo "Architekturen: $UNIVERSAL_ARCHS"
echo "Kompatibel: Apple Silicon + Intel (macOS 14+)"
echo ""
echo "Naechste Schritte:"
echo "1. App starten"
echo "2. Mikrofon erlauben"
echo "3. Fuer direktes Einfuegen zusaetzlich Bedienungshilfen erlauben"
echo "4. In Blitztext deinen eigenen OpenAI API Key eintragen"
echo "5. Loslegen und bei Bedarf im Code weiterbauen"
echo ""
# Optional: direkt starten
if [ "$RUN_AFTER" = true ]; then
echo "🚀 Starte Blitztext ..."
open "$RUN_TARGET"
fi