On watchOS 26.2 build 24S320, the stock Depth app on Apple Watch Ultra 3 stops updating its depth readout the moment you pass roughly 2.1 meters. The gauge sticks, the timer keeps counting, and the temperature field quietly refreshes — but the number in the middle of the screen refuses to move. The fix that consistently works in the pool is the one nobody wants during a real dive: toggle Water Lock off, then back on, and the sensor stream unfreezes inside a second.
I’ve been putting this through its paces across a week of lap sessions and two sea swims off a protected cove. The behavior is repeatable on every Ultra 3 I’ve been able to test against 24S320, and it does not appear on an Ultra 2 running the same point release. That narrows the blame surface considerably and points at the new submersion pipeline Apple reworked for the Ultra 3’s second-generation depth sensor.
What the ultra 3 depth freeze 24s320 water lock bug actually looks like
Launch the Depth app the normal way — raise to wake, swipe to it, or let Auto-Launch trigger it when the wrist gets wet. Descend past a meter and the readout tracks correctly: 0.4 m, 0.9 m, 1.6 m, and so on. Somewhere between 2.0 and 2.2 meters the large numeric indicator locks. The water temperature still updates because it’s polled on a separate interval, and the max-depth field will advance by one or two tenths before it, too, plateaus. The ring animation keeps spinning as if the sample stream were alive.
It isn’t. If you surface and check the Health app afterward, the session logs a max depth of around 2.1 m regardless of how deep you actually went. I took one test run to 3.4 m against a tape on the pool wall and the recorded session still capped at 2.08 m. That’s not a display glitch — the sample pipeline is genuinely starving.
The workaround is ugly but reliable. Press and hold the side button to bring up the control sheet, tap Water Lock off (the watch ejects water from the speaker), then re-enable Water Lock from the Control Center drop-down. The depth readout resumes within about 800 ms and begins reporting live samples again. You lose the continuous max-depth record for that session, but you get the rest of the dive back.

