MacOS下Pyinstaller编译Kivy应用为.dmg后启动崩溃求助
Kivy App Crashes Immediately on macOS After PyInstaller Packaging to .dmg
第一步:获取崩溃日志(关键排查步骤)
GUI应用崩溃时无终端输出,可通过以下方式获取错误信息:
- 终端直接运行App:打开终端,进入App的可执行文件目录执行命令,实时查看启动错误:
cd /path/to/your/dist/Certifitech.app/Contents/MacOS ./Certifitech - 系统控制台查看崩溃报告:打开Launchpad→其他→控制台,在左侧「用户报告」中找到
Certifitech相关日志,里面的堆栈跟踪可定位崩溃点。
第二步:修复.spec文件中的问题
你的.spec文件存在多个可能导致macOS启动崩溃的问题,修改建议如下:
1. 移除重复的Tree打包指令
EXE和COLLECT阶段重复添加的Tree('/Users/simon/Downloads/Certifitech/')会导致文件路径冲突、冗余,直接删除这两行:
# 删除EXE内的该行 Tree('/Users/simon/Downloads/Certifitech/'), # 删除COLLECT内的该行 Tree('/Users/simon/Downloads/Certifitech/'),
2. 替换为macOS兼容图标
macOS应用要求.icns格式图标,.ico可能引发启动失败。将图标转换为.icns(可通过iconutil命令行工具),修改BUNDLE参数:
app = BUNDLE( coll, name='Certifitech.app', icon="icon.icns", # 替换为.icns文件路径 bundle_identifier="com.yourname.Certifitech", # 添加合法Bundle ID,如域名反转+应用名 )
3. 调整GUI应用控制台设置
Kivy GUI应用在macOS下应关闭终端控制台,避免干扰启动:
在EXE部分将console=True改为console=False:
exe = EXE( # 其他参数保留 console=False, # 其他参数保留 )
4. 添加Kivy必要隐藏导入
PyInstaller无法自动检测Kivy部分依赖,手动添加到hiddenimports:
a = Analysis( ['main.py'], # 其他参数保留 hiddenimports=['kivy.core.window.window_sdl2', 'kivy.core.image.img_sdl2', 'kivy.uix.behaviors'], # 其他参数保留 )
5. 禁用UPX压缩
UPX可能损坏macOS下的二进制依赖库,先禁用压缩测试:
在EXE和COLLECT部分将upx=True改为upx=False:
exe = EXE( # 其他参数保留 upx=False, # 其他参数保留 ) coll = COLLECT( # 其他参数保留 upx=False, # 其他参数保留 )
第三步:重新打包并测试
- 执行打包命令:
pyinstaller -y --clean main.spec - 先测试
dist/Certifitech.app确认启动正常,再生成dmg:hdiutil create ./Certifitech.dmg -srcfolder ./dist/Certifitech.app -ov
内容的提问来源于stack exchange,提问作者Tsonea
相关产品推荐
相关产品推荐

