Всем привет!
Есть кроссплатформенное приложение, написанное на 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?
- Как можно отладить ошибку пакета?
Спасибо!