build_app.sh grave le chemin du dossier courant dans le binaire de /Applications/Zonza.app. Lancer install.sh depuis une COPIE detournait donc l'application en service vers cette copie, changeait son cdhash, et REVOQUAIT silencieusement les autorisations macOS deja accordees. Constate le 2026-08-23 en testant le script depuis un clone temporaire : rattrape de justesse, avant que build_app.sh ne s'execute. Le script compare desormais la cible gravee a son propre dossier, refuse de reconstruire s'ils different, et explique pourquoi. ZONZA_REMPLACER=1 pour passer outre volontairement. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
102 lines
3.5 KiB
Bash
Executable File
102 lines
3.5 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
#
|
|
# Installe Zonza sur macOS (et Linux, pour la partie portable).
|
|
#
|
|
# ./install.sh
|
|
#
|
|
# Cree l'environnement, installe UNIQUEMENT ce qui sert a cette machine (les
|
|
# marqueurs de requirements.txt s'en chargent), construit l'app macOS, puis lance
|
|
# le diagnostic. Il ne masque aucune erreur : si une etape echoue, il s'arrete.
|
|
|
|
set -euo pipefail
|
|
cd "$(dirname "$0")"
|
|
|
|
MINIMUM="3.11"
|
|
PY="${PYTHON:-python3}"
|
|
|
|
echo "→ Verification de Python…"
|
|
command -v "$PY" >/dev/null || { echo "✗ '$PY' introuvable. Installe Python $MINIMUM ou plus, ou renseigne PYTHON=/chemin/vers/python3." >&2; exit 1; }
|
|
"$PY" - <<PYCODE || { echo "✗ Python $MINIMUM minimum requis." >&2; exit 1; }
|
|
import sys
|
|
raise SystemExit(0 if sys.version_info >= tuple(int(n) for n in "$MINIMUM".split(".")) else 1)
|
|
PYCODE
|
|
echo " $("$PY" --version)"
|
|
|
|
if [[ ! -d .venv ]]; then
|
|
echo "→ Creation de l'environnement…"
|
|
"$PY" -m venv .venv
|
|
else
|
|
echo "→ Environnement deja present, on le reutilise."
|
|
fi
|
|
|
|
echo "→ Installation des dependances de CETTE machine…"
|
|
.venv/bin/python -m pip install --quiet --upgrade pip
|
|
.venv/bin/python -m pip install --quiet -r requirements.txt
|
|
echo " $(.venv/bin/python -m pip list 2>/dev/null | wc -l | tr -d ' ') paquets installes"
|
|
|
|
if [[ "$(uname)" == "Darwin" ]]; then
|
|
# Garde-fou : build_app.sh grave le chemin de CE dossier dans le binaire de
|
|
# /Applications/Zonza.app. Si une Zonza y est deja installee depuis un AUTRE
|
|
# dossier, reconstruire la detournerait vers ici — et changerait son cdhash,
|
|
# ce qui REVOQUE silencieusement les autorisations macOS deja accordees.
|
|
# Faute de ce garde-fou, un simple essai depuis une copie casse l'installation
|
|
# en service (arrive le 2026-08-23, rattrape de justesse).
|
|
CIBLE_ACTUELLE=""
|
|
if [[ -x /Applications/Zonza.app/Contents/MacOS/zonza ]]; then
|
|
CIBLE_ACTUELLE="$(strings /Applications/Zonza.app/Contents/MacOS/zonza 2>/dev/null | grep -m1 -E '/app\.py$' || true)"
|
|
fi
|
|
ICI="$(pwd)/app.py"
|
|
|
|
if [[ -n "$CIBLE_ACTUELLE" && "$CIBLE_ACTUELLE" != "$ICI" ]]; then
|
|
echo
|
|
echo "⚠ Une Zonza est deja installee, et elle pointe ailleurs :"
|
|
echo " installee ici : $CIBLE_ACTUELLE"
|
|
echo " ce dossier : $ICI"
|
|
echo
|
|
echo " Reconstruire la detournerait vers ce dossier et REVOQUERAIT ses"
|
|
echo " autorisations macOS (Accessibilite, Surveillance de l'entree)."
|
|
echo " L'application n'est donc PAS reconstruite."
|
|
echo
|
|
echo " Si c'est bien ce que tu veux, lance : ZONZA_REMPLACER=1 ./install.sh"
|
|
if [[ "${ZONZA_REMPLACER:-}" != "1" ]]; then
|
|
CONSTRUIRE=0
|
|
else
|
|
echo " ZONZA_REMPLACER=1 : reconstruction demandee explicitement."
|
|
CONSTRUIRE=1
|
|
fi
|
|
else
|
|
CONSTRUIRE=1
|
|
fi
|
|
|
|
if [[ "$CONSTRUIRE" == "1" ]]; then
|
|
echo "→ Construction de Zonza.app…"
|
|
./build_app.sh
|
|
fi
|
|
fi
|
|
|
|
echo "→ Diagnostic…"
|
|
.venv/bin/python app.py --diagnostic || {
|
|
echo
|
|
echo "✗ Le diagnostic signale un probleme. Rien n'est casse : lis les lignes"
|
|
echo " ci-dessus, elles disent laquelle des epreuves a echoue." >&2
|
|
exit 1
|
|
}
|
|
|
|
cat <<'FIN'
|
|
|
|
✓ Installe.
|
|
|
|
Il reste UNE chose que seul toi peux faire, et sans elle le raccourci ne
|
|
fonctionnera pas : accorder les autorisations macOS.
|
|
|
|
Reglages systeme > Confidentialite et securite
|
|
• Accessibilite → ajoute /Applications/Zonza.app, puis active
|
|
• Surveillance de l'entree → la meme chose
|
|
|
|
Puis quitte Zonza par son icone 🎙️ et relance-la : l'autorisation n'est lue
|
|
qu'au demarrage.
|
|
|
|
Usage : Cmd+Ctrl+D pour demarrer et arreter la dictee.
|
|
Journal : ~/Library/Logs/Zonza.log
|
|
FIN
|