Files
ai-control/deploy-macos.sh
marcusH e15e128fd3 deploy-macos.sh installiert nach ~/Applications
Bisher hat das Skript nur das Dev-Bundle aus Launch Services ausgetragen und
den DMG-Pfad ausgegeben; installiert wurde von Hand. Linux und Windows
installieren in ihren Deploy-Skripten, macOS war der Ausreisser.

Jetzt: alte Kopie austragen und loeschen (ditto merget sonst in ein
bestehendes Bundle hinein), neues Bundle per ditto nach ~/Applications,
lsregister -f. Guards vorweg gegen fehlendes Bundle und laufende Instanz --
eine laufende App haelt Dateien offen und ergaebe ein halb ueberschriebenes
Bundle.
2026-07-20 22:08:35 +02:00

45 lines
1.7 KiB
Bash
Executable File

#!/usr/bin/env bash
# macOS-Deploy nach build.sh: das frisch gebaute Bundle nach ~/Applications
# installieren. Das Dev-Bundle wandert danach aus Launch Services heraus in ein
# .noindex-Verzeichnis — Spotlight indiziert .noindex nicht, damit erscheint im
# Starter/Spotlight nur die installierte Kopie.
set -euo pipefail
DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
BUNDLE="$DIR/src-tauri/target/release/bundle/macos"
NOINDEX="$DIR/src-tauri/target/release/bundle/macos.noindex"
TARGET="$HOME/Applications"
LSREGISTER=/System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister
if [[ ! -d "$BUNDLE/ai-control.app" ]]; then
echo "kein frisches Bundle unter $BUNDLE — erst ./build.sh laufen lassen" >&2
exit 1
fi
# Eine laufende Instanz hält Dateien im Bundle offen; das Ersetzen ergäbe eine
# halb überschriebene App.
if pgrep -qx ai-control; then
echo "ai-control läuft — erst beenden, dann erneut deployen" >&2
exit 1
fi
# Installieren: alte Kopie ganz weg (ditto führt sonst Reste alter Builds
# fort), dann das neue Bundle hin und in Launch Services eintragen.
mkdir -p "$TARGET"
"$LSREGISTER" -u "$TARGET/ai-control.app" || true
rm -rf "$TARGET/ai-control.app"
ditto "$BUNDLE/ai-control.app" "$TARGET/ai-control.app"
"$LSREGISTER" -f "$TARGET/ai-control.app"
# lsregister -u meldet -10814, wenn das Bundle nicht registriert ist —
# erwartetes Ergebnis, kein Fehler.
"$LSREGISTER" -u "$BUNDLE/ai-control.app" || true
rm -rf "$NOINDEX/ai-control.app"
mkdir -p "$NOINDEX"
mv "$BUNDLE/ai-control.app" "$NOINDEX/"
"$LSREGISTER" -u "$NOINDEX/ai-control.app" || true
echo "installiert: $TARGET/ai-control.app"
echo "DMG: $(ls "$DIR"/src-tauri/target/release/bundle/dmg/*.dmg)"