Conservation et restauration d'état La fonction de conservation et de restauration d'état étant embeddede à Core Bluetooth, votre application peut activer cette fonctionnalité pour requestr au système de conserver l'état des gestionnaires centraux et périphériques de votre application et de continuer à effectuer certaines tâches liées à Bluetooth. nom, même lorsque votre application n'est plus en cours d'exécution. Lorsque l'une de ces tâches est terminée, le système relance votre application en arrière-plan et donne à votre application l'opportunité de restaurer son état et de gérer l'événement de manière appropriée. Dans le cas de l'application de security à domicile décrite ci-dessus, le système surveille la request de connection et relance l'application pour gérer le gestionnaire central: didConnectPeripheral: déléguer le callback lorsque l'user est rentré chez lui et la request de connection terminée.
Comment puis-je triggersr cela et tester le code?
J'ai un accessoire avec un service. J'ai une application qui scanne pour le service et j'ai opté pour la préservation de l'état. Cependant, je ne suis pas sûr de savoir comment le tester logiquement car je ne sais pas ce dont j'ai besoin pour le triggersr. Ce sont les options que j'ai essayé sans succès:
A - kill the app from Xcode B - kill the app manually C - power off the phone D - something else
Dans toutes ces options, j'ai essayé d'aller sur Xcode -> device et de regarder les logs, mais je n'ai vu aucun journal de restauration d'état.
Merci
NB Merci à user1785784 de partager le QA1962 d'Apple – Conditions dans lesquelles Bluetooth State Restoration va relancer une application qui décrit le nouveau comportement Bluetooth dans iOS 11. Ce document devrait être considéré comme la réponse à cette question, même si je pense qu'il prétend que iOS 10 relancerait une application qui a été forcée de quitter. (Je n'ai pas testé cela sur un appareil iOS 10, mais cela aurait été un départ d'iOS 9. Quelqu'un peut-il confirmer?).
Tuer manuellement l'application (B) à partir du sélecteur de tâches, garantit que votre application ne sera pas lancée automatiquement tant que l'user ne l'ouvrira pas explicitement.
C ne fonctionne pas non plus, je pense que seules les applications VOIP sont lancées automatiquement après le redémarrage, et seulement après le délocking de l'appareil.
Je ne connais aucun D.
J'utilise A.
Tout d'abord, pour implémenter Bluetooth State Restoration, assurez-vous d'avoir
bluetooth-central
ajouté en tant que UIBackgroundModes
à votre Info.plist CBCentralManagerOptionRestoreIdentifierKey
lors de l'initialisation de CBCentralManager
-(void)centralManager:willRestoreState:
callback dans votre délégué CBCentralManager
. Ensuite, vous êtes prêt à tester la restauration d'état:
NB : application:didFinishLaunchingWithOptions:
sera appelée en premier, et vous devrez immédiatement CBCentralManager
votre CBCentralManager
comme décrit ci-dessus. Puis centralManager:willRestoreState:
sera appelé.
Je viens de comprendre cela récemment avec l'aide d'Apple Tech. Aussi donné / avoir un bon lien qui montre les différentes façons de provoquer le redémarrage de l'application sans intervention de l'user.
Je l'ai fait en provoquant le plantage soudain de l'application avec l'extrait de code rapide suivant. Cela provoque le redémarrage de l'application et l'appel du callback 'willRestoreState'.
DispatchQueue.main.asyncAfter(deadline: .now() + 5) { print("Killing app") // CRASH if ([0][1] == 1){ exit(0) } exit(1) }