検証環境:
Xcode 12.4
Swift 5.3.2
メニューバーに常駐する簡単な masOS アプリを作ってみる。
- まず Xcode のプロジェクト作成から macOS -> App テンプレートを選択する。
AppDelegate.swift ファイルに以下コードを書く。
NSMenu と NSMenuItem でメニューを作成、それを NSStatusItem にセットする。
import Cocoa @main class AppDelegate: NSObject, NSApplicationDelegate { // NSStatusItem.variableLength でメニューバーの横幅が可変となる。 variableLength: -1.0, squareLength: -2.0 let statusItem = NSStatusBar.system.statusItem(withLength: NSStatusItem.variableLength) func applicationDidFinishLaunching(_ aNotification: Notification) { let menu = NSMenu() menu.addItem(NSMenuItem(title: "menu1", action: #selector(menu1), keyEquivalent: "")) menu.addItem(NSMenuItem(title: "menu2", action: #selector(menu2), keyEquivalent: "")) menu.addItem(NSMenuItem.separator()) menu.addItem(NSMenuItem(title: "quit", action: #selector(quit), keyEquivalent: "q")) statusItem.menu = menu statusItem.button?.title = "Sample" } @objc func menu1(_ sender: NSMenuItem) { print("click menu1") } @objc func menu2(_ sender: NSMenuItem) { print("click menu2") } @objc func quit(_ sender: NSMenuItem) { print("quit") NSApplication.shared.terminate(self) } }
Main.storyboard を開き、WindowController を選択し、
Is Initial Controller
のチェックを外しておく。
これで空のウインドウが表示されなくなる。info.plist を開き、プラスボタンで1行追加する。そして
Key にApplication is agent (UIElement)
を選択し、Value にYES
とする。
Source Code として開くと以下の xml が追加されている。
<key>LSUIElement</key> <true/>
これで Dock 内にこのアプリケーションが表示されなくなる。