Из-за чего electron приложение после нотаризации не запускается на других маках?

Ссылка скопирована
1 ответ

Сейчас ситуация такая: у меня возникла проблема с приложением для macOS после подписания кода и нотариального заверения.

По вводным: приложение подписано моим идентификатором разработчика и заверено с помощьюXcrun notarytoolПо вводным:. На компьютере, на котором была выполнена подпись, всё работает нормально:GatekeeperСейчас ситуация такая: принимает приложение, никаких предупреждений не появляется, а проверкиCodesign/sПКtlПроходят успешно.

Что я проверял:

По вводным: проверял подпись с помощьюcodesign --verify --deep --strict --verbose=2По вводным:. Проверял статус нотариального заверения с помощьюXcrun notarytool log.Оценивал довериеGatekeeperС помощьюspctl --assess --type executeНужно понять:. На моем пк все ок. Почему приложение считается вредоносным в других системах даже после нотариального заверения?

Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Стас DB Ответ

Если Electron-приложение запускается на вашем Mac, проходит codesign/spctl, но на других машинах считается вредоносным или не открывается, проблема обычно не в самом факте нотарификации, а в одном из трех мест: stapling ticket не прикреплен к артефакту, подписан не тот файл после упаковки, либо приложение повреждается при распространении.

После notarization нужно выполнить staple для финального .app/.dmg/.pkg, который вы отдаете пользователю:

xcrun stapler staple "MyApp.app"
xcrun stapler validate "MyApp.app"
 
spctl --assess --type execute --verbose=4 "MyApp.app"
codesign --verify --deep --strict --verbose=4 "MyApp.app"

xcrun stapler staple "MyApp.app" xcrun stapler validate "MyApp.app" spctl --assess --type execute --verbose=4 "MyApp.app" codesign --verify --deep --strict --verbose=4 "MyApp.app"

Если распространяете DMG, обычно подписывают и нотарифицируют именно DMG, а не только .app внутри. После изменения DMG или повторной упаковки старый notarization уже не относится к новому файлу.

codesign --sign "Developer ID Application: ..." --options runtime --timestamp "MyApp.app"
hdiutil create -volname "MyApp" -srcfolder "MyApp.app" -ov -format UDZO "MyApp.dmg"
codesign --sign "Developer ID Application: ..." --timestamp "MyApp.dmg"
xcrun notarytool submit "MyApp.dmg" --keychain-profile "notary" --wait
xcrun stapler staple "MyApp.dmg"

codesign --sign "Developer ID Application: ..." --options runtime --timestamp "MyApp.app" hdiutil create -volname "MyApp" -srcfolder "MyApp.app" -ov -format UDZO "MyApp.dmg" codesign --sign "Developer ID Application: ..." --timestamp "MyApp.dmg" xcrun notarytool submit "MyApp.dmg" --keychain-profile "notary" --wait xcrun stapler staple "MyApp.dmg"

В Electron также важны hardened runtime и entitlements. Если используются нативные модули, helper apps, login items, auto-updater, все вложенные бинарники должны быть подписаны корректно. electron-builder обычно это делает, но при кастомной сборке легко оставить неподписанный helper.

Проверьте приложение именно на чистой машине или новой учетной записи, скачав его тем же способом, каким скачивает пользователь. Иногда файл портится из-за архивации, облака, корпоративного антивируса или скачивания без сохранения extended attributes.

Практический чек-лист: подписать app с hardened runtime, проверить вложенные binaries, создать финальный dmg, подписать dmg, notarize dmg, staple dmg, скачать dmg на другом Mac, проверить spctl. Если на вашем Mac “все ок”, но на другом нет, почти всегда финальный распространяемый артефакт отличается от того, который вы проверяли.

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно