Add a key to Info.plist file of your app with a description of the requirement why they need Bluetooth:
Privacy - Bluetooth Peripheral Usage Description
In xCode, in the Signing & Capabilities project section, add the following items:
Uses Bluetooth LE accesories
Acts as a Bluetooth LE accessory
When initialisingRaxelPulse SDK library, be sure to call:
[[RPCPermissionsWizard returnInstance] setupBluetoothEnabled];
[RPEntry enableELM: YES];
When connecting to ELM, you may experience difficulties getting a repetitive response in the [RPELMEntry instance] connectDevice method.
We recommend doing DispatchQueue.once (token: "com.<YOURAPPNAME>.elm"). The example code is shown below.
RPELMEntry.instance().connectDevice(@"92D29DC3-48C0-D6A6-3700-4264BEEB4762", vehicleToken: ct!, withCompletion: {[weak self] response, errors in
guard let strongSelf = self else {
return
}
if let theErrors = errors as? [NSError] {
var isNetwork = false
for item in theErrors {
if item.code == 2005 {
isNetwork = true
break;
}
}
if isNetwork {
//Internet connection error
}
DispatchQueue.main.async {
if response == true {
print("\(response)")
} else {
print("\(response)")
DispatchQueue.once(token: "com.<YOURAPPNAME>.elm") {
//Next connection action
}
}
})
public extension DispatchQueue {
private static var _onceTracker = [String]()
class func once(token: String, block:()->Void) {
objc_sync_enter(self); defer { objc_sync_exit(self) }
if _onceTracker.contains(token) {
return
}
_onceTracker.append(token)
block()
}
}
At any time you can request the status of the connection to ELM (connected/not connected) and the timestamp date of the last connection.
let isConnect = RPELMEntry.instance().getLastSession().isConnect
let lastConnect = RPELMEntry.instance().getLastSession().lastConnect