Inability to Communicate via APDU on iOS Despite NFC Tag Detection

Background: We are developing a cross-platform mobile application that communicates with a custom NFC-enabled hardware device. The hardware expects ISO7816-style APDU commands for data exchange and functions correctly with Android using the IsoDep protocol.

Observed Issue on iOS: On iOS, the tag is only detectable via NFCNdefReaderSession, which provides access to INFCNdefTag.

Attempting to use NFCTagReaderSession with NFCPollingOption.Iso14443 (which is required for APDU communication) results in no tag detection.

As a result, the tag is inaccessible for APDU-based communication on iOS.

Since NFCNdefReaderSession does not support APDU, we are unable to establish the required command channel.

Constraints: The hardware firmware cannot be changed to support NDEF-based command interpretation.

The device expects raw ISO-DEP APDU commands (i.e., Class-Instruction-Param1-Param2-Data-Le).

Impact: The lack of ISO7816 tag detection on iOS prevents the app from sending APDU commands, resulting in a platform-specific feature limitation.

Functionality that relies on secure, structured APDU communication is unavailable to iOS users, even though it works seamlessly on Android.

Do you have the correct AIDs for the NFC device entered in the com.apple.developer.nfc.readersession.iso7816.select-identifiers entry in your Info.plist?

Keep in mind that the AIDs have to be an exact match, and you cannot use shortened prefixes

Good Morning Hi I have Just added NFC Permission in Info.plist and formats in Entitlement.plist will that wont be sufficient to launch NFC reader

If No, can you share me a Sample .plist and Entitlements with corrections you have suggested. Meanwhile I will try from my end also to check on the suggestion you have provided. But sample would be really helpful to solve my issue. Thanks in Advance

How do i get the AID of the NFC Hardware Device? Even though in get that its says we need to get apple approval for adding such an identifier in the Info.plist and Entitlements. How to get those Approvals ?

You can check out https://developer.apple.com/documentation/corenfc/building-an-nfc-tag-reader-app for an example of how the entitlements and Info.plist entries are constructed.

I can't help you with getting the AID of the NFC device. You may need to contact the manufacturer, if the AIDs are not standard, or documented.

Approval depends on what you are trying to do. In order to just read from the tag, or write to the tag, you don't need any approval.

If you are trying to emulate a tag (the NFC hardware you are using is a reader), or if the AIDs you are using are of restricted nature (like payment intent, identification, etc.) then you need approval and depending on the region you are operating in, that may or may not be possible, and will require an extensive application process.

My question is: If I add the AID entries in both Info.plist and Entitlements.plist within the project, is that sufficient to enable and launch the NFC session, or do I also need to explicitly configure this AID in the Apple Developer portal (under App ID capabilities) and regenerate the provisioning profile with this change?

The AIDs are configured in the Info.plist There is no Developer Portal configuration necessary (or possible).

A new provisioning profile would have been needed if you had changed your .entitlements file. You don't add AIDs to the entitlements. But if you are making changes to your entitlements, then you will need a new provisioning profile.

Inability to Communicate via APDU on iOS Despite NFC Tag Detection
 
 
Q