Skip to content

usagimaru/MainMenuTemplate

Repository files navigation

MainMenuTemplate

日本語

A Swift package for building macOS menu bar entirely in code — no XIB or storyboard required.

Requirements

  • macOS 15+
  • Swift 6

Installation

Add the package via Swift Package Manager:

.package(url: "...", from: "1.0.0")

Then add MainMenuTemplate to your target's dependencies.

Usage

Default menu

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.

Custom composition

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)

Localization

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)

Standard Templates

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

License

See LICENSE for details.

About

A package for building macOS app main menu programmatically with easy standard localization support.

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages