Russian Qt Forum
Ноябрь 22, 2024, 01:51 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Стартует "не оттуда"  (Прочитано 22158 раз)
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« : Январь 27, 2020, 18:32 »

Добрый день

Может какая-то новая "фишка" (OSX 10.14.3). У меня все запускается, у заказчика нет. CrashLog пишет
Цитировать
Dyld Error Message:
  Library not loaded: @executable_path/../../../My Resources/GStreamer.framework/Versions/1.0/GStreamer
  Referenced from: /private/var/folders/*/MyApp.app/Contents/MacOS/MyApp
  Reason: image not found"
Пути настроены "от себя", конечно если app файл попал в /private/var/folders - то фреймворка не найдет и не запустится. Но КАК он там оказался? Юзер никак не мог - он копировал приложение со всеми файлами, о существовании /private/var/folders он не подозревает. И что за * в пути т.е
Цитировать
/private/var/folders/*
Что сие значит?

Спасибо
Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #1 : Январь 27, 2020, 19:06 »

otool -L на MyApp в студию
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #2 : Январь 27, 2020, 21:23 »

@executable_path/../../.. аж на 3 уровня от исполняемого файла указывает, как-то далеко
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #3 : Январь 28, 2020, 09:00 »

otool -L на MyApp в студию
Не вопрос, посмотрим на тот же путь
Цитировать
/Users/igor/Desktop/MyApp/MyApp.app/Contents/MacOS/MyApp:
   @executable_path/libQt5Core.dylib (compatibility version 5.12.0, current version 5.12.1)
   @executable_path/libQt5Gui.dylib (compatibility version 5.12.0, current version 5.12.1)
   @executable_path/libQt5Widgets.dylib (compatibility version 5.12.0, current version 5.12.1)
   @executable_path/libQt5OpenGL.dylib (compatibility version 5.12.0, current version 5.12.1)
   @executable_path/libQt5Designer.dylib (compatibility version 5.12.0, current version 5.12.1)
   @executable_path/libQt5Multimedia.dylib (compatibility version 5.12.0, current version 5.12.1)
   @executable_path/libQt5Network.dylib (compatibility version 5.12.0, current version 5.12.1)
   @executable_path/libQt5PrintSupport.dylib (compatibility version 5.12.0, current version 5.12.1)
   /System/Library/Frameworks/Python.framework/Versions/2.7/Python (compatibility version 2.7.0, current version 2.7.10)
   @executable_path/SuperPro (compatibility version 1.0.0, current version 1.0.0)
   @executable_path/../../../My Resources/GStreamer.framework/Versions/1.0/lib/libz.1.dylib (compatibility version 1.0.0, current version 1.0.0)
   /System/Library/Frameworks/OpenGL.framework/Versions/A/OpenGL (compatibility version 1.0.0, current version 1.0.0)
   /System/Library/Frameworks/Cocoa.framework/Versions/A/Cocoa (compatibility version 1.0.0, current version 23.0.0)
   @executable_path/../../../My Resources/GStreamer.framework/Versions/1.0/GStreamer (compatibility version 0.0.0, current version 0.0.0)
   /System/Library/Frameworks/Foundation.framework/Versions/C/Foundation (compatibility version 300.0.0, current version 1555.10.0)
   /usr/lib/libobjc.A.dylib (compatibility version 1.0.0, current version 228.0.0)
   /usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 400.9.4)
   /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1252.200.5)
   /System/Library/Frameworks/AppKit.framework/Versions/C/AppKit (compatibility version 45.0.0, current version 1670.0.0)
   /System/Library/Frameworks/ApplicationServices.framework/Versions/A/ApplicationServices (compatibility version 1.0.0, current version 50.1.0)
   /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation (compatibility version 150.0.0, current version 1555.10.0)
   /System/Library/Frameworks/CoreServices.framework/Versions/A/CoreServices (compatibility version 1.0.0, current version 933.0.0)
@executable_path/../../.. аж на 3 уровня от исполняемого файла указывает, как-то далеко
Структура такая
Цитировать
MyApp (folder)
  MyApp.app   (bundle)
  My Resources (folder)
    GStreamer.framework (folder)
Ну вот и получается на 3 уровня от исполняемого файла что сидит в bundle.

Да, и на моей машине все бычит.
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #4 : Январь 28, 2020, 10:29 »

а, My Resources не в пакете приложения лежит, тогда понятно Улыбающийся

а юзер случайно не прямо из архива пытается приложение запустить? /private/var/folders/* — это скорее всего временная папка. Например, в нее мог извлечься только MyApp.app, без My Resources.

у меня 10.14.6, могу протестировать.
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #5 : Январь 28, 2020, 11:53 »

а, My Resources не в пакете приложения лежит, тогда понятно Улыбающийся
Ну да, его еще др приложения юзают для видео и др

а юзер случайно не прямо из архива пытается приложение запустить? /private/var/folders/* — это скорее всего временная папка. Например, в нее мог извлечься только MyApp.app, без My Resources.
Нет, погуглил - этот фолдер типа "священной коровы", его удалять не моги

у меня 10.14.6, могу протестировать.
Не могу, проект коммерческий. Но за предложение спасибо

Да, и забыл сказать - когда юзер запускает из Terminal - все норм
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #6 : Январь 28, 2020, 12:23 »

а юзер случайно не прямо из архива пытается приложение запустить? /private/var/folders/* — это скорее всего временная папка. Например, в нее мог извлечься только MyApp.app, без My Resources.
Нет, погуглил - этот фолдер типа "священной коровы", его удалять не моги
действительно, я перепутал — временное хранилище на /var/folders/ начинается, без /private

приложение подписано? если нет, может GateKeeper виноват?

если из терминала запустить через
Код:
open /path/to/MyApp.app
тоже не работает?
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #7 : Январь 29, 2020, 16:23 »

приложение подписано? если нет, может GateKeeper виноват?
Еще нет (занимаются товарищи). Да, скорее всего там собака и порылась.  Вот намек

Юзер говорит: сначала запустите на своей машине, потом зипуйте. Откуда он это взял - хз, ну ладно, бум так "пробывать"

Совсем забросил ОС, чувствую себя несведущим  Улыбающийся
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #8 : Февраль 01, 2020, 08:53 »

Так, ну предложение юзера не оправдалось - все равно у него не стартует. А вот фокус с xattr (ссылка выше) работает. Конечно только у него, у меня bundle (app) никакого xattr не имеет. Наверно OSX ставит этот атрибут когда вытаскивает из zip'a.  

Может сделать маленькое приложение чтобы избавить от возни с terminal'ом? Тогда вопрос - а как в командную строку передать это злосчастное "sudo"?
« Последнее редактирование: Февраль 01, 2020, 08:57 от Igors » Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #9 : Февраль 01, 2020, 20:37 »

да, это GateKeeper добавляет к «непроверенным» приложениям.

можно не в командную строку добавлять sudo, а просто запросить повышение привилегий для маленького приложения у системы.
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #10 : Февраль 03, 2020, 14:00 »

можно не в командную строку добавлять sudo, а просто запросить повышение привилегий для маленького приложения у системы.
Расскажите как (для меня командная строка всегда была врагом народа Улыбающийся)

Передача sudo - актуально, как я понял, повышение все равно через Terminal, и объяснять каждому (а они любят что-то набирать еще меньше) - запарюсь
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #11 : Февраль 03, 2020, 16:57 »

нет, зачем именно через командную строку? можно же выполнить любую операцию и через какой-нибудь NSTask, а то и вовсе вызвать напрямую removexattr() (или какая там функция подходит).

повышение привилегий: https://developer.apple.com/library/archive/documentation/Security/Conceptual/authorization_concepts/02authconcepts/authconcepts.html (сам такой код не писал)

или даже еще проще: просто создать скрипт, который все сам выполнит, и дать ему расширение .command (можно мышкой дважды кликнуть для запуска). что-то типа такого:
Код
Bash
#!/usr/bin/env bash
 
scriptDir=$(dirname "$0")
myApp="$scriptDir/MyApp.app" # приложение лежит в той же папке, что и скрипт
sudo xattr -r -d com.apple.quarantine "$myApp"
open "$myApp"
юзеру только надо будет ввести свой пароль и всё.
« Последнее редактирование: Февраль 03, 2020, 17:04 от kambala » Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #12 : Февраль 05, 2020, 10:28 »

или даже еще проще: просто создать скрипт, который все сам выполнит, и дать ему расширение .command (можно мышкой дважды кликнуть для запуска). что-то типа такого:
Код
Bash
#!/usr/bin/env bash
 
scriptDir=$(dirname "$0")
myApp="$scriptDir/MyApp.app" # приложение лежит в той же папке, что и скрипт
sudo xattr -r -d com.apple.quarantine "$myApp"
open "$myApp"
юзеру только надо будет ввести свой пароль и всё.
Да, привлекательно. А можно здесь как-нибудь пискнуть типа "file not found" (а то хз сработало или нет). Спвсибо
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #13 : Февраль 05, 2020, 11:35 »

так он и сам пискнет:
Код:
$ xattr -r -d com.apple.quarantine ./asd
xattr: No such file: ./asd
ну или проверить руками есть ли приложение:
Код
Bash
#!/usr/bin/env bash
 
scriptDir=$(dirname "$0")
myApp="$scriptDir/MyApp.app" # приложение лежит в той же папке, что и скрипт
if [ ! -d "$myApp" ]; then
 echo "app not found at $myApp"
 exit 1
fi
sudo xattr -r -d com.apple.quarantine "$myApp"
open "$myApp"
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #14 : Февраль 06, 2020, 08:56 »

Спасибо, бум пробывать
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.091 секунд. Запросов: 22.