我有一个在qt(5.9.6(中编写的跨平台应用程序,在Win,Mac和ubuntu上运行。
在Mac上,仅使用QT工具(无Xcode(构建应用程序。
该应用程序具有第三方库FFPMEG。我们不编译它,我们使用https://ffmpeg.org/download.html#build-mac。
的预构建在初始阶段,该应用程序应该通过开发人员-ID签名的DMG图像分发(否则,GateKepeer会发出不受信任的开发人员的消息(。
dmg-image是通过 hdutil 构建的(不是通过 MacDeployqt util(。
我试图通过Apple Developer程序的证书签署.App文件和DMG-Image,特别是:
- MacOS->生产 -> Mac的开发人员ID标志版本应用程序,Mac内核扩展程序和Mac安装程序包Mac App Store -> 开发人员ID安装程序之外的分发此证书用于签署应用程序的安装程序包Mac App Store之外的分发
- MacOS->生产 -> Mac应用程序的开发人员ID标志版本,Mac内核扩展程序和Mac安装程序包适用于Mac App Store -> 开发人员ID之外的发行应用此证书用于编码您的应用程序的代码在Mac App Store之外发行。
(据我了解 - 这些是我们案件的证书 - 在AppStore之外发行(
所有证书都正确安装在系统中,并在"钥匙扣"中可见。
通过CodeSign手动签名的应用程序。
如果我尝试直接签署apply.app文件,则codeSign响应" 代码对象根本没有签名"。该应用程序不被视为签名。
然后,几个小时后,我发现我需要签署所有 framework , .dylib-files 和插件DMG。
然后,我成为签名所有文件,直到应用程序上的代码停止给出错误。这样:
...
$ codesign -s 9509FE0B2EBCC89D9047541AC762418395FCB40E Application.app
Application.app/: code object is not signed at all
# error, go next
$ codesign -s 9509FE0B2EBCC89D9047541AC762418395FCB40E Application.app/Contents/Frameworks/libavcodec.58.dylib
# ffmpeg is also shuld be signed - otherwise macOS give a not-at-all-error
...
$ codesign -s 9509FE0B2EBCC89D9047541AC762418395FCB40E Application.app/Contents/Frameworks/QtCore.framework
# Qt also sign
...
$ codesign -s 9509FE0B2EBCC89D9047541AC762418395FCB40E Application.app
# Ok, dmg is successfully signed.
codeSign停止在未完全签名的包裹上发誓。
然后在我们的计算机上运行Application.App -App-一切正常。然后在另一个Mac上运行 - 打开应用程序时的结果。App文件:
" application.App程序已损坏,无法打开。将程序移至篮子。"
它拒绝通过" hack"来启动,以供不信任的应用程序(通过命令按钮(。
但是 - 另一个Mac上的未完全签名的应用程序运行良好(但向不受信任的开发人员发誓(。
所以,我的问题是:
如何使用第三方库(FFMPEG(签名QT-Application .App和DMG?
谢谢!
该应用程序无法运行,因为它违反了对代码的某些限制。您需要使用entitlements
选项签名以禁用这些限制。
这是示例entitlements.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>com.apple.security.cs.allow-jit</key>
<true/>
<key>com.apple.security.cs.allow-unsigned-executable-memory</key>
<true/>
<key>com.apple.security.cs.disable-executable-page-protection</key>
<true/>
<key>com.apple.security.cs.disable-library-validation</key>
<true/>
<key>com.apple.security.cs.allow-dyld-environment-variables</key>
<true/>
</dict>
</plist>
macOS公证错误:"使用的签名算法太弱&quot"