Was muss eine iOS-Anwendung deklarieren, bevor sie einen Tag liest?
Drei Dinge, alle im Projekt: die Fähigkeit zum Lesen von Tags im Nahfeld, die die Berechtigung hinzufügt; eine Zeichenfolge NFCReaderUsageDescription in Info.plist, ohne die die Anwendung laut Apple beim Leseversuch beendet wird; und, für eine Tag-Sitzung, die ISO-7816-Anwendungskennungen oder FeliCa-Systemcodes, die die Anwendung auswählen wird.
Die Fähigkeit und ihre Berechtigung
Eine Anwendung liest Tags nur mit der für ihr Ziel eingeschalteten Fähigkeit zum Lesen von Tags im Nahfeld. Apples Beispiel eines Tag-Lesegeräts führt auf, was dieser Schritt tut: Er fügt der App ID die Funktion zum Lesen von Tags hinzu und der Datei der Berechtigungen die Berechtigung für die Formate der Lesesitzung.
Die Referenzseite der Berechtigung führt nur noch einen Wert auf, TAG, beschrieben als Lesen und Schreiben über NFCTagReaderSession, und ihre Anweisung lautet, die Fähigkeit in Xcode einzuschalten, statt die Datei zu bearbeiten.
Die Nutzungsbeschreibung
NFCReaderUsageDescription, in Xcode als Privacy - NFC Scan Usage Description angezeigt, ist eine Zeichenfolge in Info.plist, die den Menschen sagt, warum die Anwendung die NFC-Hardware will. Ihre Referenzseite kennzeichnet sie als erforderlich für jede Anwendung, die Schnittstellen zu dieser Hardware benutzt.
Ihr Fehlen ist keine Warnung. Das Beispiel hält fest, dass eine Anwendung, die ohne den Schlüssel und seine Zeichenfolge einen Tag zu lesen versucht, beendet wird.
Es ist außerdem ein anderer Text als der, den das Lesefenster zeigt. Die Dokumentation von alertMessage trennt beide: Die Nutzungsbeschreibung erklärt, warum die Anwendung fragt, und der Text des Fensters sagt den Nutzenden, was während eines Lesevorgangs zu tun ist.
Anwendungskennungen und Systemcodes
Eine Tag-Sitzung übergibt einen ISO-7816-Tag nur für die Anwendungskennungen, die unter com.apple.developer.nfc.readersession.iso7816.select-identifiers in Info.plist aufgeführt sind. Die Dokumentation zu NFCISO7816Tag beschreibt, was geschieht: Die Sitzung sendet ein SELECT für jede Kennung, in der Reihenfolge der Liste, und meldet den Tag nach der ersten, die gelingt, wobei die gewählte Kennung in initialSelectedAID steht.
Die Reihenfolge zählt also, und eine Kennung im Besonderen ebenfalls. D2760000850101 aufzuführen, die NDEF-Anwendung auf MIFARE-DESFire-Tags, lässt einen solchen Tag als NFCISO7816Tag ankommen; wer sie weglässt, bekommt denselben Tag als NFCMiFareTag.
FeliCa-Tags verlangen, dass ihre Systemcodes auf dieselbe Weise aufgeführt werden, in dem Schlüssel, den Apples Referenz ISO18092 system codes for NFC Tag Reader Session nennt. Ab iOS 26.4 kann eine Configuration der Sitzung die Kennungen je Sitzung eingrenzen, aber nur unter denen, die bereits in Info.plist stehen: Die Referenz sagt, dass unbekannte Einträge verworfen werden.
Was der Code trotzdem prüft
Deklarationen sichern keine Hardware zu. readingAvailable sagt, ob das Gerät Tags lesen kann, und Apples Übersicht zum Rahmenwerk bittet Anwendungen, es vor dem Start einer Sitzung zu prüfen.
Und manche Kennungen lassen sich überhaupt nicht auswählen. Die Dokumentation der Tag-Sitzung sagt, dass sie die Auswahl von Anwendungskennungen aus dem Zahlungsverkehr nicht unterstützt, und verweist Anwendungen in der Europäischen Union auf NFCPaymentTagReaderSession.
Häufige Fragen
Braucht eine Anwendung, die nur NDEF liest, die Berechtigung?
Ja. Apples Beispiel eines Tag-Lesegeräts, das nur NDEF liest, schaltet die Fähigkeit zum Lesen von Tags ein, und diese Fähigkeit ist es, die die Berechtigung hinzufügt.
Was geschieht, wenn NFCReaderUsageDescription fehlt?
Apples Beispiel hält fest, dass die Anwendung beendet wird, wenn sie ohne den Schlüssel und seine Zeichenfolge einen Tag zu lesen versucht.
Warum kommt mein DESFire-Tag als ISO 7816 statt als MIFARE an?
In Info.plist steht D2760000850101, die Kennung der NDEF-Anwendung auf DESFire-Tags. Entfernen Sie sie, um den Tag als NFCMiFareTag zu erhalten.
Kann eine Anwendung die Anwendung einer Zahlungskarte auswählen?
Nicht über NFCTagReaderSession, die Kennungen aus dem Zahlungsverkehr nicht unterstützt. Für die Europäische Union dokumentiert Apple dafür NFCPaymentTagReaderSession.