#!/bin/bash # Installazione di Fiscoo sul Mac con un solo comando (dalla pagina https://fiscoo.us/it/scarica/; # la versione inglese è in /installa/en/mac.sh): # # curl -fsSL https://fiscoo.us/installa/mac.sh | bash -s CODICE-DELLO-STUDIO # # Cosa fa, in ordine: # 1. controlla macOS (12 o successivo) e sceglie la versione giusta: chip Apple o Intel; # 2. chiede al sito di Fiscoo il link di download con il codice personale dello studio; # 3. scarica Fiscoo, ne controlla l'impronta SHA-256 (se non coincide si ferma e non installa nulla); # 4. lo copia in Applicazioni (al posto di una versione precedente: i dati dello studio non si toccano) e lo apre. # Non chiede password, non usa sudo, non cambia impostazioni del Mac. Scaricato così, Fiscoo si apre senza il passaggio # «Apri comunque» di Impostazioni di Sistema. set -euo pipefail # FISCOO_SITO serve solo alle prove in locale. SITO="${FISCOO_SITO:-https://fiscoo.us}" CODICE="${1:-${FISCOO_CODICE:-}}" grassetto=$'\033[1m'; rosso=$'\033[31m'; verde=$'\033[32m'; normale=$'\033[0m' passo() { printf '%s→ %s%s\n' "$grassetto" "$1" "$normale"; } errore() { printf '\n%sNon è stato possibile installare Fiscoo:%s %s\n' "$rosso" "$normale" "$1" >&2; printf 'Se il problema resta, scrivici e ti aiutiamo.\n' >&2; exit 1; } printf '\n%sInstallazione di Fiscoo%s\n\n' "$grassetto" "$normale" [ "$(uname -s)" = "Darwin" ] || errore "questo comando è per Mac. Per Windows usa il comando della pagina Scarica." maggiore="$(sw_vers -productVersion | cut -d. -f1)" [ "$maggiore" -ge 12 ] 2>/dev/null || errore "serve macOS 12 Monterey o successivo (questo Mac ha $(sw_vers -productVersion))." [ -n "$CODICE" ] || errore "manca il codice personale. Copia di nuovo il comando dalla pagina Scarica: il codice è già dentro." # Chip Apple anche se il Terminale gira con Rosetta. if [ "$(sysctl -n hw.optional.arm64 2>/dev/null || echo 0)" = "1" ]; then file="mac-arm64"; tipo="chip Apple"; else file="mac-x64"; tipo="processore Intel"; fi passo "Mac con $tipo, macOS $(sw_vers -productVersion)" # Dati della risposta letti con JavaScript di sistema (osascript), senza installare nulla. leggi() { RISPOSTA="$1" osascript -l JavaScript -e "ObjC.import('stdlib'); const r = JSON.parse(\$.getenv('RISPOSTA')); r['$2'] === undefined ? '' : String(r['$2'])"; } passo "Controllo il codice" corpo="$(printf '{"codice":"%s","file":"%s"}' "$(printf '%s' "$CODICE" | tr -cd 'A-Za-z0-9 -')" "$file")" risposta="$(curl --proto '=https' --tlsv1.2 -sS -X POST -H 'content-type: application/json' --data "$corpo" "$SITO/api/scarica?lingua=it")" || errore "il sito di Fiscoo non risponde: controlla la connessione a internet." messaggio="$(leggi "$risposta" errore 2>/dev/null || true)" [ -z "$messaggio" ] || errore "$messaggio" link="$(leggi "$risposta" url 2>/dev/null)" || errore "risposta del sito non valida." impronta="$(leggi "$risposta" sha256)" nome="$(leggi "$risposta" file)" [ -n "$link" ] && [ ${#impronta} -eq 64 ] || errore "risposta del sito non valida." lavoro="$(mktemp -d -t fiscoo)" volume="$lavoro/volume" pulisci() { hdiutil detach "$volume" -quiet >/dev/null 2>&1 || true; rm -rf "$lavoro"; } trap pulisci EXIT passo "Scarico $nome" curl --proto '=https' --tlsv1.2 -fL --progress-bar -o "$lavoro/fiscoo.dmg" "$SITO$link" || errore "download interrotto: riprova (il codice resta valido)." passo "Controllo l'impronta del file" [ "$(shasum -a 256 "$lavoro/fiscoo.dmg" | cut -d' ' -f1)" = "$impronta" ] || errore "il file scaricato non è quello pubblicato da Fiscoo (impronta diversa). Non ho installato nulla." passo "Installo Fiscoo" mkdir -p "$volume" hdiutil attach "$lavoro/fiscoo.dmg" -nobrowse -readonly -noautoopen -mountpoint "$volume" -quiet || errore "il file scaricato non si apre." [ -d "$volume/Fiscoo.app" ] || errore "nel file scaricato manca Fiscoo." # Fiscoo aperto: lo si chiude prima di sostituirlo (chiudendo, l'app ferma da sola il suo database). if pgrep -f '/Fiscoo.app/Contents/MacOS/Fiscoo' >/dev/null; then osascript -e 'tell application "Fiscoo" to quit' >/dev/null 2>&1 || true for _ in $(seq 1 30); do pgrep -f '/Fiscoo.app/Contents/MacOS/Fiscoo' >/dev/null || break; sleep 1; done pgrep -f '/Fiscoo.app/Contents/MacOS/Fiscoo' >/dev/null && errore "Fiscoo è ancora aperto: chiudilo e lancia di nuovo il comando." fi if [ -w /Applications ]; then destinazione="/Applications"; else destinazione="$HOME/Applications"; mkdir -p "$destinazione"; fi rm -rf "$destinazione/Fiscoo.app" ditto "$volume/Fiscoo.app" "$destinazione/Fiscoo.app" || errore "non riesco a copiare Fiscoo in $destinazione." xattr -dr com.apple.quarantine "$destinazione/Fiscoo.app" 2>/dev/null || true passo "Apro Fiscoo" open "$destinazione/Fiscoo.app" printf '\n%s✓ Fiscoo è installato in %s.%s La prossima volta aprilo da Applicazioni o dal Launchpad.\n' "$verde" "$destinazione" "$normale" printf 'Puoi chiudere questa finestra del Terminale.\n\n'