A Swift package for building macOS menu bar entirely in code — no XIB or storyboard required.
- macOS 15+
- Swift 6
Add the package via Swift Package Manager:
.package(url: "...", from: "1.0.0")Then add MainMenuTemplate to your target's dependencies.
Build and apply the standard menu bar in one call:
import MainMenuTemplate
@main
class AppDelegate: NSObject, NSApplicationDelegate {
func applicationDidFinishLaunching(_ notification: Notification) {
MainMenuBuilder.apply(MainMenuBuilder.defaultMainMenuTemplate())
}
}apply(_:) assigns the menu to NSApp.mainMenu, registers system menus (Services, Window, Help), and applies localization.
Use build(_:) to compose a menu from individual templates:
let menu = MainMenuBuilder.build {[
MainMenuBuilder.applicationMenuTemplate(),
MainMenuBuilder.fileMenuTemplate(),
MainMenuBuilder.editMenuTemplate(),
MainMenuBuilder.viewMenuTemplate(),
MainMenuBuilder.windowMenuTemplate(),
MainMenuBuilder.helpMenuTemplate(),
]}
MainMenuBuilder.apply(menu)The package includes English and Japanese localizations via Resources/MainMenu.xcstrings.
To provide app-specific overrides, pass your bundle and table name:
MainMenuBuilder.apply(menu, localizingWith: Bundle.main, tableName: "MainMenu")The localizationMode parameter controls how the user bundle is applied:
| Mode | Behavior |
|---|---|
.override (default) |
User bundle takes priority; keys not found fall back to the package's built-in translations |
.replace |
User bundle is used exclusively; keys not found display the original English key as-is |
// Patch mode — supply only what differs from the built-in translations (default)
MainMenuBuilder.apply(menu, localizingWith: Bundle.main, localizationMode: .override)
// Replace mode — the user bundle is the sole source of translations
MainMenuBuilder.apply(menu, localizingWith: Bundle.main, localizationMode: .replace)| Method | Menu |
|---|---|
applicationMenuTemplate() |
App menu (About, Settings, Services, Quit, …) |
fileMenuTemplate() |
File (New, Open, Save, Print, …) |
editMenuTemplate() |
Edit (Undo, Cut/Copy/Paste, Find, …) |
viewMenuTemplate() |
View (Toolbar, Sidebar, Full Screen) |
windowMenuTemplate() |
Window (Minimize, Zoom, Bring All to Front) |
helpMenuTemplate() |
Help |
formatMenu() |
Format — Font, Text (for text editing apps) |
findMenu() |
Find promoted to a top-level menu |
See LICENSE for details.