¿Cómo hago para que el ícono del dock deje de rebotar después de que comience mi script de envoltura de aplicaciones?
Pregunta
Así que recientemente hice un contenedor .app
para un script zsh, pero cuando lo ejecuto, el ícono de la aplicación sigue saltando en el Dock.
La aplicación es básicamente:
% find Example.app -type f
Example.app/Contents/Info.plist
Example.app/Contents/MacOS/wrapper.sh
% cat Example.app/Contents/Info.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<!-- tell OSX what the name of the executable is -->
<key>CFBundleExecutable</key>
<string>wrapper.sh</string>
</dict>
</plist>
% cat Example.app/Contents/MacOS/wrapper.sh
#!/usr/bin/env zsh
# not my real script, but something else that hangs for a while
sleep 10
%
También puede tomarlo de github .
¿Hay alguna forma en que pueda hacer que el ícono de la aplicación deje de saltar y actúe como una aplicación normal, y simplemente sentarme allí? con un triángulo al lado?
Solución
El ícono de una aplicación rebotará en el Dock de OS X hasta que la aplicación ingrese a su bucle principal de eventos y comience a responder a las entradas del usuario. Como su script probablemente no ejecuta un bucle de eventos de Carbon o Cocoa (consulte la documentación de Carbon Event Manager y NSApplication, respectivamente), el Dock está esperando continuamente, esperando que surja una aplicación GUI en primer plano.
Una herramienta de ajuste de script con la que he tenido éxito es Platypus . Puede ejecutar su propio bucle de eventos mientras ejecuta su secuencia de comandos, y hacer una serie de otras cosas convenientes.
Otros consejos
Desea DropScript . El dock no funciona con scripts de shell como ese, espera algo un poco más completo.
Creo que si agrega LSUIElement a su archivo Info.plist, debería funcionar.