blue-falcon: Kotlin KMM dev.bluefalcon.BluetoothUnknownException: Unknown error happened

Describe the bug I have included the library via KMM. I have added the dependency in commonMain. Now I built a wrapper around the class in shared code in Kotlin. This looks like this:

class BluetoothManager(private val blueFalcon: BlueFalcon) {
    private val bluetoothDelegate = BluetoothManagerDelegate()


    init {
        blueFalcon.delegates.add(bluetoothDelegate)
    }

    override fun isScanning(): Boolean {
        return blueFalcon.isScanning
    }

 
    override fun startScanning() {
        if (isScanning()) {
            return
        }

        blueFalcon.scan()
    }

....
}

In iOS I start the scanning in the ViewModel via the following code:

init() {
    
        bluetoothService = BluetoothManager(blueFalcon: Blue_falconBlueFalcon(context: UIView(), serviceUUID: nil))
        
        bluetoothService.bluetoothManager.startScanning() --> The Crash is happening here
        isScanning = bluetoothService.bluetoothManager.isScanning()
    }
}

The app crashes immediately. Why? The crash report contains following:

Function doesn't have or inherit @Throws annotation and thus exception isn't propagated from Kotlin to Objective-C/Swift as NSError.
It is considered unexpected and unhandled instead. Program will be terminated.
Uncaught Kotlin exception: dev.bluefalcon.BluetoothUnknownException: Unknown error happened
    at 0   shared                              0x108b2e1db        kfun:kotlin.Throwable#<init>(kotlin.String?){} + 99 
    at 1   shared                              0x108b26d0f        kfun:kotlin.Exception#<init>(kotlin.String?){} + 95 
    at 2   shared                              0x108f0f86b        kfun:dev.bluefalcon.BluetoothUnknownException#<init>(kotlin.String){} + 95 
    at 3   shared                              0x108f0f957        kfun:dev.bluefalcon.BluetoothUnknownException#<init>(kotlin.String?;kotlin.Int;kotlin.native.internal.DefaultConstructorMarker?){} + 215 
    at 4   shared                              0x108f151bb        kfun:dev.bluefalcon.BlueFalcon#scan(){} + 491 
    at 5   shared                              0x108f2a28b        kfun:eu.ces.connect_multi.manager.bluetooth.BluetoothManager#startScanning(){} + 171 
    at 6   shared                              0x10907b307        objc2kotlin.3043 + 135 

To Reproduce Ue the same code as I

Expected behavior That all is working

Screenshots If applicable, add screenshots to help explain your problem.

Desktop (please complete the following information):

  • Kotlin KMM
  • iOS 15

About this issue

  • Original URL
  • State: closed
  • Created 2 years ago
  • Comments: 15 (7 by maintainers)

Most upvoted comments

Ah i know the issue now.

You cannot perform a scan immediately after instantiating a BlueFalcon object in iOS, this is due to the way corebluetooth works. Related to this issue: https://stackoverflow.com/questions/25932366/cbmanager-state-always-unknown

I have fixed your example where its not working to make the scan fire afterwards, with a scan button. https://github.com/AppSupporter/bluetooth-bug/pull/1

This is not really a bug with blue falcon, more an issue with the way core bluetooth works, unfortunately. I am going to close this issue.