Files
hms-mediaengine/make_mac_app.py
T
HMS MediaEngine Agent 696e8eb1b3 PORTABLE INSTALLATION: umgeht 16-GB-Pruefung von macOS Installer.app
URSACHE GEFUNDEN: macOS Installer.app verlangt 10-16 GB freien
Speicher als SYSTEMRESERVE - obwohl GStreamer nur 146 MB gross
ist. Diese Pruefung blockiert Installationen auf vollen Platten.

LOESUNG: HMS-Portable-Install.command
- Laedt GStreamer .pkg (146 MB) per curl
- Entpackt mit 'pkgutil --expand-full' OHNE Installer.app
  (keine 16-GB-Pruefung, kein sudo, nichts systemweit)
- Kopiert GStreamer.framework in runtime/ im Projektordner
- Loescht Download + Temp (gibt ~750 MB zurueck)
- Schreibt runtime/env.sh mit allen Umgebungsvariablen
- Braucht NUR ca. 800 MB WAHREND der Installation
- Danach: ca. 500-600 MB im Projektordner (portable, loeschbar)

Integration:
- run.py: laedt portable env automatisch VOR gi-Import
  (DYLD_LIBRARY_PATH, GST_PLUGIN_PATH, GI_TYPELIB_PATH,
  PYTHONPATH fuer gi-Bindings)
- App-Launcher: sourced runtime/env.sh falls vorhanden
- launcher_core.py: gleiche portable env-Logik
- Freien Speicher pruefen (nur 800 MB noetig, nicht 16 GB)

Drei Installationswege jetzt verfuegbar:
1. HMS-Portable-Install.command (wenig Speicher, nichts systemweit)
2. HMS-Mac-Install.command (Homebrew, mehr Komfort)
3. HMS-MediaEngine.app startet mit whichever verfuegbar ist
2026-09-11 23:33:19 +02:00

82 lines
2.8 KiB
Python

#!/usr/bin/env python3
"""Erzeugt 'HMS MediaEngine.app' im Projektordner (macOS App-Bundle).
Aufruf: python3 make_mac_app.py
Danach: 'HMS MediaEngine.app' per Doppelklick im Finder starten.
Der Launcher prueft unsichtbar: fehlt GStreamer, oeffnet sich der
grafische Installer; ist alles da, startet die Engine im Hintergrund
und der Browser oeffnet sich.
"""
from __future__ import annotations
from pathlib import Path
ROOT = Path(__file__).resolve().parent
APP = ROOT / "HMS MediaEngine.app"
INFO_PLIST = """<?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>CFBundleName</key><string>HMS MediaEngine</string>
<key>CFBundleDisplayName</key><string>HMS MediaEngine</string>
<key>CFBundleIdentifier</key><string>de.hms.mediaengine</string>
<key>CFBundleVersion</key><string>0.1.0</string>
<key>CFBundleShortVersionString</key><string>0.1.0</string>
<key>CFBundlePackageType</key><string>APPL</string>
<key>CFBundleExecutable</key><string>HMS-Launcher</string>
<key>LSMinimumSystemVersion</key><string>11.0</string>
<key>NSHighResolutionCapable</key><true/>
<key>CFBundleInfoDictionaryVersion</key><string>6.0</string>
</dict>
</plist>
"""
LAUNCHER = r'''#!/bin/bash
# HMS MediaEngine App-Start (vom Finder, ohne sichtbares Terminal)
DIR="$(cd "$(dirname "$0")/../../.." && pwd)"
PY=""
for p in /opt/homebrew/bin/python3 /usr/local/bin/python3 python3; do
if command -v "$p" >/dev/null 2>&1; then PY="$p"; break; fi
done
if [ -z "$PY" ]; then
osascript -e 'display alert "Python nicht gefunden" message "Bitte HMS-Mac-Install.command im Projektordner einmal ausfuehren - es installiert alles Grafische." as critical' >/dev/null 2>&1
exit 1
fi
cd "$DIR"
# Portable GStreamer-Umgebung laden (falls HMS-Portable-Install genutzt)
if [ -f "$DIR/runtime/env.sh" ]; then
source "$DIR/runtime/env.sh"
fi
if "$PY" -c "import gi; gi.require_version('Gst','1.0')" >/dev/null 2>&1; then
nohup "$PY" "$DIR/run.py" >>/tmp/hms-mediaengine.log 2>&1 &
PORT=8080
for i in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 \
21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40; do
curl -s -o /dev/null "http://localhost:$PORT/api/health" && break
sleep 0.5
done
open "http://localhost:$PORT"
exit 0
else
nohup "$PY" "$DIR/installer_gui.py" >/tmp/hms-installer.log 2>&1 &
exit 0
fi
'''
def build() -> None:
macos = APP / "Contents" / "MacOS"
macos.mkdir(parents=True, exist_ok=True)
(APP / "Contents" / "Info.plist").write_text(INFO_PLIST, "utf-8")
launcher = macos / "HMS-Launcher"
launcher.write_text(LAUNCHER, "utf-8")
launcher.chmod(0o755)
print(f"App erstellt: {APP}")
print("Doppelklick im Finder: 'HMS MediaEngine.app'")
if __name__ == "__main__":
build()