webentwicklung-frage-antwort-db.com.de

iOS 12 beendet Apps ohne Grund im Hintergrund

Ab iOS 12 läuft der CLLocationManager nicht mehr endlos im Hintergrund. Die App wird zu beliebigen Zeiten ohne Absturzprotokoll beendet. Dies funktionierte gut vor iOS 12.

Um dieses Problem zu demonstrieren, habe ich eine Beispiel-App erstellt hier

Die Demo-App startet nur einen CLLocationManager und lässt diesen im Hintergrund laufen. Während wir im Hintergrund laufen, behalten wir dies im Auge, indem wir es protokollieren. Das Problem ist, dass die App von iOS beendet wird. Die Demo-App wurde erstellt, um dieses Problem zu veranschaulichen.

Schritte zum Reproduzieren

  1. Führen Sie die App auf dem Gerät aus
  2. Großartiger Zugriff auf den Standortmanager
  3. Stelle die App in den Hintergrund
  4. Warten Sie 1-48 Stunden

Ergebnis:

  1. Die App wird beendet

App wird ohne Grund nach zufälliger Zeit beendet.

Erwartetes Ergebnis:

  1. Die App läuft noch.

Wie es funktionieren soll

Dies wird von einem Apple engineer: bestätigt

Sobald die CLLocationManager-Aktualisierungen im Vordergrund gestartet wurden und Sie alle Arbeiten ausgeführt haben, um sie im Hintergrund auszuführen, sollten die Standortaktualisierungen endlos im Hintergrund ausgeführt werden, bis:

  • app wird zwangsweise beendet
  • gerät wird neu gestartet
  • app stoppt Standortaktualisierungen
  • app gibt das CLLocationManager-Objekt frei
  • app stürzt ab
  • iOS beendet die App wegen Speichermangel,
  • das locationManager-Objekt ist freigegeben, überfreigegeben oder überschrieben. Sie sollten sicherstellen, dass Ihr Ansichtscontroller nicht instanziiert wird, wodurch die locationController-Klasse zurückgesetzt wird. Wenn dies passiert, während sich die App im Hintergrund befindet, werden Sie die Updates neu starten, wodurch die App schließlich angehalten wird. Sie sollten sicherstellen, dass der locationController ein Singleton ist.
  • app stürzt ab Überprüfen Sie, ob auf dem Gerät, das Sie testen, Absturzprotokolle vorhanden sind
  • iOS beendet die App aufgrund von Speichermangel. In diesem Fall finden Sie JetsamEvent-Protokolle auf dem Gerät, auf dem Ihre App beendet wird. Sie können die Zeitstempel überprüfen und den ermitteln, der ungefähr zu dem Zeitpunkt angezeigt wird, an dem Ihre App nicht mehr funktioniert.
22
Sjoerd Perfors

Aktualisierte Antwort:

Apple hat diesen Fehler in iOS 12.2 Beta 2 behoben (16E5191d)

Ursprüngliche Analyse und Fehlererkennung:

Zusammen mit dem Apple Developer Technical Support haben wir dieses Problem mit Sysdiagnose-Dateien analysiert. Befolgen Sie diese Richtlinien Sie können Profile installieren, um mehr Protokollierung auf Ihrem Gerät zu haben. Ich weiß nicht genau, wie diese Protokolle funktionieren und wo man dieses Problem findet, aber Apple hat dies für mich getan und mit dieser ersten Analyse begonnen:

Bei dem Suspendierungsereignis, das Sie am 22.10.2018, 01: 01: 12: 587 beobachtet haben, sehe ich Folgendes (ungefähr eine Minute nach Ihrer letzten Aktivitätsprotokollierung).

[CllocationManag: 2725] Beendet mit description: {owner =; target = rw.sp.flitsmeister.frameworks.CllocationManagerBackgroundTest; }

Grundsätzlich bedeutet dies, dass Ihre App beendet wurde, weil das System Speicherplatz benötigte und eine Reihe von Apps beendet hat, damit die Verzeichnisse/tmp und/Library/Caches gelöscht werden können. Ich habe gesehen, dass dieser Prozess in iOS 12 etwas aggressiver ist, aber da Sie sich auf einem 256-GB-Gerät befinden und nach der Bereinigung ~ 179 GB frei haben, fällt es mir schwer zu glauben, dass dies gerechtfertigt war.

Nachdem er einige weitere Sysdiagnose- und Reproduktionsfälle gesendet hatte, tat Apple sein Bestes, um diese zu analysieren, und endete mit der folgenden Schlussfolgerung:

Leider bringe ich keine guten Nachrichten.

Es stellte sich heraus, dass es derzeit in iOS 12 einen neuen Mechanismus gibt, der lang laufende Hintergrund-Apps regelmäßig beendet, da das System Ressourcen freigeben muss. Derzeit ist dieser Prozess etwas zu aggressiv, und ich arbeite mit den relevanten Teams zusammen, um ein besseres Verhalten zu erzielen.

An dieser Stelle möchte ich Sie bitten, einen Fehlerbericht einzureichen. Erklären Sie die Symptome. Und stellen Sie sicher, dass Sie die sysdiagnose-Dateien zusammen mit dem Fehlerbericht hochladen. (Ich habe Ihre bereits eingeschickt, aber es tut nicht weh, auch die neuen zu haben.) Und lassen Sie mich bitte die Fehlernummer wissen.

Dies bedeutet, dass Ihre App in iOS 12 derzeit nicht endlos im Hintergrund ausgeführt wird. Ich habe einen Fehlerbericht ausgefüllt, die Nummer lautet 45581276 und ich werde versuchen, diesen Thread auf dem neuesten Stand zu halten.

25
Sjoerd Perfors

Ich habe versucht, die Verzeichnisse/tmp und/Library/Caches zu löschen, wenn die App ohne Verhaltensänderung im Hintergrund läuft. Das habe ich auch in regelmäßigen Abständen versucht, wenn die App die Hintergrundspeicherorte unverändert verarbeitet.

3
Scott