У меня есть приложение Windows, которое можно запустить под OS X под Wine. Для удобства я хочу упаковать приложение в качестве приложения OS X (ZIP-архив папки xxx.app
на основе WineBottler).
Обратите внимание, что основным исполняемым файлом приложения (как определено тегом CFBundleExecutable
Info.plist
) является оболочка script, а не двоичная.
Я хочу подписать приложение для прохождения через OS X Gatekeeper. Поскольку мой полный процесс сборки работает в Windows (и поскольку у меня фактически нет Mac вообще), я должен подписать его в Windows.
Я уже нашел, что подписание приложения создает папку _CodeSignature
с четырьмя файлами:
CodeDirectory
CodeRequirements
CodeResources
CodeSignature
Я не нашел никакой спецификации, описывающей содержимое этих файлов.
Экспериментально, я обнаружил, чтоCodeResources
представляет собой XML файл с хэшем SHA-1 всех файлов в приложении. Я могу сгенерировать это.
Содержимое двоичного файла CodeRequirements
кажется фиксированным. Кажется, что это не изменилось с содержимым приложения. Подтверждение приветствуется. Для чего этот файл полезен?
Что касается двоичных файлов CodeDirectory
и CodeSignature
, я понятия не имею.
Оба файла изменяются с содержимым приложения. Кажется, что любое изменение файла приложения (включая файл с текстовой лицензией) влияет на них.
CodeSignature
, очевидно, содержит подпись. Я могу видеть текстовую информацию о сертификате подписи кода в файле. Есть ли какой-нибудь инструмент, который может сгенерировать файл? Поскольку это подпись, она должна быть довольно стандартной. Хотя могут быть некоторые дополнительные бинарные метаданные, которые могут усложнить процесс генерации. Кто-нибудь знает, что именно он подписывает? Я могу себе представить, что он подписывает только CodeResources
файл, так как описывает все остальные файлы в приложении. Или он фактически подписывает все файлы в приложении рекурсивно?
У Native 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
соответствует совпадению с содержимым файла).