Apple's Hello World project has great examples on how to open and dismiss different spaces. Here is an implementation of opening two windows programatically. Please note there are some issues with the latest versions of Xcode Beta which cause issues in the Hello World Application.
You need to add an ID for calling your second window:
import SwiftUI
@main
struct ExampleApp: App {
var body: some Scene {
WindowGroup {
PrimaryWindow()
}
WindowGroup (id: "SecondWindow"){
SecondWindow()
}
}
}
Then within the Primary window, declare the openWindow function:
@Environment(\.openWindow) private var openWindow
@Environment(\.dismissWindow) private var dismissWindow
This allows you to open a second window:
openWindow(id: "SecondWindow")
Full code below for PrimaryWindow and SecondWindow
import SwiftUI
import RealityKit
import RealityKitContent
struct PrimaryWindow: View {
@Environment(\.openWindow) private var openWindow
@Environment(\.dismissWindow) private var dismissWindow
var body: some View {
NavigationSplitView {
VStack {
Button(action: {
openWindow(id: "SecondWindow")
print("Show Second Window")
}) {
Text("Show Second Window")
.font(.headline)
.padding()
.background(Color.blue)
.foregroundColor(.white)
.cornerRadius(10)
}
.buttonStyle(.plain)
}
.frame(maxWidth: .infinity, alignment: .top)
.navigationTitle("Sidebar")
} detail: {
Text("Detail")
}
}
}
#Preview {
PrimaryWindow()
}
SecondWindow
import SwiftUI
import RealityKit
import RealityKitContent
struct SecondWindow: View {
@Environment(\.dismissWindow) private var dismissWindow
var body: some View {
NavigationSplitView {
VStack {
Button(action: {
dismissWindow(id: "SecondWindow")
print("Show Second Window")
}) {
Text("Dismiss Second Window")
.font(.headline)
.padding()
.background(Color.blue)
.foregroundColor(.white)
.cornerRadius(10)
}
.buttonStyle(.plain)
}
.frame(maxWidth: .infinity, alignment: .top)
.navigationTitle("Sidebar")
} detail: {
Text("Detail")
}
}
}
#Preview {
SecondWindow()
}