import SwiftUI import WebKit // 跨平台桥接:iOS 用 UIViewRepresentable,macOS 原生用 NSViewRepresentable,二者所需方法名 // (makeUIView/updateUIView 与 makeNSView/updateNSView)不同,故经 typealias 统一协议名后, // struct 体内仅方法实现按平台分支。 #if os(iOS) private typealias PlatformViewRepresentable = UIViewRepresentable #else private typealias PlatformViewRepresentable = NSViewRepresentable #endif // 把 EngineController 持有的离屏 WKWebView 桥进 SwiftUI 视图树(保持存活)。无可见 UI // 用途——引擎由 controller 经 JS 桥驱动(见 ios/PLAN.md arch A)。 struct EngineWebView: PlatformViewRepresentable { let controller: EngineController // 会话源:在构建 WebView(注入 __CDROP_BOOT__)之前确定性接好。冷启动重开时,本视图的 // makeUIView 可能先于 AppRoot.onAppear 跑——若那时 controller.auth 仍为 nil,boot 注入 // session:null → 引擎报「missing injected session」整个 boot 死(#11)。故在此同步接好。 let auth: AuthManager #if os(iOS) func makeUIView(context: Context) -> WKWebView { controller.auth = auth return controller.makeWebView() } func updateUIView(_ uiView: WKWebView, context: Context) { // 无需更新。 } #else func makeNSView(context: Context) -> WKWebView { controller.auth = auth return controller.makeWebView() } func updateNSView(_ nsView: WKWebView, context: Context) { // 无需更新。 } #endif }