私は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>
同じ問題がありましたが、機能の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を削除するだけで機能します。この標準には特定の資格が必要だと思います。
EPassportsを読み取るには、機能にNear Field Communication Tag Readingを追加するほかに、info.plistに次のAIDキーと値を追加する必要があります。
<key>com.Apple.developer.nfc.readersession.iso7816.select-identifiers</key>
<array>
<string>A0000002471001</string>
</array>
このキーをinfo.plistに追加する必要があります。
NFCタグリーダーセッションのISO7816アプリケーション識別子
NFCタグリーダーセッションのISO18092システムコード
これの価値はわかりません。プロジェクトの例を実行しましたが、ePassportから何も読み取ることができません。金曜日にすべてが明らかになることを願うイベントがあります: link