SwiftUIのEmptyViewはレイアウトに影響しないことで知られています。 EmptyViewはViewが存在しないことを意味するのでonAppearメソッドも呼ばれないと想定されます。 ただ、RootViewにEmptyViewのみを配置した場合はonAppearメソッドは呼ばれるので注意が必要です。

@main
struct SampleApp: App {
    var body: some Scene {
        WindowGroup {
            ContentView() // ContentViewだけを表示するとonAppearは呼ばれる
            // ContentView2() // ContentView2だけを表示するとonAppearは呼ばれない
        }
    }
}


struct ContentView: View {
    var body: some View {
        EmptyView()
        .onAppear {
            print("onAppear is called")
        }
    }
}

struct ContentView2: View {
    var body: some View {
        EmptyView()
        EmptyView()
        .onAppear {
            print("onAppear is not called")
        }
    }
}

ContentViewではView HierarchyにEmptyViewがあって、ContentView2ではView HierarchyにEmptyViewがないのでonAppearは呼ばれないみたいです。

ContentView ContentView2
onAppear is called onAppear is not called

おわりに

簡潔な記事ですが、EmptyViewのonAppearはRootViewに単体で配置すると呼ばれるという備忘録でした。