Post

Replies

Boosts

Views

Activity

Send APDU Commands to iso7816 in background
Hello iPhone xs for testing XCode 15.3 I've successfully managed to select the AID and send other commands to a SmartCard using the following code: class NFCReader: NSObject, ObservableObject, NFCTagReaderSessionDelegate { func startNFCSession() { session = NFCTagReaderSession(pollingOption: [.iso14443], delegate: self, queue: nil) session?.alertMessage = "Hold your iPhone near the NFC tag." session?.begin() // Start the session } func tagReaderSession(_ session: NFCTagReaderSession, didDetect tags: [NFCTag]) { guard let tag = tags.first else { // Safely unwrap the first tag session.invalidate(errorMessage: "No SmartCard detected.") return } session.connect(to: tag, completionHandler: { (error: Error?) in if let error = error { session.invalidate(errorMessage: "Unable to connect to SmartCard: \(error.localizedDescription)") return } switch tag { case let .iso7816(iso7816Tag): self.sendAPDUCommandSelect(to: iso7816Tag) self.sendAPDUCommand_2(to: iso7816Tag) default: print("Not iso7816 type") // Update the SwiftUI view break } }) } } I encounter an issue when attempting to interact with the user for specific commands. I need to maintain the session active in the background while waiting for additional commands. However, upon closing the NFC dialog, I receive the NFCError Code=200 "Session invalidated by the user" error. My ideal use case: Button1: Initiates the connection and waits for the SmartCard to be presented. tagReaderSession() connects to the SmartCard and sends the AID. Button2: Sends APDU command 2. Button3: Sends APDU command 3. To proceed with clicking the other buttons, the NFC dialog must be closed, but doing so invalidates the session with error 200. Is there a way to keep the connection valid in the background while waiting for additional commands?
0
0
129
3w