web-dev-qa-db-ja.com

NFCTagReaderSessionの「必要な資格がありません」

私はiOS 13の新しいCoreNFC機能に飛び込んでおり、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

また、Info.plistに適切な「プライバシー-NFC Scan Usage Description」を追加しました。

誰かがこれをまだ機能させていますか?これは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>
9
Steven Berard

同じ問題がありましたが、機能のNear Field Communication Tag Readingを削除して追加した後はなくなりました。

私の資格ファイルは少し異なります:

<?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を削除するだけで機能します。この標準には特定の資格が必要だと思います。

9
Stanislav K.

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>
5
Eilgnaw

EPassportsを読み取るには、機能にNear Field Communication Tag Readingを追加するほかに、info.plistに次のAIDキーと値を追加する必要があります。

<key>com.Apple.developer.nfc.readersession.iso7816.select-identifiers</key>
<array>
    <string>A0000002471001</string>
</array>
2
Melvin

このキーをinfo.plistに追加する必要があります。

NFCタグリーダーセッションのISO7816アプリケーション識別子

NFCタグリーダーセッションのISO18092システムコード

これの価値はわかりません。プロジェクトの例を実行しましたが、ePassportから何も読み取ることができません。金曜日にすべてが明らかになることを願うイベントがあります: link

1
Byteros