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

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

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

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

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

Есть ли эквивалент «кодового дизайна» для Linux?


person Dan Gravell    schedule 31.07.2012    source источник


Ответы (3)


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

Единственный способ, который я нашел для этого, — подключиться к Mac по SSH и использовать его.

С другой стороны, согласно @Steve McLeod (https://stackoverflow.com/a/55906962/28190), установочный пакет install4j предлагает это:

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

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

person Dan Gravell    schedule 28.08.2012
comment
Это лучшее, что я нашел до сих пор. Если кто-то знает, как это сделать в Linux, я дам ответ на свой вопрос... - person Dan Gravell; 28.08.2012
comment
Проблема в том, что мы получаем ошибку Взаимодействие с пользователем не разрешено. при вызове инструмента codesign через SSH. :( - person Mot; 09.04.2013
comment
Может быть, что-то делать с ключами, установленными в вашем экземпляре OS X? Извините, больше ничем не могу помочь. - person Dan Gravell; 09.04.2013
comment
Наверное брелок нужно разблокировать раньше: security unlock-keychain - person mstrap; 11.04.2013

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

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

  • создайте свое .app как обычно
  • перемести его на свой мак
  • создайте файл "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/Contents/Developer/usr/bin/codesign_allocate" codesign -s "Имя сертификата" --resource-rules ResourceRules.plist -fv MyApp.app

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

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

person Michael Wyraz    schedule 08.11.2012
comment
Кстати, как вы создаете файлы dmg в Linux? - person Michael Wyraz; 08.11.2012
comment
Ха! ну это другая история. Первоначально я использовал hfsutils (см. blog.serverhorror.com/2011/02/26/ ). Однако с тех пор я обнаружил, что hfsutils неправильно записывает DMG для поддержки подписанного приложения (работал через тикет со службой поддержки Apple, который пришел к выводу об этом). С тех пор мне пришлось изменить свою сборку с ssh на Mac Mini и создать там DMG. - person Dan Gravell; 08.11.2012
comment
Действительно ли это помогает, например. Как избежать предупреждений гейткипера? - person Malcolm MacLeod; 21.04.2017

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

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

person Steve McLeod    schedule 29.04.2019