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。你配置了:
如果构建电脑和目标 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);
结论
优先级应该是:
- 查看目标 Mac 的主进程启动错误
- 确认是否输出
App menu has been created successfully
- 检查
better-sqlite3 的 CPU 架构
- 确认目标电脑安装的是最新
.app
- 最后统一
appId 和 productName
如果主窗口能显示,但没有菜单,那么最关键的信息就是目标 Mac 启动终端中的错误日志。
From VS Code Agent:
1. 主进程在菜单创建前报错
调用顺序在
main.js:92-172大致是:菜单只有最后才创建。以下任意位置报错,都会导致 macOS 保留 Electron 默认菜单:
better-sqlite3原生模块架构不匹配store中保存了异常的lastEventsetWindowSize(mainWindow, currentEvent)找不到对应尺寸其中跨 Mac 最值得优先检查的是
better-sqlite3。你配置了:如果构建电脑和目标 Mac 的架构不同,例如 arm64 和 x64,可能出现原生模块加载错误。
2. 运行的不是最新构建产物
这也是很常见的原因。若目标电脑运行的是旧
.app,它可能仍然包含没有菜单代码的旧版本。可以在目标 Mac 终端启动:
/Applications/Float\ Timer.app/Contents/MacOS/float-timer观察是否出现:
如果没有这行,说明程序在
appMenu.js:89执行前已经出错。3.
appId和productName不一致这个确实应该统一,但它不是当前菜单问题的首要原因。
它会影响:
但不会直接阻止:
结论
优先级应该是:
App menu has been created successfullybetter-sqlite3的 CPU 架构.appappId和productName如果主窗口能显示,但没有菜单,那么最关键的信息就是目标 Mac 启动终端中的错误日志。