Back to guides

Can Your Phone Read a DESFire Card? iPhone vs Android

Both iPhone and Android can detect a DESFire card, but they expose it differently. Here is what each lets an app do, and why the card's keys decide the rest.

Published

Short answer

Yes, both phones can detect a DESFire card, and an app on either can talk to it. What you can read after that depends on the card's keys, not the phone. If you want to read a DESFire card with a phone, the real differences lie in how iOS and Android hand the card to an app.

What a DESFire card is

MIFARE DESFire is NXP's chip family for secure cards: access badges, campus cards, and similar. It talks over NFC-A, which NFC Tools notes is supported by the vast majority of recent NFC smartphones. If the generations are new to you, our guide to DESFire EV2 vs EV3 covers what changed, and NFC Forum tag types explains where Type 4 tags fit.

Unlike an NTAG sticker, a DESFire card stores data in applications, each protected by its own keys. A phone can detect the card and read its identifier without any key. The contents are another matter. Without the right key, the card won't hand them over.

How iPhone handles DESFire

On iPhone, apps use Core NFC. Apple's Core NFC overview says an app can interact with ISO 7816, ISO 15693, FeliCa and MIFARE tags, that it needs NFC hardware, and that it isn't available in app extensions.

The session rules

A DESFire card is read through NFCTagReaderSession. Per Apple's NFCTagReaderSession documentation, your app needs the com.apple.developer.nfc.readersession.formats entitlement and a non-empty NFCReaderUsageDescription. Only one reader session can be active at a time. The session also doesn't support selecting payment-related application IDs, so a payment card is off the table.

Two ways to see the same card

How the card reaches the app depends on one Info.plist setting. Apple's NFCMiFareTag page explains that if the ISO 7816 select-identifiers list includes D2760000850101, the NDEF application ID on DESFire tags, the app receives an NFCISO7816Tag. Leave that identifier out and it receives an NFCMiFareTag, which offers sendMiFareCommand for native commands and sendMiFareISO7816Command for APDUs.

This one trips people up. In an Apple Developer Forums thread, a developer whose native DESFire commands worked on Android got errors on iOS. An Apple engineer replied that the identifier in their list was wrong, that ISO 7816 isn't a prerequisite for native commands, and that in MIFARE mode you send them with sendMiFareCommand.

How Android handles DESFire

Android is more open here. Android's advanced NFC guide lists NfcA (ISO 14443-3A) and IsoDep (ISO 14443-4) among the technologies every Android NFC device must support. MifareClassic is optional. An app calls getTechList() to see what a tag offers, then opens the matching class from android.nfc.tech with the usual connect, I/O and close pattern.

That page doesn't mention DESFire by name. Speaking DESFire's commands is the app developer's job. NFC Tools reports that on Android, reading and writing work "without any particular restriction."

Which phone should you pick

For a quick look at an unlocked card, either works. For raw DESFire work, Android is the simpler path, since there's no select-identifier setting to get wrong. iPhone does fine inside Core NFC's rules. NFC Tools says reading and writing need an iPhone XS or XR or later, with the scan started manually in the app. Not sure about your phone? Check whether your phone has NFC first.

One boundary: this is about cards you own or are authorized to use. Detecting a card is not the same as copying it, and NFCore doesn't help with copying access, transit or payment credentials.

Bottom line

Both platforms can talk to DESFire. iPhone gives you a stricter, well-documented path through Core NFC; Android gives you raw ISO-DEP access. Either way, the keys set the limit. A good next step is to scan the card in NFCore on the App Store or Google Play and see which tag family it reports.

Frequently Asked Questions

Can an iPhone read a DESFire card?

Yes. Through Core NFC an app can detect a DESFire card and talk to it, either as an NFCMiFareTag or an NFCISO7816Tag, depending on whether D2760000850101 is in the app's select-identifiers list. Protected contents still need the right keys.

Does Android read DESFire cards without special setup?

Android devices are required to support NfcA and IsoDep, so a phone can detect the card and exchange data with it. The app still has to implement DESFire's commands, and protected files still need the card's keys.

Can my phone copy a DESFire access card or transit card?

Detecting a card isn't copying it. Protected data needs keys held by the card's issuer, and copying credentials you don't own or control is outside what NFCore supports.