我有一个用Qt(5.9.6)编写的跨平台应用程序,可以在Win,Mac和Ubuntu上运行。
在Mac上,仅使用Qt工具(不使用Xcode)构建应用程序。
该应用程序具有一个第三方库ffpmeg。我们不编译它,而是使用https://ffmpeg.org/download.html#build-mac的预编译版本。
在最初阶段,应该通过开发者ID签名的dmg-image分发应用程序(否则Gatekipeer会提供不受信任的开发者消息)。
dmg映像是通过 hdutil (不是通过 macdelpoyqt )构建的。
我尝试使用Apple Developer Program的证书对.app文件和dmg-image进行签名,特别是:
(据我所知-这些是我们案件的证明-在AppStore外部分发)
所有证书均已正确安装在系统中,并在“钥匙串”中可见。
通过codesign手动进行应用程序签名。
如果我尝试直接对Application.app文件进行签名,则codesign会回答“ 代码对象根本没有签名”。该应用程序不被视为已签名。
然后,在搜寻了几个小时之后,我发现我需要在内部签名所有 .famework , .dylib文件和 plugins dmg。
然后我成为所有文件的签名,直到应用程序上的codesign停止提供错误为止。像这样:
...
$ 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-一切正常。 然后在另一台Mac上运行-打开Application.app文件时的结果:
“ Application.app程序已损坏,无法打开。将程序移至任务栏。”
它甚至拒绝通过不可靠应用程序的“ hack”启动(通过命令按钮)。
但是-在另一台Mac上签名不完整的应用程序可以正常运行(但是向不信任的开发人员发誓)。
所以,我的问题是:
如何使用第三方库(ffmpeg)对Qt-application .app和dmg进行签名?
谢谢!
答案 0 :(得分:0)
该应用程序违反了代码签名的某些限制,因此无法运行。您需要使用jshell> Runtime.version()
$3 ==> 12.0.1+12
选项签名才能禁用这些限制。
这是一个示例entitlements
entitlements.xml
macOS notarization error: "The signature algorithm used is too weak"