Tal vez pueda escribir un bucle que haga un seguimiento de si el script ha tenido éxito o no y lo sigue intentando hasta que lo haya hecho (o haya transcurrido una cantidad de tiempo límite). Si, de hecho, el problema es que los eventos del sistema no se han iniciado por completo, entonces el bucle podría pedir eventos del sistema si los eventos del sistema de la aplicación se están ejecutando. Aquí hay una función simple que podrías usar:
on appIsRunning(appName)
tell application "System Events" to (name of processes) contains appName
end appIsRunning
Para asegurarse de que se haya iniciado completamente, puede implementar su retraso después del ciclo.
Así es como se vería la función de bucle:
on startApp(appName)
set IsRunning to false
set tries to 20
repeat until (IsRunning is true or tries is 0)
set IsRunning to appIsRunning(appName)
set tries to (tries - 1)
delay 0.1
end repeat
end startApp
O, quizás tenga otra forma de determinar la ejecución exitosa del script ... ¿hay algún estado que pueda verificar para determinar el éxito? Si es así, podría realizar un bucle hasta que se cumpla esa condición en lugar de saber si los eventos del sistema se han iniciado.
Otra cosa es que no sé si los eventos del sistema tienen que "registrarse" con applecript antes de que se active un applecript para que funcione. Si lo hace, entonces puedes intentar esto: puedes crear un script de ayuda separado que inicie los eventos del sistema y luego ejecute tu script de esta manera:
startApp("System Events")
set myApp to "/Users/whatever/myScriptAsApp.app"
do shell script "open " & quoted form of POSIX path of myApp & " 2>&1 &"
Déjame saber cómo va. Con frecuencia tengo el mismo problema que tú con un par de mis scripts. Simplemente no he probado esto todavía.
buena suerte,
Rob