nfcim/flutter_nfc_kit

Unable to send Mifare commandos on iOS

TijnvandenEijnde opened this issue · 1 comments

I have created a mobile application to scan Mifare DESFire cards on Android and iOS. On both platforms, I can get the basic information on the card. However, only on Android, I can read data from the card by using Mifare commands. On iOS I am getting a 0B response.

I have the following configuration inside my Runner.entitlements:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
     <key>com.apple.developer.nfc.readersession.formats</key>
     <array>
	  <string>TAG</string>
     </array>
</dict>
</plist>

I have added the following keys inside my Info.plist file:

<dict>
    <key>NFCReaderUsageDescription</key>
    <string>Access NFC</string>
    <key>com.apple.developer.nfc.readersession.iso7816.select-identifiers</key>
    <array>
	 <string>D2760000850100</string>
    </array>
    ...
</dict>

However, I have noticed that I will get a different response if I add the D2760000850100 key in the Info.plist file. When I have this key added I get an error when executing a Mifare command: PlatformException(500, Communication error, Tag response error, null)

So for that reason, I decided to remove the key altogether. Now everytime, I execute a Mifare command I end up with the response of 0B. Which does not tell me anything because it is not an official response.

The Mifare command I am using is the select application command: 5A123456 where 123456 is the application ID. As mentioned before this works perfectly on Android.

The only response I can get from the Mifare DESFire card is with an ISO7816 command: 00A4040006D2760000850100. Which is the select application command according to the iso7816 standard. However, after executing this command I need to authenticate, which requires a complex algorithm.

Is it necessary on iOS to first execute iso7816 commands, before you can execute Mifare commands?