«Отсутствует необходимое право» для NFCTagReaderSession - PullRequest
5 голосов
/ 05 июня 2019

Я углубляюсь в новые возможности CoreNFC в iOS 13 и пытаюсь заставить работать NFCTagReaderSession.После настройки моих прав и создания экземпляра NFCTagReaderSession и делегата я пытаюсь начать сеанс, вызвав nfcTagReaderSession?.begin().Мой сеанс немедленно становится недействительным с этой ошибкой:

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

Я следовал приведенной здесь документации для моего файла разрешений: https://developer.apple.com/documentation/bundleresources/entitlements/com_apple_developer_nfc_readersession_formats

Я также добавил соответствующее "Конфиденциальность - описание использования сканирования NFC "в моем Info.plist.

Кто-нибудь еще заставил это работать?Это просто проблема с Xcode 11 или iOS 13?

Вот код в моем 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)")
    }
}

Вот мой файл разрешений:

<?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>

Ответы [ 4 ]

3 голосов
/ 07 июня 2019

info.plist добавить эти ключи в список info.plist, как это

<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>
0 голосов
/ 08 июня 2019

Для чтения электронных паспортов, помимо добавления Чтение тега связи ближнего поля в разделе Возможности, вам нужно добавить следующий ключ AID и значение в info.plist:

<key>com.apple.developer.nfc.readersession.iso7816.select-identifiers</key>
<array>
    <string>A0000002471001</string>
</array>
0 голосов
/ 05 июня 2019

У меня была та же проблема, но она исчезла после удаления и добавления Чтение меток связи ближнего поля в Возможностях.

Мой файл прав немного отличается:

<?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>

Но я не думаю, что это так.

Также вы можете попробовать изменить пример Apple, чтобы он соответствовал вашим потребностям: https://developer.apple.com/documentation/corenfc/building_an_nfc_tag-reader_app

Или просто удалите .iso18092 из параметров опроса, и это будет работать. Я думаю, что этот стандарт требует определенных прав.

0 голосов
/ 05 июня 2019

Вы должны добавить эти ключи в список info.plist:

Идентификаторы приложения ISO7816 для сеанса чтения меток NFC

Системные коды ISO18092 для сеанса чтения меток NFC

Я не знаюне знаю значение для этого.Я сделал пример проекта, но я ничего не могу прочитать из своего электронного паспорта.В пятницу будет событие, на котором я надеюсь, что все станет ясно: ссылка

...