Skip to content

[WAL-1347] feat(wallet): integrate NFC proximity in demos - #2166

Draft
szijpeter wants to merge 7 commits into
feature/wal-1347-nfc-proximity-transportfrom
feature/wal-1347-nfc-wallet-demos
Draft

[WAL-1347] feat(wallet): integrate NFC proximity in demos#2166
szijpeter wants to merge 7 commits into
feature/wal-1347-nfc-proximity-transportfrom
feature/wal-1347-nfc-wallet-demos

Conversation

@szijpeter

@szijpeter szijpeter commented Aug 30, 2026

Copy link
Copy Markdown
Contributor

Summary

Integrates the NFC transport from walt-id/waltid-identity#2165 into the existing WAL-1347 proximity journey across Compose Android, Compose iOS, and native SwiftUI.

The host integration follows walt-id/waltid-architecture#60 and keeps the same shared review, consent, progress, completion, and recovery experience introduced by WAL-1346.

This PR contains the complete runtime-profile delta formerly carried by #2172, including native SwiftUI parity and composition with the ReaderAuth settings provider. #2172 was closed as superseded after transplant proof and is not a separate merge unit.

What Changed

Compose Android

  • Declares the dedicated, unlock-required mdoc HCE service with only the three supported AIDs and wires the Android platform adapter into the existing proximity controller.
  • Surfaces NFC through the current in-person entry and shared state/actions rather than adding a second presentation flow.

Compose iOS and native SwiftUI

  • Adds thin host adapters over the shared Swift CardSession bridge and wires them into each demo's existing wallet/session lifecycle.
  • Enables the Apple-approved HCE capability on the two wallet host targets with the exact Type 4/NDEF, conventional mdoc retrieval, and provisional NFCv2 AID prefixes. The IdentityDocumentProvider extensions and default-contactless-app entitlement remain intentionally untouched.
  • Preflights selected BLE capabilities and permission remediation before creating the native SwiftUI session, and keeps a system-managed CardSession alive while its full-screen UI backgrounds the host application.
  • Keeps public support, eligibility, best-effort presentment intent, and platform-session outcomes in the existing status and recovery UI.

Cross-platform behavior

  • Reuses the current proximity components, copy, review surface, actions, safe areas/toolbars, and lifecycle cleanup across all three demos.
  • Aligns the native QR presentation size with Compose while preserving the existing bounded/scannable renderer.
  • Extends controller, UI-scenario, view-model, and native adapter regression coverage for NFC availability, preparation, cancellation, deactivation, presentment-intent failure/absence/expiry, repeated attempts, permission preflight, system NFC lifecycle transitions, and the observed Multipaz reader carrier.

Architecture Notes

  • Compose continues to share product state and UI; platform code is limited to HCE/CardSession host registration and callback forwarding.
  • The parent PR owns the exhaustive consumer mapping required by its public SDK action contract; this child owns the actual app-level NFC host registration and presentation-flow integration.
  • The demo apps do not parse APDUs, choose protocol state, or duplicate SDK capability rules.

