web-dev-qa-db-fra.com

iOS 12 termine les applications en arrière-plan sans raison

Depuis iOS 12, CLLocationManager ne s'exécute plus en tâche de fond. L'application se termine sans crashlog à des heures aléatoires. Cela fonctionnait bien avant iOS 12.

Pour illustrer ce problème, j'ai créé un exemple d'application ici

L'application de démonstration lance simplement un CLLocationManager et le maintient en arrière-plan. Pendant que nous travaillons sur l’arrière-plan, nous le gardons en note. Le problème est que l'application se termine par iOS. L'application de démonstration est créée pour illustrer ce problème.

Étapes pour reproduire

  1. Lancer l'application sur l'appareil
  2. Grand accès à locationmanager
  3. Mettez l'application à l'arrière-plan
  4. Attendez 1-48hours

Résultat:

  1. L'application est terminée

L'application se termine sans aucune raison après une heure aléatoire.

Résultat attendu:

  1. L'application est toujours en cours d'exécution.

Comment cela devrait-il fonctionner

Ceci est confirmé par un Apple ingénieur:

Une fois que les mises à jour de CLLocationManager sont démarrées au premier plan et que vous avez effectué tout le travail pour les exécuter en arrière-plan, les mises à jour d'emplacement doivent s'exécuter sans fin en arrière-plan jusqu'à ce que:

  • l'application est forcée de quitter
  • l'appareil est redémarré
  • l'application arrête les mises à jour d'emplacement
  • app libère l'objet CLLocationManager
  • l'application se bloque
  • iOS met fin à l'application en raison d'un manque de mémoire,
  • l'objet locationManager est publié, remplacé ou remplacé. Assurez-vous que votre contrôleur de vue n'est pas en cours d'instanciation, ce qui réinitialise ensuite la classe locationController. Si cela se produit lorsque l'application est en arrière-plan, vous devrez redémarrer les mises à jour, ce qui entraînera la suspension de l'application. Vous devez vous assurer que locationController est un singleton.
  • l'application se bloque. Vérifiez s'il existe des journaux d'incidents sur le périphérique que vous testez
  • iOS met fin à l'application en raison d'un manque de mémoire. Dans ce cas, vous trouverez les journaux JetsamEvent sur le périphérique indiquant que votre application est en cours de fermeture. Vous pouvez vérifier les horodatages et localiser celui qui correspond au moment où votre application a cessé de fonctionner.
22
Sjoerd Perfors

Réponse mise à jour:

Apple a corrigé ce problème dans iOS 12.2 beta 2 (16E5191d)

Analyse originale et détection de bugs:

En collaboration avec Apple le support technique aux développeurs, nous avons analysé ce problème avec les fichiers Sysdiagnose. Suivant ces instructions , vous pouvez installer des profils pour que votre appareil se connecte davantage. sais exactement comment ces journaux fonctionnent et où trouver ce problème, mais Apple l'a fait pour moi et est venu avec cette première analyse:

En ce qui concerne la suspension que vous avez observée le 2018/10/22 01: 01: 12: 587, voici ce que je vois (environ une minute après la journalisation de votre dernière activité)

[CllocationManag: 2725] Terminaison avec description: {propriétaire =; target = rw.sp.flitsmeister.frameworks.CllocationManagerBackgroundTest; }

En gros, cela signifie que votre application a été arrêtée, car le système avait besoin d'espace disque et avait tué de nombreuses applications pour qu'il puisse supprimer leurs répertoires/tmp et/Library/Caches. J'ai vu ce processus être un peu plus agressif dans iOS 12, mais vu que vous êtes sur un périphérique de 256 Go et que vous disposez d'environ 179 Go gratuitement après le nettoyage, j'ai du mal à croire que cela soit justifié.

Après avoir envoyé quelques cas supplémentaires de sysdiagnostic et de reproduction Apple a fait de son mieux pour analyser et a conclu avec la conclusion suivante:

Malheureusement, je n’apporte pas de bonnes nouvelles.

Il s'est avéré qu'actuellement dans iOS 12, un nouveau mécanisme met fin aux applications d'arrière-plan de longue durée et qui sont exécutées périodiquement, car le système doit libérer des ressources. Pour le moment, ce processus est un peu trop agressif et je travaille avec les équipes concernées pour améliorer ce comportement.

Donc, à ce stade, j'aimerais que vous déposiez un rapport de bogue. Expliquez les symptômes. Et assurez-vous de télécharger les fichiers sysdiagnose avec le rapport de bogue. (J’ai déjà envoyé le vôtre, mais ça ne fait pas de mal d’avoir les nouveaux aussi). Et laissez-moi savoir le numéro de bogue s'il vous plaît.

Cela signifie donc qu'actuellement dans iOS 12, votre application ne fonctionnera pas sans fin en arrière-plan. J'ai rempli un rapport de bogue, le numéro est 45581276 et je vais essayer de garder ce fil à jour.

25
Sjoerd Perfors

J'ai essayé de nettoyer les répertoires/tmp et/Library/Caches lorsque l'application passe en arrière-plan sans aucun changement de comportement. J'ai aussi essayé périodiquement la même chose lorsque l'application traitait les emplacements en arrière-plan sans aucun changement.

3
Scott