正确使用MACOS上的QT-Application .App和DMG的方法



我有一个在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"

最新更新