web-dev-qa-db-fra.com

«Droit requis manquant» pour NFCTagReaderSession

Je plonge dans les nouvelles capacités CoreNFC d'iOS 13 et j'ai du mal à faire fonctionner NFCTagReaderSession. Après avoir configuré mes droits et instancié une session NFCTagReaderSession et délégué, j'essaie de démarrer la session en appelant nfcTagReaderSession?.begin(). Ma session est immédiatement invalidée avec cette erreur:

Error Domain=NFCError Code=2 "Missing required entitlement" UserInfo={NSLocalizedDescription=Missing required entitlement}

J'ai suivi la documentation ici pour mon fichier de droits: https://developer.Apple.com/documentation/bundleresources/entitlements/com_Apple_developer_nfc_readersession_formats

J'ai également ajouté la "Confidentialité - NFC Scan Usage Description" appropriée dans mon Info.plist.

Quelqu'un a-t-il déjà réussi à le faire fonctionner? Est-ce juste un problème avec Xcode 11 ou iOS 13?

Voici le code dans mon ViewController:

import UIKit
import CoreNFC

class ViewController: UIViewController {

    var nfcTagReaderSession: NFCTagReaderSession?

    override func viewDidLoad() {
        super.viewDidLoad()

        nfcTagReaderSession = NFCTagReaderSession(pollingOption: [.iso14443, .iso15693, .iso18092], delegate: self)
        nfcTagReaderSession?.begin()
        print("isReady: \(nfcTagReaderSession?.isReady)")
    }
}

extension ViewController: NFCTagReaderSessionDelegate {
    func tagReaderSessionDidBecomeActive(_ session: NFCTagReaderSession) {
        print("Tag reader did become active")
    }

    func tagReaderSession(_ session: NFCTagReaderSession, didInvalidateWithError error: Error) {
        print("\(error)")
    }

    func tagReaderSession(_ session: NFCTagReaderSession, didDetect tags: [NFCTag]) {
        print("\(tags)")
    }
}

Voici mon fichier de droits:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.Apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>com.Apple.developer.nfc.readersession.formats</key>
    <array>
        <string>TAG</string>
        <string>NDEF</string>
    </array>
</dict>
</plist>
9
Steven Berard

J'ai eu le même problème, mais il a disparu après avoir supprimé et ajouté la lecture d'étiquette de communication en champ proche dans les capacités.

Mon fichier de droits a un peu différé:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.Apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>com.Apple.developer.associated-domains</key>
    <array>
        <string>applinks:example.com</string>
    </array>
    <key>com.Apple.developer.nfc.readersession.formats</key>
    <array>
        <string>NDEF</string>
        <string>TAG</string>
    </array>
</dict>
</plist>

Mais je ne pense pas que ce soit ça.

En outre, vous pouvez essayer de modifier Apple pour répondre à vos besoins: https://developer.Apple.com/documentation/corenfc/building_an_nfc_tag-reader_app

Ou supprimez simplement . Iso18092 des options d'interrogation et cela fonctionnera. Je pense que cette norme requiert un droit spécifique.

9
Stanislav K.

info.plist ajoutez ces clés à info.plist comme ceci

<key>com.Apple.developer.nfc.readersession.iso7816.select-identifiers</key>
<array>
    <string>D2760000850101</string>
</array>
<key>com.Apple.developer.nfc.readersession.felica.systemcodes</key>
<array>
    <string>12FC</string>
</array>
5
Eilgnaw

Pour lire les passeports électroniques, outre l'ajout de Near Field Communication Tag Reading dans Capabilities, vous devrez ajouter la clé AID et la valeur suivantes dans info.plist:

<key>com.Apple.developer.nfc.readersession.iso7816.select-identifiers</key>
<array>
    <string>A0000002471001</string>
</array>
2
Melvin

Vous devez ajouter ces clés à info.plist:

Identificateurs d'application ISO7816 pour NFC Session de lecture de balises

Codes système ISO18092 pour NFC Session de lecture de balises

Je n'en connais pas la valeur. J'ai fait un exemple de projet mais je ne peux rien lire de mon passeport électronique. Vendredi, il y aura un événement où j'espère que tout deviendra clair: link

1
Byteros