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

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,
    # 其他参数保留
)

第三步:重新打包并测试

  1. 执行打包命令:
    pyinstaller -y --clean main.spec
    
  2. 先测试dist/Certifitech.app确认启动正常,再生成dmg:
    hdiutil create ./Certifitech.dmg -srcfolder ./dist/Certifitech.app -ov
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 05:25:54