Foreword: I filed a feedback a week ago and so far no one replied or at least acknowledged my feedback. That's why I'm writing here now to get some more attention (hopefully, thanks).
I recorded a video to show you what exactly is happening. I am not sure where the issue belongs to exactly but it is related to associated domains, the camera (QR codes), the NFC module, App Intents and Control Center controls.
https://youtu.be/sT2bZLs_6rA
FB20418059
(I added some tags that are somehow related to the associated domain issue)
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
79 Posts
Selecting any option will automatically load the page
Post
Replies
Boosts
Views
Activity
I’m developing an iOS application using CoreNFC and working with ISO7816 tags. My use case involves exchanging APDU commands with a hardware device, but some operations can take more than 20 seconds.
From my testing, I see that:
The NFC reader session itself lasts about 60 seconds.
But once a tag is connected, the connection seems to drop after ~20 seconds, and I receive a “connection lost” / session invalidated error.
My questions are:
Is this ~20-second connection window a hard limit enforced by iOS?
Is there any way to extend this timeout for long-running APDU operations?
If not, what’s the recommended design pattern for handling these scenarios? For example, should I split the process into smaller APDU commands and prompt the user to re-tap when the session times out?
Any guidance or best practices for handling long NFC exchanges on iOS would be greatly appreciated.
Hello,
I have an app that emulates an NFC card using NFC HCE.
Since yesterday I saw an increasing number of crashes on iOS 26 only, which wasn't there before.
From what I can see, it seems the app crashes when the NFC presentment intent is shown and 60 seconds passed and user does nothing. The app just crashes after 60 seconds.
On previous iOS versions, I know that CardSession.Error.maxSessionDurationReached was thrown after 60 seconds.
Is something changed in iOS 26?
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
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)