Developing a Mobile App for Digital Pass
Plastic badge at gate — 2010. Most Digital Pass requests boil down to: seamless employee/visitor verification without physical token. Behind this simplicity — serious stack: cryptographically signed tokens, NFC/BLE with turnstiles, offline mode on connection loss, corporate MDM policy compliance.
Where Logic Usually Breaks
Most common — app shows QR but doesn't guarantee one-time use. Static QR on phone screen can be photographed and passed. Right solution — dynamic TOTP code over signed JWT: new code every 30 seconds from shared secret issued during onboarding. Server verifies not QR itself but token signature + time window.
Second painful scenario — NFC with OSDP controllers (Suprema, HID). Without proper NFCTagReaderSession lifecycle management on iOS, reader loses session on background. Fixed by explicit invalidate() and moving logic to URLSessionConfiguration.background for silent push waking app on phone approach.
How We Build These
Stack depends on requirements. iOS-only — Swift + CryptoKit for pass signing, Core NFC for reading/writing, PassKit for Apple Wallet integration. Cross-platform need — Flutter with flutter_nfc_kit + native platform channels for Secure Enclave (iOS) and Android Keystore access.
Key components:
- Pass as Verifiable Credential (VC) per W3C standard — JSON-LD document with DID-signature from issuer. Convenient for external access control system integration.
- Offline-first storage: pass encrypted AES-GCM, stored in Keychain (iOS) / EncryptedSharedPreferences (Android). Turnstile verifier works offline via Bluetooth challenge-response.
- Apple Wallet / Google Wallet: PKPass and Google Wallet Pass API let place pass in native wallet without separate app. But no dynamic TOTP embedding — static fields + barcode only. For corporate needs often build custom pass in app.
One implemented case: mobile pass for warehouse complex with 12 access points. Each reader — BLE peripheral. Flutter app scans BLE device, establishes GATT connection, sends signed challenge, receives grant/deny. Time from approach to response — 800–1200 ms. Fallback — QR with TOTP when BLE off.
MDM Role and Configuration Profiles
Corporate Digital Pass without MDM — vulnerability. Unmanaged device can't guarantee app not deleted or cloned. Apple Configurator / Microsoft Intune integration allows:
- forcefully install app on devices;
- deliver configuration (backend URL, tenant ID) via Managed App Configuration without hardcode;
- block screenshot API (
UIScreen.isCaptured→ show empty screen instead of pass).
Project Stages
Typical path: audit existing access control system and API → design token/verification protocol schema → develop mobile client and verification server → pilot at single point → load test → rollout.
Timeline: 6 weeks (QR/TOTP pass without NFC, single platform) to 4 months (BLE + NFC + Wallet + MDM + two platforms). Custom pricing after access control and infrastructure requirements analysis.







