Como faço para fazer o ícone do dock parar de saltar após o início do script de wrapper de aplicativos?
Pergunta
Então eu fiz recentemente um .app
Wrapper para um script ZSH, mas quando eu o executo, o ícone para o aplicativo continua pulando na doca.
O aplicativo é basicamente:
% 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
%
Você também pode Pegue -o do Github.
Existe alguma maneira de conseguir que o ícone do aplicativo pare de pular e agir como um aplicativo normal e apenas ficar sentado com um triângulo ao lado dele?
Solução
O ícone de um aplicativo saltará no Dock OS X até que o aplicativo entre seu loop de evento principal e comece a responder à entrada do usuário. Como seu script provavelmente não executa um loop de eventos de carbono ou cacau (consulte a documentação para o Gerenciador de Eventos de Carbono e a NSApplication, respectivamente), o dock está esperando continuamente, esperando que um aplicativo de GUI de primeiro plano regular surja.
Uma ferramenta de embrulho de script com que tive sucesso é Platypus. Ele pode executar seu próprio loop de eventos ao executar seu script e fazer várias outras coisas convenientes.
Outras dicas
Você quer Dropscript. A doca não funciona com scripts de shell como esse, espera algo um pouco mais completo.
Eu acho que se você adicionar lsuielement ao seu arquivo info.plist, ele deve funcionar.