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
Ergebnis:
App wird ohne Grund nach zufälliger Zeit beendet.
Erwartetes Ergebnis:
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:
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.
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.