在MacOS上对Qt-application .app和dmg进行代码签名的正确方法是什么?

时间:2019-05-26 12:12:31

标签: macos qt cross-platform codesign dmg

我有一个用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进行签名,特别是:

    Mac的
  • macOS->生产-> Developer ID Sign版本 应用程序,Mac内核扩展和Mac Installer软件包 在Mac App Store之外分发-> Developer ID Installer 该证书用于签署您应用的安装程序包,用于 在Mac App Store之外分发
  • macOS->生产->开发人员ID签名的Mac应用程序,Mac内核扩展和Mac Installer软件包的版本 在Mac App Store之外分发-> 开发者ID 申请此证书用于对您的应用进行代码签名 在Mac App Store之外分发。

(据我所知-这些是我们案件的证明-在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进行签名?

谢谢!

1 个答案:

答案 0 :(得分:0)

该应用程序违反了代码签名的某些限制,因此无法运行。您需要使用jshell> Runtime.version() $3 ==> 12.0.1+12 选项签名才能禁用这些限制。

这是一个示例entitlements

entitlements.xml

macOS notarization error: "The signature algorithm used is too weak"