首页 > 解决方案 > 如何消除错误代码签名 Qt 框架 - 嵌入式框架的根目录中存在未密封的内容

问题描述

我正在尝试对 Pyinstaller 生成的 MacOS .app 包进行代码设计和公证。该应用程序是使用 Python3、PyQt 绑定和 Qt 工具包开发的。

以下是版本:

该应用程序本身在 MAC 上运行良好,当尝试对应用程序进行代码签名以便对其进行公证时,问题就开始了。我在这里说明的问题与 Qt 框架有关。如果有人可以提供一组步骤来成功签署 pyinstaller 生成的 .app 包中的一个 Qt 框架,我将不胜感激。

这是我的过程...

.app 包由 Pyinstaller 创建并且运行良好。第一步是修复 Pyinstaller 创建的文件夹结构。它并不完全符合 Apple 的期望,但公平地说,Qt 安装的也不符合。运行此脚本以修复 .app 包中的 QtCore 框架

Echo 修复 QtCore 框架文件夹

qtfolder="/Users/xxx/Qt/5.13.1/clang_64/lib"
basefolder="/Users/xxx/Documents/PYINSTALLERTEST/dist/MyApp.app/Contents/MacOS/PyQt5/Qt/lib/QtCore.framework"
cp -R $qtfolder/QtCore.framework/Versions/5/Resources $basefolder/Versions/5
ln -s $basefolder/Versions/5 $basefolder
mv $basefolder/5 $basefolder/Versions/Current
ln -s $basefolder/Versions/Current/Resources $basefolder
ln -s $basefolder/Versions/Current/QtCore $basefolder

这会产生以下文件夹结构和文件,我认为它们符合 Apple 的预期。这是基于许多博客文章等。

QtCore@ -> /Users/xxx/Documents/PYINSTALLERTEST/dist/MyApp.app/Contents/MacOS/PyQt5/Qt/lib/QtCore.framework/Versions/Current/QtCore
Resources@ -> /Users/xxx/Documents/PYINSTALLERTEST/dist/MyApp.app/Contents/MacOS/PyQt5/Qt/lib/QtCore.framework/Versions/Current/Resources
Versions/

./Versions:

5/
Current@ -> /Users/xxx/Documents/PYINSTALLERTEST/dist/MyApp.app/Contents/MacOS/PyQt5/Qt/lib/QtCore.framework/Versions/5

./Versions/5:
QtCore*
Resources/

./Versions/5/Resources:
Info.plist

现在我开始签署文件。有很多关于签署什么以及如何签署的帖子,所有这些似乎都过时且相互矛盾。我认为目前最好的建议是签署所有文件。我尝试了很多组合,它们都以同样的错误告终。

sudo codesign --verbose --force --sign "Developer ID Application:  (xxx)" /Users/xxx/Documents/PYINSTALLERTEST/dist/MyApp.app/Contents/MacOS/PyQt5/Qt/lib/QtCore.framework/versions/5/resources/Info.plist
sudo codesign --verbose --force --sign "Developer ID Application:  (xxx)" /Users/xxx/Documents/PYINSTALLERTEST/dist/MyApp.app/Contents/MacOS/PyQt5/Qt/lib/QtCore.framework/versions/5/QtCore
sudo codesign --verbose --force --sign "Developer ID Application:  (xxx)" /Users/xxx/Documents/PYINSTALLERTEST/dist/MyApp.app/Contents/MacOS/PyQt5/Qt/lib/QtCore.framework/versions/5/_CodeSignature/CodeResources
sudo codesign --verbose --force --sign "Developer ID Application:  (xxx)" /Users/xxx/Documents/PYINSTALLERTEST/dist/MyApp.app/Contents/MacOS/PyQt5/Qt/lib/QtCore.framework/versions/5

至此框架中可以签名的每一个文件和文件夹都已经签名成功。我不签署符号链接,因为我认为这只是放弃了基础文件。最后一步是签署框架本身。

sudo codesign  --verbose --force --sign "Developer ID Application: (xxx)" /Users/xxx/Documents/PYINSTALLERTEST/dist/MyApp.app/Contents/MacOS/PyQt5/Qt/lib/QtCore.framework

这会产生以下错误消息:

/Users/xxx/Documents/PYINSTALLERTEST/dist/MyApp.app/Contents/MacOS/PyQt5/Qt/lib/QtCore.framework: replacing existing signature
/Users/xxx/Documents/PYINSTALLERTEST/dist/MyApp.app/Contents/MacOS/PyQt5/Qt/lib/QtCore.framework: **unsealed contents present in the root directory of an embedded framework**

关于我做错了什么的任何想法?

标签: pythonmacospyqt5pyinstallercodesign

解决方案


推荐阅读