Swift NFC Mifare - NFCISO7816APDU sendMifare命令不受支持。

3
我正在尝试写入Mifare Ultralight NFC,但是出现了以下错误:
Optional(Error Domain=NFCError Code=1 "Feature not supported" UserInfo={NSLocalizedDescription=Feature not supported})

我正在使用以下代码进行编写:

我正在使用以下代码进行编写:

if case let NFCTag.miFare(tag) = tags.first! {
            let dataMifare: [UInt8] = [240, 0, 0, 0] // READ page 4 + CRC
            let dataPacketMifare = Data(bytes: dataMifare, count: dataMifare.count)
            session.connect(to: tags.first!) { (error: Error?) in
let apdu = NFCISO7816APDU(instructionClass: 0xFF, instructionCode: 0xD6, p1Parameter: 0x00, p2Parameter: 0xFF, data: dataPacketMifare, expectedResponseLength: 0x02)
               
                
tag.sendMiFareISO7816Command(apdu) { (apduData, sw1, sw2, error) in
    let tagUIDData = tag.identifier
    session.invalidate(errorMessage: "Test")
    debugPrint(apduData)
    debugPrint(error)
    debugPrint(tag.identifier)

我的 Info.plist 文件:

<key>com.apple.developer.nfc.readersession.iso7816.select-identifiers</key>
    <array>
    <string>D2760000850100</string>
    <string>D2760000850101</string>
    </array>
<key>com.apple.developer.nfc.readersession.formats</key>
<array>
    <string>NDEF</string>
    <string>TAG</string>
</array>

我是一名中文翻译助手,以下为翻译结果:
我正在向自定义设备写入数据,其中值“0xFF”表示写入请求。如果我将该值更改为“0x00”,那么它可以正常工作,但对于我的设备来说,这是一个读取请求。
我使用的是Xcode 12.2、iOS 13.0和iPhone 11。我是否做错了什么或者iOS 13.0真的不支持在Mifare上进行写入请求?
感谢您提前的帮助。
更新1:针对Andrew的回复,这是我的代码:
func handlerResponse(Result: Result< Data, Error>){
    print("error")
}

let dataMifareTest: [UInt8] = [0xF0, 0, 0, 0] 
let dataPacketMifareTest = Data(bytes: dataMifareTest, count: dataMifareTest.count)
tag.sendMiFareCommand(commandPacket: dataPacketMifareTest, resultHandler: handlerResponse)

但是我遇到了以下错误:

NFCTagReader[516:101552] [CoreNFC] 00000002 83fd0090 -[NFCTagReaderSession transceive:tagUpdate:error:]:771  Error Domain=NFCError Code=100 "Tag connection lost" UserInfo={NSLocalizedDescription=Tag connection lost}
2个回答

2

问题在于你发送的内容没有有效载荷数据。 数组[0xF0,0,0,0]仅包含页面请求。 错误信息:

NFCTagReader[516:101552] [CoreNFC] 00000002 83fd0090 -[NFCTagReaderSession transceive:tagUpdate:error:]:771  Error Domain=NFCError Code=100 "Tag connection lost" UserInfo={NSLocalizedDescription=Tag connection lost}

这是一个格式不正确的请求。


0

是的,你做错了一些事情,Mifare Ultralight不是一个支持ISO7816的卡。

如果你看一下 https://developer.apple.com/documentation/corenfc/nfcmifaretag/3153114-sendmifareiso7816command

上面写着

使用这个方法发送命令给具有mifareFamily值为NFCMiFareFamily.plus或NFCMiFareFamily.desfire的标签。

你不能发送Mifare Ultralight APDU,一些Mifare卡片如desfire是多标准卡。

更新:

标签连接丢失经常意味着卡片出现错误并进入HALT状态,直到通过通常进入和离开RF场来重置卡片,才能进行进一步的通信。

在你最初的问题中,你说

我正在向一个自定义设备写入,其中值"0xFF"表示写入请求。

但是你似乎发送的是0xF0,这是不同的,可能不是一个有效的命令。

这是我的代码:func handlerResponse(Result: Result< Data, Error>){print("error")} let dataMifareTest: [UInt8] = [0xF0, 0, 0, 0] let dataPacketMifareTest = Data(bytes: dataMifareTest, count: dataMifareTest.count) tag.sendMiFareCommand(commandPacket: dataPacketMifareTest, resultHandler: handlerResponse - undefined
这是错误信息:NFCTagReader[516:101552] [CoreNFC] 00000002 83fd0090 -[NFCTagReaderSession transceive:tagUpdate:error:]:771 Error Domain=NFCError Code=100 "Tag connection lost" UserInfo={NSLocalizedDescription=Tag connection lost}。有什么想法吗? - undefined
1
我会更新原来的问题,添加更多细节,因为其他人可能不会阅读回答下面的评论,而且评论没有良好的格式能力,使得很难读到这些细节。而且你已经发表了两条评论,它们的大小也有限制。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接