To open a window using SwiftUI, first add a WindowGroup that will display the window's view. Use the handlesExternalEvents modifier to indicate the event that is used to display the window.
import SwiftUI @main struct WindowOpenApp: App { var body: some Scene { WindowGroup { ContentView() } WindowGroup("My Info Window") { InfoView() } .handlesExternalEvents(matching: ["infowindow"]) } }
import SwiftUI struct InfoView: View { var body: some View { Text("Some text goes here") .padding() .frame(width: 300, height: 200) } }
A Button is used to open the window. The button's action defines the URL related to the app's URL scheme and event.
import SwiftUI struct ContentView: View { var body: some View { VStack { Text("Click button to open the window") Button("Open Info Window") { if let url = URL(string: "windowapp://infowindow") { NSWorkspace.shared.open(url) } } } .padding() .frame(width: 300, height: 200) } }
Finally, to get all of this to work properly, define the URL scheme in the Xcode project's settings at Target → Info → URL Types.
Gavin Wiggins © 2025
Made on a Mac with Genja. Hosted on GitHub Pages.