Какой самый быстрый / простой способ - шаг за шагом, с самого начала - "подписать код" моего приложения Qt для OS X, чтобы его можно было распространять?
Я пишу кроссплатформенное приложение на Qt (используя Qt Creator). Одной из целевых платформ является OS X.
Приложение упаковывается для установки на OS X с использованием системы установщика BitRock для создания .app
файл.
Приложение предназначено для загрузки и использования студентами и политологами в различных колледжах и университетах. (Подойдет загрузка из App Store или с веб-сайта продукта.)
Мне не нужен iCloud или другие функции, связанные с App Store. Мне просто нужно иметь возможность распространять это приложение, чтобы предупреждение (ниже) не появлялось.
В настоящее время приложение находится в состоянии альфа-тестирования - оно тестируется только менеджерами продукта. Тем не менее, я бы предпочел предложить менеджерам продуктов установочный пакет для OS X, в котором нет следующего предупреждения:
[Приложение установки] не может быть открыто, потому что оно от неизвестного разработчика
(И, что более важно, когда приложение выпущено, я также не хочу, чтобы это предупреждение появлялось для конечных пользователей.)
Я понимаю, что мне нужно подготовить свое приложение к распространению, используя учетную запись Apple Developer и правильно подписав приложение.
Я создал учетную запись разработчика и пытаюсь выполнить действия, указанные в ссылке, чтобы подписать свое приложение и подготовить его к распространению.
Однако, поскольку приложение построено на Qt, а не на XCode, я не знаю, как выполнить эти шаги до конца, потому что некоторые ключевые шаги предполагают, что XCode используется.
Я искал любые вопросы, которые могли бы описать, как подготовить приложения Qt на OS X для распространения, но оказались пустыми.
(Кроме того, я бы также предпочел, чтобы в любом случае был предусмотрен как можно более простой набор этапов, предпочтительно более простой, чем этапы, указанные в приведенной выше ссылке.)
Какой самый простой из возможных наборов шагов позволит мне подписать код моего приложения, разработанного с помощью Qt, на OS X, чтобы его можно было распространять?
3 ответа
Подготовить .app
файл
Это пошаговое руководство по созданию подписанного пакета, который можно загрузить в Mac App Store или раздать отдельно в виде автономного приложения + установщика:
Проверьте значок приложения - оно должно иметь все размеры (16x16, 32x32, 64x64, 128x128, 256x256, 512x512, 1024x1024). (См. /questions/15177368/kak-ustanovit-znachok-prilozheniya-v-prilozhenii-qt-na-os-x-dostatochnyij-dlya-rasprostraneniya/15177373#15177373)
Добавьте параметры компиляции для правильной генерации символов отладки:
QMAKE_CFLAGS += -gdwarf-2 QMAKE_CXXFLAGS += -gdwarf-2
(отмечая, что
QMAKE_CFLAGS
Qt Creator не может быть выделен как действительный, но все же может потребоваться включить - смотрите здесь)Настройки должны быть сохранены в каталоге с тем же именем, что и идентификатор пакета.
Проверьте файл Info.plist приложения. Он должен содержать правильный идентификатор пакета и минимальную версию MacOS X 10.6.6.
(Примечание: хотя Qt Creator автоматически генерирует файл info.plist по умолчанию, который находится внутри
.app
также можно создать свой собственный файл и использовать его автоматически. Смотрите эту ссылку для примера файла info.plist, который работает с Qt и App Store, и обратите внимание, чтоQMAKE_INFO_PLIST
работает ли использовать пользовательский файл (см. комментарии в этой ссылке).)(Также см. Примечания ниже о том, как получить идентификатор пакета.)
(Минимальная версия OS X - которая должна быть установлена на 10.6.6 или выше - может быть установлена с помощью следующей строки в
.pro
файл:QMAKE_MACOSX_DEPLOYMENT_TARGET = 10.6
- но если вы используете обычайinfo.plist
файл, эта настройка не вступит в силу, поэтому вы должны включить правильную настройку в свой пользовательскийinfo.plist
в любом случае; см. предыдущую ссылку для записи, которая должна использоваться в файле.)Вам также нужны сертификаты для подписи вашего приложения и установщика: откройте "Доступ к цепочке ключей" (используйте поиск в Mac OS X) -> дважды щелкните по каждому сертификату (посмотрите в
kind
для этого) и введите пароль -> проверьте добавленные сертификаты в Keychain Access.
Зарегистрировать приложение в iTunesConnect
Войдите в свою учетную запись разработчика по http://itunesconnect.apple.com/ (которая перенаправит вас на https://, но вам может понадобиться сначала ввести http: //)
(Примечание. Если у вас его еще нет, для начала необходимо создать учетную запись разработчика Mac на сумму 99 долларов США в год.)
Нажмите "Управление приложениями" -> "Добавить новое приложение".
Если приложение не имеет идентификатора пакета - создайте его.
Создание нового идентификатора пакета не является интуитивно понятным.
Чтобы создать новый идентификатор пакета:
-> Войдите на сайт Центра разработчиков: это другой сайт (возможно, откройте его на новой вкладке): http://developer.apple.com/.
-> Нажмите Центр участников в правом верхнем углу (рядом с панелью поиска)
-> Нажмите Управление сертификатами, идентификаторами приложений, устройствами и профилями обеспечения (в разделе Сертификаты, идентификаторы и профили).
-> Нажмите " Идентификаторы приложений" на левой панели навигации (в разделе " Идентификаторы ") (возможно, этот параметр уже выбран).
-> Нажмите на кнопку +
-> Экран, который вы видите (Регистрация идентификатора приложения Mac / Регистрация идентификатора приложения), - это экран, который вы используете для создания нового идентификатора пакета
-> Введите необходимую информацию. Напишите что-нибудь для описания идентификатора приложения (оно может содержать только короткую строку текста)
Поле " Явный идентификатор приложения" фактически является новым идентификатором пакета. Введите обратный URL здесь, например,
com.mydomain.myapp
, Веб-сайт или сервер на самом деле не должны существовать по этому URL. Вы просто делаете это здесь, но, конечно, вы можете использовать тот, который уже существует, если хотите.-> Нажмите " Продолжить", затем " Отправить", если вы удовлетворены, а затем " Готово".
Теперь обязательно вернитесь к предыдущему разделу и добавьте идентификатор Bundle, который вы только что создали, в пользовательский
info.plist
файл.Также сохраните Team ID на случай, если он понадобится вам позже - это строка, которая предшествует Bundle > > ID (называемому префиксом), которую вы видите, когда смотрите на детали Bundle ID, которые вы только что> > > создали в Центр разработчиков.
Теперь вернитесь на веб-сайт iTunesConnect. (Возможно, в другой вкладке - это не веб-сайт Центра разработчиков.)
В разделе " Информация о приложении " выберите язык. Затем введите имя приложения. Составьте случайную строку символов для поля SKU (я использую что-то в формате 2436-7623-7782-8327). Наконец, выберите Bundle ID. Нажмите Продолжить.
Выберите дату доступности (просто насколько это возможно, на данный момент - в настоящее время ее можно сделать доступной не более 2 лет). Выберите ценовой уровень (может быть любым - клиент может измениться позже). Нажмите Продолжить.
Введите подробную информацию о приложении на следующем экране и нажмите Сохранить.
Нажмите "Просмотреть подробности" на странице приложения -> Нажмите "Готово к загрузке двоичного файла" -> На сводной странице нажмите на ссылку "последняя версия Application Loader" и загрузите ее -> Нажмите "Продолжить".
Создание и загрузка установщика
Проверьте Info.plist приложения - введите правильный идентификатор пакета, название приложения, категорию.
Сборка приложения в режиме релиза.
Извлечь символы отладки. В командной строке:
dsymutil MyApp.app/Contents/MacOS/MyApp -o MyApp.app.dSYM
Выполнить вспомогательную программу
macdeployqt
(входит в Qt). В командной строке:/path/to/macdeployqt /path/to/myapp.app
(
macdeployqt
можно найти вQTDIR/bin
, Смотрите эту ссылку для нескольких официальных деталей.)Бег
macdeployqt
изменяет ваше существующее приложение, включая необходимые внутренние структуры Qt в.app
связать и изменить различные другие внутренние настройки в приложении.Codesign приложение:
Совместное проектирование - это сложный шаг.
(1) Получение СЕРТИФИКАТА РАСПРЕДЕЛЕНИЯ
Сначала вы должны создать сертификат распространения, если у вас его еще нет. (Не сертификат разработчика.)
(Следующие шаги взяты из этой ссылки, с исправлением относительно типа сертификата)
-> Открыть XCode (версия 5 на момент написания этой статьи) -> Перейдите к XCode > Настройки -> Перейдите на вкладку Учетные записи -> Если вы еще этого не сделали, добавьте Apple ID, зарегистрированный в Программе разработчика Mac -> Выбрать Apple ID, который вы хотите использовать, и нажмите View Details -> В открывшемся окне нажмите Add (+) и затем выберите Mac App Distribution.
(2) Код, подписывающий заявку с сертификатом распространения
Чтобы правильно кодировать, каждый
.framework
а также.dylib
внутри.app
комплект должен быть ПЕРВЫЙ подписан; а затем.app
Сам должен быть подписан. Посмотрите критические шаги в нижнем абзаце этого серого блока, прежде чем кодировать внутреннюю структуру Qt - и обязательно сделайте это сначала.Команда для подписи внутренних библиотек / каркасов и команда для подписи основных
.app
, та же:
codesign -s "3rd Party Mac Developer Application: Daniel Nissenbaum (S6V5TT9QRL)" –-entitlements MyEntitlements.plist MyApp.app
Опция --entitlements MyEntitlements.plist необходима только в том случае, если у вас действительно есть права, превышающие базовые значения по умолчанию. Я (Дэн Ниссенбаум) не выбрал дополнительные привилегии для своего приложения при создании идентификатора пакета в Центре разработчика (например, возможность доступа к iCloud, push-уведомления и т. Д.). Итак, я отключил опцию --entitlements и не изучал, как получить файл MyEntitlements.plist.
Примечание относительно аргумента - s: см. Параграф ниже для получения информации о том, как найти правильное имя для использования (это Сертификат распространения "Общее имя").
Эта кодовая команда предназначена для основных
.app
, Для кодирования внутренних (Qt) библиотек / каркасов, которые должны быть выполнены в первую очередь, используйте правильный путь; т.е. в приведенной выше команде используйтеMyApp.app/Contents/Frameworks/QtCore.framework
скорее, чемMyApp.app
- и обратите внимание, что путь к библиотекам / платформам должен быть только к корню внутреннего пакета библиотеки / каркаса, а не к внутреннему пакету библиотеки / каркаса.Возможно, что в дополнение к Qt .frameworks может потребоваться подписать различные другие внутренние.dylibs или.frameworks. Если вы попытаетесь подписать основное приложение, но не подписали все внутренние .dylibs /.frameworks, вы получите ошибку указывает на другую внутреннюю .dylib /.framework, которая требует подписи. Просто пройдите их все. В моем случае было около 10 дополнительных .dylibs, которые нужно было подписать после того, как я закончил подписывать Qt .frameworks.
Получив сертификат разработчика, вам необходимо найти название сертификата для использования в процессе кодирования. Откройте "Доступ к связке ключей" (чтобы найти это, просто введите "Доступ к связке ключей" в строку поиска в Finder и найдите приложение из числа возвращенных результатов). В основном списке, который вы видите при запуске Keychain Access, вы увидите свой сертификат разработчика среди других вещей. Также будут некоторые другие сертификаты - игнорируйте их. Должно быть очевидно, какой сертификат является правильным. В моем случае (что является стандартным, я полагаю) имя сертификата "Стороннее приложение для разработчиков Mac: Даниэль Ниссенбаум (S6V5TT9QRL)". Это официальное имя сертификата, которое будет использоваться в качестве аргумента - s для CodeSign, но чтобы действительно подтвердить это, дважды щелкните сертификат и в появившемся информационном окне посмотрите на "Общее имя". Значение Common Name - это официальный текст для использования в качестве аргумента - s кодового знака.
Примечание относительно осложнения с
codesign
внутри внутренних Qt-фреймворков. На сегодняшний день, когдаmacdeployqt
При запуске платформы Qt не полностью правильно скопированы в.app
расслоение. Они скучают по своимInfo.plist
файл. Но это необходимоInfo.plist
файлы существуют внутри установки Qt. Вы можете просто использовать Finder, чтобы скопировать их. (Например, в моей системе требуетсяInfo.plist
файл дляQtWidgets.framework
Фреймворк имеет этот путь (где "Qt" соответствует корневому пути вашей установки Qt):Qt/5.1.1/clang_64/lib/QtWidgets.framework/Contents/Info.plist
, Это должно быть скопировано вMyApp.app/Contents/Frameworks/QtWidgets.framework/Resources
, То же самое для всех других фреймворков Qt, которые были скопированы вMyApp.app
связатьmacdeployqt
, См. /questions/24285080/podpishite-ramki-dlya-osx-109/24285097#24285097 для получения дополнительной информации. Существует и включен для кода
Создать установщик (требуется другой сертификат; см. Комментарий):
productbuild –-component ./MyApp.app /Applications –-sign "3rd Party Mac Developer Installer: Daniel Nissenbaum (S6V5TT9QRL)" MyApp.pkg
Обратите внимание, что в качестве аргумента
--sign
параметр. Сертификат имеет тип " Сертификат установщика Mac ", а не " Распространение приложения Mac " (тип сертификата, используемого сcodesign
, выше). Чтобы создать этот сертификат, выполните те же действия, что и выше, но выберите " Сертификат установщика Mac" в качестве типа. Используйте его общее имя в качестве аргумента--sign
параметр здесь../ перед именем приложения может быть важным. Кроме того, используйте тот же аргумент для параметра --sign, который вы использовали при запуске codeign - Общее имя вашего сертификата разработчика. Смотри выше.
Проверьте установщик:
sudo installer -store -pkg MyApp.pkg -target /
Если ошибок нет, теперь у вас есть легитимное приложение Mac, упакованное в легальный инсталлятор Mac, оба из которых могут быть распространены среди всех. Вы можете распространять их, просто отправив им
.pkg
файл (через веб-сайт, Dropbox и т. д.), или вы можете загрузить в Mac App Store.Я не подтвердил эти шаги, которые предназначены для фактической загрузки приложения в Mac App Store: откройте Application Loader и войдите в систему с помощью учетной записи Apple Developer -> выберите "Deliver Your App" -> выберите правильный AppID -> нажмите "Choose… "На странице" Информация о приложении "и выберите созданный файл pkg -> нажмите" Отправить ".
Дополнительная информация
Во-первых, посмотрите приложения Sign Qt на Mac с ID разработчика и Sign Framework для OSX 10.9
В принципе,
- скомпилируйте ваше заявление
- бежать
macdeployqt
- проверить с помощью
otool -L ...
зависимости всех ваших фреймворков, библиотек и плагинов - использование
install_name_tool -change ...
изменить любые зависимости, неправильно развернутые внутри пакета - подписать ваши рамки и пакет (см. 2 ссылки, приведенные выше)
Вам нужно будет заплатить Apple за идентификатор разработчика, чтобы иметь возможность подписать ваше приложение, в противном случае вашим пользователям придется иметь дело с Gatekeeper.
Прежде всего, пожалуйста, проверьте следующую ссылку
Как вы писали, вы можете распространять свое приложение за пределами App Store. Такие пакеты или установщики pkg должны быть подписаны идентификатором подписи ID разработчика. Это единственная подпись, которая пройдет проверку MacOS GateKeeper.
Вы должны быть "Командным агентом", чтобы получить это. Если вы работаете в одиночку, это не должно быть для вас проблемой. Если вы не "Team Agent", вам нужно будет создать запрос на сертификат и отправить его своему "Team Agent", который сгенерирует для вас открытый ключ и отправит его обратно.
Как только у вас будет действительная идентификация подписи идентификатора разработчика (как люди писали в комментариях), вы можете просто подписать ваше приложение с помощью аналогичной команды командной строки: codeign "Developer ID...." myApplicationPath.app
PS Последний xCode предоставляет приятный интерфейс для получения различных типов подписывающих удостоверений. Просто проверьте ссылку вверху ответа.