Как заставить значок закрепления перестать подпрыгивать после запуска сценария оболочки приложения?
Вопрос
Итак, я недавно сделал оболочку .app
для сценария zsh, но когда я его запускаю, значок приложения постоянно отображается в Dock.
Приложение в основном:
% 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
%
Вы также можете загрузить его из github . р>
Можно ли как-нибудь заставить значок приложения перестать работать, вести себя как обычное приложение и просто сидеть там? с треугольником рядом с ним?
Решение
Значок приложения будет отображаться в Dock OS X, пока приложение не войдет в свой основной цикл событий и не начнет реагировать на ввод пользователя. Поскольку ваш сценарий, вероятно, не запускает цикл событий Carbon или Cocoa (см. Документацию для Carbon Event Manager и NSApplication соответственно), Dock непрерывно ожидает, ожидая появления обычного приложения GUI переднего плана.
Инструмент для работы со сценариями, с которым я успешно работал - Platypus . Он может запускать свой собственный цикл событий во время выполнения вашего скрипта и делать ряд других удобных вещей.
Другие советы
Вам нужен DropScript . Док не работает с такими сценариями оболочки, он ожидает чего-то более полноценного.
Я думаю, что если вы добавите LSUIElement в файл Info.plist, он должен работать.