Mac OS X 10.6

Я создал очень простое приложение, которое является лишь оболочкой сценария оболочки (так что я могу выбрать этот сценарий в селекторах приложений, например, в приложениях для запуска). Я пытаюсь запустить его, и вчера это сработало, но сегодня я изменил содержимое и имя исполняемого скрипта (с чем-то, что perfeclty работает в скрипте оболочки, запущенном в Терминале), и он будет отображать только диалог с иконкой Finder, говорящий

Невозможно открыть приложение, так как оно не поддерживается на этом типе Mac.

Я восстановил предыдущий скрипт (содержимое / имя), но все равно получаю ошибку! То же самое при перекомпоновке приложения с нуля или полном изменении идентификатора пакета…

Если я пытаюсь открыть его в Терминале с помощью open My.app , я получаю

Невозможно открыть приложение, так как оно имеет неверный формат исполняемого файла.

Но когда я выполняю непосредственно Contents/MacOS/Script , он всегда работает (с обоим содержимым). Кроме того, он отображается с правильным значком и мета-информацией в Finder (так что я думаю, что Info.plist понят).

Дерево файлов приложения:

Contents/
    Info.plist
    MacOS/
        Script    (executable bit set, works when launched directly)
    PkgInfo
    Resources/
        AppIcon.icns

Вот содержание Info.plist :

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>CFBundleExecutable</key>
    <string>Script</string>
    <key>CFBundleIconFile</key>
    <string>AppIcon</string>
    <key>CFBundleIdentifier</key>
    <string>asdf.ScriptApp</string>
    <key>CFBundleInfoDictionaryVersion</key>
    <string>6.0</string>
    <key>CFBundleName</key>
    <string>My script</string>
    <key>CFBundlePackageType</key>
    <string>APPL</string>
    <key>CFBundleShortVersionString</key>
    <string>1.0</string>
    <key>CFBundleSignature</key>
    <string>????</string>
    <key>CFBundleVersion</key>
    <string>1</string>
    <key>LSMinimumSystemVersion</key>
    <string>10.4</string>
</dict>
</plist>

И файл PkgInfo содержит только APPL???? , Я тестировал скрипт с простым echo "ok" и echo "ok" >/tmp/test (плюс #!/bin/sh header).

Итак, мои вопросы:

  • Есть ли какое-то кэширование валидности для приложений? на основании чего? как мне его смыть?
  • Откуда это сообщение? Я попытался Google, но все, что я получаю, это страница, говорящая о 32/64 бит Java ...

5 ответов5

6

Это довольно некро, но я не могу найти другой хит на Google, где это было задано и ответил. Я наконец понял это (сейчас на 10.7):

Файл сценария оболочки должен начинаться с "#!«И вот странная часть: она должна быть длиной не менее 28 символов.

Если вы вставите 27-символьный скрипт и коснитесь пакета, значок изменится на приложение с линией, проходящей через него. Добавьте один символ к сценарию и коснитесь его снова, и БУМ, он работает.

Странно, нет?

1

Вы можете создать приложение, выполняющее скрипт в Automator, используя одно действие Run Shell Script .

0

Сам сценарий оболочки может быть плохим. Это обычно происходит между платформами PPC / Intel или наоборот.

0

Возможно, вы захотите проверить Утконос:

http://sveinbjorn.org/platypus

«Platypus - это инструмент разработчика для операционной системы Mac OS X. Его можно использовать для создания собственных, безупречно интегрированных приложений Mac OS X из интерпретируемых сценариев, таких как сценарии оболочки или программы Perl, Ruby и Python. Это достигается путем помещения сценария в структуру каталогов пакета приложения вместе с исполняемым двоичным файлом, который запускает сценарий ».

0

Я успешно создал приложения, исполняемые файлы которых являются сценариями оболочки. Однако они всегда exec обычный процесс с графическим интерфейсом (или нетипичный, такой как Java-программа); возможно, это имеет значение.

Кроме того, вы контролировали разницу в переменных среды? Когда вы запускаете из терминала, вы получаете эффект точечных файлов (.profile , .bash_profile , .bashrc и т.д.), Но при запуске GUI они не используются. (Эта среда может быть изменена с помощью ~/.MacOSX/environment.plist (перезапуск после изменений), если вы захотите это сделать.)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .