Skip to main content
1

Install the package

2

Add the config plugin

In app.json or app.config.js. The usage description is the text iOS shows in the scanning sheet, and it is the only explanation your user gets for why the phone is asking about a card — write your own.
app.json
That is the whole configuration for reading and writing NDEF tags. Smartcards, FeliCa, card emulation and background tags each need one option more — see Setup.
Bare React Native has no prebuild, so there is no plugin to add. Write the plist keys and manifest XML by hand instead: every setup page gives you exactly what to write, and Bare React Native covers getting Expo Modules into a bare project in the first place.
3

Build

eas build and eas build --local work too. What does not work is Expo Go.
4

Check it is really there

supported false on a device you know has NFC almost always means the native module did not link — rebuild, and see verifying autolinking.

You need a development build

NFC is native code, so it cannot run in Expo Go, and this is not a temporary state of affairs: Expo Go on the App Store is frozen at SDK 54, and Expo positions it as a learning tool rather than a development target.

Requirements

CoreNFC has existed since iOS 11, so with a 16.4 floor there is no weak linking to arrange and no -weak_framework CoreNFC hack to copy from anywhere.
Bare React Native is a supported route, not a footnote. This library is built on the Expo Modules API, which does not require the Expo SDK — it requires the expo package, which ships the module and autolinking infrastructure and little else. The only thing you give up is the config plugin.

The iOS capability

Editing the entitlements file — or letting the plugin write it — is not enough on its own. The App ID needs the capability too:
1

Open your App ID

In the Apple Developer portal, under Certificates, Identifiers & Profiles.
2

Enable Near Field Communication Tag Reading

It is in the capability list for the identifier.
3

Regenerate the provisioning profile

Xcode’s “Automatically manage signing” does this for you. A manually managed profile does not, and the failure appears at runtime as a session that will not open, with an error that never mentions provisioning.

Next

Read your first tag

A working scan screen, end to end.

Setup for your use case

Smartcards, FeliCa, HCE, background tags.