Как правильно подписывать .app и dmg для macOS?

Всем привет!

Есть кроссплатформенное приложение, написанное на Qt (5.9.6), работает на Win, Mac и Ubuntu.
На mac приложение собирается с использованием инструментов Qt (без XCode).
Приложение имеет 3d-party библиотеку ffpmeg (не собираем у себя, берем готовую сборку https://ffmpeg.org/download.html#build-mac)

На начальном этапе предполагается дистрибуция приложения через образ dmg, в последствии - через AppStore.
dmg-образ собирается через hdutil (не через macdelpoyqt).

Пытаемся подписать .app файл и dmg-образ сертификатами из Apple Developer Program, в частности:
  • macOS -> Production -> Developer ID Sign versions of your Mac application, Mac kernel extension and Mac Installer Package for distribution outside of the Mac App Store -> Developer ID Installer This certificate is used to sign your app's Installer Package for distribution outside of the Mac App Store
  • macOS -> Production -> Developer ID Sign versions of your Mac application, Mac kernel extension and Mac Installer Package for distribution outside of the Mac App Store -> Developer ID Application This certificate is used to code sign your app for distribution outside of the Mac App Store.


Насколько я понял - это и есть сертификаты для нашего случая, распространение вне AppStore. (но пробовали и другие из консоли разработчика)

Все сертификаты корректно устанавливаются в систему и видны в "Связке ключей"

Подписываем в ручную, через codesign.

Если подписывать непосредственно Application.app файл, то codesign отвечает, что "code object is not signed at all". Естественно, приложение при этом, не считается подписанным.

Затем, выяснили, что надо подписывать все файлы внутри пакета (https://habr.com/ru/company/istodo/blog/215971/)

Стали подписывать все файлы, до тех пор пока codesign на app не перестанет давать ошибку, примерно так:

codesign -s 9509FE0B2EBCC89D9047541AC762418395FCB40E Application.app
Application.app/: code object is not signed at all

codesign -s 9509FE0B2EBCC89D9047541AC762418395FCB40E Application.app/Contents/Frameworks/libavcodec.58.dylib
# ffmpeg тоже подписываем иначе not at all
...

codesign -s 9509FE0B2EBCC89D9047541AC762418395FCB40E Application.app/Contents/Frameworks/QtCore.framework
# Qt тоже подписываем
...

codesign -s 9509FE0B2EBCC89D9047541AC762418395FCB40E Application.app
Ok.


Затем, когда вроде codesign перестает ругаться на не полностью подписанный пакет, запускаем Application.app на своей машине - все ок.
Запускаем на другом маке - результат при открытии Application.app-файла: "Программа Application.app повреждена, и ее не удается открыть. Переместите программу в корзину." Запускать отказывается даже через "хак" для недоверенных приложений (через Command) - видимо действительно повреждена...

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

  • Пожалуйста, подскажите как правильно подписать .app и dmg для MacOS?
  • Как правильно подписать .app с 3rd-party библиотеками?
  • Может сразу выбрать другой тип дистрибуции, например не dmg, а pkg?
  • Как можно отладить ошибку пакета?


Спасибо!
  • Вопрос задан
  • 903 просмотра
Пригласить эксперта
Ответы на вопрос 2
Zifix
@Zifix
Barbatum
А что выводится, если запускать программу через консоль, непосредственно бинарник внутри .app?

Наверное стоит попробовать запаковать в pkg. И покажите какие типы сертификатов ещё предлагаются.
Ответ написан
Комментировать
@elbrus56
Попробуйте Packages - s.sudre.free.fr/Software/Packages/about.html
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
19 апр. 2024, в 05:01
999999 руб./за проект
19 апр. 2024, в 03:52
1000 руб./за проект
19 апр. 2024, в 03:01
1000 руб./за проект