我编译的 python pyqt5 应用程序经过 Apple 系统公证后无法运行。我正在运行 Big Sur 11.4。
[8181] Error loading Python lib '/var/folders/v4/55fs66d13_zgjry5v8vpbbb40000gn/T/_MEIchDPs9/Python': dlopen: dlopen(/var/folders/v4/55fs66d13_zgjry5v8vpbbb40000gn/T/_MEIchDPs9/Python, 10): no suitable image found. Did find:
/var/folders/v4/55fs66d13_zgjry5v8vpbbb40000gn/T/_MEIchDPs9/Python: code signature in (/var/folders/v4/55fs66d13_zgjry5v8vpbbb40000gn/T/_MEIchDPs9/Python) not valid for use in process using Library Validation: mapped file has no cdhash, completely unsigned? Code has to be at least ad-hoc signed.
/var/folders/v4/55fs66d13_zgjry5v8vpbbb40000gn/T/_MEIchDPs9/Python: stat() failed with errno=1
它说它找不到python库。
我试过了,没有运气:
- 蟒蛇 3.9.5
- 蟒蛇 3.7.8
- Python 3.7.6 和 pyinstaller 4.0
制作未经公证的可执行文件可以正常工作。应用程序包中有两个文件。pyqt5 应用程序可执行文件和一个 bash 脚本。公证后,bash 脚本运行良好。
pyinstaller 配置:
pyinstaller --noconfirm --onefile --noconsole --icon ... --name ... --add-data ... main.py
.spec 文件中添加的额外参数:
app = BUNDLE(exe,
name='Application.app',
icon='/Users/rokas/Desktop/USB_IoS/resources/icon.ico',
bundle_identifier='com.application.upgrade.tool',
info_plist={
'CFBundleName': 'Application',
'CFBundleDisplayName': 'Application',
'CFBundleVersion': '1.0',
'CFBundleShortVersionString': '1.0',
'NSRequiresAquaSystemAppearance': 'No',
'NSHighResolutionCapable': 'True',
},
)
这些是我给予我的申请的权利:
<key>com.apple.security.cs.allow-unsigned-executable-memory</key>
我的应用程序应该打开 shell 脚本来执行一些功能。但这只是它功能的一小部分。
建议代码签名过程由内而外完成,但该应用程序是单文件应用程序,因此没有太多要签名的内容。我使用的符号命令是。
codesign -s "Developer id certificate" -v --deep --timestamp --entitlements entitlements.plist -o runtime "application.app"