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 ...