PyInstaller打包macOS应用执行codesign时提示bundle格式错误如何解决
解决方案
问题根源
你使用的是tkinter框架开发应用,PyInstaller打包时默认引入了无关的PyQt5依赖,嵌套的Qt Qml插件目录结构不符合苹果签名的bundle校验规则,导致签名失败。
修复步骤
第一步(优先推荐,从根源消除问题):打包时排除冗余的PyQt5依赖
你不需要用到PyQt5相关组件,执行PyInstaller打包命令时添加排除参数即可,打包后就不会生成报错的Models.2目录:pyinstaller 你的原有打包参数 --exclude-module PyQt5 --exclude-module PyQt5-Qt5 --exclude-module PyQt5-sip 你的入口文件.py如果使用spec文件配置打包,直接在
Analysis的excludes列表中添加上述三个模块即可。第二步(如果你确实需要保留PyQt5依赖时使用):从内到外逐层签名
苹果官方不推荐直接使用--deep参数签名分发用的应用,需要先签名所有内嵌的二进制文件,再签名主应用包:- 先给报错路径下的动态库单独签名
codesign -s "Paul F (TeamID)" -v --timestamp --entitlements /Users/fishbacp/Desktop/entitlements.plist -o runtime /Users/fishbacp/Desktop/dist/My_Application.app/Contents/MacOS/PyQt5/Qt/qml/QtQml/Models.2/libmodelsplugin.dylib- 按照同样的规则,签名所有
Contents目录下的.dylib、.framework、可执行二进制文件 - 最后签名整个应用包
codesign -s "Paul F (TeamID)" -v --timestamp --entitlements /Users/fishbacp/Desktop/entitlements.plist -o runtime /Users/fishbacp/Desktop/dist/My_Application.app额外校验项
确保所有需要签名的二进制文件权限正常,可执行如下命令修正权限:chmod -R 755 /Users/fishbacp/Desktop/dist/My_Application.app/Contents同时确认entitlements.plist已添加PyInstaller打包应用必须的权限,包括
com.apple.security.cs.allow-jit、com.apple.security.cs.allow-unsigned-executable-memory等。
内容的提问来源于stack exchange,提问作者fishbacp
相关产品推荐
相关产品推荐

