Read this before you plan around it
That is not as unhelpful as it sounds, and it is worth being precise about why: request-gated entitlements work by Apple giving you the key when they approve you. It appears in your App ID’s capabilities, Xcode picks it up, and your provisioning profile carries it. So an app that has been granted it knows what to declare — you do not need this library to guess, and it deliberately does not.Nothing can check for it in advance. There is no API that reports whether the entitlement was
granted, so
vas.isSupported() answers a narrower question: is this an iPhone that can read NFC
at all. The entitlement shows up the first time you read, as entitlementMissing.Expo
No plugin option, because there is nothing for the plugin to write that it could know. Once Apple grants you the entitlement, put the key they give you inapp.json — ios.entitlements is a first-class Expo field:
app.json
react-native-nfc-kit plugin for the usage description and the
reader-session format, exactly as in NDEF setup; VAS adds nothing to
that.
Bare React Native
Same picture: the entitlements from NDEF setup, plus whatever key Apple gives you, inios/<App>/<App>.entitlements.
The pass type identifier
pass.es.ventry.entrada — yours, from the Apple Developer portal, and the same one
your .pkpass files declare. A phone offers only passes of a type you asked for,
which is the mechanism that stops a till reading somebody’s hotel key.
Several may be listed, and the phone answers for whichever it holds. That is how a
till that accepts more than one kind of pass is built:
Modes
normal (the default) asks for the pass’s data. urlOnly does the opposite: it
hands the pass a URL and asks for nothing back, which is how a till points a
customer’s phone at something. It needs a url, and passing that mode without one
is rejected before the session opens — CoreNFC accepts it and then hands the pass
nothing.