App起動時にNSWindowへのインスタンスを取得しsetConterntSizeメソッドを呼び出せば良い
frameモディファイアで設定できるminWidth, minHeighはWindow Resize時には有効なのだが…
AppKitでは出来る起動時のWindow Size指定がSwiftUI@macOS 26では出来ない様だ。

App起動時にNSWindowのインスタンスを取得
起動の順番はApp▶️Scene▶️ContentView。ContentViewがWindowを生成する直前(onAppearイベント)にNSWindowのインスタンスが取得できる。
import SwiftUI
import AppKit
@main
struct Bg_GeometryApp: App {
var body: some Scene {
WindowGroup {
ContentView()
.onAppear {
DispatchQueue.main.async {
if let window = NSApplication.shared.windows.first {
let fixedSize = NSSize(width: 500, height: 200)
window.setContentSize(fixedSize)
// window.center()
}
}
}
}
}
}
おまけ: 起動後にWindowサイズを制限する
frameモディファイアでidealWidth, idealHeightを設定しても起動時のWindowサイズは固定できない。下記のコードではWindowサイズをResize時にwindowSizeプロパティに設定するコードも合わせて加えられている。
frameが返すViewのサイズ、つまりWindow全体に広がったView(maxWidht: .infinity, maxHeight: .infinity)のサイズはViewのbackgroundにあるGeometryReader(これもView)のサイズがそれだ。
import SwiftUI
struct ContentView: View {
@State var windowSize: CGSize = .zero
var body: some View {
Text("Fixed window size: \(String(format: "%.0f %.0f", windowSize.width, windowSize.height))")
.frame(minWidth: 500, maxWidth: .infinity, minHeight: 200, maxHeight: .infinity)
// .frame(minWidth: 500, idealWidth: 500, maxWidth: .infinity, minHeight: 200,
// idealHeight: 200, maxHeight: .infinity)
.background(
GeometryReader { geometry in
Color.blue
.onChange(of: geometry.size) { _, newSize in
print("window size:\(newSize.width) \(newSize.height)")
windowSize = newSize
}
}
)
}
}
