[Interest] Qt, iOS, CoreNFC?

Jason H jhihn at gmx.com
Thu Oct 4 23:46:02 CEST 2018


I'm trying to hack NFC support into my app, but CoreNFC is not yet supported by Qt.

https://bugreports.qt.io/browse/QTBUG-63253

It seems simple enough though, but I an not good with Objective-C, and all the examples are in Swift.

So here's what I tried:
0. Take care of entitlements and such.
1. For my QIOSApplication Deleage, it was
@interface QIOSApplicationDelegate : UIResponder <UIApplicationDelegate>
changed to:
@interface QIOSApplicationDelegate : UIResponder <UIApplicationDelegate, NFCNDEFReaderSessionDelegate>
2. Add @property (strong, nonatomic) NFCNDEFReaderSession *nfcSession; to the delegate
3. Just as a test, in didFinishLaunchingWithOptions, add:
	if (![NFCNDEFReaderSession readingAvailable]) {
		qDebug() << "NFC not available";
	} else {
		qDebug() << "NFC available";
		_nfcSession = [[NFCNDEFReaderSession alloc] initWithDelegate:self queue:nil invalidateAfterFirstRead:NO];
		[_nfcSession beginSession];
	}
4. Add the following functions to the app delegate:
- (void)readerSession:(NFCNDEFReaderSession *)session didDetectNDEFs:( NSArray<NFCNDEFMessage *> *)messages {
	qDebug() << "NFCNDEFReaderSession didDetectNDEFs" << messages;
	NSLog(@"NFCNDEFReaderSession didDetectNDEFs: %@",messages);
	for (NFCNDEFMessage *message in messages) {
		qDebug() << message;
		for (NFCNDEFPayload *payload in message.records) {
			qDebug() << payload;
		}
	}
}

- (void)readerSession:(NFCNDEFReaderSession *)session didInvalidateWithError:( NSError *)error {
	NSLog(@"Something went wrong: %@",error);
}

5. Launch App, present tag to phone (along the top)
6. On removal of the tag I get (3 attempts):
2018-10-04 17:36:09.291926-0400 testnfc[532:51484] [CoreNFC] 00000002 838b2f80 -[NFCNDEFReaderSession _connectTag:error:]:418  Error Domain=NFCError Code=100 "Stack Error" UserInfo={NSLocalizedDescription=Stack Error, NSUnderlyingError=0x2818a2970 {Error Domain=nfcd Code=15 "Stack Error" UserInfo={NSLocalizedDescription=Stack Error}}}
2018-10-04 17:36:13.579116-0400 testnfc[532:51484] [CoreNFC] 00000002 838b2f80 -[NFCNDEFReaderSession _connectTag:error:]:418  Error Domain=NFCError Code=100 "Stack Error" UserInfo={NSLocalizedDescription=Stack Error, NSUnderlyingError=0x2818a03c0 {Error Domain=nfcd Code=15 "Stack Error" UserInfo={NSLocalizedDescription=Stack Error}}}
2018-10-04 17:36:16.845026-0400 testnfc[532:51377] [CoreNFC] 00000002 838b2f80 -[NFCNDEFReaderSession _connectTag:error:]:418  Error Domain=NFCError Code=100 "Stack Error" UserInfo={NSLocalizedDescription=Stack Error, NSUnderlyingError=0x2818a8bd0 {Error Domain=nfcd Code=15 "Stack Error" UserInfo={NSLocalizedDescription=Stack Error}}}

7. The tag is valid because another app in the app store was able to get data from it. 

I'm really bad with Objective-C, so aside from compile errors, I don't know if what I am doing is right.
I'm very unsure about that , NFCNDEFReaderSessionDelegate> part.


Many thanks in advance.



More information about the Interest mailing list