CoreNFC — пустой NDEF после обновления до iOS16

Я только что обновился до iOS 16, и вдруг тот же код, который я использовал в iOS 15, теперь читается ndefMessage как nil в обратном вызове didDetect. Я не могу найти ничего в Интернете о том, что в iOS 16 может вызвать это, кто-нибудь видел что-нибудь подобное?

Когда я сканирую тот же тег на Android или использую приложение NFC Tools на iOS, я могу нормально прочитать тег NDEF. Похоже, обновление затронуло только мой код...

ОБНОВЛЕНИЕ 1: я поместил тот же код на свое устройство iOS 15.6, и он отлично работает. Мне кажется, что это баг iOS 16.

Вот что у меня есть:

func readerSession(_ session: NFCNDEFReaderSession, didDetect tags: [NFCNDEFTag]) {
    print("did detect")
    let str: String = nfcWriteContent
    if (tags.count > 1) {
        let retryInterval = DispatchTimeInterval.milliseconds(500)
        session.alertMessage = "too_many_nfc_detected".localized()
        DispatchQueue.global().asyncAfter(deadline: .now() + retryInterval, execute: {
            session.restartPolling()
        })
        return
    }
    
    let tag = tags.first!
    
    print("reading...")
    tag.readNDEF(completionHandler: {(ndefMessage: NFCNDEFMessage?, error: Error?) in
        var res = ""
        
        if (ndefMessage == nil) {
            // EVERY NFC SCAN ALWAYS FALLS IN HERE NOW
            // WHEN SCANNING THE SAME TAG ON ANDROID, NDEF CONTENT IS PROPERLY RETURNED
            print("empty tag")
        } else {
            print (ndefMessage!.records.count)
            for payload in ndefMessage!.records {
                if (payload.payload.count == 0) {
                    continue
                }
                res += (String.init(data: payload.payload.advanced(by: 1), encoding: .utf8) ?? "Format not supported")
            }
        }
        
        session.alertMessage = "tag_successfully_read".localized()
        session.invalidate()
        print("read \(res)")
    })
            
}

Какой-то конкретный тип тега. Пробовали ли вы какой-либо другой тип тега?

Andrew 17.09.2022 00:03

@ Эндрю Я использую тег NFC Forum Type 2, нет, я еще не пробовал теги другого типа (на данный момент у меня нет других доступных). Это очень странно, потому что я весь день использовал эти теги типа 2 с этим кодом, но я решил обновиться до iOS 16 раньше, и теперь ndef всегда читается как ноль. Однако запись NFC работает нормально...

sparkhead95 17.09.2022 00:06

@Andrew, проверь мое редактирование - похоже, это ошибка iOS 16.

sparkhead95 17.09.2022 12:31

Привет @sparkhead95, я вижу то же самое с NTAG 213. Я обнаружил это, потому что некоторые из моих клиентов жалуются. tag.readNDEF возвращает «Тег не подключен» как ошибку. Однако NTAG 216 у меня работает нормально...

Nico S. 20.09.2022 01:15

Я попробовал асинхронный API ожидания прошлой ночью, но у него также есть ошибка...

Nico S. 21.09.2022 12:09
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
5
109
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я получил отзыв от инженера Apple. Пример проекта отлично работает на iOS 16. Вы упускаете из виду, что не подключены к тегу:

try await ndefReaderSession?.connect(to: tag)
let message = try await tag.readNDEF()

or

ndefReaderSession?.connect(to: tag) { error in
    //call tag.readNDEF here   
}

Обратите внимание: у меня был такой файл прав при развертывании в TestFlight, и загрузка не удалась, предупредив меня, что права NFC неверны. Мне пришлось удалить NDEF, чтобы исправить это. Возможно, это связано...

sparkhead95 27.09.2022 11:54

Хорошо, ты прав. Это был неправильный ответ @sparkhead95. Я тоже видел предупреждение. Я нашел ошибку сейчас и адаптировал ответ.

Nico S. 29.09.2022 00:46

Я делаю то же самое в своем коде в своем вопросе - я подключаюсь в начале, а затем вызываю tag.readNDEF. Или я неправильно понял ваш ответ?

sparkhead95 29.09.2022 11:51

Где? Я не вижу вызова подключения в вашем коде @sparkhead95

Nico S. 29.09.2022 12:19

О, ты прав! У меня также есть некоторый код записи NFC (который действительно подключается), и я случайно посмотрел на него. Спасибо за вашу помощь! Интересно, что мне не нужно было подключаться в iOS 15.

sparkhead95 29.09.2022 12:43

Другие вопросы по теме