v1.7.11: fix definitivo BlackHole — ad-hoc codesign del bundle
Causa root: MusicTools.app ha il permesso TCC microfono, ma quando lancia ffmpeg come subprocess macOS tratta ffmpeg come binario non firmato distinto -> AVFoundation apre il device senza errore ma restituisce solo silenzio. Fix in build_macos.py: dopo PyInstaller + Info.plist, applico `codesign --force --deep --sign -` ad-hoc su tutto il bundle. La firma e' "free" (no Developer ID) ma rende l'app un singolo team coerente per TCC, quindi il permesso del main si propaga anche a ffmpeg/ffprobe/yt-dlp.
This commit is contained in:
1 parent
415175ec4d
commit
b74a0a53ec
2 files changed
+48
-1
No files matched your search
@@ -239,6 +239,7 @@ def run_pyinstaller():
|
||||
if app_path.exists():
|
||||
log(f"Build completata: {app_path}")
|
||||
patch_info_plist(app_path)
|
||||
adhoc_codesign(app_path)
|
||||
# Mostra dimensione
|
||||
size = sum(f.stat().st_size for f in app_path.rglob("*") if f.is_file())
|
||||
log(f"Dimensione: {size / 1024 / 1024:.0f} MB")
|
||||
@@ -292,6 +293,52 @@ def patch_info_plist(app_path):
|
||||
log("Info.plist aggiornato.")
|
||||
|
||||
|
||||
def adhoc_codesign(app_path):
|
||||
"""Ad-hoc codesign dell'intero bundle .app.
|
||||
|
||||
Senza una firma coerente, macOS tratta ffmpeg (subprocess bundled)
|
||||
come binario separato dal main MusicTools per TCC: ffmpeg apre il
|
||||
dispositivo audio senza errore ma riceve solo silenzio perche' il
|
||||
sistema non gli concede il permesso microfono ereditato.
|
||||
|
||||
`codesign --force --deep --sign -` applica una firma ad-hoc (gratis,
|
||||
senza Developer ID) a tutti i binari nested. Per macOS questo rende
|
||||
l'app un singolo "team" coerente, e il permesso TCC concesso al
|
||||
main si propaga anche a ffmpeg/ffprobe/yt-dlp.
|
||||
"""
|
||||
log("Ad-hoc codesign del bundle (per TCC microfono ereditato)...")
|
||||
try:
|
||||
# Rimuovi vecchie firme che potrebbero confondere codesign --deep
|
||||
subprocess.run(
|
||||
["xattr", "-cr", str(app_path)],
|
||||
capture_output=True,
|
||||
)
|
||||
subprocess.run(
|
||||
["codesign", "--remove-signature", "--deep", str(app_path)],
|
||||
capture_output=True,
|
||||
)
|
||||
result = subprocess.run(
|
||||
["codesign", "--force", "--deep", "--sign", "-",
|
||||
"--timestamp=none", str(app_path)],
|
||||
capture_output=True, text=True,
|
||||
)
|
||||
if result.returncode != 0:
|
||||
log(f"ATTENZIONE: codesign fallito: {result.stderr.strip()}")
|
||||
else:
|
||||
log("Codesign ad-hoc completato.")
|
||||
# Verifica
|
||||
verify = subprocess.run(
|
||||
["codesign", "--verify", "--deep", "--strict", str(app_path)],
|
||||
capture_output=True, text=True,
|
||||
)
|
||||
if verify.returncode == 0:
|
||||
log("Verifica firma OK.")
|
||||
else:
|
||||
log(f"NOTA: verifica firma con warning: {verify.stderr.strip()}")
|
||||
except FileNotFoundError:
|
||||
log("ATTENZIONE: 'codesign' non trovato nel PATH, skip ad-hoc signing")
|
||||
|
||||
|
||||
# =========================================================================
|
||||
# Main
|
||||
# =========================================================================
|
||||
|
||||
+1
-1
@@ -5,7 +5,7 @@ import os
|
||||
import sys
|
||||
from pathlib import Path
|
||||
|
||||
VERSION = "v1.7.10"
|
||||
VERSION = "v1.7.11"
|
||||
|
||||
|
||||
APP_NAME = "MusicTools"
|
||||
|
||||
Reference in new issue
Block a user