python - 如何消除错误代码签名 Qt 框架 - 嵌入式框架的根目录中存在未密封的内容
问题描述
我正在尝试对 Pyinstaller 生成的 MacOS .app 包进行代码设计和公证。该应用程序是使用 Python3、PyQt 绑定和 Qt 工具包开发的。
以下是版本:
- PyInstaller 3.5
- Python 版本:3.7.4 (v3.7.4:e09359112e,2019 年 7 月 8 日,14:54:52) [Clang 6.0 (clang-600.0.57)]
- Qt版本:5.13.0
- PyQt 版本:5.13.1
- sip 版本:4.19.19
该应用程序本身在 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**
关于我做错了什么的任何想法?
解决方案
推荐阅读
- django - Django - 将对象添加到模型查询集中而不先保存
- java - Eclipse Java 以相反的顺序编写希伯来语单词
- html - 切换文本时未交换表情符号
- linux - 内核如何知道有多少个内核
- snowflake-cloud-data-platform - 如何一次将 S3 存储桶上多个 CSV 文件中的几列插入雪花表(在单个查询中)
- plone - Plone 和 nginx 配置没有返回任何明显的结果
- android - 设置微调器弹出背景颜色
- python - 上传图片会损坏,但不会损坏 txt 文件
- tableau-api - 在具有固定 LOD(详细程度)的 Tableau 中计算 YTD MTD
- javascript - 如何将数组 1 的总和添加到数组 2 中的每个元素