Подтвердить что ты не робот

Приложение не может быть открыто, потому что его исполняемый файл отсутствует

У меня есть приложение, которое я разрабатываю в течение некоторого времени. Недавно запуск приложения с помощью двойного щелчка показывает диалог, в котором говорится: "Вы не можете открыть приложение RepoWatch, потому что оно может быть повреждено или неполно."

Запуск приложения через open./RepoWatch.app дает мне "Приложение не может быть открыто, потому что его исполняемый файл отсутствует".

Обычно я запускаю приложение через. /RepoWatch.app/Contents/MacOS/RepoWatch просто по привычке (что работает), поэтому я не уверен, как долго это происходит, или какие изменения произошли непосредственно перед вами. Наиболее вероятным изменением является то, что я помещал cp Info.plist ./RepoWatch.app/Contents/ в свой файл make для версии Info.plist без версии для всего, что находится в пакете .app.

Я много раз смотрел на Info.plist и не могу найти с ним ничего плохого. Файл открывается Редактором списка свойств без каких-либо ошибок. Сохранение из Редактора списка свойств не делает файл "работать" (если он виноват в первую очередь).

Разрешения, насколько я могу судить, также выглядят разумными:

$ ls -l
./RepoWatch.app/Contents/Info.plist
[email protected] 1 dgrace  staff  789 Feb  1 23:20 ./RepoWatch.app/Contents/Info.plist
$ ls -l
/Applications/Adium.app/Contents/Info.plist
-rw-rw-r--  1 dgrace  staff 5750 Aug 21 15:41 /Applications/Adium.app/Contents/Info.plist

Я не понимаю, что делать дальше.

И вот содержимое 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>CFBundleInfoDictionaryVersion</key>
    <string>6.0</string>
    <key>CFBundleDevelopmentRegion</key>
    <string>English</string>
    <key>CFBundleExecutable</key>
    <string>RepoWatch</string>
    <key>CFBundleIdentifier</key>
    <string>com.doomstick.RepoWatch</string>
    <key>CFBundleName</key>
    <string>RepoWatch</string>
    <key>CFBundleShortVersionString</key>
    <string>1.0.0</string>
    <key>LSMinimumSystemVersion</key>
    <string>10.6</string>
    <key>CFBundleVersion</key>
    <string>Beta26</string>
    <key>NSMainNibFile</key>
    <string>MainMenu</string>
    <key>NSPrincipalClass</key>
    <string>NSApplication</string>
</dict>
</plist>
4b9b3361

Ответ 1

Восстановление базы данных служб запуска решает эту проблему для меня.

Попробуйте выполнить следующую команду в терминале:

/System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister -kill -r -domain local -domain system -domain user

Ответ 2

Основываясь на ответе, который опубликовал @smokris:

Проблема, похоже, связана с регистрацией вашего приложения в базе данных служб запуска. Нет необходимости перестраивать всю базу данных. Чтобы принудительно обновить запись для вашего приложения (в частности), используйте lsregister с опцией -f:

/System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister -f MyApp.app

У меня была такая же проблема, которую вы описали, и это сработало для меня. Спасибо, @smokris!

Ответ 3

Вероятно, проблема связана с недопустимым значением CFBundleExecutable свойства в файле Info.plist, который вы копируете в приложение.

В проектах Xcode значением по умолчанию для этого свойства является значение специальной переменной (placeholder) (${EXECUTABLE_NAME}), которое расширяется (заменяется), когда система сборки создает приложение. Вы уверены, что вам нужно скопировать этот файл вручную? Возможно, вы можете добавить фазу сборки script, которая делает любые изменения, которые вам нужны после, которые были расширены и скопированы на место обычным процессом сборки.

Пока вы на нем, вы должны проверить другие значения заполнитель в файле. Вероятно, вам нужно будет заполнить CFBundleName (в зависимости от вашего типа приложения могут потребоваться другие.)

Ответ 4

ОК, некоторые (более) снимки в темноте.

  • docs для LSMinimumSystemVersion говорят, что значение должно быть строкой с формой n.n.n. Вы можете попробовать добавить ".0" в конец вашего значения.
  • Когда вы используете ./RepoWatch.app/Contents/MacOS/RepoWatch для запуска его вручную, используете ли вы какое-то создание или создание имени файла, или вы вводите все это (особенно имя исполняемого файла)?
    • Может быть, исполняемое имя файла имеет в нем некоторый нечетный невидимый/комбинирующий/похожий на него символ, который не соответствует значению в Info.plist. Попробуйте ls -w /path/to/RepoWatch.app/Contents/MacOS/ | xxd просмотреть байты для чего-либо не-ASCII.
  • Предоставляет ли plutil -lint /path/to/Info.plist "ОК"?
  • @ после того, как разрешения на выходе ls -l указывают некоторые xattrs. Они могут быть безвредными, но посмотрите, какие из них существуют с ls [email protected]?
    • Если один из xattrs выглядит подозрительным (или даже если нет), вы можете (cd /path/to/RepoWatch.app/Contents/ && mv Info.plist Info.plist.save && cat Info.plist.save > Info.plist) получить копию без xattrs и протестировать ее.
    • Если использование файла non-xattr'd по-прежнему вызывает проблемы, вы можете попытаться систематически изменять и удалять ключи (после создания резервной копии, например, .save выше), чтобы увидеть, может ли вы вызвать другое сообщение об ошибке, которое может помогите указать проблему.

Ответ 5

Меню проектa > Установить активную исполняемую