Repository navigation
"See it on your wall" draws nothing on phones without LiDAR (regression from #41) #67
Description
On an iPhone 14 (no LiDAR), "See it on your wall" shows the card text but draws no battery, no cable and no tint, in both runs that opened it. This is a regression from the RealityKit path added for #41 (2d33cea, PR #51). The Canvas overlay in build 3.1 did draw the battery.
Seen in the build 4.1 field test on 2026-09-26: TestFlight 4.1, beta at 45017ba, iPhone 14 (no LiDAR), iOS 26.6.2. Times are in the screen recordings.
- Run 1 (20:00, indoor mock wall): 6:10–6:25.
- Run 2 (20:15, the same wall): 4:36–4:56, with the correct ground height.
- Run 3 (a real house): not tested; the AR view was never opened.
Reports: A41-1-02, A41-2015-01.
What happens.
- The card reads "The spot an installer will check / 12 ft 3 in right of your meter, 13 ft of cable" (run 1) and "… 18 ft 5 in right of your meter, 17 ft of cable" (run 2). It shows the spot, not "Point at your meter", so tracking was
normaland the result had a spot. - Nothing is drawn in any frame, sampled at 2 fps. That includes frames aimed straight at the meter and its conduit, where the cable should start, and at the stretch where the spot is. The walk overlays are gone too.
- The 3D preview on the result screen did render in both runs.
- The tester: "See it on your wall. Where is it going? I don't know where it even is." (run 1); "Where is my battery? … This is unacceptable." (run 2).
In run 1 the ground was 3 ft too high (#62), which could have put the box in mid-air or off screen. Run 2 had the right ground and even the cable along the wall was missing, so the rendering path is the more likely culprit, not the geometry.
Cause (the code path is certain; which step fails isn't, it needs a device log).
showResultInCamerasetsstate.resultInCamerato the result oflive.showResult(model)(ScanEngine.swift#L1159-L1165).showResulthangs the model onAnchorEntity(.anchor(identifier:))for the meter anchor, setsmodel.orientation = simd_quatf(anchor.transform).inverse, and returns true as soon as the anchor is in the current frame (LiveCapture.swift#L130-L141).- It then calls
setOcclusion(true). On an iPhone 14, which supports.personSegmentationWithDepth, that re-runs the session with a new configuration (LiveCapture.swift#L158-L170). ResultARScreendraws the CanvasBatteryOverlayonly when!state.resultInCamera(ResultARScreen.swift#L17), so onceshowResultreturns true there is no fallback.
Hypotheses, none confirmed:
- (a) The session re-run drops or re-identifies the meter anchor, so the
AnchorEntitynever resolves. - (b) The entity is placed off screen: a wrong orientation or position composition, or the anchor's transform is not the frame
wall.meteruses. - (c)
setResultVisible(false)ran during a brief non-normal tracking state after the re-run and never turned back on. It is re-enabled only iningestwhenframe.trackingchanges (ScanEngine.swift#L334-L339), and this screen puts the capture in.idlemode (ScanEngine.swift#L253-L256). - (d) People occlusion hides everything: the whole view is segmented as a person, or as depth in front.
Fix direction.
- Keep the Canvas overlay as a fallback until the RealityKit entity is confirmed anchored and on screen.
- Don't re-run the session on this screen: enable people occlusion from the start of the session, or skip it on phones without LiDAR.
- Log whether
showResultreturned true, whether the anchor resolved, and the entity'sisEnabled. - Add a UI test hook that checks something is drawn.
Related.
- AR view draws the battery over people and objects in front of it (R-4) #41: this is the fix for that issue misbehaving on a non-LiDAR phone.
- Ground height taken from a
tableplane, so every height is about 3 ft too high #62: the ground from a table plane would have put the battery about 3 ft up. - "AR overlays drift off their objects after walking away (window outline drawn over the panel)": once this draws, it may be feet off.
- Report IDs A41-1-02, A41-2015-01.
Screen recordings are in the comment below.
Activity
AidenJohnston commentedon Sep 27, 2026
Screen recordings from the build 4.1 field test (TestFlight 4.1, iPhone 14 without LiDAR). Click a link to play.
Times are in each run's recording. Full analyses: PR #60.
AidenJohnston commentedon Sep 27, 2026
In the build 7.1 field test on 2026-09-27 (05:50), TestFlight
0.1.0 (7.1)at7b85a39on an iPhone 14 (iPhone14,7, no LiDAR, iOS 26.6.2), "See it on your wall" drew the battery footprint, the cable and the "Your battery spot is this way" pointer (5:45–5:54 in the recording). The tester: "there we go, it's in the right spot, there's the meter." This looks fixed on phones without LiDAR; close it if a second run agrees.De-dupe ground hints and key early reads by still id. (#67)