MenuBarExtra
A scene that renders itself as a persistent control in the system menu bar.
Declaration
struct MenuBarExtra<Label, Content> where Label : View, Content : ViewOverview
Use a MenuBarExtra when you want to provide access to commonly used functionality, even when your app is not active.
@main
struct AppWithMenuBarExtra: App {
@AppStorage("showMenuBarExtra") private var showMenuBarExtra = true
var body: some Scene {
WindowGroup {
ContentView()
}
MenuBarExtra(
"App Menu Bar Extra", systemImage: "star",
isInserted: $showMenuBarExtra)
{
StatusMenu()
}
}
}Or alternatively, to create a utility app that only shows in the menu bar.
@main
struct UtilityApp: App {
var body: some Scene {
MenuBarExtra("Utility App", systemImage: "hammer") {
AppMenu()
}
}
}An app that only shows in the menu bar will be automatically terminated if the user removes the extra from the menu bar.
For apps that only show in the menu bar, a common behavior is for the app to not display its icon in either the Dock or the application switcher. To enable this behavior, set the LSUIElement flag in your app’s Information Property List file to true.
For more complex or data rich menu bar extras, you can use the window style, which displays a popover-like window from the menu bar icon that contains standard controls. You define the layout and contents of those controls with the content that you provide:
MenuBarExtra("Utility App", systemImage: "hammer") {
ScrollView {
LazyVGrid(...)
}
}
.menuBarExtraStyle(.window)