A cross-platform NFC toolkit to read and manage NFC/RFID tag data on iOS and Android. Focused on legitimate, standards-based reading (NDEF, ISO-14443/15693/FeliCa) and secure local storage. This project does not clone or emulate third‑party access cards.
Important limitations up front:
- Apple Wallet “Home Key/Car Key/ID” passes require Apple-issued entitlements and partner agreements. Third-party apps cannot add arbitrary access cards to Apple Wallet.
- Samsung Wallet keys also require OEM/partner integrations.
- Arbitrary card emulation/cloning is restricted (iOS forbids it; Android allows limited HCE for ISO 14443-4, not for proprietary classic keys) and may violate law/policies.
TapKey is a learning and prototyping toolkit. It helps you:
- Read NFC tags (NDEF payloads, tag UID, technology type) on iOS and Android.
- Organize and store tag metadata securely in-app (“vault”).
- Export/share non-sensitive tag info for diagnostics.
- Explore paths toward compliant integrations (Android HCE for your own system; Apple/Samsung partner programs for Wallet).
People often want to “put a door card in the phone’s wallet.” Today, platforms don’t allow that unless you control the lock ecosystem and have the required entitlements/partnerships. TapKey demystifies what’s possible now and provides a clean foundation to build compliant solutions.
- iOS: Swift + SwiftUI + Core NFC (NDEF, ISO7816 APDUs, ISO15693, FeliCa)
- Android: Kotlin + Android NFC APIs (NfcAdapter, Tag, IsoDep, NfcA/B/F/V, MifareUltralight, MifareClassic where available)
- Optional future: Flutter/React Native UI with native modules for NFC. Start native for best NFC coverage.
- iOS
- Read: NDEF, tag UID, tech family; send ISO7816 APDUs to supported tags
- Cannot emulate arbitrary cards; Wallet passes for keys require entitlements
- Android
- Read: NDEF, UID, tech list; low-level tech access (IsoDep, Mifare*) per device
- Optional HCE (ISO 14443-4) for your own backend-managed credentials (not existing third-party access cards)
See docs/CAPABILITIES.md for details and caveats.
- docs/ — background, capabilities, roadmap
- mobile/
- ios/ — Swift snippets for Core NFC (not a full Xcode project yet)
- android/ — Kotlin snippets for NFC (not a full Gradle project yet)
- LICENSE — MIT
This repo currently provides documentation and starter code snippets. Full app projects will be added incrementally.
- iOS prototype (device required):
- Open
mobile/ios/SampleNfcReader.swift
in Xcode as part of a new SwiftUI app target, add theNear Field Communication Tag Reading
capability, and test on device.
- Open
- Android prototype:
- Add
mobile/android/NfcReader.kt
to a new Android app module and enable NFC foreground dispatch or reader mode.
- Add
We’ll add full buildable app templates in subsequent milestones.
- M1: Minimal reader on iOS and Android (NDEF + UID) with local encrypted storage
- M2: Tag tech details inspectors (IsoDep, NfcV, FeliCa) and APDU console (iOS/Android)
- M3: Android HCE example for a custom demo credential (non-sensitive)
- M4: Optional cross-platform UI wrapper (Flutter/React Native)
- M5: Partner integration notes and sample stubs (Wallet/SE flows) — documentation only unless entitlement granted
See docs/ROADMAP.md for more.
- No storage of private keys without proper key management.
- Respect local laws and property rights; do not attempt to clone cards you don’t own/control.
- Follow App Store/Play policies; iOS forbids card emulation.
“TapKey” may overlap with existing trademarks. If you plan public distribution, consider an alternate like “TapKeyKit” or “TapKeyLab.”
- Name: tapkey
- Description: Cross-platform NFC toolkit (iOS/Android) for reading NFC/RFID tags, secure storage, and compliant integrations. Not for cloning third-party access cards.
- Topics: nfc, rfid, mifare, core-nfc, ios, android, wallet, hce, desfire, felica, iso14443, iso15693, iso7816, swift, kotlin, security, privacy
MIT — see LICENSE.