diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 4a79248..0c3116b 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -33,17 +33,38 @@ jobs: - name: Build app run: python build_macos.py - - name: Package .app -> zip + - name: Create DMG run: | - cd dist - ditto -c -k --sequesterRsrc --keepParent MusicTools.app ../MusicTools-macOS.zip - ls -lh ../MusicTools-macOS.zip + STAGING="dmg_staging" + rm -rf "$STAGING" + mkdir -p "$STAGING" + cp -R dist/MusicTools.app "$STAGING/" + cp "assets/Fix Gatekeeper.command" "$STAGING/" + chmod +x "$STAGING/Fix Gatekeeper.command" + ln -s /Applications "$STAGING/Applications" + cat > "$STAGING/LEGGIMI.txt" <<'EOF' + INSTALLAZIONE MusicTools + ======================== + + 1) Trascina MusicTools.app sulla cartella "Applicazioni" + (l'alias e' qui dentro nel DMG) + + 2) Doppio click su "Fix Gatekeeper.command" + Rimuove la quarantena macOS Gatekeeper (una sola volta). + + 3) Apri MusicTools dalle Applicazioni e attiva con email + chiave. + + Problemi? scrivici a info@djluza.com + EOF + hdiutil create -volname "MusicTools" -srcfolder "$STAGING" \ + -ov -format UDZO MusicTools-macOS.dmg + ls -lh MusicTools-macOS.dmg - name: Upload artifact uses: actions/upload-artifact@v4 with: name: MusicTools-macOS - path: MusicTools-macOS.zip + path: MusicTools-macOS.dmg retention-days: 14 # ========================================================= @@ -107,5 +128,5 @@ jobs: generate_release_notes: true fail_on_unmatched_files: true files: | - artifacts/macos/MusicTools-macOS.zip + artifacts/macos/MusicTools-macOS.dmg artifacts/windows/MusicTools-Windows.zip diff --git a/assets/Fix Gatekeeper.command b/assets/Fix Gatekeeper.command new file mode 100755 index 0000000..9761a98 --- /dev/null +++ b/assets/Fix Gatekeeper.command @@ -0,0 +1,27 @@ +#!/bin/bash +# Rimuove la quarantena Gatekeeper da MusicTools.app +# Doppio click in macOS apre Terminal ed esegue questo script. + +set -e + +APP_NAME="MusicTools.app" + +# Cerca l'app in /Applications, poi nella stessa cartella del DMG montato. +if [ -d "/Applications/${APP_NAME}" ]; then + APP="/Applications/${APP_NAME}" +elif [ -d "$(dirname "$0")/${APP_NAME}" ]; then + APP="$(dirname "$0")/${APP_NAME}" +else + osascript -e "display alert \"${APP_NAME} non trovata\" message \"Trascina MusicTools.app nella cartella Applicazioni prima di eseguire questo script.\" as critical" + exit 1 +fi + +echo "Rimuovo la quarantena da: ${APP}" +xattr -dr com.apple.quarantine "${APP}" 2>/dev/null || true + +# Notifica visuale +osascript -e "display notification \"MusicTools puo' essere aperta normalmente con doppio click.\" with title \"Fix completato\"" + +echo "" +echo "Fatto. Ora puoi aprire MusicTools normalmente con doppio click." +echo "Puoi chiudere questa finestra." diff --git a/core/config.py b/core/config.py index 5eb7dbc..53e10cf 100644 --- a/core/config.py +++ b/core/config.py @@ -5,7 +5,7 @@ import os import sys from pathlib import Path -VERSION = "v1.7.3" +VERSION = "v1.7.4" APP_NAME = "MusicTools" diff --git a/landing/download.html b/landing/download.html index 03b330d..c828c38 100644 --- a/landing/download.html +++ b/landing/download.html @@ -175,10 +175,10 @@

Installazione macOS

    -
  1. Apri il file .zip scaricato — viene estratto in MusicTools.app
  2. -
  3. Trascina MusicTools.app nella cartella Applicazioni
  4. -
  5. Vai in Applicazioni, tasto destro su MusicTools → Apri → Apri (solo la prima volta, e' la procedura standard per app non firmate)
  6. -
  7. Inserisci email e chiave per attivare
  8. +
  9. Apri il file .dmg scaricato — si monta come volume "MusicTools"
  10. +
  11. Trascina MusicTools.app sull'alias Applicazioni dentro il DMG
  12. +
  13. Doppio click su Fix Gatekeeper.command (dentro il DMG): autorizza l'app in 1 click. Si chiude da sola appena finito.
  14. +
  15. Apri MusicTools dalle Applicazioni, inserisci email e chiave per attivare
diff --git a/server/src/updates.js b/server/src/updates.js index 8d2802a..25bb3af 100644 --- a/server/src/updates.js +++ b/server/src/updates.js @@ -89,7 +89,13 @@ export async function download(req, res) { } const name = path.basename(abs); - res.setHeader("Content-Type", "application/zip"); + const ext = path.extname(name).toLowerCase(); + const contentType = ext === ".dmg" + ? "application/x-apple-diskimage" + : ext === ".exe" + ? "application/vnd.microsoft.portable-executable" + : "application/zip"; + res.setHeader("Content-Type", contentType); res.setHeader("Content-Disposition", `attachment; filename="${name}"`); fs.createReadStream(abs).pipe(res); }