A view that IS SwiftUI
The shift: conform, don't wrap
In the sensor course your view was class DepthScannerView: ExpoView β a UIKit view that hosted something. Here your view is a struct that conforms to ExpoSwiftUI.View β it doesn't host SwiftUI, it is SwiftUI. That one change unlocks everything @expo/ui does.
Three pieces make a primitive:
1. a props class (@Field-annotated, an observable object),
2. a SwiftUI struct conforming to ExpoSwiftUI.View with @ObservedObject var props,
3. registration in the module definition.
Red flag: reaching for the UIKit-wrapping
ExpoViewstyle here. That's right for an AR camera surface, but for a native control it means re-hosting SwiftUI by hand and losing the reactive@Fieldβ body binding. When the view genuinely is SwiftUI, conform toExpoSwiftUI.Viewinstead of wrapping.