macOSの常駐プログラムを実装する必要が出てきた。考えてみると、これまでmacOS用常駐プログラムは実装したことがなかった。 そこで今回は簡単な常駐プログラムをSwiftで実装することにした。
要求仕様
常駐プログラムの実装に慣れることが目的であるため、できるかぎり簡単な仕様にする。
- 起動するとメニューバーに"Sample"と表示し常駐する。
- メニューバーの"Sample"をクリックすると、下部に"Quit"というメニューアイテムが表示される。
- "Quit"というメニューアイテムをクリックすると常駐プロセスが終了する。
実装
実装していく。
Storyboardでメニューを作成する
アプリケーションを実装する
Sample/Sample/AppDelegate.swift::
import Cocoa
@main
class AppDelegate: NSObject, NSApplicationDelegate {
@IBOutlet weak var menu: NSMenu!
let statusItem = NSStatusBar.system.statusItem(withLength: NSStatusItem.variableLength)
func applicationDidFinishLaunching(_ aNotification: Notification) {
self.statusItem.title = "sample"
self.statusItem.highlightMode = true
self.statusItem.menu = menu
let quitItem = NSMenuItem()
quitItem.title = "Quit"
quitItem.action = #selector(AppDelegate.quit(_:))
self.menu.addItem(quitItem)
}
func applicationWillTerminate(_ aNotification: Notification) {
}
func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool {
return true
}
@objc func quit(_ sender: Any) {
NSApplication.shared.terminate(self)
}
}
常駐プログラムの設定
Sample/Sample/Info.plist::
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>LSUIElement</key>
<true/>
</dict>
</plist>
完成
完成した。
一度やってしまえばどうってことはないが、慣れてないといろいろとハマる。