Cosa deve dichiarare un'applicazione iOS prima di poter leggere un tag?
Tre cose, tutte nel progetto: la capacità di lettura dei tag, che aggiunge l'abilitazione; una stringa NFCReaderUsageDescription in Info.plist, senza la quale Apple dice che l'applicazione esce quando prova a leggere; e, per una sessione di tag, gli identificatori di applicazione ISO 7816 o i codici di sistema FeliCa che selezionerà.
La capacità e la sua abilitazione
Un'applicazione legge i tag soltanto con la capacità Near Field Communication Tag Reading accesa sul suo obiettivo. L'esempio di lettore di tag di Apple elenca quello che quel passo fa: aggiunge la funzione di lettura dei tag all'App ID e l'abilitazione dei formati di sessione di lettura al file delle abilitazioni.
La pagina di riferimento dell'abilitazione elenca ormai un valore solo, TAG, descritto come accesso in lettura e scrittura tramite NFCTagReaderSession, e la sua istruzione è di accendere la capacità in Xcode invece di modificare il file.
La descrizione d'uso
NFCReaderUsageDescription, mostrata in Xcode come Privacy - NFC Scan Usage Description, è una stringa in Info.plist che dice alle persone perché l'applicazione vuole l'hardware NFC. La sua pagina di riferimento la segna come necessaria per qualsiasi applicazione che usi API che raggiungono quell'hardware.
La sua assenza non è un avvertimento. L'esempio dichiara che un'applicazione che prova a leggere un tag senza la chiave e la sua stringa esce.
Ed è anche un testo diverso da quello che mostra il foglio di lettura. La documentazione di alertMessage separa i due: la descrizione d'uso spiega perché l'applicazione chiede, e il messaggio dell'avviso dice a chi usa il telefono che cosa fare durante una lettura.
Identificatori di applicazione e codici di sistema
Una sessione di tag consegna un tag ISO 7816 solo per gli identificatori di applicazione elencati sotto com.apple.developer.nfc.readersession.iso7816.select-identifiers in Info.plist. La documentazione di NFCISO7816Tag descrive quello che succede: la sessione invia una SELECT per ciascun identificatore, nell'ordine dell'elenco, e segnala il tag dopo il primo che riesce, con l'identificatore scelto in initialSelectedAID.
L'ordine conta quindi, e conta anche un identificatore in particolare. Elencare D2760000850101, l'applicazione NDEF sui tag MIFARE DESFire, fa arrivare un tag del genere come NFCISO7816Tag; lasciarlo fuori consegna lo stesso tag come NFCMiFareTag.
I tag FeliCa vogliono i propri codici di sistema elencati allo stesso modo, nella chiave che il riferimento di Apple chiama ISO18092 system codes for NFC Tag Reader Session. Da iOS 26.4, una Configuration di sessione può restringere gli identificatori sessione per sessione, ma solo fra quelli già in Info.plist: il riferimento dice che le voci sconosciute vengono scartate.
Quello che il codice verifica comunque
Le dichiarazioni non garantiscono l'hardware. readingAvailable dice se il dispositivo sa leggere i tag, e la presentazione del framework di Apple chiede alle applicazioni di guardarlo prima di avviare una sessione.
E certi identificatori non si possono selezionare affatto. La documentazione della sessione di tag dice che non sostiene la selezione degli identificatori di applicazione legati al pagamento, e rimanda le applicazioni dell'Unione europea a NFCPaymentTagReaderSession.
Domande frequenti
Un'applicazione che legge solo NDEF ha bisogno dell'abilitazione?
Sì. L'esempio di lettore di tag di Apple, che legge solo NDEF, accende la capacità di lettura dei tag, ed è quella capacità ad aggiungere l'abilitazione.
Cosa succede se NFCReaderUsageDescription manca?
L'esempio di Apple dichiara che l'applicazione esce quando prova a leggere un tag senza la chiave e la sua stringa.
Perché il mio tag DESFire arriva come ISO 7816 invece che come MIFARE?
Info.plist elenca D2760000850101, l'identificatore dell'applicazione NDEF sui tag DESFire. Toglilo per ricevere il tag come NFCMiFareTag.
Un'applicazione può selezionare l'applicazione di una carta di pagamento?
Non tramite NFCTagReaderSession, che non sostiene gli identificatori legati al pagamento. Nell'Unione europea, Apple documenta NFCPaymentTagReaderSession per quel caso.