Как подписать приложение Mac OS X в Linux?
Для OS X я распространяю свое приложение Java внутри DMG. Начиная с выпуска Mountain Lion, при открытии приложения появляется следующее сообщение об ошибке:
[имя приложения] повреждено и не может быть открыто. Вы должны выбросить образ диска.
Очевидно, исправление заключается в подписи файла .app, поэтому я прочитал Руководство по подписанию кода. Все кажется простым, кроме важного вопроса как интегрировать это в мой процесс сборки с одним щелчком.
Построение моего продукта на всех платформах происходит на моей машине разработки Linux. Я запускаю Ant script, и установщик Windows, стартер EXE, установщик Linux, приложение OS X и DMG созданы. Поэтому я хотел бы интегрировать подписание кода в этот процесс.
Существует ли эквивалент "codeign" для Linux?
Ответы
Ответ 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 - это не бесплатное программное обеспечение, и оно довольно дорогое.