You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PyInstaller打包含PyQt的应用公证失败:PyQt dylib文件未签名或无有效时间戳

macOS PyInstaller打包PyQt5应用公证失败解决方案

已经完成带点号目录重命名操作后,按以下步骤执行即可完成公证前置准备:

1. 修正签名命令补全强制参数

你之前的签名操作没有添加公证要求的强制参数,会导致即使签名过程无报错,公证时仍然识别为无效签名。对所有二进制文件签名时必须使用完整命令:
codesign --force --deep --sign "你的开发者ID应用证书完整名称" --options runtime --timestamp 待签名文件路径
其中:

  • --timestamp参数会为签名添加苹果官方的安全时间戳,解决签名不包含有效时间戳的报错
  • --options runtime启用运行时强化功能,是苹果公证的强制要求

2. 修复目录重命名后的Qt路径依赖

将带点号的目录(如QtQuick.2)重命名为无点号格式后,Qt模块的内部引用路径还会指向旧的目录名,会导致后续运行崩溃,需要做两处修正:

  • 遍历所有修改过名称的Qt Qml目录,打开目录下的qmldir配置文件,把所有带旧点号目录名的路径替换为新的无点号目录名
  • 对目录下的所有dylib文件,用install_name_tool修正动态库依赖路径,示例命令:
    install_name_tool -change 旧依赖路径 新依赖路径 目标dylib文件路径

3. 按从内到外的顺序执行签名

签名顺序错误会导致内层文件的签名被外层操作覆盖,正确顺序为:

  • 先签名所有Contents/Resources下的dylib、二进制文件
  • 再签名Contents/MacOS下的主程序可执行文件
  • 最后签名整个.app应用包
    签名完成后执行校验命令确认有效性:
    codesign -vvv --deep --strict 你的应用.app
    返回valid on disk、satisfies its Designated Requirement即为签名有效。

4. 使用命令行工具打包应用

直接右键压缩应用会生成额外的隐藏目录、破坏签名结构,导致公证失败,必须用ditto命令打包:
ditto -c -k --sequesterRsrc --keepParent 你的应用.app 输出的压缩包名称.zip
生成的zip包即可直接上传进行公证。

内容的提问来源于stack exchange,提问作者fishbacp

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 16:39:02