Caveats and Follow-Ups

  • The Compose Android demo completed a conventional NFC Negotiated Handover presentation through a reader-selected BLE bearer against an external identity reader on a frozen earlier ancestry. A later QR-to-NFC hybrid canary also passed on frozen [WAL-1348] feat(mdoc): implement Wi-Fi Aware retrieval #2168 head ae4efeb2dfaf60fa7daaab80db4415c4a63c57b0; neither result is cross-credited to the current head.
  • A physical native SwiftUI development build from the final unchanged source tree now frozen as exact head 8d02138e6b9a5b2921496a7c59d0b8fff011cd77 completed conventional NFC Negotiated Handover against Multipaz Identity Reader 0.4.0-pre.3.22549ee (45) on Android API 31, continued over the reader-selected BLE bearer, returned the user-approved credential response, and reached the reader's completed state. The iPhone HCE trace also recorded the APDU exchange before normal session shutdown.
  • That exact-source result proves only the tested native iOS conventional NFC-to-BLE path. Compose iOS HCE, direct NFC retrieval, provisional NFCv2 variants, the broader negative/variant and Appendix 2 matrix, distribution signing, and release qualification remain open.
  • Bounded Android direct NFCv2 and NFCv2-to-BLE hybrid interoperability, early field-loss handling, fresh-session recovery, and a 42,507-byte single-APDU response are recorded in WAL-1349 architecture PR #61. The same plan now maps the public Appendix 2 conventional NFC cases; repeat requests, strict fragmentation, and the broader negative/variant matrix remain open.
  • Typed persisted default, provisional NFCv2 hybrid, and provisional NFCv2 direct profiles are owned by this integration PR. Former donor #2172 is closed as superseded and is not a separate merge unit.
  • Apple approval is complete for the two wallet host bundle identifiers and the exact requested AID prefixes. The tested native iOS development build carried the approved entitlement and completed the physical exchange described above; refreshed distribution signing assets and release-build entitlement inspection remain release gates.
  • This PR is 571c0b9d8f308a8fa86a35b3d909be668020753a on parent [WAL-1347] feat(mdoc): implement NFC proximity transport #2165 d8375dcd8bd2aec0fc533fb009b93359b08c5d33. The physical result above remains bound to its originally recorded source head rather than being cross-credited to this rewritten head.
  • Wi-Fi Aware retrieval and platform capability reporting continue in the stacked WAL-1348 draft PR #2168.

Breaking

None for published APIs. These demos consume the unreleased WAL-1347 SDK contract from the stacked parent PR.

@szijpeter szijpeter added the ci:mobile Run mobile related CI workflows for this PR label Aug 30, 2026
@szijpeter szijpeter self-assigned this Aug 30, 2026
@linear-code

linear-code Bot commented Aug 30, 2026

Copy link
Copy Markdown

WAL-1347

@coderabbitai

coderabbitai Bot commented Aug 30, 2026

Copy link
Copy Markdown
Contributor

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Team

