SwiftUI로 MacOS 메뉴 바 애플리케이션을 손쉽게 개발

12531 단어 macosSwiftUI
SwiftUI를 사용하면 메뉴 바 응용 프로그램을 쉽게 개발할 수 있습니다.

메뉴 바 응용 프로그램을 설치하면 상단 시스템 바에 응용 프로그램이 표시되고 사용자는 이 아이콘을 클릭하여 응용 프로그램의 팝오버 보기에 빠르게 액세스할 수 있습니다.



앱 검토를 기다리는 동안 시스템 바에서 작업 목록을 관리할 수 있는 작은 TODO 응용 프로그램을 최근 개발했습니다. 소스 코드를 다운로드하여 작동 방식을 확인할 수 있습니다.
htps : // 기주 b. 코 m / msz 참새 c / 메누바 r
htps : // 아 ps. 아 ぇ. 이 m/jp/아니 p/메누바 r도/이 d1550343840? mt=12

MacOS 애플리케이션 만들기



먼저 SwiftUI를 활성화한 빈 MacOS 응용 프로그램을 만듭니다. 응용 프로그램 유형으로 AppKit App Delegate를 선택했는지 확인하십시오.



AppDelegate.swift 파일 설정



메뉴 바 항목과 팝오버 창을 이 파일에서 설정해야 합니다. 이 기사에서는 ContentView() 를 팝업 창으로 사용합니다.

응용 프로그램에서 일반 인터페이스를 사용하려면 팝업 창 전용의 개별 SwiftUI 뷰를 만들어야 합니다.

변수 설정



다음 변수를 AppDelegate.swift 파일에 추가:
var statusBarItem: NSStatusItem!
var popover: NSPopover!

상태 표시줄의 항목 초기화


statusBarItem 는 시스템 메뉴 표시줄에 표시되는 항목입니다. 이 오브젝트를 이미지(또는 시스템 이미지)로 초기화해야 합니다.
self.statusBarItem = NSStatusBar.system.statusItem(withLength: CGFloat(NSStatusItem.variableLength))
guard let button = self.statusBarItem.button else { return }
button.image = NSImage(systemSymbolName: "checkmark.circle.fill", accessibilityDescription: nil)
button.action = #selector(showHidePopover(_:))

이 기사의 다음 부분에서 showHidePopover 함수를 정의합니다.

팝오버 초기화



이제 팝오버 창을 초기화하여 해당 창의 내용이 되는 SwiftUI의 뷰를 설정해야 합니다.
let popover = NSPopover()
popover.contentSize = NSSize(width: 350, height: 500)
popover.behavior = .transient
let contentView = ContentView().environment(\.managedObjectContext, persistenceController.storageContext)
popover.contentViewController = NSHostingController(rootView: contentView)
self.popover = popover

사용자가 메뉴 항목을 클릭할 때 팝오버 표시 또는 숨기기



또한 팝오버를 표시하거나 숨기는 기능 showHidePopover도 정의해야 합니다.
@objc func showHidePopover(_ sender: AnyObject?) {
    guard let button = self.statusBarItem.button else { return }
    if self.popover.isShown {
        self.popover.performClose(sender)
    } else {
        self.popover.show(relativeTo: button.bounds, of: button, preferredEdge: NSRectEdge.minY)
        self.popover.contentViewController?.view.window?.becomeKey()
    }
}

프로그램 실행



이제 프로그램을 실행할 수 있습니다. 시스템 메뉴 표시줄에 새 메뉴 항목이 표시되어야 합니다.

시스템 메뉴 모음에만 표시되는 응용 프로그램 만들기



Xcode에서 프로젝트를 만들면 Xcode는 SwiftUI 뷰를 창에 표시합니다.
func applicationDidFinishLaunching(_ aNotification: Notification) {
    // Create the SwiftUI view that provides the window contents.
    let contentView = ContentView()

    // Create the window and set the content view.
    window = NSWindow(
        contentRect: NSRect(x: 0, y: 0, width: 480, height: 300),
        styleMask: [.titled, .closable, .miniaturizable, .resizable, .fullSizeContentView],
        backing: .buffered, defer: false)
    window.isReleasedWhenClosed = false
    window.center()
    window.setFrameAutosaveName("Main Window")
    window.contentView = NSHostingView(rootView: contentView)
    window.makeKeyAndOrderFront(nil)
}

변수를 삭제하고, 할 수 있습니다.
func applicationDidFinishLaunching(_ aNotification: Notification) {
    let contentView = ContentView()
    // ...
}

또한 시스템에서 응용 프로그램 창을 표시하지 않으려면 window 파일의 applicationDidFinishLaunchingInfo.plist로 설정해야 합니다.



그런데 응용 프로그램은 시스템 메뉴 막대에만 표시되며 응용 프로그램 창은 표시되지 않습니다.

Github의 이 데모 프로젝트를 참조하세요. 위의 코드가 포함되어 있습니다.
htps : // 기주 b. 코 m / msz 참새 c / 메누바 r

트위터 @MszPro

내 게시된 Qiita 기사 목록을 카테고리별로 확인할 수 있습니다.

좋은 웹페이지 즐겨찾기