맥북 메뉴바에서 앱 아이콘을 실행하면 어플이 최대화되고
최소화될때 앱이 종료됨
어떻게 해결해야할까?
앱 최소화 시 종료되는 문제 해결 방법
앱이 최소화될 때 자동으로 종료되는 이유는 macOS에서 메뉴바 전용 앱으로 잘못 인식하거나, 윈도우 관리를 잘못하고 있기 때문이래
이걸 방지하려면 몇 가지 설정을 변경해야 한다.
해결 방법 1: NSApplication.shared.windows
윈도우 설정 수정
macOS에서 앱이 최소화될 때 종료되지 않도록 하려면, 앱이 최소화될 때 종료되지 않도록 윈도우 설정을 변경해야 해.
수정 방법
AppDelegate.swift
또는 SceneDelegate.swift
에서 applicationShouldTerminateAfterLastWindowClosed
값을 false
로 설정.
import Cocoa
@main
class AppDelegate: NSObject, NSApplicationDelegate {
func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool {
return false // 마지막 윈도우가 닫혀도 앱이 종료되지 않도록 설정
}
}
이렇게 하면 메뉴바 아이콘을 클릭해서 최소화되더라도 앱이 종료되지 않는다고 쳇지피티가 알려줬으나 실패다!!
해결 방법 2: Info.plist
설정 수정
Info.plist
에서 앱이 백그라운드에서 실행될 수 있도록 설정해야 해.
수정 방법
Info.plist
에서 아래 키를 추가하거나 수정
<key>NSApplicationSupportsAutomaticTermination</key> <false/> <key>LSUIElement</key> <false/>
이렇게 설정하면, 앱이 최소화되더라도 자동 종료되지 않는다는데, 실패다!!
해결 방법 3: 윈도우가 사라지지 않도록 isVisible
속성 유지
앱이 최소화될 때 윈도우가 닫히는 것이 아니라 단순히 숨겨지도록 설정하는 방법이다.
AppDelegate.swift
에서 아래 코드 추가
import Cocoa
@main
class AppDelegate: NSObject, NSApplicationDelegate {
var window: NSWindow!
func applicationDidFinishLaunching(_ aNotification: Notification) {
if let mainWindow = NSApplication.shared.windows.first {
self.window = mainWindow
self.window.isReleasedWhenClosed = false // 창이 닫혀도 앱이 종료되지 않도록 설정
}
}
}
이 설정을 추가하면:
윈도우가 최소화되더라도 앱이 종료되지 않음!
메뉴바 아이콘을 클릭하면 다시 복구됨!
3번째 방법은 어떻게 해야하는지 잘 모르겠다.
4. 앱이 최소화될 때 실제로 종료되는지 확인
터미널을 열고, 아래 명령어로 앱이 완전히 종료되는지 확인:
log stream --predicate 'eventMessage contains "process"' --info
이 명령어를 실행한 상태에서 앱을 실행하고 최소화한 다음, 어떤 로그가 출력되는지 확인해본다.
특히 terminated
관련 메시지가 있는지 확인
드디어 원인 찾았다.
macOS 앱이 창을 닫거나 최소화할 때 자동으로 종료되는 이유는 NSApplication.shared.terminate(self)
같은 코드가 어디선가 호출되거나, NSApplication.shared.windows
리스트에서 윈도우가 완전히 제거되기 때문이다.
그래서 내 프로젝트에서 NSApplication.shared.terminate(self)
를 찾아보았다.
ContentView.swift 파일 내에서 아래 코드에서 호출하고 있는게 아닌가?
.onDisappear {
exitApp()
}
맥OS 업그레이드 하기전에는 이 코드가 있어도 이런 문제가 발생되지 않았다.
5시간의 삽질끝에 오류해결이구나!!
고맙다 ChatGPT!!