В прошлом году я был в Болонье на PragmaConf 2025. Я попал туда впервые и, как выяснилось, в последний раз: организаторы не потянули продолжение, так что выпуск, на который я приехал, стал финальным. Мне до сих пор немного грустно.
Там я разговорился с Alexander Manzer, таким же разработчиком под iOS, который тоже возится с NFC. В какой-то момент речь зашла о задаче, которую я давно положил в папку «невозможно»: чтение NFC-меток на iPad. Чипа NFC в iPad нет, поэтому я всегда отвечал, что этого просто не сделать. Alexander сказал, что сделать можно, если взять правильный внешний считыватель, и предложил прислать небольшой кусок кода для старта. Через пару дней прислал. Именно из этого фрагмента и выросло чтение NFC-меток на iPad и Mac в NFC.cool.
Я же говорил, что это не сработает
Ещё в мае, когда NFC.cool пришёл на Mac, я написал целый раздел о том, чего Mac не умеет, и поставил сканирование NFC в самое начало. Логика была простая: в Mac нет радиомодуля NFC, в iPad нет радиомодуля NFC, и это ограничение железа, которое я не починю никаким обновлением.
Это по-прежнему верно для чипа внутри устройства. Я упустил другое: встроенный чип использовать вовсе не обязательно. Считыватель можно подключить.
Как это работает без чипа NFC
Весь фокус во внешнем USB-считывателе NFC. Подключаешь его к iPad или Mac, и NFC.cool общается с ним напрямую. Драйверы ставить не надо: всё идёт через поддержку смарт-карт, которая и так есть в iPadOS и macOS, поэтому в момент подключения к порту USB-C приложение замечает считыватель и само на него переключается.
Когда считыватель подключён, приложение отдаёт предпочтение ему. На iPad и Mac это вообще единственное железо NFC в игре, так что выбирать не из чего. На iPhone выбор приложение делает за тебя: подключил считыватель, и NFC.cool работает через него, отключил, и телефон возвращается к своему встроенному NFC. Никаких переключателей в настройках и никаких режимов: приложение само разбирается, какое железо у него есть, и действует соответственно.
Считыватель, вокруг которого я всё это строил и единственный, который я реально проверял, это HID OMNIKEY 5022 CL. Другие USB-считыватели тоже работают, и часть из них попала в список ниже со слов пользователей, которые их попробовали.
Считыватели, которые работают
Вот все считыватели, о которых я сейчас знаю, что они работают с NFC.cool:
HID OMNIKEY 5022 CL: тот, вокруг которого всё построено и который я проверил от начала до конца (Amazon)
HID OMNIKEY 5422: работает по сообщению пользователя (Amazon)
ACS ACR1552U-M1: работает по сообщению пользователя (Amazon)
ACS ACR1255U-J1: работает по сообщению пользователя (Amazon)
Спасибо всем, кто написал. Скупить все считыватели на рынке я не могу, поэтому каждая модель после первой попала в список потому, что кто-то её купил, попробовал и нашёл время рассказать. Если пользуешься считывателем, которого здесь нет, напиши мне, заработал он или на чём сломался, и я добавлю его в этот текст.
Ссылки на Amazon партнёрские: если купить по такой, я могу получить небольшую комиссию, а ты не заплатишь ничего сверху.
Что с этим можно делать
Почти всё то же, что и на iPhone. Можно читать метки и выгружать всю их память, писать сообщения NDEF и запускать пакетные задачи, которые читают или пишут целую стопку меток одну за другой. Работает установка пароля на метку. Работает OpenPrintTag, формат для катушек с филаментом, причём в обе стороны. И да, сброс насадки Philips Sonicare тоже запускается.
Вот последнее и оказалось самым трудным. Сброс насадки Sonicare означает прочитать счётчик с метки и записать обратно на страницу, защищённую паролем, а метка принимает такую запись, только если считает, что авторизация из предыдущего шага ещё в силе. Через внешний считыватель это вылилось в необходимость держать один сеанс со считывателем открытым сразу на оба шага, а не давать ему закрыться в промежутке. Как только это заработало, все зависящие от этого операции, то есть защищённая запись и сброс насадки, начали вести себя так же, как на телефоне.
Честные ограничения
Пары вещей всё ещё нет, и я лучше расскажу о них сам, чем ты наткнёшься на них потом.
OMNIKEY 5022 CL это единственный считыватель, который я проверял лично. Остальные из списка выше держатся на сообщениях пользователей, а всё за пределами этого списка непроверено.
Метки MIFARE Classic через считыватель доступны только для чтения. Прочитать можно, записать нет.
Ни одно из этих ограничений не ломает тот сценарий, ради которого это в основном и берут, но они настоящие, и я сам хотел бы знать о них до покупки считывателя.
Спасибо, Alexander
Хочу честно сказать, откуда всё это взялось. Я не сел и не изобрёл это сам: Alexander дал мне ниточку, а я за неё потянул. Он не был обязан делиться тем кодом, и я благодарен, что он это сделал. Часть причины, почему я потом так вцепился в задачу, простая: мне хотелось, чтобы NFC.cool стал первым приложением для iPad, которое действительно читает NFC-метку. Первым оно оказалось или нет, но путь того стоил.
Чтение NFC-меток на iPad и Mac появляется в NFC.cool 6.15.0. Если у тебя есть iPad или Mac, поддерживаемый считыватель и метка, которую раньше нельзя было отсканировать со стола, всё просто заработает.
Нужен считыватель? Вот HID OMNIKEY 5022 CL на Amazon, ссылка ведёт в твой местный магазин Amazon. Она партнёрская: если купить по ней, я могу получить небольшую комиссию, ты не заплатишь ничего сверху, а работа над NFC.cool получит поддержку.
Скачать NFC.cool Tools для iPhone, iPad и Mac
А если ты был на той последней PragmaConf в Болонье: спасибо, было хорошо. Жаль, что следующей не будет.