web-dev-qa-db-ja.com

iOS 13のNFCカードのUIDを読む

私はMifareカードのUIDを再集計したいです。 iPhone X、Xcode 11とiOS 13を使用しています。

私はこれがこのウェブサイトに従ってiOS 13まで可能ではなかった(特にUIDを読む)ことはできませんでした: https://gototags.com/blog/Apple-expands-nfc-on-iphone-in--inoios -13 / とこの男: https://www.reddit.com/r/apple/comments/c0gzf0/clearing_up_misunderStands_and/

PHONES NFCリーダーがカードを正しく検出しているが、一意の識別子は常に空またはnilとして返されます。私はペイロードを読むことができますが、iOSには無関係ですが、Androidでこれを行うことができます(カードが不良ではないか奇数ではない)

Appleサンプルプロジェクト: https://developer.apple.com/documentation/corenfc/building_an_nfc_tag-reader_app

_    func tagReaderSession(_ session: NFCTagReaderSession, didDetect tags: [NFCTag]) {
            if case let NFCTag.miFare(tag) = tags.first! {
                session.connect(to: tags.first!) { (error: Error?) in
                    let apdu = NFCISO7816APDU(instructionClass: 0, instructionCode: 0xB0, p1Parameter: 0, p2Parameter: 0, data: Data(), expectedResponseLength: 16)
                    tag.queryNDEFStatus(completionHandler: {(status: NFCNDEFStatus, e: Int, error: Error?) in
                        debugPrint("\(status) \(e) \(error)")
                    })
                    tag.sendMiFareISO7816Command(apdu) { (data, sw1, sw2, error) in
                        debugPrint(data)
                        debugPrint(error)
                        debugPrint(tag.identifier)
                        debugPrint(String(data: tag.identifier, encoding: .utf8))
                    }
                }
            }
        }
_

私はこれらの種類のハックを知っています: CorenfcはiOSでUIDを読んでいない

しかし、彼らは閉じられ、過去に短時間でiOS 11にのみ適用されます。

9
Sean Dev

私はあなたがそれがnilを返すと言ったが、将来の読者を明確にするために:

FeliCaタグではないと仮定すると、検出されたらidentifierフィールドにあるべきです。

_func tagReaderSession(_ session: NFCTagReaderSession, didDetect tags: [NFCTag]) {      
  if case let NFCTag.miFare(tag) = tags.first! {
    print(tag.identifier as NSData)
  }
}
_

しかし、あなたの場合は空です(下記の編集を参照)。ほとんどのタグでは、APDUがタグのUIDを取得するのは

_  0xff // Class
  0xca // INS
  0x00 // P1
  0x00 // P2
  0x00 // Le
_

そのため、_tag.sendMiFareCommand_を使ってそのコマンドを手動で送信することができます。

編集:opからの応答、それは空ではありませんでしたが、Swiftの印刷はコンソールに表示されない

2
Scott Condron