Taplinx iOS appcrash on tag response

キャンセル
次の結果を表示 
表示  限定  | 次の代わりに検索 
もしかして: 

Taplinx iOS appcrash on tag response

ソリューションへジャンプ
2,329件の閲覧回数
DamianD
Contributor III

Hi, i followed UG10045.pdf and created ios application. I created ApduExchangeWithByteArray method and implemented its contents. However when send back response from tag back to taplinx library, application crashes with following entries from device log:

Time	Device Name	Type	PID	Tag	Message
Nov  6 20:44:31	iPhone	Notice	5223	MobileFacilityApp	Command Set - 1
Nov  6 20:44:31	iPhone	Notice	5223	MobileFacilityApp	Command Set - Native
Nov  6 20:44:31	iPhone	Error	0	kernel(Sandbox)	Sandbox: MobileFacilityApp(5223) deny(1) sysctl-read kern.bootargs
Nov  6 20:44:38	iPhone	Notice	5223	MobileFacilityApp(UIKitCore)	Received memory warning.
Nov  6 20:44:38	iPhone	Notice	5223	MobileFacilityApp(UIKitCore)	Received memory warning.
Nov  6 20:44:40	iPhone	Notice	0	kernel	EXC_RESOURCE -> MobileFacilityApp[5223] exceeded mem limit: InactiveHard 3072 MB (fatal)
Nov  6 20:44:40	iPhone	Notice	0	kernel	memorystatus: killing process 5223 [MobileFacilityApp] in high band FOREGROUND (100) - memorystatus_available_pages: 44859

 

When i sent back empty response back to taplinx library (just TL_TagAPDUResponse without setting ResponseData) - app does not crash and i get error about incomplete response (which is expected). What am i doing wrong?  

0 件の賞賛
返信
1 解決策
2,288件の閲覧回数
DamianD
Contributor III

apparently included headers in TapLinx-v2.0.0 are all wrong. In TapLinxApduHandler.h we see declaration:

- (nullable TL_TagAPDUResponse *)apduExchangeWithByteArray:(NSData *_Nonnull)apduData;

but in reality we should return IOSByteArray*, otherwise app will crash with aforementioned symptoms

元の投稿で解決策を見る

0 件の賞賛
返信
6 返答(返信)
2,230件の閲覧回数
ukcas
NXP Employee
NXP Employee

Hello Damian,

Maybe the cause of the error is some exceeding memory limit and not TapLinx library?

MobileFacilityApp[5223] exceeded mem limit: InactiveHard 3072 MB (fatal)

 

The application which integrates TapLinx Library can be used as following (no need for ApduExchange implementation on top)

Set the delegate to the APDUHandler

let reader = TL_IOSNFCReader(uid: tag.identifier, historicalBytes: tag.historicalBytes ?? Data())

handler = TapLinxApduHandler(reader: reader)

handler.delegate = self

                

libraryManager?.setApduHandlerWithApduHandler(handler)

 

Next Step will be to implement the protocol method inside the application

 

func apduExchange(withByteArray apduData: Data) -> TL_TagAPDUResponse? {

        var tagAPDUResponse: TL_TagAPDUResponse?

       

        if connectedTag != nil {

            // Send Tag Type Native of ISO and the apdu as NFCISO7816APDU

            executeAPDUCommandOn7816Tag(tagType: tagtype, apdu: apdu) { data in

                let appendedData = data


                tagAPDUResponse = TL_TagAPDUResponse(responseData: appendedData, tag: self.currentTag)

                semaphore.signal()

            }

            let _ = semaphore.wait(timeout: .now() + 3.0)

        } else if connectedMifareTag != nil {

            let semaphore = DispatchSemaphore(value: 0)

           

            print("MIFARE CAPDU -> \(apduData.hex)")

           

            executeAPDUCommandOnMIFARETag(apdu: apduData) { data in

                print("RAPDU <- Data: \(data.hex)")

                tagAPDUResponse = TL_TagAPDUResponse(responseData: data, tag: self.currentTag)

                semaphore.signal()

            }

            let _ = semaphore.wait(timeout: .now() + 3.0)

        }

        print("Tag Response \(String(describing: tagAPDUResponse))")

        return tagAPDUResponse

    }

 

