L’anno scorso sono stato a Bologna per PragmaConf 2025. Era la mia prima volta a quella conferenza e, a conti fatti, anche l’ultima: gli organizzatori non riescono più a portarla avanti, quindi l’edizione a cui sono andato è stata quella finale. Un po’ mi dispiace ancora.
Mentre ero lì ho fatto due chiacchiere con Alexander Manzer, anche lui sviluppatore iOS e NFC. A un certo punto il discorso è finito su un problema che avevo archiviato da tempo alla voce “impossibile”: leggere i tag NFC su un iPad. Gli iPad non hanno il chip NFC, quindi avevo sempre risposto a tutti che non c’era proprio modo di farlo. Alexander mi ha detto il contrario, a patto di usare il lettore esterno giusto, e si è offerto di mandarmi un po’ di codice per iniziare. L’ha fatto qualche giorno dopo. È grazie a quelle poche righe che oggi NFC.cool legge i tag NFC su iPad e Mac.
Avevo detto che non si poteva fare
A maggio, quando NFC.cool è arrivata su Mac, ho dedicato un’intera sezione a ciò che sul Mac non si può fare, e in cima alla lista avevo messo proprio la scansione NFC. Il ragionamento era semplice: i Mac non hanno una radio NFC, gli iPad non hanno una radio NFC, ed è un limite hardware che nessun mio aggiornamento software può superare.
Quella parte è ancora vera, se parliamo del chip integrato nel dispositivo. Quello che mi era sfuggito è che il chip integrato non è l’unica strada: un lettore puoi anche collegarlo da fuori.
Come funziona senza un chip NFC
Il trucco è un lettore NFC USB esterno. Lo colleghi all’iPad o al Mac e NFC.cool ci parla direttamente. Non c’è nessun driver da installare: tutto passa dal supporto per le smart card che Apple include già in iPadOS e macOS, quindi appena infili il lettore nella porta USB-C l’app se ne accorge e ci si aggancia da sola.
Quando c’è un lettore esterno collegato, l’app gli dà la precedenza. Su iPad o Mac quel lettore è l’unico hardware NFC in gioco, quindi non c’è nulla da decidere. Su iPhone diventa invece una scelta che l’app fa al posto tuo: se colleghi un lettore, NFC.cool usa quello; se non lo colleghi, il telefono ricade sull’NFC integrato. Non devi attivare nessuna impostazione né scegliere una modalità, perché l’app capisce da sola con che hardware ha a che fare e si comporta di conseguenza.
Il lettore su cui ho costruito tutto, e l’unico che ho provato davvero, è l’HID OMNIKEY 5022 CL. Funzionano anche altri lettori USB: alcuni li trovi nell’elenco qui sotto, segnalati dagli utenti che li hanno messi alla prova.
I lettori che funzionano
Ecco tutti i lettori che a oggi mi risulta funzionino con NFC.cool:
HID OMNIKEY 5022 CL - quello su cui ho costruito tutto e che ho provato dall’inizio alla fine (Amazon)
HID OMNIKEY 5422 - segnalato come funzionante da un utente (Amazon)
ACS ACR1552U-M1 - segnalato come funzionante da un utente (Amazon)
ACS ACR1255U-J1 - segnalato come funzionante da un utente (Amazon)
Grazie a tutti quelli che mi hanno scritto. Non posso comprare ogni lettore in commercio, quindi ogni modello dopo il primo è finito in questa lista perché qualcuno lo ha comprato, lo ha provato e si è preso il tempo di raccontarmelo. Se usi un lettore che qui non c’è, scrivimi e dimmi se ha funzionato oppure dove si è bloccato: lo aggiungo al post.
Quelli sono link di affiliazione Amazon: se acquisti passando da lì posso ricevere una piccola commissione, senza costi aggiuntivi per te.
Cosa si può fare con un lettore esterno
Quasi tutto quello che faresti da iPhone. Leggi i tag ed estrai l’intera memoria, scrivi messaggi NDEF e lanci lavori in serie che leggono o scrivono una pila intera di tag uno dopo l’altro. La protezione con password funziona. Funziona anche OpenPrintTag, il formato per le bobine di filamento delle stampanti 3D, in entrambe le direzioni. E sì, gira pure l’azzeramento del contatore delle testine Philips Sonicare.
Proprio quest’ultimo è stato il punto più ostico. Azzerare una testina Sonicare significa leggere un contatore dal tag e poi riscrivere su una pagina protetta da password, e il tag accetta quella scrittura solo se ti considera ancora autenticato dall’istante precedente. Con un lettore esterno questo voleva dire tenere aperta un’unica sessione con il lettore per entrambi i passaggi, invece di lasciarla chiudere nel mezzo. Sistemato quello, le operazioni che ne dipendono - le scritture protette, l’azzeramento della testina - hanno cominciato a funzionare esattamente come funzionano da telefono.
Quello che ancora non funziona
Un paio di cose non ci sono ancora, e preferisco dirtele io piuttosto che fartele scoprire per conto tuo.
L’OMNIKEY 5022 CL è l’unico lettore che ho provato di persona. Gli altri dell’elenco qui sopra arrivano dalle segnalazioni degli utenti, e tutto ciò che sta fuori da quella lista è terreno inesplorato.
I tag MIFARE Classic, attraverso il lettore, sono in sola lettura. Si leggono, non si scrivono.
Niente di tutto questo rovina l’uso che ne farà la maggior parte delle persone, ma sono limiti reali, ed è il genere di cose che vorrei sapere io prima di comprare un lettore.
Grazie, Alexander
Voglio essere chiaro su come è nata questa storia. Non mi sono seduto a inventarla: Alexander mi ha messo in mano il filo e io l’ho tirato. Non era tenuto a condividere quel codice e gli sono grato di averlo fatto. Il motivo per cui poi ci ho messo tanta ostinazione è semplice: volevo che NFC.cool fosse la prima app per iPad capace di leggere davvero un tag NFC. Che ci sia arrivata per prima o no, ne è valsa la pena.
La lettura dei tag NFC su iPad e Mac arriva con NFC.cool 6.15.0. Se hai un iPad o un Mac, un lettore compatibile e un tag che dalla scrivania non eri mai riuscito a scansionare, funzionerà e basta.
Ti serve il lettore? Ecco l’HID OMNIKEY 5022 CL su Amazon: il link ti porta allo store Amazon del tuo paese. È un link di affiliazione, quindi se acquisti passando da lì posso ricevere una piccola commissione senza costi aggiuntivi per te, e questo aiuta a finanziare il lavoro su NFC.cool.
Scarica NFC.cool Tools per iPhone, iPad e Mac
E se c’eri anche tu a quell’ultima PragmaConf di Bologna: grazie, è stata bella. Mi dispiace solo che non ce ne sarà un’altra.