Is there any API to detect if the focus has changed to other apps on MacOS?
I need to know when is the focus taken and get the top app name so I can clear the floating panels on the last focused app.
Use NSWorkspace.
Here is a simple example:
import SwiftUI
func frontmostApplication() -> String {
if let w = NSWorkspace.shared.frontmostApplication?.localizedName {
return w
}
return "*Error*"
}
struct ContentView: View {
@State var frontApp = frontmostApplication()
let timer = Timer.publish(every: 1, on: .main, in: .common).autoconnect()
var body: some View {
VStack {
Text(frontApp)
.onReceive(timer) { input in
frontApp = frontmostApplication()
}
}
.padding()
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}