Я отвечаю на этот вопрос в отношении проекта Java, который требует нотариального заверения.С небольшими изменениями ответ должен работать и для других типов проектов (python, powershell, node).
Примечание: На момент публикации команда Apple заверяла нотариальное завершение ниже:Тем не менее, процедура работы работает, так как нотариальное заверение и безопасность становятся все более распространенными и более строгими, поэтому Apple неизбежно изменит и улучшит требования и процедуры ужесточения.Пожалуйста, отредактируйте, прокомментируйте или повторите ответ, если необходимо.
Подписание кода
- Для приложения Java ванили (
.pkg
или .app
, содержащего скрипты, баночки), нотариальное заверение должно бытьпроходить.Во время нотариального заверения Apple будет извлекать .jar
и искать собственные библиотеки.Если он найдет что-то, что не подписано, он будет отклонен.Если это не так, ты в порядке.Ниже приведены инструкции по нотариальному заверению с использованием xcrun
. Для приложения Java, которое содержит собственные вызовы (например, JNI) для связанных библиотек (.dylib
, .jnilib
), каждая связанная библиотека должна быть подписанас использованием сертификата «Приложение» (например, developerID_application.cer
).
- Сертификаты , Идентификаторы и профили , (Нажмите раскрывающийся список «iOS, tvOS, watchOS»)) macOS , Приложение ID разработчика .(может также сказать «с кекстом»).
![apple developer portal](https://i.stack.imgur.com/TC47O.png)
- Если у вас нет этого сертификата, вам необходимо запросить его, используя CSR.В моем случае у меня изначально был только сертификат для установщиков упаковки (без кодовой подписи).Этот процесс может стать сложным, особенно если вы используете один и тот же закрытый ключ для двух сертификатов.Используйте
openssl
через командную строку (вместо Keychain Access
), если вы застряли. Как только вы получите сертификат, подписание каждой собственной библиотеки .dylib|.jnilib|.so|bin
становится хитрым ,Общая идея состоит в том, чтобы использовать команду codesign
против собственной библиотеки, чтобы она была подписана как вы, разработчик.Синтаксис:
xargs codesign -s "P6DMU6694X" -v dependency.dylib
... где P6DMU6694X
- это либо уникальный идентификатор разработчика, либо точное общее имя сертификата (либо будет работать).
Для файла .jar
это может быть особенно громоздким , поскольку каждый пакет должен быть извлечен, подписан и затем снова заархивирован.
Нотариальное заверение
После подписания собственных библиотек пакет должен быть отправлен на нотариальное заверение с использованием xcrun
.
xcrun altool --eval-app --primary-bundle-id -u -f
Что может выглядеть примерно так:
xcrun altool --eval-app --primary-bundle-id com.domain.appname -u john@domain.com -f appname.pkg
Вам будет предложено ввести пароль для вашего разработчика Apple ( НЕ пароль, который вы используете для входа в свою учетную запись.Mac). Редактировать: Так как двойной фактор был обязательным, вам нужно создать пароль приложения для этого шага!
ПослеЧерез несколько минут команда xcrun
вернет уникальный идентификатор, который можно использовать, чтобы определить, было ли нотариальное заверение утверждено.
RequestUUID = a1b2c3d4e5-a1b2-a1b2-a1b2-a1b2c3d4e5f6
- Периодически проверять состояние этогоуникальный идентификатор, чтобы увидеть, был ли он одобрен или отклонен.
xcrun altool --eval-info a1b2c3d4e5-a1b2-a1b2-a1b2-a1b2c3d4e5f6 -u john@domain.com
Если отказать, они не скажут вам напрямую, почему, вы должны проанализировать ответ JSON.
LogFileURL: https://osxapps-ssl.itunes.apple.com/itunes-assets/...
Прочитайте JSON и исправьте выявленные проблемы.JSON минимизирован, вы можете запустить его через симпатичный форматтер.Если проблем нет, ваше приложение было нотариально заверено и имеет Ready for distribution
.
{
"logFormatVersion": 1,
"jobId": "a1b2c3d4e5-a1b2-a1b2-a1b2-a1b2c3d4e5f6",
"status": "Accepted",
"statusSummary": "Ready for distribution",
"statusCode": 0,
"archiveFilename": "appname.pkg",
"uploadDate": "2018-10-26T05:41:12Z",
"sha256": "e2350bda66...",
"issues" null
}
Сшивание
Наконец, сшивание сборкибудет гарантировать, что пакет является доверенным, даже если сетевое соединение недоступно.
(apple.com) Вы также должны прикрепить билет к своему программному обеспечению с помощью инструмента сшивателя, чтобы будущие дистрибутивы включали билет,Это гарантирует, что Gatekeeper сможет найти заявку, даже если сетевое соединение недоступно.Чтобы прикрепить билет к вашему приложению, используйте инструмент сшивателя:
xcrun stapler staple appname.pkg