У меня есть приложение (созданное с помощью Qt / QML), которое я пытаюсь подписать и нотариально заверить для распространения c Ad ho за пределами App Store (для внутреннего использования компанией). Apple подтверждает, что мое программное обеспечение было нотариально заверенным, и затем я сшиваю свой .app, но Gatekeeper по-прежнему останавливает запуск приложения и предупреждает пользователей:
Имя приложения не может быть открыт, потому что Apple не может проверить его на наличие вредоносного ПО.
Что я делаю не так? .
Вот шаги, которые я выполняю:
Запуск QMake / Build в Qt Creator.
Изменен ключ CFBundleIdentifier в сгенерированном файле Info.plist на com. myCompanyName . appName вместо com.yourcompany. appName сгенерировано Qt.
cd
в мою директорию сборки.
Ran macdeployqt:
/Users/<user>/Qt/5.13.0/clang_64/bin/macdeployqt <appName>.app -qmldir=<project source code dir>
.
Знак кода:
codesign --deep -f -s "Developer ID Application: <company name> (<team id>)" --options "runtime" "<appName>.app/"
(где идентификатор разработчика имя, как оно отображается в KeychainAccess).
Подтверждено, что подпись:
codesign -dv --verbose=4 <appName>.app
Возвращает:
* 105 6 * Или, если я посмотрю на (выбранный наугад) исполняемый файл из фреймворка Qt внутри пакета приложений:
codesign -dv --verbose=4 <appName>.app/Contents/Frameworks/QtCore.framework/Versions/5/QtCore
Возвращает:
Executable=<build dir>/<app name>.app/Contents/Frameworks/QtCore.framework/Versions/5/QtCore
Identifier=org.qt-project.QtCore
Format=bundle with Mach-O thin (x86_64)
CodeDirectory v=20500 size=49057 flags=0x10000(runtime) hashes=1526+3 location=embedded
VersionPlatform=1
VersionMin=658432
VersionSDK=658944
Hash type=sha256 size=32
CandidateCDHash sha256=*************************************
CandidateCDHashFull sha256=*************************************
Hash choices=sha256
CMSDigest=*************************************
CMSDigestType=2
Page size=4096
CDHash=*************************************
Signature size=8990
Authority=Developer ID Application: <my company name> (<my team ID>)
Authority=Developer ID Certification Authority
Authority=Apple Root CA
Timestamp=May 27, 2020 at 2:35:37 PM
Info.plist entries=8
TeamIdentifier=V7L2LD4Q9S
Runtime Version=10.14.0
Sealed Resources version=2 rules=13 files=1
Internal requirements count=1 size=184
zip: ditto -ck --rsrc --sequesterRsrc "<appName>.app" "<appName>.zip"
Загрузить для нотариального заверения:
xcrun altool --notarize-app -t osx -f <appName>.zip --primary-bundle-id="com.<my company name>.<appName>" -u "<develpper ID @ company name> -p "<app specific password>"
Получить электронное письмо что «Ваше программное обеспечение Ma c было успешно нотариально заверено».
Скрепка: xcrun stapler staple "<appName>.app"
Возвращает: The staple and validate action worked!
Распространить:
- Создать пустой образ диска с разреженным пакетом.
- Скопируйте в него пакет appName .app (вместе с ярлыком в /Applications).
- Конвертировать только для чтения.
- Распространить среди пользователей.
Если я посмотрю в Console. app - я вижу в журналах, что приложение не открывается:
default 15:10:56.549137-0400 runningboardd Invalidating assertion 294-139-3156 (target:executable<<appName>(501)>) from originator 139
default 15:11:01.061942-0400 runningboardd [executable<<appName>(501)>:4893] Death sentinel fired!
В консоли ничего нет с XprotectService
as this SO ответ предполагает.
Если я попытаюсь использовать spctl для проверки подписи, это не удастся:
spctl -v -a -t open --context context:primary-signature <appName>.app
Возврат:
opal.app: rejected
source=Unnotarized Developer ID
spctl -a -t exec -vv <appName>.app produces
Возврат:
<appName>.app: rejected
source=Unnotarized Developer ID
origin=Developer ID Application: <my company name> (<team ID>)
produces: invalid API object reference
Однако, если я использую степлер для проверки приложения, он проходит:
stapler validate <appName>.app
Возвращает: Processing: /<build dir>/<appName>.app
The validate action worked!
О моей среде: MacOS 10.15.3
Qt 5.13
Xcode 11.4