У меня есть приложение для Windows, которое может работать на OS X под Wine. Для удобства я хочу упаковать приложение как приложение OS X (ZIP-архив папки xxx.app
на основе WineBottler).
Обратите внимание, что основной исполняемый файл приложения (как определено тегом CFBundleExecutable
в Info.plist
) является сценарием оболочки, а не двоичным файлом.
Я хочу подписать приложение для прохождения через OS X Gatekeeper. Поскольку мой полный процесс сборки выполняется в Windows (и поскольку у меня вообще нет Mac), мне нужно подписать его в Windows.
Я уже обнаружил, что при подписании приложения создается папка _CodeSignature
с четырьмя файлами:
CodeDirectory
CodeRequirements
CodeResources
CodeSignature
Я не нашел никакой спецификации, описывающей содержимое этих файлов.
Экспериментальным путем я обнаружил, что CodeResources
— это файл XML с хэшами SHA-1 всех файлов в приложении. Я могу это сгенерировать.
Содержимое бинарного файла CodeRequirements
похоже исправлено. Кажется, это не меняется с содержимым приложения. Подтверждение приветствуется. Чем полезен этот файл?
Насчет бинарных файлов CodeDirectory
и CodeSignature
понятия не имею.
Оба файла меняются вместе с содержимым приложения. Кажется, что любое изменение файла приложения (включая обычный текстовый файл лицензии) влияет на них.
CodeSignature
явно содержит подпись. Я вижу в файле текстовую информацию о сертификате подписи кода. Есть ли инструмент, который может создать файл? Поскольку это подпись, она должна быть довольно стандартной. Хотя могут быть некоторые дополнительные двоичные метаданные, которые могут затруднить генерацию. Кто-нибудь знает, что он конкретно подписывает? Я могу представить, что он подписывает только файл CodeResources
, поскольку он описывает все остальные файлы в приложении. Или он рекурсивно подписывает все файлы в приложении?
Нативные приложения OS X имеют только CodeResources
. Так что на самом деле в _CodeSignature
нет подписи. Я полагаю, это потому, что они встроили подпись в основной исполняемый файл. Обратите внимание, что мой двоичный файл [Windows] (хотя на него напрямую не ссылается Info.plist
, как упоминалось выше) имеет кодовую подпись с использованием Windows signtool.exe
. По-видимому, OS X распознает подпись даже без ссылки, поскольку вывод codesign -d -vvv xxx.app
включает информацию о сертификате:
Executable=/Applications/WinSCP.app/Contents/MacOS/startwine
Identifier=WinSCP
Format=bundle with generic
CodeDirectory v=20100 size=135 flags=0x0(none) hashes=1+3 location=embedded
Hash type=sha1 size=20
CDHash=a1ef4f04b2c1b4b793788ce3ab9d7881528f3d95
Signature size=4867
Authority=Martin Prikryl
Authority=VeriSign Class 3 Code Signing 2010 CA
Authority=VeriSign Class 3 Public Primary Certification Authority - G5
Signed Time=23.4.2014 23:51:18
Info.plist entries=14
Sealed Resources version=2 rules=12 files=846
Internal requirements count=2 size=136
Смущает то, что это вообще не упоминает двоичное имя. Во всяком случае, это не делает Гейткипера счастливым. Обратите внимание, что приведенный выше тест выполняется для приложения, которое уже включает файл CodeResources
(вероятно, это то, на что ссылается Sealed Resources version
, поскольку счетчики rules
и files
совпадают с содержимым файла).
CodeRequirements
не является частью подписи как таковой и что я должен смотреть в основном наCodeDirectory
иCodeSignature
. К сожалению, нет описания их строения. - person Martin Prikryl   schedule 09.05.2014codesign
может подписать практически что угодно. Если нет исполняемого файла MachO, он сохраняет подпись в папке_CodeSignature
, а не в исполняемом файле. - person Martin Prikryl   schedule 14.05.2014_CodeSignature
достаточно для основного исполняемого файла, поскольку он содержит только хэши, а не подпись (т. Е. Из доверенного сертификата). - person   schedule 14.05.2014CodeDirectory
содержит хэши всех файлов в комплекте, аCodeSignature
является подписью [с использованием указанного доверенного сертификата]CodeDirectory
. Таким образом, подпись фактически подписывает каждый отдельный файл пакета. - person Martin Prikryl   schedule 14.05.2014