RT
@YahiaNative: Mazify is a circular maze game I am building with Expo, React Native, Skia, and Reanimated. The player rotates the maze or the phone itself, works with gravity, collects items along the route, and finds the core. Getting that simple experience onto a phone involved a problem that appeared before the first maze could render: an immediate iOS launch crash.
This film is a retrospective of that work. It uses original diagnostic output, preserved source and patch excerpts, retained test results, and screenshots and responses from Argent. The closing playthrough comes from my later iPhone recording. Those sources are labeled throughout. The original diagnosis and editing session was not retained as a continuous screencast.
I originally reported that the app crashed immediately on a real device. The useful next step was to inspect the launch failure rather than assume the cause from what the screen looked like. The saved investigation covered three TestFlight reports for Mazify 2.10.7 (1) on iPhone OS 27.0.1. One preserved report recorded launch at 04:09:02.6395 and termination at 04:09:02.7279: 88.4 milliseconds later.
The exception was EXC_BREAKPOINT / SIGTRAP on the main thread. The trace named UIKit’s `___UIApplicationEvaluateRuntimeIssueForNoSceneLifecycleAdoption_block_invoke`. That is the specific clue behind this repair. The original report files are no longer at their old Xcode paths, but the original diagnostic tool output survives in the development session log. The film uses selected lines from that output, with device and incident identifiers omitted.
The pre-fix AppDelegate source also survives in an original source-read result. It created `UIWindow(frame: UIScreen.main.bounds)` and started React Native from the application delegate. The investigation connected that startup arrangement to the scene-lifecycle failure. This gave the agent a concrete native boundary to correct.
The preserved patch moved window creation into a scene delegate. The important line is `UIWindow(windowScene: windowScene)`: the window belongs to the connected scene. The adapter keeps the application delegate’s window reference aligned, preserves the existing React Native factory, and starts the React Native root after the scene has a usable window. The complete implementation also handles reconnection and forwards the relevant lifecycle and linking events.
Making that change durable mattered because the native project is generated through Expo tooling. The repair includes an Expo config plugin that migrates the supported AppDelegate template, declares the application scene, copies the scene adapter into the generated iOS target, and adds the Swift file to the application’s build sources. The current adapter and plugin are included in the evidence pack. The film’s short patch excerpt comes from the original recorded patch operation; it is not a newly typed reenactment.
The first checks covered that migration contract. Four retained plugin tests passed. They exercised the installed Expo template, preservation of other plugin code and linking handlers, scene registration, rejection of incompatible partial migrations, compiled source membership, and an unchanged second application of the plugin. These checks establish properties of the configuration and migration code.
Argent then provided the simulator controls and visible feedback for the runtime checks. The original signed Debug smoke replay records launch, the how-to-play screen, closing Help, selecting Level 1, opening Pause, restarting, and returning Home. Its summary reports 18 passed, 0 failed, and 0 errored. The full saved output also contains idle warnings from animated screens. I keep those warnings in the evidence instead of presenting the run as a warning-free result; the navigation steps have their own positive element assertions.
Standalone Release validation followed separately. The retained build metadata identifies version 2.10.8 (1), includes the scene manifest, and records a bundled Hermes program. With Metro stopped, the signed Release app reached Home and gameplay on iOS 26.5 and iOS 27.0. The iOS 27 relaunch receipt records a changed process and an original Argent `await-ui-element` response with `success: true` for the expected tutorial text.
That is the core documented loop: an owner-reported failure, a diagnosis tied to original crash output and pre-fix source, a preserved native correction, plugin checks, and simulator verification. It establishes the simulator journeys shown. It does not establish a retest of that repaired binary through TestFlight or a complete physical-device acceptance run.
The later Duo work added a second practical testing surface. The cover, unfolded display, and short landscape layouts place different demands on the same interface. The modal correction uses a modal-local safe-area provider, all four physical safe edges, a measured available height, and a scrollable body while Close remains fixed. The same approach appears in the paywall, Account, and Help.
Argent exercised those actual journeys in Release 2.10.8 (2) with Metro stopped: open the paywall, unfold, rotate, scroll to Restore, dismiss, and return to the selected maze. The retained screenshots and accessibility output show Restore reachable at the end of the scroll and Close still present. No purchase or restore transaction was executed as part of those checks.
A separate paused-resize check went deeper than the pictures. The saved snapshots keep run ID 14, elapsed time 40286.97874999978 milliseconds, the collection count, ball position, velocity, rotation, and ambient time identical while viewport width changes from 669 to 382 and display scale changes accordingly. This demonstrates state preservation in that check. It does not claim that a reset defect had previously been reproduced.
The final section returns to the game itself. My later recording shows a genuine Level 1 run ending in “Core found”: 19.56 seconds, 6 of 15 collected, and score 2,817. It is shown at normal speed with its original audio. The film identifies it as later owner-recorded footage; it does not present it as an Argent-controlled playthrough or assert that its binary is identical to the historical simulator build.
What I wanted to show is the connection between the engineering work and the result on screen. Codex could inspect the diagnostic and source evidence and make the native correction. Argent supplied simulator interaction, element discovery, runtime feedback, and repeatable checks. The attached film and evidence index make those roles and their proof visible.
#CloseTheLoop @swmansion #reactnative #expo