Отсутствует необходимое право для NFCTagReaderSession - PullRequest
0 голосов
/ 10 октября 2019

Я пытаюсь запустить связь с помощью corenfc, используя ISO7816, но я всегда получаю одну и ту же ошибку, хотя я пытался опубликовать несколько запросов в Интернете.

код:

@IBAction func scanPressed(_ sender: Any) {
        nfcSession = NFCTagReaderSession.init(pollingOption: .iso14443, delegate: self)
        nfcSession?.alertMessage = "Hold your IPhone near the ISO7816 tag to begin transaction.";
        nfcSession?.begin()
    }

и мой info.plist -

<?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.iso7816.select-identifiers</key>
    <array>
        <string>D2760000850101</string>
    </array>
    <key>com.apple.developer.nfc.readersession.formats</key>
    <array>
      <string>NDEF</string>
      <string>TAG</string>
    </array>  
    <key>CFBundleDevelopmentRegion</key>
    <string>$(DEVELOPMENT_LANGUAGE)</string>
    <key>CFBundleExecutable</key>
    <string>$(EXECUTABLE_NAME)</string>
    <key>CFBundleIdentifier</key>
    <string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
    <key>CFBundleInfoDictionaryVersion</key>
    <string>6.0</string>
    <key>CFBundleName</key>
    <string>$(PRODUCT_NAME)</string>
    <key>CFBundlePackageType</key>
    <string>APPL</string>
    <key>CFBundleShortVersionString</key>
    <string>1.0</string>
    <key>CFBundleVersion</key>
    <string>1</string>
    <key>LSRequiresIPhoneOS</key>
    <true/>
    <key>NFCReaderUsageDescription</key>
    <string>Message in a Card</string>
    <key>UILaunchStoryboardName</key>
    <string>LaunchScreen</string>
    <key>UIMainStoryboardFile</key>
    <string>Main</string>
    <key>UIRequiredDeviceCapabilities</key>
    <array>
        <string>armv7</string>
        <string>nfc</string>
    </array>
    <key>UISupportedInterfaceOrientations</key>
    <array>
        <string>UIInterfaceOrientationPortrait</string>
        <string>UIInterfaceOrientationLandscapeLeft</string>
        <string>UIInterfaceOrientationLandscapeRight</string>
    </array>
    <key>UISupportedInterfaceOrientations~ipad</key>
    <array>
        <string>UIInterfaceOrientationPortrait</string>
        <string>UIInterfaceOrientationPortraitUpsideDown</string>
        <string>UIInterfaceOrientationLandscapeLeft</string>
        <string>UIInterfaceOrientationLandscapeRight</string>
    </array>
</dict>
</plist>

Я получаю следующую ошибку

Сеанс был признан недействительным: Ошибка Домен = Код NFCError = 2 «Отсутствует требуемое право» UserInfo ={NSLocalizedDescription = Отсутствует необходимое право}

Как это можно решить?

1 Ответ

0 голосов
/ 15 октября 2019

Ваши права должны находиться в файле с именем NFCTagReaders.entitlements, и он должен содержать следующее:

<?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>NDEF</string>
        <string>TAG</string>
    </array>
</dict>

Я не уверен, почему в вашем случае он содержится восновной файл Info.plist. Это может быть связано с вашей проблемой, так как ваши конфигурации выглядят правильно.

Файлы Info.plist и NFCTagReaders.entitlements:

screenshot Info.plist and NFCTagReaders.entitlements files

Проверьте также, что возможности NFC активированы в конфигурации проекта.

Перед началом сеанса также следует проверить, доступен ли сеанс NFC, добавив следующие строки:

guard NFCTagReaderSession.readingAvailable else {
        print("NFC Session not available")
        return
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...