Skip to content

No menu bar, only shows the default electron menu bar. #1

Description

@Cuber-Feng

From VS Code Agent:

1. 主进程在菜单创建前报错

调用顺序在 main.js:92-172 大致是:

db.initDB()
createWindow()
createStatsWindow()
setAppMenu()

菜单只有最后才创建。以下任意位置报错,都会导致 macOS 保留 Electron 默认菜单:

  • better-sqlite3 原生模块架构不匹配
  • 数据库目录权限问题
  • store 中保存了异常的 lastEvent
  • setWindowSize(mainWindow, currentEvent) 找不到对应尺寸
  • preload 或其他主进程依赖加载失败

其中跨 Mac 最值得优先检查的是 better-sqlite3。你配置了:

npmRebuild: false

如果构建电脑和目标 Mac 的架构不同,例如 arm64 和 x64,可能出现原生模块加载错误。

2. 运行的不是最新构建产物

这也是很常见的原因。若目标电脑运行的是旧 .app,它可能仍然包含没有菜单代码的旧版本。

可以在目标 Mac 终端启动:

/Applications/Float\ Timer.app/Contents/MacOS/float-timer

观察是否出现:

App menu has been created successfully

如果没有这行,说明程序在 appMenu.js:89 执行前已经出错。

3. appId 和 productName 不一致

这个确实应该统一,但它不是当前菜单问题的首要原因。

它会影响:

  • macOS 应用身份
  • Bundle Identifier
  • 用户数据目录
  • 权限和自动更新
  • 安装后的应用名称

但不会直接阻止:

Menu.setApplicationMenu(menu);

结论

优先级应该是:

  1. 查看目标 Mac 的主进程启动错误
  2. 确认是否输出 App menu has been created successfully
  3. 检查 better-sqlite3 的 CPU 架构
  4. 确认目标电脑安装的是最新 .app
  5. 最后统一 appId 和 productName

如果主窗口能显示,但没有菜单,那么最关键的信息就是目标 Mac 启动终端中的错误日志。

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions