mirror of
https://github.com/garrytan/gstack.git
synced 2026-07-18 21:47:20 +02:00
60 lines
1.8 KiB
Plaintext
60 lines
1.8 KiB
Plaintext
// AUTO-GENERATED from gstack/ios-qa/templates/DebugBridgeWiring.swift.template
|
|
//
|
|
// Wiring snippet for the app's @main entry. Users paste this into their
|
|
// App.swift inside the `init()` of the SwiftUI App struct, gated by
|
|
// #if DEBUG. The wiring is intentionally tiny; everything heavy lives in
|
|
// the DebugBridge target.
|
|
|
|
#if DEBUG
|
|
import Foundation
|
|
import DebugBridgeCore
|
|
#if canImport(UIKit)
|
|
import DebugBridgeUI
|
|
#endif
|
|
|
|
@MainActor
|
|
func startGstackDebugBridge<State>(
|
|
appState: State,
|
|
register: (State) -> Void
|
|
) {
|
|
// Read --recording flag from launch arguments
|
|
let recording = ProcessInfo.processInfo.arguments.contains("--gstack-recording")
|
|
|
|
// Install the UI resolvers before opening the listener. A warm daemon can
|
|
// issue its first request as soon as StateServer starts; it must never see
|
|
// the default empty screenshot/elements/mutation handlers.
|
|
#if canImport(UIKit)
|
|
DebugBridgeUIWiring.installAll()
|
|
#endif
|
|
|
|
// Generated typed accessors live in the app target, so pass their register
|
|
// function into the package instead of asking DebugBridgeCore to import
|
|
// app-owned types.
|
|
DebugBridgeManager.shared.start(appState: appState, register: register)
|
|
|
|
#if canImport(UIKit)
|
|
DebugOverlayWindow.shared.install(recording: recording)
|
|
#endif
|
|
}
|
|
#endif
|
|
|
|
// Example usage in the app's @main entry (paste this into App.swift):
|
|
//
|
|
// @main
|
|
// struct MyApp: App {
|
|
// @State private var appState = MyAppState()
|
|
//
|
|
// init() {
|
|
// #if DEBUG
|
|
// startGstackDebugBridge(
|
|
// appState: appState,
|
|
// register: MyAppStateAccessor.register
|
|
// )
|
|
// #endif
|
|
// }
|
|
//
|
|
// var body: some Scene {
|
|
// WindowGroup { ContentView() }
|
|
// }
|
|
// }
|