Menu bar apps refer to apps that sit on the menu bar (a.k.a. status bar) of macOS. It provide instant access of the key functionalities, as well as being accessible all time during a login session.
Creating the Status Bar Item
NSStatusBar.system().statusItem(withLength: -1) to request a status bar item from the system. Note that it may be failed (return nil) if the status bar is already full packed with many other status bar items.
Upon successfully got an status bar item, you got a NSButton as the UI element to put on the menu bar. You need to configure it by providing an image, as well as setting the target and action of the button.
All these should be done during the app launching period, so in the app delegate, we have:
Note that a strong reference must be used to retain the status bar item object returned by the system. Otherwise it will be released afterwards, and nothing will be shown on the menu bar.
Displaying the Menu
To display the menu, you need to provide a reference point for placing the menu object, in this case, the status bar button. We then create a mouse event, and use
popUpContextMenu(_:with:for:) to bring up the menu.
If your app is menu bar ONLY, similar to the Dropbox macOS client, you need to set
Application is agent = YES in your Info.plist in order to omit the Dock’s app icon and the app menu on the upper left corner.