flutter_nfc_kit icon indicating copy to clipboard operation
flutter_nfc_kit copied to clipboard

Unable to send Mifare commandos on iOS

Open TijnvandenEijnde opened this issue 1 year ago • 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?

TijnvandenEijnde avatar Jun 25 '24 12:06 TijnvandenEijnde

Sorry for replying late. I see your thread on https://forums.developer.apple.com/forums/thread/758018 and https://github.com/okadan/flutter-nfc-manager/issues/197. But Apple does not seem to solve your problem either.

Our usage of CoreNFC APIs are not complex: https://github.com/nfcim/flutter_nfc_kit/blob/277302081ce70d3ab5aec06f1277854887e2f79c/ios/Classes/SwiftFlutterNfcKitPlugin.swift#L145-L156

I suggest that you try with native code first. If that does not work, neither flutter library can do much.

Harry-Chen avatar Oct 03 '24 06:10 Harry-Chen

Closed due to inactivity -- feel free to reopen with more details.

Harry-Chen avatar Dec 20 '24 14:12 Harry-Chen