Hope this simplification would help you.

 

Best regards,

TapLinx team

0 件の賞賛
返信
2,227件の閲覧回数
DamianD
Contributor III

@ukcas - what version of taplinx ios library is 'current'? Because i have 2.0.0 and it definitely crashes when i return TL_TagAPDUResponse from apduExchange method, it has to be raw IOSByteArray from j2objc library. I'm using c# bindings for taplinx library, but it does not matter in this problem.

0 件の賞賛
返信
2,228件の閲覧回数
DamianD
Contributor III
hi
the crash definietly comes from taplinx library because when i changed
- (nullable TL_TagAPDUResponse *)apduExchangeWithByteArray:(NSData *_Nonnull)apduData;
to actually:
- (nullable IOSByteArray*)apduExchangeWithByteArray:(IOSByteArray*_Nonnull)apduData;
It started working

0 件の賞賛
返信
2,220件の閲覧回数
DamianD
Contributor III
followup - when i changed my implementation to use provided TapLinxApduHandler instead of providing my own - then apduExchangeWithByteArray does conform to contract - (nullable TL_TagAPDUResponse *)apduExchangeWithByteArray:(NSData *_Nonnull)apduData;
0 件の賞賛
返信
2,285件の閲覧回数
DamianD
Contributor III

one more thing - apduData is really also IOSByteArray, not NSData

0 件の賞賛
返信
2,289件の閲覧回数
DamianD
Contributor III

apparently included headers in TapLinx-v2.0.0 are all wrong. In TapLinxApduHandler.h we see declaration:

- (nullable TL_TagAPDUResponse *)apduExchangeWithByteArray:(NSData *_Nonnull)apduData;

but in reality we should return IOSByteArray*, otherwise app will crash with aforementioned symptoms