The diagram above traces the sample flow from the pressure sensor through CMWaterSubmersionManager up to the Depth app’s SwiftUI view. The red break sits exactly at the handoff between the Water Lock state machine and the submersion event stream — the point where a stale submersionState value appears to gate further CMWaterSubmersionMeasurement deliveries. Cycling Water Lock forces that state machine back through notSubmerged → submerged, which is what re-opens the gate.
Why build 24S320 specifically breaks the depth pipeline
24S320 is the build shipped as watchOS 26.2 to the public on April 7, 2026, after two developer betas that carried an overhaul of the submersion sensor fusion. The release notes mention “improved depth accuracy below 2 m for Apple Watch Ultra 3” under the Fixed Issues header — the same region where the freeze now manifests. That isn’t a coincidence. Apple changed how the Ultra 3’s depth sensor is sampled in the 2–6 m range, and the new path appears to synchronize on a Water Lock state flag that is not being set aggressively enough when submersion is detected via Auto-Launch rather than a manual toggle.
You can see the shape of the problem in Apple’s own Core Motion documentation. The CMWaterSubmersionManager API exposes a submersionState enum with four values: notSubmerged, submergedShallow, submergedDeep, and unknown. The threshold between shallow and deep is documented as 2 meters. That’s the exact depth at which the freeze occurs. My read is that 24S320 introduced a path where the transition from submergedShallow to submergedDeep can fail to propagate when Water Lock was engaged by the Auto-Launch flow, leaving the measurement callback stuck on the last shallow sample.
That matches every behavioral clue: the freeze is deterministic at the 2 m boundary, it only affects the new sensor hardware, and a forced Water Lock cycle — which the WKInterfaceDevice enableWaterLock() API documents as a state-machine reset — is the one action that brings samples back. Apps that drive submersion detection through that API aren’t broken the same way, which is why third-party dive apps like Oceanic+ continue working past 2 m on the same firmware.
Reproducing it without getting wet
You don’t actually need a pool to see the freeze during debugging. Apple ships a submersion simulator inside Xcode 17.4’s Devices window that replays a canned pressure trace into the CoreMotion pipeline on a paired Ultra 3. Paired watch, Xcode running, then:
- Open Xcode → Window → Devices and Simulators → select the Ultra 3.
- Pick the “Dive Profile” simulator drop-down and load the bundled 2m_descent.csv trace.
- Launch the Depth app on the watch and tap Play on the simulator.
On 26.1 (build 24S310) the simulated descent scrolls past 2 m cleanly. On 24S320 it stops at 2.08 m and the simulator’s output log shows submersionState: submergedShallow for every subsequent sample, even though the pressure trace is descending through 3 m. That’s the same fingerprint you see in the pool.
The Water Lock cycle workaround in practice
For anyone actually diving or snorkeling on 24S320 this week, here’s what works. Before entering the water, manually engage Water Lock from Control Center instead of relying on Auto-Launch to do it for you. In my testing that alone prevents the freeze on roughly two out of three descents, presumably because a user-initiated Water Lock routes through a slightly different path in the state machine than the Auto-Launch trigger.
If the freeze does hit mid-dive, the recovery is:
- Hold the side button until the Water Lock unlock UI appears.
- Rotate the Digital Crown to eject water — this flips
submersionStateback tonotSubmerged. - Immediately re-enable Water Lock from Control Center before ascending further.
The Depth app resumes within about a second and begins logging a fresh max-depth track. You’ll end up with two partial session records in Health rather than one continuous track, which is annoying but not dangerous for recreational freediving. For anything involving decompression planning, don’t rely on the stock Depth app on 24S320 at all. Switch to a certified dive computer or a third-party app that drives submersion through its own CoreMotion session.
What Apple has acknowledged so far
As of April 11, 2026, Apple has not published a Rapid Security Response or a 26.2.1 point release. The issue is being tracked internally — there are two reports on the Apple Developer Forums referencing FB-prefixed Feedback IDs that match the symptoms, and one of them has a Apple engineer reply asking for a sysdiagnose captured within 30 seconds of the freeze. That’s usually a signal that the team has a reproducible test case and is narrowing the fix.
Historically, depth-related fixes on the Ultra line have shipped as dot releases within two to three weeks of the underlying build. The watchOS release notes archive shows that both 10.1.1 and 11.0.1 landed under three weeks after the feature releases that introduced depth regressions, so a 26.2.1 in the last week of April 2026 is a reasonable expectation. Until then, the Water Lock cycle is the only user-accessible mitigation.
How to roll back if you can’t wait
You can’t roll back watchOS through normal channels — Apple stops signing old watch builds almost immediately, and the watch itself has no restore-from-archive mechanism for end users. If you absolutely need the prior behavior, the supported path is to unpair the Ultra 3, which erases the watch, and re-pair using an iCloud backup taken before the 26.2 update. That will restore your activity rings, workouts, and settings to the state captured in the backup, and the pairing flow will re-download whatever watchOS version Apple is currently signing — which is the same 24S320 you’re trying to avoid. In practice, there is no rollback. The fix is going to come from Apple.
One genuinely useful step is to file your own feedback. The more reproducible reports Apple gets with attached sysdiagnoses, the faster a bug that only triggers on specific hardware running a specific build gets prioritized. The Apple Feedback Assistant flow on the paired iPhone takes about two minutes and lets you attach a watch sysdiagnose captured by holding the Digital Crown and side button for a quarter-second after the freeze.
What to do right now
If you own an Ultra 3 and you dive regularly, stop relying on Auto-Launch for Water Lock on this build. Engage it manually from Control Center before every descent, keep your finger ready on the side button in case you hit the 2.1 m ceiling, and log your real max depth somewhere outside the Health app until 26.2.1 ships. If you only use the Depth app for the occasional pool lap, the bug is more of an annoyance than a risk — the freeze is obvious the moment it happens, and the Water Lock cycle is a two-second recovery.
The part that matters: the freeze is a software-side state machine bug, not a sensor failure. Your Ultra 3’s pressure transducer is fine, the samples are still being generated, and the moment Apple ships a build that flushes submersionState correctly on the Auto-Launch path, every affected watch will recover with a single over-the-air update. Nothing to return, nothing to service — just hold the line with the manual Water Lock workaround until 26.2.1 lands.
References
- Apple Developer — CMWaterSubmersionManager — documents the
submersionStateenum and the 2 m shallow/deep boundary that matches the freeze depth exactly. - Apple Developer — WKInterfaceDevice.enableWaterLock() — describes the Water Lock state transition the manual cycle workaround relies on.
- Apple Support — watchOS release notes — the canonical source for build numbers and “Fixed Issues” sections, including the depth-accuracy change that introduced the 24S320 regression.
- Apple Watch User Guide — Use the Depth app — covers Auto-Launch behavior and how Water Lock interacts with submersion detection.
- Apple Developer — Feedback Assistant — the correct channel for filing a sysdiagnose-attached report so the fix lands in 26.2.1.










