Since macOS 26, including the latest 26.1, the menu bar icon does not show up for our app called Plover which is built with PySide6 (based on Qt 6) and runs via a relocatable python that is packaged into the app. The code is open source and can be found on GitHub. The latest release, including the notarized DMG, can be found here.
When running the .app via the command below, the menu bar icon does show up but the process that is running is python3.13 and not Plover:
/Applications/Plover.app/Contents/MacOS/Plover -l debug
When running the app by just clicking on the application icon, the process is Plover but the menu bar icon is not showing - also not in the settings (Menu Bar > Allow in the Menu Bar). Before macOS 26, the menu bar icon was always shown.
Some pointers to potentially relevant parts of our code:
This problem might be related to this thread, including the discussion around Qt not calling NSApplicationMain.
What I'm trying to figure out is whether this is a problem with macOS 26, Qt 6, PySide6, or our code.
Any pointers are highly appreciated!
You'd need to be logged in into GitHub to see the download button.
Ah, OK. I do have a GitHub account but I don’t habitually leave myself signed in for… well… reasons.
I downloaded this build and installed it in a VM, just like a normal user would. Actually, I did that twice, once on a 15.7.1 VM and again on a 26.1 VM. AFAICT that’s reproducing the problem, in that:
- On 15.7.1, I see your status menu item.
- On 26.1, I don’t.
I poked around and was a little surprised to see just a single process in play here. I guess I misread your earlier description of the issue, in that I assumed that your main app spawned some sort of child process which ran the status item. However, AFAICT there’s just a single process running your main app. Is that right?
If so, that limits the scope of the weirdness. Clearly macOS 26 supports apps showing status items. That works for the vast majority of such apps. So, something about your specific app is triggering the issue.
I see two potential factors here:
- The exec done by your
plover_launcher.ctrampoline. - All the third-party tooling that’s running within your process (Python itself, PySide6, Qt, and so on).
I think it’d be a good idea to split these apart, and I have suggestion for how to do that:
- Use Xcode to create a small AppKit-based test project that displays a status menu item using the AppKit API.
- Once you get that working, tweak the process so that the app’s main executable is a trampoline, based on
plover_launcher.c, which execs the real main executable.
The result of this test will be useful because:
- If it reproduces the problem then it rules out all the third-party tooling you’re using. This issue is solely triggered by your exec trampoline. You can then file a bug based on that.
- OTOH, if this test app works then you’ve ruled out the trampoline as a potential cause, and so you have to look at your third-party tooling. In that case, filing a bug with Apple is less likely to get traction. OTOH, you have the advantage that the remaining code is mostly under your control, and so you can tweak the code in order to run more experiments.
Share and Enjoy
—
Quinn “The Eskimo!” @ Developer Technical Support @ Apple
let myEmail = "eskimo" + "1" + "@" + "apple.com"