У нас есть настольное приложение JavaFX (ну, TornadoFX), которое загружает архив, извлекает из него другое приложение и запускает это приложение с помощью команды macOS open
. Упрощенный код котлина выглядит так:
ProcessBuilder(listOf("open", "/path/to/app.app", "arg")).start()
Это работало в течение многих лет в более старых версиях macOS (10.15 и ранее), но теперь с macOS 11 Big Sur запуск приложения иногда бывает успешным, а иногда - нет.
В Mac Console.app можно увидеть следующую ошибку:
OSStatus _LSCopyApplicationNodeFromOpenState (LSOpenState *): возврат kLSNoExecutableErr, поскольку узел является каталогом, но нам не удалось зарегистрироваться с ошибкой -10814
Мы расширили логику, чтобы проверить, действительно ли все файлы присутствуют, перед запуском приложения и существуют ли файлы.
Есть предположение, что, возможно, база данных Launch Services обновляется недостаточно быстро.
Следующие способы попытки записать то, что могло происходить, не выявили ошибок:
lsappinfo слушать + все навсегда
поток журнала --debug --predicate 'subsystem == com.apple.coreservices.launchservices'
Кто-нибудь знает, есть ли способ избежать такого поведения и всегда иметь возможность запускать приложение?