【问题标题】:Swift NFC Mifare - NFCISO7816APDU sendMifare Command not supportedSwift NFC Mifare - 不支持 NFCISO7816APDU sendMifare 命令
【发布时间】:2021-02-09 07:40:24
【问题描述】:

我正在尝试写入 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”更改该值,它可以工作,但对于我的设备是 read 请求

是我做错了什么还是 IOS 13.0 不支持在 Mifare 上写请求?

我正在使用 Xcode 12.2、iOS 13.0 和 Iphone 11。

提前感谢您的帮助

UPDATE 1 供安德鲁回复

这是我的代码:

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}

【问题讨论】:

    标签: ios swift xcode nfc mifare


    【解决方案1】:

    问题是您发送的没有有效负载数据。 数组 [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}
    

    是一个格式错误的请求。

    【讨论】:

      【解决方案2】:

      是的,你做错了,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){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=标签连接丢失}。有什么想法吗?
      • 我会用更多细节来更新原始问题,因为其他人可能不会在答案上阅读 cmets,并且 cmets 没有良好的格式化能力,因此很难阅读细节,就像你有做了 2 cmets,它们的尺寸也有限。
      猜你喜欢
      • 1970-01-01
      • 2023-03-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-26
      • 1970-01-01
      相关资源
      最近更新 更多