Prerequisites
Expected Behavior
The localName field in the scan result should contain the advertised name as configured on the BLE peripheral.
Current Behavior
On iPhone 12 Pro (iOS 17.4), the localName field is always null (for my device), even though:
- The same BLE peripheral advertises the name correctly (Complete Local Name is set in FW).
- The correct name is shown in nRF Connect on the same iPhone.
- The correct name is also displayed in another Flutter-based app on the same iPhone.
- The correct localName is shown in Android apps using the same BLE peripheral and this library
So the device is definitely advertising the correct name. The issue only appears when scanning using this library on iOS.
Library version
3.5.0
Device
iPhone 12 Pro
Environment info
System:
OS: Windows 11 10.0.27842
CPU: (16) x64 12th Gen Intel(R) Core(TM) i5-12600K
Memory: 37.10 GB / 63.77 GB
Binaries:
Node:
version: 22.14.0
path: C:\Program Files\nodejs\node.EXE
Yarn:
version: 1.22.22
path: ~\AppData\Roaming\npm\yarn.CMD
npm:
version: 10.9.2
path: C:\Program Files\nodejs\npm.CMD
Watchman: Not Found
SDKs:
Android SDK:
API Levels:
- "35"
Build Tools:
- 26.0.1
- 26.0.2
- 26.0.3
- 34.0.0
- 35.0.0
- 35.0.1
- 36.0.0
System Images:
- android-36 | Google Play Intel x86_64 Atom
Android NDK: Not Found
Windows SDK: Not Found
IDEs:
Android Studio: AI-243.25659.59.2432.13423653
Visual Studio:
- 17.13.35919.96 (Visual Studio Community 2022)
Languages:
Java: 17.0.12
Ruby: Not Found
npmPackages:
"@react-native-community/cli":
installed: 17.0.0
wanted: ^17.0.0
react:
installed: 18.3.1
wanted: 18.3.1
react-native:
installed: 0.76.7
wanted: 0.76.7
react-native-windows: Not Found
npmGlobalPackages:
"*react-native*": Not Found
Android:
hermesEnabled: Not found
newArchEnabled: Not found
iOS:
hermesEnabled: Not found
newArchEnabled: Not found
info React Native v0.79.2 is now available (your project is running on v0.76.7).
info Changelog: https://github.com/facebook/react-native/releases/tag/v0.79.2
info Diff: https://react-native-community.github.io/upgrade-helper/?from=0.76.7&to=0.79.2
info For more info, check out "https://reactnative.dev/docs/upgrading?os=windows".
Steps to reproduce
...
Formatted code sample or link to a repository
BleManager.startDeviceScan(null, null, (error, device) => {
if (error) {
console.warn(error);
return;
}
console.log(JSON.stringify(device, null, 2));
});
Relevant log output
[
{
"id": "778F707E-A2F9-1661-F38D-75A6A13CFCB5",
"isConnectable": true,
"localName": null,
"manufacturerData": null,
"mtu": 23,
"name": "NRF8001",
"overflowServiceUUIDs": null,
"rawScanRecord": "eyJzb2xpY2l0ZWRTZXJ2aWNlVVVJRHMiOm51bGwsIm92ZXJmbG93U2VydmljZVVVSURzIjpudWxsLCJyc3NpIjotNDUsIm5hbWUiOiJOUkY4MDAxIiwibWFudWZhY3R1cmVyRGF0YSI6bnVsbCwic2VydmljZVVVSURzIjpbIjZlNDAwMDAxLWI1YTMtZjM5My1lMGE5LWViMGUyNGRjY2E5ZSJdLCJtdHUiOjIzLCJpc0Nvbm5lY3RhYmxlIjp0cnVlLCJsb2NhbE5hbWUiOm51bGwsImlkIjoiNzc4RjcwN0UtQTJGOS0xNjYxLUYzOEQtNzVBNkExM0NGQ0I1Iiwic2VydmljZURhdGEiOm51bGwsInR4UG93ZXJMZXZlbCI6bnVsbH0=",
"rssi": -45,
"serviceData": null,
"serviceUUIDs": [
"6e400001-b5a3-f393-e0a9-eb0e24dcca9e"
],
"solicitedServiceUUIDs": null,
"txPowerLevel": null
}
]
Additional information
- This exact BLE peripheral shows the correct name in nRF Connect and another Flutter-based BLE app on the same iPhone.
- It works perfectly on Android as well.
This seems to be a problem with how react-native-ble-plx processes or exposes the scan result on iOS.
Prerequisites
Expected Behavior
The
localNamefield in the scan result should contain the advertised name as configured on the BLE peripheral.Current Behavior
On iPhone 12 Pro (iOS 17.4), the
localNamefield is alwaysnull(for my device), even though:So the device is definitely advertising the correct name. The issue only appears when scanning using this library on iOS.
Library version
3.5.0
Device
iPhone 12 Pro
Environment info
System: OS: Windows 11 10.0.27842 CPU: (16) x64 12th Gen Intel(R) Core(TM) i5-12600K Memory: 37.10 GB / 63.77 GB Binaries: Node: version: 22.14.0 path: C:\Program Files\nodejs\node.EXE Yarn: version: 1.22.22 path: ~\AppData\Roaming\npm\yarn.CMD npm: version: 10.9.2 path: C:\Program Files\nodejs\npm.CMD Watchman: Not Found SDKs: Android SDK: API Levels: - "35" Build Tools: - 26.0.1 - 26.0.2 - 26.0.3 - 34.0.0 - 35.0.0 - 35.0.1 - 36.0.0 System Images: - android-36 | Google Play Intel x86_64 Atom Android NDK: Not Found Windows SDK: Not Found IDEs: Android Studio: AI-243.25659.59.2432.13423653 Visual Studio: - 17.13.35919.96 (Visual Studio Community 2022) Languages: Java: 17.0.12 Ruby: Not Found npmPackages: "@react-native-community/cli": installed: 17.0.0 wanted: ^17.0.0 react: installed: 18.3.1 wanted: 18.3.1 react-native: installed: 0.76.7 wanted: 0.76.7 react-native-windows: Not Found npmGlobalPackages: "*react-native*": Not Found Android: hermesEnabled: Not found newArchEnabled: Not found iOS: hermesEnabled: Not found newArchEnabled: Not found info React Native v0.79.2 is now available (your project is running on v0.76.7). info Changelog: https://github.com/facebook/react-native/releases/tag/v0.79.2 info Diff: https://react-native-community.github.io/upgrade-helper/?from=0.76.7&to=0.79.2 info For more info, check out "https://reactnative.dev/docs/upgrading?os=windows".Steps to reproduce
...
Formatted code sample or link to a repository
Relevant log output
[ { "id": "778F707E-A2F9-1661-F38D-75A6A13CFCB5", "isConnectable": true, "localName": null, "manufacturerData": null, "mtu": 23, "name": "NRF8001", "overflowServiceUUIDs": null, "rawScanRecord": "eyJzb2xpY2l0ZWRTZXJ2aWNlVVVJRHMiOm51bGwsIm92ZXJmbG93U2VydmljZVVVSURzIjpudWxsLCJyc3NpIjotNDUsIm5hbWUiOiJOUkY4MDAxIiwibWFudWZhY3R1cmVyRGF0YSI6bnVsbCwic2VydmljZVVVSURzIjpbIjZlNDAwMDAxLWI1YTMtZjM5My1lMGE5LWViMGUyNGRjY2E5ZSJdLCJtdHUiOjIzLCJpc0Nvbm5lY3RhYmxlIjp0cnVlLCJsb2NhbE5hbWUiOm51bGwsImlkIjoiNzc4RjcwN0UtQTJGOS0xNjYxLUYzOEQtNzVBNkExM0NGQ0I1Iiwic2VydmljZURhdGEiOm51bGwsInR4UG93ZXJMZXZlbCI6bnVsbH0=", "rssi": -45, "serviceData": null, "serviceUUIDs": [ "6e400001-b5a3-f393-e0a9-eb0e24dcca9e" ], "solicitedServiceUUIDs": null, "txPowerLevel": null } ]Additional information
This seems to be a problem with how
react-native-ble-plxprocesses or exposes the scan result on iOS.