Hi all,
I’m building a custom iOS app that integrates Apple’s Nearby Interaction framework with the DWM3001CDK running QM33SDK-1.1.1. The Qorvo NI companion app works perfectly on my board and shows distance data, so I’m confident the hardware and firmware are functional. However, my own iOS app never receives any ranging data.
After extensive debugging, I’ve narrowed the problem down to a specific point in the BLE service discovery.
What I’m observing:
When I connect to the board and discover all services, I only see the QNIS service:
- QNIS (2E938FD0-6A61-11ED-A1EB-0242AC120002) — present
- ANIS (48FE3E40-0817-4BB2-8633-3073689C2DBA) — NOT present
Because ANIS is absent, I cannot read the Accessory Configuration Data (ACD) characteristic (95E8D9D5-…), which I believe is the correctly-formatted payload that NINearbyAccessoryConfiguration requires on the iOS side.
What my app currently does (and the problem):
The QNIS OOB handshake completes successfully every time:
- iPhone sends 0x0A → board responds with 0x01 (38 bytes)
- iPhone builds
NINearbyAccessoryConfigurationfrom the 0x01 payload - iPhone sends its NI token back via 0x05
- Both writes are confirmed
- NI session is valid and active indefinitely — but
didUpdateis never called and distance stays nil
I believe the issue is that I’ve been passing the QNIS 0x01 payload to NINearbyAccessoryConfiguration instead of the ANIS ACD characteristic value. But since ANIS isn’t advertising, I can’t read ACD at all.
My questions:
- Should ANIS (48FE3E40-…) be advertising on a DWM3001CDK running QANI firmware? The developer manual (section 12.5.3.2) describes it, but it also notes ANIS is not visible to iOS 16 devices via a BLE sniffer — could it also be invisible to
CBCentralManager.discoverServices? - Is the QNIS 0x01 payload the correct
accessoryDatainput forNINearbyAccessoryConfiguration, or must it come from the ANIS ACD characteristic? - What is the correct end-to-end BLE + NI session flow for a third-party iOS app pairing with the DWM3001CDK? Specifically: which characteristic supplies the
accessoryData, and is there any step between the 0x05 write and the board starting UWB that I might be missing?
I have read all the developer documentation extensively to no avail, so any guidance from someone who has implemented this successfully would be hugely appreciated. Happy to share full debug output or the Swift source if helpful.
Thanks!