Skip to content

fix(mobile): iOS channel crash from unbounded scroll depth (upstream #8407 cherry-pick) - #222

Merged
RossHartmann merged 2 commits into
mainfrom
fix/ios-channel-crash-scroll-depth
Oct 18, 2026
Merged

RossHartmann merged 2 commits into
mainfrom
fix/ios-channel-crash-scroll-depth

Conversation

@RossHartmann

Copy link
Copy Markdown

Cherry-pick of upstream block/buzz bf8b356, "Fix iOS channel crash from unbounded scroll depth (block#8407)". It landed one commit after our sync snapshot 97e1f6a, so the #202 sync didn't carry it.

Kiingo TestFlight build 3 (314c242) crashes whenever a DM or channel is opened on Ross's iPhone. Upstream reproduced the same crash on iOS 27.0.1: an unbounded reversed timeline sends Infinity to the native navigation bar, and UIKit throws CALayerInvalidGeometry. The fix uses the finite viewport depth, and the native side rejects non-finite offsets.

This unblocks TestFlight build 4 (Kiingo M-4017).

🤖 Generated with Claude Code

brow and others added 2 commits October 18, 2026 11:39
### Summary

Opening a channel on iOS 27.0.1 could terminate Buzz when a reversed,
lazily loaded timeline reported an unbounded scroll extent. Flutter
forwarded `Infinity` to the native navigation bar, and UIKit threw
`CALayerInvalidGeometry` while setting the scroll view offset.

Use the finite viewport depth for that unbounded case, preserving the
scrolled-under appearance. Reject non-finite offsets at the native
platform boundary as a final safety check.

### Validation

- Added tests: a Flutter widget regression for an unbounded reversed
timeline, and an iOS native regression for a non-finite platform-channel
offset.
- Reproduced the original crash by tapping `#general` on an iPhone SE
running iOS 27.0.1. With this change, the channel rendered and survived
repeated back-and-reopen cycles. Native logging confirmed the channel
now sends finite offsets where it previously sent `Infinity`.
- The native regression passed on iOS 26.5 and 27.0 simulators with
Xcode 27.0. Flutter widget tests and `flutter analyze` passed.
- A full channel-flow simulator run was not available: the isolated
simulator Profile build could not resolve `BuzzPushKit`. The iOS 27.0.1
physical run exercised the full channel flow.
- The full Flutter suite had eight notification and push test failures,
all reproduced on the unchanged 0.24.0 source.

---------

Signed-off-by: Tom Brow <tomb@block.xyz>
(cherry picked from commit bf8b356)
…(M-4017)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Ross Hartmann <rosshartmann@RosssMacStudio.attlocal.net>
@RossHartmann
RossHartmann merged commit 17310f6 into main Oct 18, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants