I developed an app that uses the Core NFC framework to read tags. The feature works correctly on iOS 18 and earlier versions, but after upgrading to iOS 26, it stopped working.
Details:
Entitlement
Near Field Communication Tag Reader Session Formats
D2760000850101
D2760000850101
Info.Plist
com.apple.developer.nfc.readersession.iso7816.select-identifiers
D2760000850101
com.apple.developer.nfc.readersession.felica.systemcodes
12FC
Privacy - NFC Scan Usage Description
Signing and Capabilities:
Near Field Communicating Tag Reading [Eanbled]
My Sample Code Is:
class NFCManager: NSObject, NFCTagReaderSessionDelegate
{
private var nfcSession: NFCTagReaderSession?
let isConnectionNeeded = false
func startNFCSession() {
guard NFCTagReaderSession.readingAvailable else {
// NFC is not available on this device.
return
}
nfcSession = NFCTagReaderSession(pollingOption: [.iso14443, .iso15693, .iso18092], delegate: self)
nfcSession?.begin()
}
func stopNFCSession() {
nfcSession?.invalidate()
}
// MARK: - NFCTagReaderSessionDelegate Methods
func tagReaderSessionDidBecomeActive(_ session: NFCTagReaderSession) {
print("tagReaderSessionDidBecomeActive")
}
func tagReaderSession(_ session: NFCTagReaderSession, didInvalidateWithError error: Error) {
print("didInvalidateWithError --\(error)")
}
func tagReaderSession(_ session: NFCTagReaderSession, didDetect tags: [NFCTag]) {
print("didDetect: Tag Detected --\(tags)")
}
}
The above code works fine on iOS 18 and earlier versions for detecting tags. Please let me know if I’m missing anything.
Please help me to resolve the issue in iOS 26
Core NFC
RSS for tagDetect NFC tags, read messages that contain NDEF data, and save data to writable tags using Core NFC.
Posts under Core NFC tag
84 Posts
Selecting any option will automatically load the page
Post
Replies
Boosts
Views
Activity
I have some logic which requires NFC support on the device. This is what I'm using to make sure that it's available:
isNFCMissing = !NFCNDEFReaderSession.readingAvailable && !NFCTagReaderSession.readingAvailable && !NFCVASReaderSession.readingAvailable
Is it possible for isNFCMissing to be true even if the device has an NFC chip.
The minimum iOS version for the application is 16 which is only supported on devices with an NFC chip to begin with.
I sent this feedback some time ago and still haven't received an answer. Can someone poke someone internally please?
Thank you!
FB18815675
I have no idea what exactly is going on but after 5 days I found the culprit and I have a reproducible sample project. In the project is a package that does some basic NFC NDEF encoding. I put a commented out method in there and when you comment that in then the app starts crashing at runtime when scanning an NFC tag. Please check out the project and see yourself. Thanks
https://github.com/NickAtGit/iOS26-CoreNFC-Crash
Hello,
I’m a developer at an IT service provider in the banking sector. In the context of an HCE-based payment solution on iOS, we use the Apple Card Session API to receive and process APDU commands.
We are currently facing an issue with a specific payment terminal model (CCV):
When using this terminal, the Apple Card Session correctly triggers the readerDetected and readerDeselected events, but does not fire the expected received event, even though APDU commands are clearly being sent at the protocol level.
This behavior only occurs with this particular CCV terminal in our implementation – with other terminals and on Android devices, the received event is triggered reliably. The same CCV terminal also works without issues when using Apple Pay or PayPal (which also uses HCE → Card Session), and APDU data is transmitted as expected in those cases.
Interestingly, in our implementation, roughly every 10th to 20th transaction with this CCV terminal does trigger the received event and APDU commands are delivered — in those rare cases, the payment proceeds successfully.
In the system logs, we sometimes see APDU commands marked as invalid, but this also happens in cases where communication works fine, so we’re not sure whether this is actually related to the missing events.
Our questions:
Has anyone encountered this behavior before – specifically missing received events despite active communication from the terminal?
Are there known limitations or specific requirements for payment terminals so that APDU commands are passed through to the Apple Card Session?
Are there any diagnostic tools or logs we could use to better narrow down the root cause?
At this point, we are unsure whether the issue lies in terminal compatibility, the Apple Card Session itself, or our implementation. Any insights, experiences, or technical hints would be greatly appreciated.
Thanks in advance for your help!
Hi,
I have created an application for NFC tag scanning and read the tag data. For that,
i enabled the capability: NearField Communication Tag reading.
Then I added 2 tag formats in the entitlement
then i added info.plist:
NFCReaderUsageDescription
We need to use NFC
com.apple.developer.nfc.readersession.felica.systemcodes
8005
8008
0003
fe00
90b7
927a
12FC
86a7
com.apple.developer.nfc.readersession.iso7816.select-identifiers
D2760000850100
D2760000850101
but even though when i run the app and tap the nfc card im getting some error:
NFCTag didBecomeActive
2025-08-29 19:08:12.272278+0530 SAFRAN_NFC[894:113090] NFCTag didDetectTags
2025-08-29 19:08:12.282869+0530 SAFRAN_NFC[894:113520] [CoreNFC] -[NFCTagReaderSession _connectTag:error:]:730 Error Domain=NFCError Code=2 "Missing required entitlement" UserInfo={NSLocalizedDescription=Missing required entitlement}
2025-08-29 19:08:12.284044+0530 SAFRAN_NFC[894:113090] NFCTag restarting polling
2025-08-29 19:08:12.372116+0530 SAFRAN_NFC[894:113090] NFCTag didDetectTags
2025-08-29 19:08:12.381535+0530 SAFRAN_NFC[894:113378] [CoreNFC] -[NFCTagReaderSession _connectTag:error:]:730 Error Domain=NFCError Code=2 "Missing required entitlement" UserInfo={NSLocalizedDescription=Missing required entitlement}
2025-08-29 19:08:12.382246+0530 SAFRAN_NFC[894:113090] NFCTag restarting polling
2025-08-29 19:08:12.470667+0530 SAFRAN_NFC[894:113090] NFCTag didDetectTags
2025-08-29 19:08:12.479336+0530 SAFRAN_NFC[894:113378] [CoreNFC] -[NFCTagReaderSession _connectTag:error:]:730 Error Domain=NFCError Code=2 "Missing required entitlement" UserInfo={NSLocalizedDescription=Missing required entitlement}
2025-08-29 19:08:12.480101+0530 SAFRAN_NFC[894:113090] NFCTag restarting polling
Could you please help me wha tis the issue and give solution for that?
Description:
While testing Core NFC functionality on iOS 26 beta, when the NFC switch is turned off, the system automatically displays an alert. The alert contains two buttons: “Cancel” and “Settings”.
Expected Behavior:
When the user taps the “Settings” button, the system should navigate to the system settings page where the NFC switch can be turned on.
Actual Behavior:
The alert appears as expected
Tapping the “Settings” button does not navigate to the system settings page
No callback is triggered in the app’s NFC session
Steps to Reproduce:
Turn off the NFC switch on an iOS 26 beta device
Trigger Core NFC functionality (e.g., NFCNDEFReaderSession or NFCTagReaderSession)
The system alert appears indicating NFC is turned off
Tap the “Settings” button
Impact:
Users cannot directly navigate to enable NFC from the system alert, making NFC features in the app unusable and negatively affecting user experience.
Device Information:
iOS Version: iOS 26 beta
Device Model: iPhone 14pro
App uses Core NFC APIs to trigger NFC sessions
I notice that there are two types of nfc session:
"NFCTagReaderSession" this session in order to get tag's basic info like uid/type which call back function is
tagReaderSession(_ session: NFCTagReaderSession, didDetect tags: [NFCTag])
"NFCNDEFReaderSession" this session in order to get ndef message in tag which call back function is
readerSession(_ session: NFCNDEFReaderSession, didDetectNDEFs messages: [NFCNDEFMessage])
My problem:
How can i get tag's basic info and tag's ndef message(if it exists) simultaneously in one session or in one callback function.
Hi - from the NFCPaymentTagReaderSession documentation on https://developer.apple.com/documentation/corenfc/nfcpaymenttagreadersession , it's not clear how it should be used to communicate with a payment tag, since the initial SELECT command is handled by NFCPaymentTagReaderSession automatically.
Generally in a payment context, the SELECT response from the payment tag would contain necessary data for subsequent exchanges. Could you please help me understand how to receive the SELECT response from NFCPaymentTagReaderSession?
Thank you for your help.
Hello,
I would like to discuss the behavior of the expiration of NFCPresentmentIntentAssertion (test in iOS 18.5).
In the documentation we have :
The intent assertion expires if any of the following occur:
The intent assertion object deinitializes
Your app goes into the background
15 seconds elapse
BUT; in fact ; only the 1st rule is applied.
The expiration seems to be random after the usage of CardSession and that's difficult to give to the user a good experience.
Has someone faced the same kind of issue; or can give an explanation?
Regards,
François
My iOS application has both the “Default Host Card Emulation (HCE) App” and “Host Card Emulation (HCE)” entitlements. I was previously able to choose my app as the default contactless app in Settings, but after upgrading to iOS 18.6, my app no longer appears - Apple Wallet is now the only option.
I’m located in the European Economic Area, and both my Apple ID and developer team are registered in the EU.
Here is my entitlements file:
<?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.hce</key>
<true/>
<key>com.apple.developer.nfc.hce.default-contactless-app</key>
<true/>
<key>com.apple.developer.nfc.hce.iso7816.select-identifier-prefixes</key>
<array>
<string>A000000004</string>
<string>325041592E5359532E4444463031</string>
<string>A000000003</string>
</array>
</dict>
</plist>
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.
Tap to Pay capabilities are enable and I can use in development profile but I cannot make build that I can upload on TestFlight using the distribution profile because during create build I am getting "Provisioning profile doesn't support the Tap to Pay on iPhone capability." this should be working because I checked twice that distribution profile and certificate have this capability and added in Xcode. how can I resolve this mismatched profile issue I am using Xcode - 15.0.1
Topic:
App & System Services
SubTopic:
Tap to Pay on iPhone
Tags:
Entitlements
Xcode
Apple Pay
Core NFC
We have been struggling to get support and answeres regarding this roadblock :
Request in whitelisting of the NFC Tag Reading and Writing (NDEF) entitlement for our iOS application
Our application utilizes Core NFC to enable reading and writing of NFC tags, simplifying user interactions with NFC-enabled devices and services. The NDEF entitlement is essential for our app to deliver its core functionality effectively.
Build Environment: Our app is developed and built using Xcode 16.4 on Codemagic’s cloud-based CI/CD platform, which utilizes a compatible macOS version (e.g., macOS Sonoma 14.4 or later). The app targets iOS 18 and uses Core NFC APIs for NDEF tag reading and writing.
so far we cant get it to read or write as ios is restricking us
Hi,
there is a issue that iOS background NFC scanning will only provide a notification result, It need user click to enter my APP, can I have any method to enter my APP directly without user action ?
During EEPROM reading or writing on some appliance devices, the app encounters an error after 6 steps. This issue occurs only on iPhone 14 Pro Max, 15 Pro Max, and 16 Pro models, while all other iPhone models function correctly.
Any one with this problem?
The root issues is a missing entitlement error. I've jumped through countless hoops of checking/rechecking .entitlement file/plist file, creating new credentials, creating new projects, creating new provisioning profiles with no luck, manual signing, automatic signing. Any suggestions appreciated.
Looking at the Provisioning Profile Info shows NFC Tag capabilities is included and NFC Entitlements are included.
I'm at a loss...
I am including the following:
Pertinent output from console
Current Info.Plist
Current .entitlement file
Here are the pertinent sectsis the Console Log for reference:
...
NFCConnectionManager[0x074d6e40].tagReaderSessionDidBecomeActive(:): NFCTagReaderSessionDelegate: Session did become active
NFCConnectionManager[0x074d6e40].tagReaderSession(:didDetect:): NFCTagReaderSessionDelegate: Session didDetectTags – 1 tags
NFCConnectionManager[0x074d6e40].connected(session:tag:): Manager.connected(session:tag:) - tag: 7 bytes
NFCConnection.Type.connection(): NFCConnection.connection() – connection established
DEBUG: Successfully established YubiKit NFCConnection.
DEBUG: UI updated: 'YubiKey connected... Performing challenge-response...'
DEBUG: Sending APDU to select OATH applet: 00a4040008a000000527210101
NFCConnection[0x04575e00].send(data:): NFCConnection.send(data:) – 13 bytes
NFCConnectionManager[0x074d6e40].transmit(request:for:): Manager.transmit – 13 bytes to tag ISO7816Identifier(data: 7 bytes)
Here is the dreaded error:
-[NFCTagReaderSession transceive:tagUpdate:error:]:897 Error Domain=NFCError Code=2 "Missing required entitlement" UserInfo={NSLocalizedDescription=Missing required entitlement}
ERROR: Operation failed: Missing required entitlement
DEBUG: Unexpected error: Missing required entitlement
Here is the info.plist
Here is the entitlements file:
I stumbled across the "Apple NFC & SE Platform" while searching for the cause to a persistent missing entitlement error. I am curious if not having this entitlement could be the root cause to my issues?
Specifically, I am trying to perform an HMAC-SHA1 challenge-response via NFC on a YubiKey. Part of this entails low level APDU Send commands via NFC. The missing entitlement occurs right after the APDU Send.
Per my separate post, I believe I have exhausted all other possible causes to no avail.
For reference and details, this is the other post: [https://developer.apple.com/forums/thread/791995)
I am trying to launch Nfc session but its failing with the below error
**
CoreNFC CRASHING_DUE_TO_PRIVACY_VIOLATION
NSLocalizedFailureReason = This app cannot be installed because its integrity could not be verified.
Failed to verify code signature ... (A valid provisioning profile for this executable was not found.)**
But We have declared NFC in capabilities both in code base and provisioning profile.
Tools Used
VS Code , MAUI IOS Development
Please let me know how to resolve this issue
Hello Apple Developer Community and Apple Team,
I want to raise awareness and gather support for an important feature request regarding NFC support on iPhone devices in Argentina.
Millions of Argentinians use the official public transit card, SUBE, daily to pay for buses, subways, and trains. On Android devices, the SUBE app allows users to:
• Check balance via NFC
• Reload credit instantly
• Confirm top-ups by holding the card near the phone
• Use a digital version of the card (in some cases)
However, iPhone users cannot use these NFC features because iOS currently does not allow third-party apps like SUBE to access the NFC chip fully. This limitation negatively impacts iPhone users, many of whom rely heavily on SUBE.
I have submitted detailed feedback to Apple requesting the enablement of controlled NFC access for third-party transit apps in Argentina, starting with SUBE. I encourage fellow developers, users, and community members to support this request.
Enabling this would greatly improve the user experience for millions of iPhone users, align Apple with local needs, and potentially attract new customers from Android.
If anyone has insights or updates on this topic, please share.
Thank you.
Some background:
We are developing an app that needs to scan NFC tags
We are following this documentation for our app
We (assume) we've gotten all the correct entitlements for our app
Our app correctly shows the NFC scanning prompt
We are using up-to-date iPhones to test
We tested scanning using a different NFC app on the app store and were able to successfully scan the tag
We're using NFC NDEF tags to test
The problem:
Nothing is being detected in the scan
Nothing in the example application when we downloaded it down and loaded it onto a test device (reminder that the app from the app store was able to read our tag)
When connected to the debugger, our delegate function is not firing (tested with breakpoints and print statements). The following is the signature of our delegate function:
func readerSession(_ session: NFCNDEFReaderSession, didDetectNDEFs messages: [NFCNDEFMessage])
Is there something that we're missing to get the NFC scanning to work? Perhaps some kind of entitlement? If anyone has any ideas or paths to follow that'd be greatly appreciated. Thanks!