Bug: https://hola-tech.sg.larksuite.com/record/SBtlrVaHPeKJRZcvWlFldN4CgPe
Recording: https://screenrec.com/share/O06golstay
Fix: Save and Share now export the displayed My QR card as a real PNG, rather than a fake success alert or recipient text. Save succeeds only after Photos writes the file. Handle add-only permissions, denial/errors/retry, missing profile/layout, duplicate taps, same-tab reselection, and unmount. Normalize iOS paths and retain Android share attachments until safe native cache cleanup. No new dependencies or scanner/payment/CI-policy changes.
Native config: Explicit NSPhotoLibraryAddUsageDescription added. iOS binaries missing this key require a native rebuild; OTA JavaScript alone is insufficient.
Verified: Node 20.20.0 frontend 134 suites / 1362 tests passed, including 20 QR export regressions. Typecheck passed. Full ESLint: 0 errors / 29 existing warnings. Commitlint and whitespace passed. Independent source review approved. Genuine iOS native build passed.
Actual Maestro stdio MCP: add-only permission denial/grant, real USD and USDC PNG saves into Photos, native PNG share sheet, locally persisted share output with identical SHA-256, and saved image visible/decodable in Photos. Correct displayed profile and selected currency; strict localhost fixtures and zero financial operations.
Limits: No native Android/physical-iPhone or external social-app delivery test. Android permission/retention branches covered by unit tests. Existing Jest worker/timer teardown warnings remain.
Branch: hunghoang/fix/my-qr-save-share-image, originally based on develop d311966b, now synchronized with develop d123ed7a and targeting develop. The QR-validation changes already merged into develop are retained.
Conflict resolution (2026-10-16): merged develop d123ed7a into this source branch in 671fbff4, preserving both parents without rebasing or force-pushing. The shared QR screen retains both the validated scanner and the PNG export hook. Removed the obsolete Alert import and completed the existing focus-effect/colors test mocks; no behavioral assertions were removed.
Current combined-source verification on Node 20.20.0: QR/payment 10 suites / 203 tests passed; full FE 144 suites / 1556 tests passed; typecheck passed; full ESLint 0 errors / 29 existing warnings; commitlint/whitespace passed. Independent merge-resolution review approved with no findings. The native image-export hook and iOS configuration are unchanged from the previously verified source; native/Maestro validation was not rerun for this resolution. Existing Jest teardown warnings remain. CI on this merge commit is required before merge; this work does not merge MR126 into develop.