State Preservation and Restoration Because state preservation and restoration is built in to Core Bluetooth, your app can opt in to this feature to ask th
Just figured this out recently with the help of Apple Tech. Also given/have a nice link that shows the different ways to cause the app to restart without user intervention.
I did it by causing the app to crash suddenly with the following snippet of swift code. This causes the app to restart and the call the 'willRestoreState' callback.
DispatchQueue.main.asyncAfter(deadline: .now() + 5)
{
print("Killing app")
// CRASH
if ([0][1] == 1){
exit(0)
}
exit(1)
}
NB Thanks to user1785784 for sharing Apple's QA1962 - Conditions Under Which Bluetooth State Restoration Will Relaunch An App which describes new Bluetooth behaviour in iOS 11. This document should be considered the answer to this question, although I think it incorrectly claims that iOS 10 would relaunch an app that has been force quit. (I haven't tested that on an iOS 10 device, but it would have been a departure from iOS 9. Can anyone confirm?).
Killing the app manually (B) from the task switcher, ensures your app will not be launched automatically until the user explicitly opens it again.
C doesn't work either, I think only VOIP apps are launched automatically after restart, and then only after the device is unlocked.
I don't know any D.
I use A.
First, to implement Bluetooth State Restoration, make sure you've
UIBackgroundModes
to your Info.plistCBCentralManagerOptionRestoreIdentifierKey
when initing your CBCentralManager
-(void)centralManager:willRestoreState:
callback in your CBCentralManager
delegate.Then you're ready to test state restoration:
NB: application:didFinishLaunchingWithOptions:
will be called first, and you must immediately init your CBCentralManager
as described above. Then centralManager:willRestoreState:
will be called.