У меня есть кроссплатформенное приложение, написанное на Qt (5.9.6), работающее на Win, Mac и Ubuntu.
На Mac приложение создано только с использованием инструментов Qt (без Xcode).
Приложение имеет стороннюю библиотеку ffpmeg.Мы не компилируем его, мы используем предварительно скомпилированный файл из https://ffmpeg.org/download.html#build-mac.
. На начальном этапе предполагается, что приложение будет распространяться через dmg-образ, подписанный Developer ID (в противном случае Gatekepeer выдает сообщениенедоверенный разработчик).
dmg-образ создается с помощью hdutil (не с помощью macdeployqt util).
Я пытался подписать.файл приложения и dmg-образ с сертификатами от Apple Developer Program, в частности:
- macOS -> Production -> Developer ID. Подпишите версии вашего приложения Mac, расширения ядра Mac и пакета установщика Mac для распространения.за пределами Mac App Store -> Установщик идентификатора разработчика Этот сертификат используется для подписи пакета установщика вашего приложения для распространения вне Магазина Mac App Store
- macOS -> Производство -> Знак идентификатора разработчикаверсии вашего приложения Mac, расширения ядра Mac и пакета установщика Mac для распространения за пределами Mac App Store -> ID разработчикаПриложение Этот сертификат используется для кодовой подписи вашего приложения для распространения за пределами Mac App Store.
(насколько я понимаю - это сертификаты для нашего случая - распространение за пределами AppStore)
Все сертификаты правильно установлены в системе и отображаются в «Цепочке для ключей».
Подписание приложения с помощью кодов вручную.
Если я пытаюсь подписать файл Application.appнапрямую, то codeign отвечает: « объект кода вообще не подписан ».Приложение не считается подписанным.
Затем, после нескольких часов поиска в Google, я обнаружил, что мне нужно подписать все .framework , .dylib-файлы и плагины внутри dmg.
Затем я стал подписывать все файлы, пока кодовый знак в приложении не перестанет выдавать ошибку.Например:
...
$ codesign -s 9509FE0B2EBCC89D9047541AC762418395FCB40E Application.app
Application.app/: code object is not signed at all
# error, go next
$ codesign -s 9509FE0B2EBCC89D9047541AC762418395FCB40E Application.app/Contents/Frameworks/libavcodec.58.dylib
# ffmpeg is also shuld be signed - otherwise macOS give a not-at-all-error
...
$ codesign -s 9509FE0B2EBCC89D9047541AC762418395FCB40E Application.app/Contents/Frameworks/QtCore.framework
# Qt also sign
...
$ codesign -s 9509FE0B2EBCC89D9047541AC762418395FCB40E Application.app
# Ok, dmg is successfully signed.
Codesign перестает ругаться с не полностью подписанным пакетом.
Затем запустите Application.app на нашей машине - все в порядке.Затем запустите на другом Mac - результат при открытии файла Application.app:
" Программа Application.app повреждена и не может быть открыта. Переместите программу в корзину. "
Он отказывается запускаться даже через «хак» для ненадежных приложений (через Command-button).
Но - не полностью подписанное приложение на другом Mac работает нормально (но ругается на ненадежного разработчика).
Итак, мой вопрос:
Как подписать Qt-приложение .app и dmg сторонними библиотеками (ffmpeg)?
Спасибо!