기본적으로 MAC OS 어플리케이션을 만들면 statusbar(이하 상태바)에 표시되지 않고 storyboard에 있는 화면이 새 창으로 뜨게된다.
statusbar에서도 컨트롤 가능한 어플리케이션을 만드려면 몇 가지 작업을 해주어야한다.
1. Appdelegate NSStatusItem 설정
먼저, Appdelegate에서 NSStatusItem 변수를 추가한다.
그 다음 applicationDidFinishLaunching 메써드 안에 NSStatusItem 설정을 해준다.
import Cocoa
@NSApplicationMain
class AppDelegate: NSObject, NSApplicationDelegate {
private var statusItem: NSStatusItem!
func applicationDidFinishLaunching(_ aNotification: Notification) {
statusItem = NSStatusBar.system.statusItem(withLength: NSStatusItem.variableLength)
}
func applicationWillTerminate(_ aNotification: Notification) {
// Insert code here to tear down your application
}
}
· variableLength : 컨텐츠 길이에 따라 statusItem의 길이가 달라짐
· squareLength : 상태바에 맞게 컨텐츠가 조정됨
2. StatusItem Button 설정
statusItem이 상태바에 나타나고 해당 statusItem을 이용하기 위해서는 nstatusItem에 button을 달아주어야 한다.
또한 상태바가 꽉 차있을경우 어플리케이션이 실행되도 상태바에 나타나지 않을 수 있으므로 이에대한 처리를 해준다.
func applicationDidFinishLaunching(_ aNotification: Notification) {
statusItem = NSStatusBar.system.statusItem(withLength: NSStatusItem.variableLength)
guard let statusBtn = statusItem?.button else {
let answer = showAlert(title: "Status bar is Full !", contents: "Restart after removing some status bar App.")
print(answer)
NSApp.terminate(self) //status bar is full -> quit app
return
}
}
· NSApp.terminate(self) : 앱 종료
상태바가 꽉 차있을경우 경고창을 띄우고 앱을 종료한다.
경고창을 띄우는 showAlert()함수는 다음과 같다.
경고창에 확인 버튼만 넣어놓고 취소버튼은 주석처리 해두었다. 필요할 경우 주석을 해제하고 원하는 옵션을 추가하면 된다.
import AppKit
func showAlert(title: String, contents: String) -> Bool {
let alert = NSAlert()
alert.messageText = title
alert.informativeText = contents
alert.alertStyle = .warning
alert.addButton(withTitle: "OK")
//alert.addButton(withTitle: "Cancel")
return alert.runModal() == .alertFirstButtonReturn
}
이제 statusButton에 표시될 내용을 넣어준다.
statusBtn.title = "StatusApp"
//statusBtn.image = NSImage(named: NSImage.Name(@ImageName))
//statusBtn.imagePosition = .imageLeft
타이틀에는 텍스트를 넣어주면 해당 텍스트가 상태바에 나타나고
.image를 사용해 이미지를 넣을수도 있다.
또한 타이틀과 이미지를 모두 넣을수도있는데 이때는 .imagePosition을 사용해 타이틀과 이미지의 배치를 정할 수 있다.
이 후 실행을 하면 다음과 같이 상태바에 실행된 어플리케이션을 볼 수 있다.
3. NSMenu 추가
statusButton을 클릭했을 때 메뉴가 나타나게 하기 위해서는 NSMenu를 추가해주어야 한다.
NSMenu()를 선언해주고 menu.addItem 메써드를 사용해서 메뉴 아이템을 추가한다.
각 메뉴아이템은 action(클릭시 실행될 이벤트), keyEquivalent(단축키 실행)을 추가할 수 있다.
import Cocoa
@NSApplicationMain
class AppDelegate: NSObject, NSApplicationDelegate {
private var statusItem: NSStatusItem!
private let menu = NSMenu()
func applicationDidFinishLaunching(_ aNotification: Notification) {
statusItem = NSStatusBar.system.statusItem(withLength: NSStatusItem.variableLength)
guard let statusBtn = statusItem?.button else {
let answer = showAlert(title: "Status bar is Full !", contents: "Restart after removing some status bar App.")
print(answer)
NSApp.terminate(self) //status bar is full -> quit app
return
}
statusBtn.title = "StatusApp"
menu.addItem(NSMenuItem(title: "첫번째 메뉴", action: nil, keyEquivalent: ""))
menu.addItem(NSMenuItem.separator())
menu.addItem(NSMenuItem(title: "두번째 메뉴", action: nil, keyEquivalent: ""))
statusItem.menu = menu
}
func applicationWillTerminate(_ aNotification: Notification) {
// Insert code here to tear down your application
}
}
이제 statusButton을 클릭하면 추가한 메뉴들이 나타난다.