Come posso fare in modo che l'icona del dock non si riavvii dopo l'avvio dello script del wrapper dell'app?
Domanda
Quindi di recente ho creato un wrapper .app
per uno script zsh, ma quando lo eseguo, l'icona dell'app continua a saltellare nel Dock.
L'app è sostanzialmente:
% 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
%
Puoi anche prenderlo da github .
Esiste un modo per ottenere l'icona dell'app per smettere di saltare e agire come un'app normale, e semplicemente sedermi lì con un triangolo accanto?
Soluzione
L'icona di un'applicazione rimbalzerà nel Dock di OS X finché l'app non entrerà nel suo ciclo di eventi principale e inizierà a rispondere all'input dell'utente. Poiché il tuo script probabilmente non esegue un ciclo di eventi Carbon o Cocoa (vedi rispettivamente la documentazione per Carbon Event Manager e NSApplication), il Dock è in attesa continua, in attesa di una normale applicazione GUI in primo piano.
Uno strumento per il wrapping degli script con cui ho avuto successo è Platypus . Può eseguire il proprio ciclo di eventi durante l'esecuzione dello script e fare una serie di altre cose utili.
Altri suggerimenti
Desideri DropScript . Il dock non funziona con script di shell del genere, si aspetta qualcosa di più completo.
Penso che se aggiungi LSUIElement al tuo file Info.plist, dovrebbe funzionare.