Quiero abrir una aplicación GUI (probablemente basada en Electrón) periódicamente en un Mac Book. El período se configurará (diario, por hora, etc.) dentro de la aplicación. ¿Cómo haría para lograr esto?
Quiero abrir una aplicación GUI (probablemente basada en Electrón) periódicamente en un Mac Book. El período se configurará (diario, por hora, etc.) dentro de la aplicación. ¿Cómo haría para lograr esto?
Hay muchos enfoques que puedes tomar.
Puede utilizar herramientas como launchd
de macOS o herramientas de terceros como Power Manager (que escribí, así que no dude en hacerme preguntas sobre su uso):
PowerManagerincluyeunatareaqueabarca
launchd
sobre cron
Probablemente desee evitar cron
porque no funciona en la sesión gráfica del usuario actual . cron
es bueno para las herramientas de línea de comandos y los scripts, pero es menos adecuado para las aplicaciones gráficas de Mac.
Una simple aplicación AppleScript combinada con un archivo abierto de evento de calendario como alarma puede ser suficiente. El siguiente fragmento de AppleScript abrirá una aplicación específica y la llevará al frente:
tell application "My Electron Application" to activate
Estas preguntas relacionadas entran en detalles:
Launchd
.plist Puede crear un archivo plist
que describa el trabajo a realizar por launchd
a intervalos que puede definir en el plist. Hay una terminología que es más fácil de aprender con solo leer otro archivo plist, como el que he escrito a continuación.
Una vez que hayas hecho eso, puedes mover el archivo plist a ~/Library/LaunchAgents
, que ejecutará el trabajo con tu nombre de usuario.
Finalmente, obtenga el daemon launchd
para load
su archivo de configuración, que iniciará el trabajo:
launchctl load chri.sk.launchd.plist
A partir de ese momento, el trabajo especificado en el archivo plist se llevará a cabo en los intervalos definidos, y continuará ejecutándose para siempre, o hasta que unload
it:
launchctl unload chri.sk.launchd.plist
Se iniciará automáticamente en cada reinicio del sistema, y se reiniciará si alguna vez se cancela.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>chri.sk.launchd</string>
<key>ProgramArguments</key>
<array>
<string>/usr/bin/open</string>
<string>-a</string>
<string>TextEdit</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>KeepAlive</key>
<true/>
<key>Nice</key>
<integer>1</integer>
<key>StartInterval</key>
<integer>60</integer>
<key>StandardErrorPath</key>
<string>/Users/CK/Documents/launchd.err.txt</string>
<key>StandardOutPath</key>
<string>/dev/null</string>
</dict>
</plist>
Esto abre TextEdit cada 60 segundos. Aquí es una guía bastante útil para definir intervalos.
Cualquier error se escribe en la ruta del archivo especificada por StandardErrorPath
.
Haz que el nombre del archivo y el valor label
sean iguales. La convención de nomenclatura de Apple recomienda usar un identificador de nombre de host inverso, pero en ausencia de un nombre de dominio que le pertenezca, simplemente podría usar algo como surname.firstname.jobtitle
.
La página de manual launchd.plist
define todas las claves de la lista de propiedades y explica qué hacen cada una. Vaya a Terminal y escriba man launchd.plist
.
property hour : 3600
property day : 86400
property RunEvery : day
property AppName : "An Application"
on run
idle
end run
on idle
tell application named AppName to activate
return RunEvery
end idle
on quit
continue quit
end quit
Si guarda este AppleScript como una aplicación permanecer abierto y luego lo ejecuta, permanecerá abierto y ejecutará los comandos idle
todos los días. Actualmente, para evitar que esta secuencia de comandos continúe, deberías terminarlo desde el Dock o Monitor de actividad .