Как изменить исполняемый файл в OS X Application Bundle - PullRequest
5 голосов
/ 08 апреля 2009

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

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

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

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

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

Ответы [ 2 ]

3 голосов
/ 08 апреля 2009

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

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

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

  • Установите флажок «Работает в фоновом режиме» - этот набор LSUIElement для вас.

  • В списке «Файлы и папки для в комплекте с заявкой в Папка "Ресурсы", перетащите Firefox.

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

  • Удалите файл значков 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 голосов
/ 08 апреля 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...