Run ID: 1f4fcb1b-af58-4797-80dc-d60d11235405

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@szijpeter
szijpeter force-pushed the feature/wal-1347-nfc-wallet-demos branch 2 times, most recently from 23e2f32 to 983596f Compare August 30, 2026 10:31
@szijpeter
szijpeter force-pushed the feature/wal-1347-nfc-proximity-transport branch from a578bc7 to 340cce3 Compare August 30, 2026 22:09
@szijpeter
szijpeter force-pushed the feature/wal-1347-nfc-wallet-demos branch from 983596f to 299bb8b Compare August 30, 2026 22:09
@szijpeter
szijpeter force-pushed the feature/wal-1347-nfc-proximity-transport branch from 340cce3 to b57c86c Compare August 30, 2026 22:35
@szijpeter
szijpeter force-pushed the feature/wal-1347-nfc-wallet-demos branch 2 times, most recently from 2f5c6fa to 9c7babe Compare August 30, 2026 22:50
@szijpeter
szijpeter force-pushed the feature/wal-1347-nfc-proximity-transport branch from e4995e1 to 34f5587 Compare August 30, 2026 23:30
@szijpeter
szijpeter force-pushed the feature/wal-1347-nfc-wallet-demos branch from 9c7babe to 24b5208 Compare August 30, 2026 23:30
@szijpeter
szijpeter force-pushed the feature/wal-1347-nfc-wallet-demos branch from 24b5208 to 39bf74d Compare August 31, 2026 10:14
@szijpeter
szijpeter force-pushed the feature/wal-1347-nfc-proximity-transport branch from 34f5587 to 17973dc Compare August 31, 2026 10:14
@szijpeter
szijpeter force-pushed the feature/wal-1347-nfc-wallet-demos branch 2 times, most recently from 139eeb8 to f10ccee Compare August 31, 2026 17:10
@szijpeter
szijpeter force-pushed the feature/wal-1347-nfc-proximity-transport branch from 97224bb to a8a7634 Compare September 1, 2026 10:45
@szijpeter
szijpeter force-pushed the feature/wal-1347-nfc-wallet-demos branch from f10ccee to 060a028 Compare September 1, 2026 10:45
@szijpeter
szijpeter force-pushed the feature/wal-1347-nfc-proximity-transport branch from a8a7634 to 0e6f176 Compare September 1, 2026 11:13
@szijpeter
szijpeter force-pushed the feature/wal-1347-nfc-wallet-demos branch from 060a028 to cfdff51 Compare September 1, 2026 11:13
@szijpeter
szijpeter force-pushed the feature/wal-1347-nfc-proximity-transport branch from 0e6f176 to a5c3d44 Compare September 1, 2026 11:54
@szijpeter
szijpeter force-pushed the feature/wal-1347-nfc-wallet-demos branch from cfdff51 to 9ec523e Compare September 1, 2026 11:55
@szijpeter
szijpeter force-pushed the feature/wal-1347-nfc-proximity-transport branch from a5c3d44 to de2a097 Compare September 1, 2026 12:44
@szijpeter
szijpeter force-pushed the feature/wal-1347-nfc-wallet-demos branch from 9ec523e to ed0b9ba Compare September 1, 2026 12:45
@szijpeter
szijpeter force-pushed the feature/wal-1347-nfc-proximity-transport branch from de2a097 to bd58ed4 Compare September 1, 2026 13:06
@szijpeter
szijpeter force-pushed the feature/wal-1347-nfc-wallet-demos branch from e01ea39 to 84542f9 Compare September 2, 2026 10:04
@szijpeter
szijpeter force-pushed the feature/wal-1347-nfc-proximity-transport branch from 9acafd4 to 370b687 Compare September 2, 2026 10:28
@szijpeter
szijpeter force-pushed the feature/wal-1347-nfc-wallet-demos branch from 84542f9 to 072ba89 Compare September 2, 2026 10:28
@szijpeter
szijpeter force-pushed the feature/wal-1347-nfc-proximity-transport branch from 370b687 to aa15be8 Compare September 2, 2026 12:00
@szijpeter
szijpeter force-pushed the feature/wal-1347-nfc-wallet-demos branch 2 times, most recently from ec7f7ff to f934469 Compare September 2, 2026 12:08
@szijpeter
szijpeter force-pushed the feature/wal-1347-nfc-proximity-transport branch from d3a3ba1 to d43e58a Compare September 2, 2026 14:59
@szijpeter
szijpeter force-pushed the feature/wal-1347-nfc-wallet-demos branch from f934469 to ad15e04 Compare September 2, 2026 14:59
@szijpeter
szijpeter force-pushed the feature/wal-1347-nfc-wallet-demos branch from ad15e04 to 13068e1 Compare September 2, 2026 19:37
@szijpeter
szijpeter force-pushed the feature/wal-1347-nfc-proximity-transport branch 2 times, most recently from 5639e50 to 384ff4b Compare September 3, 2026 14:12
@szijpeter
szijpeter force-pushed the feature/wal-1347-nfc-wallet-demos branch 2 times, most recently from aea085c to b1cf07d Compare September 3, 2026 15:39
@szijpeter
szijpeter force-pushed the feature/wal-1347-nfc-proximity-transport branch from 4b1b1e6 to c95de2e Compare September 4, 2026 12:04
@szijpeter
szijpeter force-pushed the feature/wal-1347-nfc-wallet-demos branch from 8d02138 to cdf4f66 Compare September 4, 2026 12:04
@szijpeter
szijpeter force-pushed the feature/wal-1347-nfc-proximity-transport branch from c95de2e to da3e671 Compare September 4, 2026 12:51
@szijpeter
szijpeter force-pushed the feature/wal-1347-nfc-wallet-demos branch 2 times, most recently from c7af7ad to 7c3223f Compare September 4, 2026 13:12
@szijpeter
szijpeter force-pushed the feature/wal-1347-nfc-proximity-transport branch from da3e671 to c617c96 Compare September 4, 2026 13:12
@szijpeter
szijpeter force-pushed the feature/wal-1347-nfc-proximity-transport branch from c617c96 to d8375dc Compare September 4, 2026 14:38
@szijpeter
szijpeter force-pushed the feature/wal-1347-nfc-wallet-demos branch from 7c3223f to 571c0b9 Compare September 4, 2026 14:39
@sonarqubecloud

sonarqubecloud Bot commented Sep 4, 2026

Copy link
Copy Markdown

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ci:mobile Run mobile related CI workflows for this PR ci:mobile-dc-api Run Android Digital Credentials API E2E CI for this PR

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant