Lecture d'un message NDEF avec CoreNFC - Swift 5

Utilisation de CoreNFC pour lire un tag MiFare Classic au format NDEF.

Publié le 02/12/2019

1 - Création d'une application Single View

Indiquer le bundle identifier : com.yourdomain.test-nfc

1.1 - Création d'un App ID

Se connecter au site https://developer.apple.com, cliquer sur "Certificates, IDs, and Profiles", puis dans la colonne de gauche cliquer sur "identifier".

Cliquer sur + pour ajouter un nouvel ID.

Sélectionner App IDs.

Remplir le formulaire comme suit :

Register an App ID :

  • plateform : iOS, tvOS, watchOS
  • description : test nfc
  • Bundle ID [x] Explicit : com.yourdomain.test-nfc
  • Capabilities : [x] NFC Tag Reading

Cliquer sur "Continue", puis sur "Register".

1.2 - Création d'un profil de provisionnement

Se connecter au site https://developer.apple.com, cliquer sur "Certificates, IDs, and Profiles", puis dans la colonne de gauche cliquer sur "Profiles".

Cliquer sur + pour ajouter un nouveau Profile.

Remplir le formulaire comme suit :

Register a New Provisioning Profile :

Development : iOS App Development

Cliquer sur Continue.

Generate a Provisioning Profile :

App ID: Sélectionner l'App ID crée.

Cliquer sur Continue.

Select Certificates : sélectionner le certificat de développement.

Select Devices : Sélectionner l'iphone sur lequel on souhaite déployer.

Cliquer sur Continue

Provisioning Profile Name : test nfc

Attention : Pas de majuscule dans le nom de profile

Cliquer sur Generate, puis sur Download.

Ajout du profil dans le projet XCode :

Dans les propriétés de l'application, décocher "Automatically manage signing" dans le volet signing.

Dans les volets signing (Debug) et (Release), sélectionner le provisioning profile que l'on viens de télécharger.

Dans l'onglet Capabilities, activer "Near Field Communication Tag Reading".

1.3 - Ajout d'une clé dans le fichier info.plist

Ajout la clé / valeur suivante :

Privacy - NFC Scan Usage Description : Message in a card

2 - Création d'un ControllerNavigationView

Dans le storyboard, sélectionner le controllerView par défaut et dans la barre de menu Editor > Embed In > NavigationController.

3 - Mise en place du layout

Dans le storyboard, sélectionner le ViewController, ajouter un label et un bouton.

Lier le label et le bouton dans le view controller :


@IBOutlet weak var messageLabel: UILabel!
    
@IBAction func scanPressed(_ sender: Any) {
}

4 - Implémentation de Core NFC

Dans le ViewController implémenter de façon suivante :


import UIKit
import CoreNFC 

class ViewController: UIViewController, NFCNDEFReaderSessionDelegate { 

    @IBOutlet weak var messageLabel: UILabel!
    var nfcSession: NFCNDEFReaderSession?

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    @IBAction func scanPressed(_ sender: Any) {
	nfcSession = NFCNDEFReaderSession.init(delegate: self, queue: nil, invalidateAfterFirstRead: true)
    	nfcSession?.begin()
    }

    func readerSession(_ session: NFCNDEFReaderSession, didInvalidateWithError error: Error) {
        print("The session was invalidated: \(error.localizedDescription)")
    }

    func readerSession(_ session: NFCNDEFReaderSession, didDetectNDEFs messages: [NFCNDEFMessage]) {
        // Parse the card's information
    }
}

Important : Le deux premiers caractères du message NEDF indiquent le type MIME.

Source : https://www.appcoda.com/corenfc-introduction/