import Cocoa import FlutterMacOS @main class AppDelegate: FlutterAppDelegate { override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { return true } // Esta app se relanza siempre por script (redirect al updater y viceversa), // nunca tiene sentido "resumir" la ventana de una sesión anterior. Con esto // en `true`, macOS intenta restaurar el estado de ventana guardado al // arrancar y, si falla la restauración (visto en el log del sistema: // "Unable to find className=(null)"), aplica una heurística que termina // interfiriendo con la ventana recién creada antes de que Flutter pinte el // primer frame — pantalla negra permanente sin ningún error de Dart. override func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool { return false } // Cuando esta app la lanza soma_pro_updater (vía `open --args`) en vez de // Finder/el usuario directamente, la ventana puede quedar creada pero sin // volverse la app activa/en primer plano — macOS pausa el render de // ventanas no activas para ahorrar batería, y como esta pantalla no tiene // animación propia que fuerce un repaint, queda negra para siempre. Forzar // la activación acá evita depender de que el proceso que nos lanzó haya // completado bien el traspaso de foco. override func applicationDidFinishLaunching(_ notification: Notification) { super.applicationDidFinishLaunching(notification) NSApp.activate(ignoringOtherApps: true) } }