build: LehrerApp.McpBridge ins macOS-App-Bundle aufnehmen

build-macos-app.sh publiziert und platziert jetzt zusätzlich zur
Hauptapp die MCP-Bridge-Binary (Contents/MacOS/LehrerApp.McpBridge),
inklusive Universal-Binary-Handling und eigenständiger Ad-hoc-Signierung
vor dem Bundle-weiten codesign --deep-Schritt. Publish/Lipo/Kopier-Logik
dafür in eine wiederverwendbare place_binary()-Funktion extrahiert.

Nur auf Bash-Syntax geprüft (kein macOS in dieser Session verfügbar) -
noch nicht auf echtem macOS gebaut/verifiziert, siehe TODO.md 4.5.27.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
2026-09-11 20:23:45 +02:00
co-authored by Claude Sonnet 5
parent 9567d8d616
commit 0c60a54c4d
2 changed files with 92 additions and 29 deletions
+21
View File
@@ -2536,6 +2536,27 @@ folgenden Punkte gehören direkt in `LehrerApp.Desktop`:
einer rohen GUID enthält, und dass eine unveränderte Gruppenmitgliedschaft keine erneute
Nachfrage auslöst.
- [x] **4.5.27** `build-macos-app.sh` um die Bridge-Binary erweitert (2026-09-11, aus 4.5.25/4.5.26
zurückgestellt): `LehrerApp.McpBridge` wird jetzt als zweites Self-Contained-Publish pro
Architektur gebaut und als lose Executable neben die Hauptapp nach
`Contents/MacOS/LehrerApp.McpBridge` gelegt (nicht als `CFBundleExecutable` - sie wird nie
von Finder/launchd gestartet, sondern vom KI-Client direkt über ihren vollen Pfad als
Kindprozess). Die bisher einmalige Publish/Universal-Binary/Kopier-Logik ist in eine
`place_binary()`-Funktion extrahiert und wird für Hauptapp und Bridge gleichermaßen
aufgerufen. Bridge wird **zusätzlich einzeln** ad-hoc signiert (Schritt 6/7), bevor der
Bundle-weite `codesign --deep`-Schritt (7/7) läuft — sie liegt lose in `Contents/MacOS`
statt in einem eigenen `.framework`/`.bundle`, daher nicht verlassen auf das (in dem Fall
nicht sicher dokumentierte) Rekursionsverhalten von `--deep`.
- **Nicht gelöst, bewusst zurückgestellt:** Laufzeit-Duplikation (beide Publishes bringen
ihre eigene self-contained .NET-Runtime mit) — siehe Planungsdokument, spätere Optimierung
über einen framework-dependent Bridge-Build + angepasste `runtimeconfig.json`.
- **Nicht verifiziert:** Diese Session lief auf Windows, ohne Zugriff auf `sips`/`iconutil`/
`lipo`/`codesign` — das Skript wurde nur auf Bash-Syntax geprüft (`bash -n`), nicht auf
einem echten Mac gebaut/ausgeführt. Vor Verlass auf das erzeugte Bundle: auf macOS
`./build-macos-app.sh` laufen lassen und `open build/LehrerApp.app` sowie einen
MCP-Client, der auf `build/LehrerApp.app/Contents/MacOS/LehrerApp.McpBridge` zeigt, gegen
die laufende App testen.
**Wichtige Abweichung von der ursprünglichen Planung (5.2):** Vor der Umsetzung zeigte sich,
dass 5.2 wie ursprünglich beschrieben eine zweite, parallele Fehlzeiten-Erfassung neben dem
bereits bestehenden Anwesenheits-Tracking aus Kapitel 3 (`ParticipationEntry.Attendance`,