I’m trying to develop a custom app using Svelte Native (the cross-platform development tool based around Svelte) and the NativeScript Community BLE library. This app is designed to connect to an STM32WB-based microcontroller board. When I build it for Android, everything works perfectly, and the app is able to consistently connect to the device. This scanner, at the moment, is just designed to scan for any Bluetooth devices that can be seen, not necessarily filtering for our device. Due to this, many miscellaneous devices show up, and don’t disappear after the first couple scans, even on iOS.
However, when I build the app for iOS, the STM32 board shows up on the first one or two scans, but then is never seen again. Any idea what might be happening here? I think it might be some kind of caching issue, but I’m not really sure.
I’ve tried restarting the iOS devices (I used an iPhone and iPad), uninstalling and rebuilding the app, resetting network settings, and renaming the peripheral from the board’s perspective. It doesn’t seem to be an iOS issue, since the ST BLE Toolbox app is able to see it and connect to it easily, so it has to be something with the app. Here’s the current code for the Bluetooth scanning, if that’s helpful.
const bluetooth = new Bluetooth();
// other code exists
async function toggleScan() {
if (isScanning) return;
const allowed = await requestBluetoothPermissions();
if (!allowed) return;
isScanning = true;
devices = []; // Clear list
try { await bluetooth.stopScanning(); } catch(e) {console.err(e)}
await new Promise(resolve => setTimeout(resolve, 500));
// this is just in case it is somehow already scanning, which might cause problems
await bluetooth.startScanning({
seconds: 4, // Give it lots of time
onDiscovered: (device) => {
devices = [...devices, device];
},
avoidDuplicates: true
}).then(() => {
isScanning = false;
}).catch((err) => {
console.log("SCAN ERROR:", err);
});
}
I’ve also tried this code with avoidDuplicates set to false , which didn’t seem to do anything useful.
Any help would be much appreciated.