Que doit déclarer une application iOS avant de lire un tag ?
Trois choses, et la troisième seulement pour certaines sessions : la capacité de lecture de tags, qui pose le droit d'accès ; un texte d'usage dans Info.plist, sans lequel l'application quitte au premier essai de lecture ; et, pour une session de tag, les identifiants d'application ou les codes système que la session sélectionnera.
La capacité et son droit d'accès
Une application ne lit des tags qu'avec la capacité de lecture de tags en champ proche activée sur sa cible. L'exemple de lecteur de tags d'Apple énumère ce que fait cette étape : elle ajoute la fonctionnalité de lecture de tags à l'App ID et le droit d'accès des formats de session de lecture au fichier des droits.
La page de référence du droit d'accès n'énumère plus qu'une valeur, TAG, décrite comme un accès en lecture et en écriture par NFCTagReaderSession, et sa consigne est d'activer la capacité dans Xcode plutôt que de modifier le fichier.
Le texte d'usage
NFCReaderUsageDescription, affiché dans Xcode comme Privacy - NFC Scan Usage Description, est une chaîne d'Info.plist qui dit aux gens pourquoi l'application veut le matériel NFC. Sa page de référence la marque comme requise pour toute application employant des API qui accèdent à ce matériel.
Son absence n'est pas un avertissement. L'exemple indique qu'une application qui tente de lire un tag sans la clé et sa chaîne quitte.
C'est aussi un texte différent de celui qu'affiche la feuille de lecture. La documentation d'alertMessage sépare les deux : le texte d'usage explique pourquoi l'application demande, le message de l'alerte dit à l'utilisateur quoi faire pendant un scan.
Identifiants d'application et codes système
Une session de tag ne remet un tag ISO 7816 que pour les identifiants d'application listés sous com.apple.developer.nfc.readersession.iso7816.select-identifiers dans Info.plist. La documentation de NFCISO7816Tag décrit ce qui se passe : la session envoie un SELECT pour chaque identifiant, dans l'ordre de la liste, et signale le tag après le premier qui réussit, l'identifiant retenu étant dans initialSelectedAID.
L'ordre compte donc, et un identifiant en particulier aussi. Lister D2760000850101, l'application NDEF des tags MIFARE DESFire, fait arriver un tel tag comme NFCISO7816Tag ; l'omettre remet le même tag comme NFCMiFareTag.
Les tags FeliCa demandent que leurs codes système soient listés de la même façon, dans la clé que la référence d'Apple nomme codes système ISO18092 pour la session de lecture de tags. Depuis iOS 26.4, une Configuration de session peut restreindre les identifiants session par session, mais seulement parmi ceux déjà présents dans Info.plist : la référence indique que les entrées inconnues sont ignorées.
Ce que le code vérifie encore
Les déclarations ne garantissent pas le matériel. readingAvailable dit si l'appareil sait lire des tags, et la présentation du cadre par Apple demande aux applications de le vérifier avant de démarrer une session.
Et certains identifiants ne peuvent pas être sélectionnés du tout. La documentation de la session de tag indique qu'elle ne prend pas en charge la sélection des identifiants d'application liés au paiement, et oriente les applications de l'Union européenne vers NFCPaymentTagReaderSession.
Questions fréquentes
Une application qui ne lit que du NDEF a-t-elle besoin du droit d'accès ?
Oui. L'exemple de lecteur de tags d'Apple, qui ne lit que du NDEF, active la capacité de lecture de tags, et c'est cette capacité qui ajoute le droit d'accès.
Que se passe-t-il si NFCReaderUsageDescription manque ?
L'exemple d'Apple indique que l'application quitte lorsqu'elle tente de lire un tag sans la clé et sa chaîne.
Pourquoi mon tag DESFire arrive-t-il en ISO 7816 plutôt qu'en MIFARE ?
Info.plist liste D2760000850101, l'identifiant de l'application NDEF des tags DESFire. Retirez-le pour recevoir le tag comme NFCMiFareTag.
Une application peut-elle sélectionner l'application d'une carte de paiement ?
Pas par NFCTagReaderSession, qui ne prend pas en charge les identifiants liés au paiement. Dans l'Union européenne, Apple documente NFCPaymentTagReaderSession pour ce cas.