Skip to content

"See it on your wall" draws nothing on phones without LiDAR (regression from #41) #67

Open

Description

@AidenJohnston

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 normal and 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).

  • showResultInCamera sets state.resultInCamera to the result of live.showResult(model) (ScanEngine.swift#L1159-L1165).
  • showResult hangs the model on AnchorEntity(.anchor(identifier:)) for the meter anchor, sets model.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).
  • ResultARScreen draws the Canvas BatteryOverlay only when !state.resultInCamera (ResultARScreen.swift#L17), so once showResult returns true there is no fallback.

Hypotheses, none confirmed:

  • (a) The session re-run drops or re-identifies the meter anchor, so the AnchorEntity never resolves.
  • (b) The entity is placed off screen: a wrong orientation or position composition, or the anchor's transform is not the frame wall.meter uses.
  • (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 in ingest when frame.tracking changes (ScanEngine.swift#L334-L339), and this screen puts the capture in .idle mode (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 showResult returned true, whether the anchor resolved, and the entity's isEnabled.
  • Add a UI test hook that checks something is drawn.

Related.

Screen recordings are in the comment below.

Activity

  1. added
    bugSomething is broken or behaving incorrectly.
    size:M30-99 effective changed lines.
    on Sep 27, 2026
  2. AidenJohnston commented on Sep 27, 2026

    @AidenJohnston
    CollaboratorAuthor

    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.

  3. AidenJohnston commented on Sep 27, 2026

    @AidenJohnston
    CollaboratorAuthor

    In the build 7.1 field test on 2026-09-27 (05:50), TestFlight 0.1.0 (7.1) at 7b85a39 on 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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething is broken or behaving incorrectly.size:M30-99 effective changed lines.

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions