Подписание кода + нотариальное заверение с использованием утилиты jpackage не работает на macOS - PullRequest
5 голосов
/ 31 марта 2020

В некоторых случаях я использую утилиту jpackage, чтобы попытаться создать подписанный файл DMG для доставки моим пользователям. Причина, по которой мне нужно подписать этот DMG, заключается в том, что я хотел бы заверить нотариус программного обеспечения. Кстати, я не уверен, возможно ли (пока) нотариальное заверение с использованием jpackage, но я все равно пытаюсь это сделать.

Однако у меня возникают проблемы с использованием встроенных параметров подписи кода jpackage , что является обязательным условием для успешного нотариального заверения.

Я запускаю jpackage с использованием параметров --mac-sign --mac-package-signing-prefix CardrDebate --mac-signing-key-user-name "Developer ID Application: ********** (*******)" (я отредактировал фактический идентификатор разработчика, так как это - publi c в StackOverflow).

После создания образа приложения jpackage я проверил, действительно ли сгенерированный код был подписан, перейдя к нескольким из сгенерированных файлов .dylib и попробовав codesign -vvv {filename}.dylib, и кодировщик сказал, что объект вообще не был подписан (НЕ то, что он был подписан неправильно). , но это просто не было подписано).

Таким образом, я считаю, что моя проблема в том, что я (потенциально) неправильно использую опции подписи jpackage в macOS. Как я должен использовать их?

1 Ответ

6 голосов
/ 08 апреля 2020

Я go вперед и отвечу на свой собственный вопрос, потому что я в конечном итоге выяснил, как подписать свое приложение и получить его успешно нотариально от службы нотаризации Apple (мой продукт http://cardr.x10.bz) .

  1. Используйте опцию app-image в jpackage для создания неподписанного пакета приложения.

  2. Используйте автоматический скрипт bash для кодирования всех dylib и исполняемые файлы внутри пакета приложения, используя codesign -vvv --options runtime --deep --force --sign "Developer ID Application: ********" <filename>.

  3. Это многошаговая процедура, поэтому я просто разделю ее на A / B / C.

3A) Найдите все файлы jar в MyApp.app/Contents/mods/, содержащие встроенные файлы .dylib, и извлеките эти файлы в указанную папку c (или запишите небольшая программа, чтобы сделать это для вас). Для меня мое приложение опиралось на JavaFX, поэтому многие библиотеки JavaFX содержали файлы .dylib в файлах jar. Однако, если вы просто используете библиотеки Java по умолчанию, вы сможете перейти к шагу 4, поскольку библиотеки Java по умолчанию не содержат файлы .dylib. Причина, по которой мы должны выполнить этот шаг, заключается в том, что служба нотаризации Apple проверяет эти встроенные файлы .dylib на предмет кодирования.

3B) Используйте автоматический скрипт bash для кодирования всех только что извлеченных файлов dylib, используя codesign -vvv --options runtime --deep --force --sign "Developer ID Application: ********" <filename>.

3 C) Добавьте каждый из подписанных файлов .dylib обратно в соответствующие файлы jar, чтобы заменить исходные неподписанные встроенные файлы .dylib. Вот команда, которая может пригодиться: jar uf <path to jar file> <path to dylib file>. Имейте в виду, что второй указанный путь, путь к файлу dylib, также должен быть относительным местоположением dylib в архиве. Посмотрите здесь для получения более подробной информации - https://docs.oracle.com/javase/tutorial/deployment/jar/update.html.

Теперь, когда вы подписали каждый из исполняемых файлов и файлов dylib в .app, пришло время подписать сам .app. Запустите codesign -vvv --force --sign "Developer ID Application: ********" MyApp.app.

Теперь, когда вы подписали .app, вам нужно запустить jpackage в комплекте приложений, чтобы создать из него DMG или PKG. Не стесняйтесь использовать функции подписи jpackage ma c, которые будут подписывать внешние DMG / PKG. Обратите внимание, что свойство --mac-signing-key-user-name "My Developer Account Name (*******)" НЕ должно включать часть сертификата «ID разработчика приложения / установщика».

Наконец, вы создали подписанную PKG / DMG, готовую к нотариальному заверению. Используйте xcrun altool --notarize-app --username <apple-id> --password <app-specific-password> <MyApp.dmg or MyApp.pkg>. Подождите, пока нотариальное завершение завершится, и убедитесь, что оно утверждено.

Если нотариальное завершение завершилось успешно (вы должны), вы можете прикрепить билет вашего приложения к установщику PKG, используя xcrun stapler staple MyApp.pkg.

Надеюсь, это поможет!

...