0 件の賞賛
返信
%3CLINGO-SUB%20id%3D%22lingo-sub-1989340%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%E3%82%BF%E3%82%B0%E3%83%AC%E3%82%B9%E3%83%9D%E3%83%B3%E3%82%B9%E3%81%A7%E3%81%AETaplinx%20iOS%E3%82%A2%E3%83%97%E3%83%AA%E3%81%AE%E3%82%AF%E3%83%A9%E3%83%83%E3%82%B7%E3%83%A5%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-1989340%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%3CP%3E%E3%81%93%E3%82%93%E3%81%AB%E3%81%A1%E3%81%AF%E3%80%81%E7%A7%81%E3%81%AF%20%3CSPAN%3EUG10045.pdf%E3%81%AB%E5%BE%93%E3%81%A3%E3%81%A6iOS%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%82%92%E4%BD%9C%E6%88%90%E3%81%97%E3%81%BE%E3%81%97%E3%81%9F%E3%80%82%E7%A7%81%E3%81%AFApduExchangeWithByteArray%E3%83%A1%E3%82%BD%E3%83%83%E3%83%89%E3%82%92%E4%BD%9C%E6%88%90%E3%81%97%E3%80%81%E3%81%9D%E3%81%AE%E5%86%85%E5%AE%B9%E3%82%92%E5%AE%9F%E8%A3%85%E3%81%97%E3%81%BE%E3%81%97%E3%81%9F%E3%80%82%E3%81%9F%E3%81%A0%E3%81%97%E3%80%81%E3%82%BF%E3%82%B0%E3%81%8B%E3%82%89taplinx%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA%E3%81%AB%E5%BF%9C%E7%AD%94%E3%82%92%E8%BF%94%E3%81%99%E3%81%A8%E3%80%81%E3%83%87%E3%83%90%E3%82%A4%E3%82%B9%E3%83%AD%E3%82%B0%E3%81%8B%E3%82%89%E6%AC%A1%E3%81%AE%E3%82%A8%E3%83%B3%E3%83%88%E3%83%AA%E3%81%A7%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%8C%E3%82%AF%E3%83%A9%E3%83%83%E3%82%B7%E3%83%A5%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%3C%2FSPAN%3E%3C%2FP%3E%3CPRE%20class%3D%22lia-code-sample%20language-csharp%22%3E%3CCODE%20translate%3D%22no%22%3ETime%09Device%20Name%09Type%09PID%09Tag%09Message%0ANov%20%206%2020%3A44%3A31%09iPhone%09Notice%095223%09MobileFacilityApp%09Command%20Set%20-%201%0ANov%20%206%2020%3A44%3A31%09iPhone%09Notice%095223%09MobileFacilityApp%09Command%20Set%20-%20Native%0ANov%20%206%2020%3A44%3A31%09iPhone%09Error%090%09kernel(Sandbox)%09Sandbox%3A%20MobileFacilityApp(5223)%20deny(1)%20sysctl-read%20kern.bootargs%0ANov%20%206%2020%3A44%3A38%09iPhone%09Notice%095223%09MobileFacilityApp(UIKitCore)%09Received%20memory%20warning.%0ANov%20%206%2020%3A44%3A38%09iPhone%09Notice%095223%09MobileFacilityApp(UIKitCore)%09Received%20memory%20warning.%0ANov%20%206%2020%3A44%3A40%09iPhone%09Notice%090%09kernel%09EXC_RESOURCE%20-%26gt%3B%20MobileFacilityApp%5B5223%5D%20exceeded%20mem%20limit%3A%20InactiveHard%203072%20MB%20(fatal)%0ANov%20%206%2020%3A44%3A40%09iPhone%09Notice%090%09kernel%09memorystatus%3A%20killing%20process%205223%20%5BMobileFacilityApp%5D%20in%20high%20band%20FOREGROUND%20(100)%20-%20memorystatus_available_pages%3A%2044859%3C%2FCODE%3E%3C%2FPRE%3E%3CBR%20%2F%3E%3CP%3E%E7%A9%BA%E3%81%AE%E5%BF%9C%E7%AD%94%E3%82%92taplinx%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA%E3%81%AB%E9%80%81%E3%82%8A%E8%BF%94%E3%81%99%E3%81%A8(ResponseData%E3%82%92%E8%A8%AD%E5%AE%9A%E3%81%9B%E3%81%9A%E3%81%ABTL_TagAPDUResponse)%E3%80%81%E3%82%A2%E3%83%97%E3%83%AA%E3%81%AF%E3%82%AF%E3%83%A9%E3%83%83%E3%82%B7%E3%83%A5%E3%81%9B%E3%81%9A%E3%80%81%E4%B8%8D%E5%AE%8C%E5%85%A8%E3%81%AA%E5%BF%9C%E7%AD%94%E3%81%AB%E9%96%A2%E3%81%99%E3%82%8B%E3%82%A8%E3%83%A9%E3%83%BC%E3%81%8C%E7%99%BA%E7%94%9F%E3%81%97%E3%81%BE%E3%81%99(%E3%81%93%E3%82%8C%E3%81%AF%E4%BA%88%E6%83%B3%E3%81%95%E3%82%8C%E3%81%BE%E3%81%99)%E3%80%82%E7%A7%81%E3%81%AF%E4%BD%95%E3%81%8C%E9%96%93%E9%81%95%E3%81%A3%E3%81%A6%E3%81%84%E3%81%BE%E3%81%99%E3%81%8B%3F%3C%2FP%3E%3C%2FLINGO-BODY%3E%3CLINGO-SUB%20id%3D%22lingo-sub-1991088%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3ERe%3A%E3%82%BF%E3%82%B0%E5%BF%9C%E7%AD%94%E3%81%AETaplinx%20iOS%E3%81%AEappcrash%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-1991088%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%E3%83%95%E3%82%A9%E3%83%AD%E3%83%BC%E3%82%A2%E3%83%83%E3%83%97%20-%20%E7%A7%81%E3%81%8C%E8%87%AA%E5%88%86%E3%81%AE%E3%82%82%E3%81%AE%E3%82%92%E6%8F%90%E4%BE%9B%E3%81%99%E3%82%8B%E4%BB%A3%E3%82%8F%E3%82%8A%E3%81%AB%E6%8F%90%E4%BE%9B%E3%81%95%E3%82%8C%E3%81%9FTapLinxApduHandler%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%99%E3%82%8B%E3%82%88%E3%81%86%E3%81%AB%E5%AE%9F%E8%A3%85%E3%82%92%E5%A4%89%E6%9B%B4%E3%81%97%E3%81%9F%E3%81%A8%E3%81%8D%20-%20%E3%81%9D%E3%81%AE%E5%BE%8C%E3%80%81apduExchangeWithByteArray%E3%81%AF%E3%82%B3%E3%83%B3%E3%83%88%E3%83%A9%E3%82%AF%E3%83%88%E3%81%AB%E6%BA%96%E6%8B%A0%E3%81%97%E3%81%BE%E3%81%99%20-%20(null%E8%A8%B1%E5%AE%B9%20TL_TagAPDUResponse%20*)apduExchangeWithByteArray%3A(NSData%20*_Nonnull)apduData%3B%3C%2FLINGO-BODY%3E%3CLINGO-SUB%20id%3D%22lingo-sub-1991063%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3ERe%3A%E3%82%BF%E3%82%B0%E5%BF%9C%E7%AD%94%E3%81%AETaplinx%20iOS%E3%81%AEappcrash%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-1991063%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%3CP%3E%3CA%20href%3D%22https%3A%2F%2Fcommunity.nxp.com%2Ft5%2Fuser%2Fviewprofilepage%2Fuser-id%2F169705%22%20target%3D%22_blank%22%3E%40ukcas%3C%2FA%3E%20-%20Taplinx%20iOS%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA%E3%81%AE%E3%81%A9%E3%81%AE%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E3%81%8C%E3%80%8C%E6%9C%80%E6%96%B0%E3%80%8D%E3%81%A7%E3%81%99%E3%81%8B%3F%E7%A7%81%E3%81%AF2.0.0%E3%82%92%E6%8C%81%E3%81%A3%E3%81%A6%E3%81%8A%E3%82%8A%E3%80%81%20%3CSPAN%3EapduExchange%E3%83%A1%E3%82%BD%E3%83%83%E3%83%89%E3%81%8B%E3%82%89TL_TagAPDUResponse%E3%82%92%E8%BF%94%E3%81%99%E3%81%A8%E9%96%93%E9%81%95%E3%81%84%E3%81%AA%E3%81%8F%E3%82%AF%E3%83%A9%E3%83%83%E3%82%B7%E3%83%A5%E3%81%99%E3%82%8B%E3%81%9F%E3%82%81%E3%80%81j2objc%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA%E3%81%8B%E3%82%89%E3%81%AE%E7%94%9F%E3%81%AEIOSByteArray%E3%81%A7%E3%81%82%E3%82%8B%E5%BF%85%E8%A6%81%E3%81%8C%E3%81%82%E3%82%8A%E3%81%BE%E3%81%99%E3%80%82%E7%A7%81%E3%81%AFtaplinx%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA%E3%81%ABC%23%E3%83%90%E3%82%A4%E3%83%B3%E3%83%87%E3%82%A3%E3%83%B3%E3%82%B0%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%97%E3%81%A6%E3%81%84%E3%81%BE%E3%81%99%E3%81%8C%E3%80%81%E3%81%93%E3%81%AE%E5%95%8F%E9%A1%8C%E3%81%A7%E3%81%AF%E5%95%8F%E9%A1%8C%E3%81%A7%E3%81%AF%E3%81%82%E3%82%8A%E3%81%BE%E3%81%9B%E3%82%93%E3%80%82%3C%2FSPAN%3E%3C%2FP%3E%3C%2FLINGO-BODY%3E%3CLINGO-SUB%20id%3D%22lingo-sub-1991041%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3ERe%3A%E3%82%BF%E3%82%B0%E5%BF%9C%E7%AD%94%E3%81%AETaplinx%20iOS%E3%81%AEappcrash%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-1991041%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%E3%81%93%E3%82%93%E3%81%AB%E3%81%A1%E3%81%AF%3CBR%20%2F%3E%E3%82%AF%E3%83%A9%E3%83%83%E3%82%B7%E3%83%A5%E3%81%AF%E9%96%93%E9%81%95%E3%81%84%E3%81%AA%E3%81%8FTaplinx%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA%E3%81%8B%E3%82%89%E6%9D%A5%E3%81%A6%E3%81%84%E3%81%BE%E3%81%99%E3%80%82%3CBR%20%2F%3E-%20(null%20%E8%A8%B1%E5%AE%B9%20TL_TagAPDUResponse%20*)apduExchangeWithByteArray%3A(NSData%20*_Nonnull)apduData%3B%3CBR%20%2F%3E%E5%AE%9F%E9%9A%9B%E3%81%AB%E3%81%AF%3A%3CBR%20%2F%3E-%20(null%20%E8%A8%B1%E5%AE%B9%20IOSByteArray*)apduExchangeWithByteArray%3A(IOSByteArray*_Nonnull)apduData%3B%3CBR%20%2F%3E%E3%81%9D%E3%82%8C%E3%81%AF%E5%8B%95%E3%81%8D%E5%A7%8B%E3%82%81%E3%81%BE%E3%81%97%E3%81%9F%3CBR%20%2F%3E%3CBR%20%2F%3E%3C%2FLINGO-BODY%3E%3CLINGO-SUB%20id%3D%22lingo-sub-1991020%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3ERe%3A%E3%82%BF%E3%82%B0%E5%BF%9C%E7%AD%94%E3%81%AETaplinx%20iOS%E3%81%AEappcrash%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-1991020%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%3CP%3E%E3%81%93%E3%82%93%E3%81%AB%E3%81%A1%E3%81%AF%E3%80%81%E3%83%80%E3%83%9F%E3%82%A2%E3%83%B3%E3%80%82%3C%2FP%3E%0A%3CP%3E%E3%81%9F%E3%81%B6%E3%82%93%E3%80%81%E3%82%A8%E3%83%A9%E3%83%BC%E3%81%AE%E5%8E%9F%E5%9B%A0%E3%81%AF%E3%80%81TapLinx%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA%E3%81%A7%E3%81%AF%E3%81%AA%E3%81%8F%E3%80%81%E3%83%A1%E3%83%A2%E3%83%AA%E5%88%B6%E9%99%90%E3%82%92%E8%B6%85%E3%81%88%E3%81%A6%E3%81%84%E3%82%8B%E3%81%93%E3%81%A8%E3%81%A7%E3%81%99%E3%81%8B%3F%3C%2FP%3E%0A%3CPRE%20class%3D%22lia-code-sample%20%20language-csharp%22%3E%3CCODE%20translate%3D%22no%22%3EMobileFacilityApp%5B5223%5D%20exceeded%20mem%20limit%3A%20InactiveHard%203072%20MB%20(fatal)%3C%2FCODE%3E%3C%2FPRE%3E%0A%3CBR%20%2F%3E%0A%3CP%3ETapLinx%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA%E3%82%92%E7%B5%B1%E5%90%88%E3%81%97%E3%81%9F%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%AF%E3%80%81%E6%AC%A1%E3%81%AE%E3%82%88%E3%81%86%E3%81%AB%E4%BD%BF%E7%94%A8%E3%81%A7%E3%81%8D%E3%81%BE%E3%81%99(ApduExchange%E3%82%92%E4%B8%8A%E3%81%AB%E5%AE%9F%E8%A3%85%E3%81%99%E3%82%8B%E5%BF%85%E8%A6%81%E3%81%AF%E3%81%82%E3%82%8A%E3%81%BE%E3%81%9B%E3%82%93)%E3%80%82%3C%2FP%3E%0A%3CP%3E%3CSTRONG%3E%E4%BB%A3%E7%90%86%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E3%82%92%20APDUHandler%20%E3%81%AB%E8%A8%AD%E5%AE%9A%E3%81%99%E3%82%8B%3C%2FSTRONG%3E%3C%2FP%3E%0A%3CPRE%20class%3D%22lia-code-sample%20language-java%22%3E%3CCODE%20translate%3D%22no%22%3Elet%20reader%20%3D%20TL_IOSNFCReader(uid%3A%20tag.identifier%2C%20historicalBytes%3A%20tag.historicalBytes%20%3F%3F%20Data())%0A%0Ahandler%20%3D%20TapLinxApduHandler(reader%3A%20reader)%0A%0Ahandler.delegate%20%3D%20self%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%0AlibraryManager%3F.setApduHandlerWithApduHandler(handler)%3C%2FCODE%3E%3C%2FPRE%3E%0A%3CBR%20%2F%3E%0A%3CP%3E%3CSTRONG%3E%E6%AC%A1%E3%81%AE%E3%82%B9%E3%83%86%E3%83%83%E3%83%97%E3%81%AF%E3%80%81%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E5%86%85%E3%81%AB%E3%83%97%E3%83%AD%E3%83%88%E3%82%B3%E3%83%AB%E3%83%A1%E3%82%BD%E3%83%83%E3%83%89%E3%82%92%E5%AE%9F%E8%A3%85%E3%81%99%E3%82%8B%E3%81%93%E3%81%A8%E3%81%A7%E3%81%99%3C%2FSTRONG%3E%3C%2FP%3E%0A%3CBR%20%2F%3E%0A%3CPRE%20class%3D%22lia-code-sample%20language-java%22%3E%3CCODE%20translate%3D%22no%22%3Efunc%20apduExchange(withByteArray%20apduData%3A%20Data)%20-%26gt%3B%20TL_TagAPDUResponse%3F%20%7B%0A%0A%20%20%20%20%20%20%20%20var%20tagAPDUResponse%3A%20TL_TagAPDUResponse%3F%0A%0A%20%20%20%20%20%20%20%0A%0A%20%20%20%20%20%20%20%20if%20connectedTag%20!%3D%20nil%20%7B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%2F%2F%20Send%20Tag%20Type%20Native%20of%20ISO%20and%20the%20apdu%20as%20NFCISO7816APDU%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20executeAPDUCommandOn7816Tag(tagType%3A%20tagtype%2C%20apdu%3A%20apdu)%20%7B%20data%20in%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20let%20appendedData%20%3D%20data%0A%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20tagAPDUResponse%20%3D%20TL_TagAPDUResponse(responseData%3A%20appendedData%2C%20tag%3A%20self.currentTag)%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20semaphore.signal()%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20let%20_%20%3D%20semaphore.wait(timeout%3A%20.now()%20%2B%203.0)%0A%0A%20%20%20%20%20%20%20%20%7D%20else%20if%20connectedMifareTag%20!%3D%20nil%20%7B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20let%20semaphore%20%3D%20DispatchSemaphore(value%3A%200)%0A%0A%20%20%20%20%20%20%20%20%20%20%20%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20print(%22MIFARE%20CAPDU%20%3CLI-EMOJI%20id%3D%22lia_mobile-phone%22%20title%3D%22%3Amobile_phone%3A%22%3E%3C%2FLI-EMOJI%3E-%26gt%3B%3CLI-EMOJI%20id%3D%22lia_credit-card%22%20title%3D%22%3Acredit_card%3A%22%3E%3C%2FLI-EMOJI%3E%20%5C(apduData.hex)%22)%0A%0A%20%20%20%20%20%20%20%20%20%20%20%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20executeAPDUCommandOnMIFARETag(apdu%3A%20apduData)%20%7B%20data%20in%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20print(%22RAPDU%20%3CLI-EMOJI%20id%3D%22lia_mobile-phone%22%20title%3D%22%3Amobile_phone%3A%22%3E%3C%2FLI-EMOJI%3E%26lt%3B-%3CLI-EMOJI%20id%3D%22lia_credit-card%22%20title%3D%22%3Acredit_card%3A%22%3E%3C%2FLI-EMOJI%3E%20Data%3A%20%5C(data.hex)%22)%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20tagAPDUResponse%20%3D%20TL_TagAPDUResponse(responseData%3A%20data%2C%20tag%3A%20self.currentTag)%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20semaphore.signal()%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20let%20_%20%3D%20semaphore.wait(timeout%3A%20.now()%20%2B%203.0)%0A%0A%20%20%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%20%20print(%22Tag%20Response%20%5C(String(describing%3A%20tagAPDUResponse))%22)%0A%0A%20%20%20%20%20%20%20%20return%20tagAPDUResponse%0A%0A%20%20%20%20%7D%3C%2FCODE%3E%3C%2FPRE%3E%0A%3CBR%20%2F%3E%0A%3CP%3E%E3%81%93%E3%81%AE%E5%8D%98%E7%B4%94%E5%8C%96%E3%81%8C%E3%81%8A%E5%BD%B9%E3%81%AB%E7%AB%8B%E3%81%A6%E3%81%B0%E5%B9%B8%E3%81%84%E3%81%A7%E3%81%99%E3%80%82%3C%2FP%3E%0A%3CBR%20%2F%3E%0A%3CP%3E%E3%82%88%E3%82%8D%E3%81%97%E3%81%8F%E3%81%8A%E9%A1%98%E3%81%84%E3%81%84%E3%81%9F%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%3C%2FP%3E%0A%3CP%3ETapLinx%E3%83%81%E3%83%BC%E3%83%A0%3C%2FP%3E%3C%2FLINGO-BODY%3E%3CLINGO-SUB%20id%3D%22lingo-sub-1990546%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3ERe%3A%E3%82%BF%E3%82%B0%E5%BF%9C%E7%AD%94%E3%81%AETaplinx%20iOS%E3%81%AEappcrash%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-1990546%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%3CP%3E%E3%82%82%E3%81%86%201%20%E3%81%A4%E3%80%81apduData%20%E3%81%AF%E5%AE%9F%E9%9A%9B%E3%81%AB%E3%81%AF%20NSData%20%E3%81%A7%E3%81%AF%E3%81%AA%E3%81%8F%20IOSByteArray%20%E3%81%A7%E3%82%82%E3%81%82%E3%82%8A%E3%81%BE%E3%81%99%3C%2FP%3E%3C%2FLINGO-BODY%3E%3CLINGO-SUB%20id%3D%22lingo-sub-1990544%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3ERe%3A%E3%82%BF%E3%82%B0%E5%BF%9C%E7%AD%94%E3%81%AETaplinx%20iOS%E3%81%AEappcrash%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-1990544%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%3CP%3E%E3%81%A9%E3%81%86%E3%82%84%E3%82%89TapLinx-v2.0.0%E3%81%AB%E5%90%AB%E3%81%BE%E3%82%8C%E3%81%A6%E3%81%84%E3%82%8B%E3%83%98%E3%83%83%E3%83%80%E3%83%BC%E3%81%AF%E3%81%99%E3%81%B9%E3%81%A6%E9%96%93%E9%81%95%E3%81%A3%E3%81%A6%E3%81%84%E3%82%8B%E3%82%88%E3%81%86%E3%81%A7%E3%81%99%E3%80%82TapLinxApduHandler.h%E3%81%AB%E3%81%AF%E3%80%81%E5%AE%A3%E8%A8%80%E3%81%8C%E3%81%82%E3%82%8A%E3%81%BE%E3%81%99%E3%80%82%3C%2FP%3E%3CPRE%20class%3D%22lia-code-sample%20language-c%22%3E%3CCODE%20translate%3D%22no%22%3E-%20(nullable%20TL_TagAPDUResponse%20*)apduExchangeWithByteArray%3A(NSData%20*_Nonnull)apduData%3B%3C%2FCODE%3E%3C%2FPRE%3E%3CP%3E%E3%81%97%E3%81%8B%E3%81%97%E3%80%81%E5%AE%9F%E9%9A%9B%E3%81%AB%E3%81%AF%20IOSByteArray*%20%E3%82%92%E8%BF%94%E3%81%99%E5%BF%85%E8%A6%81%E3%81%8C%E3%81%82%E3%82%8A%E3%81%BE%E3%81%99%E3%80%81%E3%81%9D%E3%81%86%E3%81%A7%E3%81%AA%E3%81%91%E3%82%8C%E3%81%B0%E3%80%81%E3%82%A2%E3%83%97%E3%83%AA%E3%81%AF%E5%89%8D%E8%BF%B0%E3%81%AE%E7%97%87%E7%8A%B6%E3%81%A7%E3%82%AF%E3%83%A9%E3%83%83%E3%82%B7%E3%83%A5%E3%81%97%E3%81%BE%E3%81%99%3C%2FP%3E%3C%2FLINGO-BODY%3E