Helfer nach dem Umzug: die App repariert ihre Anmeldung selbst

macOS bindet einen privilegierten Dienst beim Anmelden an das Programm, das
ihn angemeldet hat. Zieht das Programm um — aus „Downloads" nach „Programme",
oder vom Bauverzeichnis in ein installiertes Bundle —, ist das ein anderes
Bundle. Der alte Dienst läuft weiter und redet nicht mit dem neuen Programm.

Von außen ist das die verwirrendste Kombination, die es gibt: der Zustand
meldet „eingerichtet", und trotzdem kommt bei jedem Zugriff „Kommunikation
mit der Hilfs-App nicht möglich". Ohne Reparatur bleibt nur, den Helfer von
Hand zu entfernen und neu einzurichten — und darauf muss man erst kommen.

Scheitert die Verbindung, während der Zustand „eingerichtet" meldet, meldet
die App den Dienst jetzt einmal ab und wieder an. Einmal je Programmlauf:
öfter wäre eine Schleife. Danach steht er auf „wartet auf Freigabe" — das
Verschieben eines Programms mit Root-Dienst darf niemand still hinnehmen,
auch diese App nicht.

Dazu ein Fehler im DMG-Bau, der beim Nachbauen auffiel: war ein gleichnamiges
Volume noch eingehängt, hängte macOS das neue als „Onyx 1" ein, während das
AppleScript weiter „Onyx" einrichtete. Das Abbild kam ohne Fenstergestaltung
heraus, ohne dass irgendetwas fehlschlug. Jetzt wird vorher abgehängt und der
Einhängepunkt aus der Ausgabe gelesen statt geraten.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Scarriffle
2026-08-14 13:08:45 +02:00
parent 928ee90b5e
commit 102c870835
2 changed files with 49 additions and 4 deletions

View File

@@ -33,15 +33,26 @@ make_pretty_dmg() {
hdiutil create -volname "$volname" -srcfolder "$stage" -size 100m \
-fs HFS+ -format UDRW -ov "$temp" >/dev/null
local mount="/Volumes/$volname"
hdiutil attach "$temp" -nobrowse -quiet
# Ohne kurze Pause findet das nächste Skript das Volume noch nicht.
# Ein gleichnamiges Volume vorher abhängen. Sonst hängt macOS das neue als
# „Onyx 1" ein, das AppleScript richtet weiter „Onyx" ein — und das fertige
# Abbild sieht aus wie vorher, ohne dass irgendetwas fehlschlägt.
while [ -d "/Volumes/$volname" ]; do
hdiutil detach "/Volumes/$volname" -force -quiet || break
sleep 1
done
# Den tatsächlichen Einhängepunkt aus der Ausgabe lesen statt ihn zu raten.
local mount
mount=$(hdiutil attach "$temp" -nobrowse -noverify \
| grep -o '/Volumes/.*' | tail -1)
[ -n "$mount" ] || { echo " (Abbild ließ sich nicht einhängen)"; return 1; }
local disk; disk="$(basename "$mount")"
sleep 2
echo "→ Fenster einrichten"
osascript <<APPLESCRIPT >/dev/null || echo " (Finder nicht erreichbar — das Fenster bleibt schlicht)"
tell application "Finder"
tell disk "$volname"
tell disk "$disk"
open
set current view of container window to icon view
set toolbar visible of container window to false