2009-06-17 17 views
3

J'ai donc récemment créé un wrapper .app pour un script zsh, mais lorsque je l'exécute, l'icône de l'application continue de sauter dans le Dock.Comment faire pour que l'icône du quai cesse de rebondir après le démarrage de mon script d'encapsuleur?

L'application est essentiellement:

% 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 
% 

Vous pouvez également grab it from github.

Y a-t-il un moyen pour que l'icône de l'application arrête de sauter, et agisse comme une application normale, et reste-t-elle assise là avec un triangle à côté de ?

Répondre

6

L'icône d'une application va rebondir dans le Dock OS X jusqu'à ce que l'application entre dans sa boucle d'événements principale et commence à répondre à l'entrée de l'utilisateur. Comme votre script n'exécute probablement pas de boucle d'événement Carbon ou Cocoa (voir la documentation de Carbon Event Manager et de NSApplication, respectivement), le Dock attend continuellement, s'attendant à ce qu'une application GUI d'avant-plan régulière émerge.

Un outil d'encapsulation de script avec lequel j'ai eu du succès est Platypus. Il peut exécuter sa propre boucle d'événement lors de l'exécution de votre script, et faire un certain nombre d'autres choses pratiques.

+0

Merci d'avoir expliqué pourquoi! – rampion

2

Vous voulez DropScript. Le dock ne fonctionne pas avec des scripts shell comme ça, il s'attend à quelque chose d'un peu plus à part.

+0

Il semble que la dernière version (0.5) de DropScript soit un binaire PPC uniquement. Ne fonctionne pas sur les Mac Intel avec une version récente (> 10.5 je pense?) De OS X. – pendor

1

Je pense que si vous ajoutez LSUIElement à votre fichier Info.plist, cela devrait fonctionner.