2009-04-08 4 views
5

Я хотел бы запустить скрипт до запуска Firefox & после его выхода. В Ubuntu я делаю это, создавая новый ярлык, который сначала вызывает мою функцию, затем вызывает команду firefox, а затем вызывает мою последнюю функцию. Поскольку команда firefox блокируется, пока приложение не завершит работу, моя последняя функция вызывается сразу же после завершения процесса.Как сменить исполняемый файл в OS X Application Bundle

Однако в OS X я не могу сделать это так же хорошо, потому что в итоге у меня две значки на доке. Один для моего скрипта превратился в приложение & другое для приложения Firefox. Я бы предпочел просто иметь один значок док-станции &, чтобы не прерывать обновления Firefox.

Мое текущее решение - переименовать как MacOS/firefox {, - bin} в префикс «real-», а затем назвать мой сценарий оболочки «firefox-bin». Это работает, но я уверен, что следующий время светлячок пытается обновить себя я тост.

Я попытался изменить свойство «CFBundleExecutable» в файле Info.plist свертка, чтобы мой сценарий, но это не работает.

Может кто-нибудь предложить любого другие предложения?

+2

Я выяснил, как редактировать свойство CFBundleExecutable в файле Info.plist. Похоже, что OS X кэширует информацию о приложении в ~/Library/Caches/Firefox. Удалив эти кеши, я смог заставить его признать мои изменения. Я изменил сценарий оболочки, который всегда открывается с помощью «Terminal.app», и создал символическую ссылку без расширения файла для скрипта внутри папки Firefox.app/Content/MacOS/. Затем, после установки исполняемого файла на имя символической ссылки, все работает. Не уверен, что обновления Firefox будут функционировать, но это достаточно просто для повторного/отмены. – Rob

+0

привет rob. Я создал пакет приложений, который запускает firefox в antoher-профиле. Я дал своему пакету пользовательский значок. Я запускаю сразу несколько профилей с помощью '-no-remote'. поэтому его нормально видеть один логотип firefox для стандартного и один для моего настраиваемого профиля. однако иногда значок пользовательского профиля становится значком по умолчанию. вы когда-нибудь будете в чате? я могу показать вам пример моей ситуации. – Noitidart

+0

Привет @Rob, какая команда вы используете для запуска Firefox? – Noitidart

ответ

3

Создайте стандартный пакет приложений, но установите LSUIElement на нем, поэтому значок приложения сценария скрыт от док-станции и включает в себя Firefox внутри комплект.

Простой способ сделать это с помощью Platypus. Настройте утконос следующим образом:

  • Нажмите «Параметры». Установите флажок «Установить $ 1 в путь к приложению», , чтобы ваш скрипт мог ссылаться на файлы внутри комплекта.

  • Отметьте «Запуск в фоновом режиме» -это наборы LSUIElement для вас.

  • В список «Файлы и папки прилагаются к приложению в папке« Ресурсы »», откройте Firefox.

  • Измените вывод на «None», чтобы сообщения вашего журнала перешли на системную консоль.

  • Удалите файл значков Firefox (firefox.icns) на значке «Пользовательский значок».

  • Измените имя «приложение» на Firefox.

Для сценария, который выглядит примерно так:

#!/bin/sh 
echo before >&2 
$1/Contents/Resources/Firefox.app/Contents/MacOS/firefox-bin 
echo after >&2 

вы получите выход как:

4/8/09 1:16:33 PM [0x0-0x801801].net.sabi.PlatypusScript[76610] before 
4/8/09 1:16:35 PM firefox-bin[76613] Database load time: 0.373 (717 objects) 
4/8/09 1:16:35 PM [0x0-0x801801].net.sabi.PlatypusScript[76610] 
2009-04-08 13:16:35.699 firefox-bin[76613:10b] Database load time: 0.373 (717 objects) 
4/8/09 1:16:57 PM [0x0-0x801801].net.sabi.PlatypusScript[76610] after 

Если пользователи запуска Firefox другими способами, например, с обработчиками URL и открывая HTML-файлы, вместо этого вам нужно будет использовать собственное приложение, которое может передать соответствующие события Apple через Firefox, и добавить информацию о URL-адресе и файле в Info.plist. (aemreceive - удобная оболочка Python для приема Apple Event.)

+0

именно то, что я искал, мне просто нужно было немного о том, как скрыть значок из док-станции. Danke! – Rob

+0

Проблема с этим решением заключается в том, что вы больше не видите панель меню Firefox. Я нашел лучшее выше. – Rob

+0

У меня такая же ситуация @Nicholas, но моя вещь, когда я нажимаю свой пакет приложений, запускает firefox с аргументами командной строки '-no-remote -P 'мой второй профиль' '. Так что это хорошо, но если я делаю «killall Dock»; killall Finder', он разделяет мой значок на два. Я делаю видео-демонстрацию этого, если это необходимо, но знаете ли вы, как заставить firefox полагать, что значок моего приложения - это его значок. Я думаю, что это похоже на то, что вы здесь поделили. – Noitidart

0

Используйте рабочий процесс Automator, если он доступен в вашей версии Mac OS.

+0

Когда вы запускаете приложение, он всегда создает значок на доке. Я бы предпочел, чтобы там было только одно, чтобы не путать. Я упомянул, что у меня уже есть версия приложения для моего сценария, и мне не нравится этот метод. – Rob

+0

@Rob: Спасибо за разъяснение. Я был в замешательстве (я не видел, что у вас нет двух значков в _runtime_). – dirkgently

+0

@ dirkgently: np, я думаю, что ваше решение - единственное, с чем я собираюсь идти. Но я все еще надеюсь, что какой-то гуру придет с несколькими кусочками знаний для меня. – Rob

Смежные вопросы