Cualquier momento una aplicación que hace algo así como una ejecución de un bucle ajustado o realizar un script de shell que no vuelve, la interfaz de usuario se bloquea debido a que la aplicación no está permitiendo que el sistema tenga tiempo de procesar los eventos. En este caso un NSTask puede ser utilizado, ya que se ejecuta en segundo plano, y la aplicación solo se usa para iniciar y parar.
El siguiente debe ser guardado como una estancia-abrir la aplicación de la secuencia de comandos de shell se inicia y termina con la aplicación:
use AppleScript version "2.4" -- Yosemite (10.10) or later
use framework "Foundation"
use scripting additions
property task : missing value -- keep track of the NSTask
on run -- example
tell current application's NSTask's alloc()'s init()
set my task to it
its setLaunchPath:"/bin/sh"
its setArguments:{"-c", "/usr/bin/caffeinate -di"}
tell it to |launch|()
end tell
end run
on quit
if task's isRunning then tell task to terminate()
continue quit
end quit