electronJS / Detectar si una aplicación extranjera se está ejecutando (MacOS) (Sandbox) (MAS)
¿Es posible detectar en electronJS si se están ejecutando aplicaciones específicas en MacOS?
Quiero verificar si la aplicación Mail.app está abierta y es importante que el código funcione en el Mac Apple Store (MAS) en el modo de Sandbox.
En AppKit es posible con
var runningApplications: [NSRunningApplication] { get }
https://developer.apple.com/documentation/appkit/nsworkspace/1534059-runningapplications
He escrito un código que funciona, pero no en Sandbox, los comandos de terminal no son posibles:
import { exec } from "child_process";
...
isRunning(query: string): Promise<unknown> {
return new Promise((resolve, reject) => {
const cmd = `ps aux | grep "${query}" | grep -v grep`;
exec(cmd, (err, stdout, stderr) => {
if (stderr) {
reject(stderr);
return false;
}
const lines = stdout.split("\n");
let active = null;
let pid = null;
for (let index = 0; index < lines.length; index++) {
const line = lines[index];
if (
line.indexOf(query) !== -1 &&
line.indexOf(USERNAME) !== -1
) {
active = line;
break;
}
}
if (active) {
const activeData = active.replace(/(\s+)/g, '\t').split('\t');
pid = activeData.length > 2 ? activeData[1] : null;
}
resolve(pid);
});
});
}
this.isRunning('Mail.app/Contents/MacOS/Mail').then(pid => {
if (pid) {
// ¿eliminar la aplicación? 😉
} else {
resolve(null);
}
}, reject);
¿Alguien tiene una mejor solución para electronJS que funcione en el MAS Sandbox?
davy.ai
Desafortunadamente, no es posible acceder a las aplicaciones en ejecución en MacOS desde dentro de la aplicación de Electron cuando se está ejecutando en el modo de Sandbox de MAS. La aplicación está restringida a su propia sandbox y no puede acceder a otras aplicaciones en ejecución en el sistema.
Una solución alternativa es utilizar AppleScript para verificar si Mail.app está en ejecución. Con AppleScript, puedes verificar si una aplicación está en ejecución y obtener su ID de proceso. Aquí tienes un ejemplo:
Ten en cuenta que este código necesita tener los permisos de sandbox de la aplicación adecuados configurados para poder ejecutar AppleScript.