Подтвердить что ты не робот

Как подписать приложение Mac OS X в Linux?

Для OS X я распространяю свое приложение Java внутри DMG. Начиная с выпуска Mountain Lion, при открытии приложения появляется следующее сообщение об ошибке:

[имя приложения] повреждено и не может быть открыто. Вы должны выбросить образ диска.

Очевидно, исправление заключается в подписи файла .app, поэтому я прочитал Руководство по подписанию кода. Все кажется простым, кроме важного вопроса как интегрировать это в мой процесс сборки с одним щелчком.

Построение моего продукта на всех платформах происходит на моей машине разработки Linux. Я запускаю Ant script, и установщик Windows, стартер EXE, установщик Linux, приложение OS X и DMG созданы. Поэтому я хотел бы интегрировать подписание кода в этот процесс.

Существует ли эквивалент "codeign" для Linux?

4b9b3361

Ответ 1

Не существует документированного способа подписи кода в приложении Mac OS X в Linux.

Пока я нашел единственный способ сделать это - использовать SSH на Mac и использовать его.

С другой стороны, пакет установщика install4j предлагает следующее:

Интегрированная подпись кода в Windows и Mac OS X В разделе "Общие параметры" install4j теперь имеет вкладку "Подписание кода", где вы можете настроить сертификаты подписи кода для Windows и Mac OS X. Подписание кода будет применяться ко всем программам запуска и установщикам в соответствующих мультимедийных файлах. Реализации для подписи кода являются кроссплатформенными, поэтому вы можете, например, подписывать медиа файлы Windows и Mac OS X с сервера сборки Linux.

Так что это должно быть технически возможно.

Ответ 2

Вы можете обойти это, только подписав JavaApplicationStub и info.plist вашего приложения и исключив из раздела "Ресурсы" подпись. Затем вам придется изменить процесс сборки, чтобы использовать предварительно подписанный контейнер. Конечно, это не смысл кодовонга, но он будет работать; -)

Для этого выполните следующие действия:

  • создайте свой .app как обычно
  • переместите его на свой Mac
  • создайте файл ResourceRules.plist со следующим содержимым:

ResourceRules.plist:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
        <key>rules</key>
        <dict>
                <key>^Resources/</key>
                <false/>
                <key>^version.plist$</key>
                <true/>
        </dict>
</dict>
</plist>
  • теперь подписываются следующими командами: CODESIGN_ALLOCATE = "/Applications/Xcode.app/Содержание/Разработчик/USR/бен/codesign_allocate" codesign -s "Имя сертификата" --resource-rules ResourceRules.plist -fv MyApp.app

  • Затем удалите все в Ресурсе и проверьте подпись (codesign -v -v MyApp.app). Вы увидите, что он все еще действителен.

  • Используйте полный подписанный заглушка в процессе сборки. Вы можете изменить все в Ресурсах, но вы не можете изменить info.plist.

Ответ 3

Я использую продукт install4j для создания файлов DMG для своего приложения. Он правильно подписывает приложение в файле DMG и может делать это из ОС, отличных от macOS.

Предупреждение: install4j - это не бесплатное программное обеспечение, и оно довольно дорогое.