Skip to content

Synchronize search dismissal with native iOS transitions - #95

Merged
tiensonqin merged 1 commit into
mainfrom
fix/native-search-dismissal
Oct 25, 2026
Merged

tiensonqin merged 1 commit into
mainfrom
fix/native-search-dismissal

Conversation

@tiensonqin

@tiensonqin tiensonqin commented Oct 25, 2026 •

Copy link
Copy Markdown
Contributor

Cancelling iOS search currently combines the system search/keyboard transition with a second full-screen modal dismissal. The outgoing toolbar can move or flash during teardown, and the capture bar is recreated afterward.

Present search beside the retained app navigation, with the underlying page and capture bar kept ready by the shared OCaml view. Synchronize the outgoing fade and teardown with UISearchController's native will/did-dismiss callbacks. The observer forwards SwiftUI's existing optional delegate methods and restores the original delegate on teardown. Keep the query/results intact until search has closed, and preserve destination navigation bars and overflow menus.

Validation:

  • Full OCaml core gate: 1179 tests passed, including iOS/Android state and property-navigation regressions.
  • iOS 26 simulator: empty/populated cancellation, outgoing toolbar position, three open/type/reopen cycles with delayed Unicode query acknowledgements, 12 page/block result pushes and native back transitions, and search-result editor toolbar checks passed.
  • Simulator app and Android debug app builds passed.
  • Remote iOS E2E currently stops before compiling the app: the opam bootstrap selects unavailable ocaml-base-compiler.5.5.2 (job log).

Before and Apple TestFlight reference use the reporter's device recordings; after uses an iOS 26 simulator. Recordings and diagnostic logs are not included in the commit.

Before / after / Apple TestFlight comparison

before-after-apple-comparison.mp4

After: empty and populated queries

after-empty-and-results.mp4

@tiensonqin
tiensonqin merged commit 59154a4 into main Oct 25, 2026
4 of 5 checks passed
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.

1 participant