fix: release 3.0.156 with iOS NativeList disposal and round images - #125
Merged
Merged
Conversation
originalix
approved these changes
Sep 22, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
roundprop to OneKeyImage and its generated Nitro bindings3.0.156Problem
QA reproduced progressively slower account switching on iOS. During one 18-minute session with 9 account switches:
Platform and ownership boundary:
main/UI runtime; the isolated background runtime does not own these viewsBefore this fix,
HybridNativeList.onDropView()anddispose()only invalidated the action anchor. Closing the modal did not release the underlyingNativeListViewor detach its collection-view delegates, cells, image hosts, gesture links, diffable data, callbacks, and constraints.One account-selector open/close cycle retained approximately:
NativeListViewinstancesNativeListCellinstancesOneKeyImageHostViewinstancesNSLayoutConstraintinstancesRepeated cycles therefore increased native memory pressure. Hermes subsequently spent more time collecting the retained wrapper/object graph, which surfaced as whole-app jank.
This was not caused by SWR or MMKV flushing. Those synchronous operations can appear inside an already-stalled window, but they do not explain the monotonic UIKit object and constraint growth.
Fix
NativeListViewfromHybridNativeListduring bothonDropView()anddispose()The JS/Nitro wrapper may remain until Hermes GC, but it no longer keeps the UIKit collection/cell/image/constraint tree alive.
Version and release
The canceled
3.0.155publish had already made 25 of 41 workspace versions immutable in the registry. Reusing it would leave a mixed package set, so every publishable workspace and exact internal peer dependency was moved to3.0.156.nextdist-tagValidation
NativeListView, cells, columns, and accessory views returned to zeroNSLayoutConstraint: 613 baseline / 613 after 5 switches / 613 after 10 switchesOneKeyImageHostView: 39 baseline / 39 after 5 switches / 39 after 10 switches