iOS 12 kończy aplikacje w tle bez powodu

Począwszy od iOS 12 Menedżer CLLocationManager nie działa bez końca w tle. Aplikacja get została zakończona bez crashlog w losowych momentach. To działało dobrze przed iOS 12.

Aby zademonstrować ten problem stworzyłem przykładową aplikację tutaj

Aplikacja demo po prostu uruchamia Menedżera CLLocationManager i zachować to działa w tle. Podczas pracy w tle śledzimy go rejestrując. Problem polega na tym, że aplikacja dostaje rozwiązane przez iOS. Aplikacja demonstracyjna została stworzona, aby zademonstrować ten problem.

Kroki do odtworzenia

    [13]} Uruchom aplikację na urządzeniu
  1. Wielki dostęp do locationmanager
  2. umieść aplikację w tle
  3. czekać na 1-48 godzin

Wynik:

  1. Aplikacja jest zakończona

Aplikacja jest wyłączana bez powodu po losowym czasie.

Oczekiwany wynik:

  1. Aplikacja jest nadal działa.

Jak to powinno działać

jest to potwierdzone przez inżyniera Apple:

Po uruchomieniu aktualizacji CLLocationManager na pierwszym planie i wykonaniu całej pracy, aby była uruchomiona w tle, aktualizacje lokalizacji powinny działać bez końca w tle do:

  • aplikacja to force quit
  • urządzenie jest restartowane
  • aplikacja zatrzymuje aktualizacje lokalizacji
  • Aplikacja zwalnia Menedżera CLLocationManager obiekt
  • awarie aplikacji
  • IOS kończy pracę z powodu braku pamięci.]}
  • obiekt locationManager zostanie zwolniony, przekroczony lub nadpisany. Należy upewnić się, że kontroler widoku nie jest tworzony przez instancję, która następnie resetuje klasę locationController. Jeśli tak się stanie, gdy aplikacja jest w tle, ponownie uruchomisz aktualizacje, co spowoduje zawieszenie aplikacji. Upewnij się, że locationController jest singleton.
  • Aplikacja się zawiesza. Sprawdź, czy na testowanym urządzeniu są logi awarii]} [13]}iOS kończy aplikację z powodu braku pamięci. W takim przypadku znajdziesz logi JetsamEvent na urządzeniu, które pokazuje zakończenie aplikacji. Możesz sprawdzić znaczniki czasu i zlokalizować ten, który znajduje się w czasie, gdy aplikacja przestała działać.
Author: Sjoerd Perfors, 2018-10-26

2 answers

Zaktualizowana odpowiedź:

[[0]} Apple naprawił ten błąd w iOS 12.2 beta 2 (16e5191d)

Oryginalna analiza i wykrywanie błędów:

Wraz z Pomocą techniczną programisty Apple przeanalizowaliśmy ten problem z plikami Sysdiagnose. Zgodnie z tymi wytycznymi można zainstalować profile, aby mieć więcej logowania na urządzeniu. Nie wiem dokładnie, jak działają te dzienniki i gdzie znaleźć ten problem, ale Apple zrobił to za mnie i przyszedł z tym pierwszy "analyse": {]}

W przypadku zawieszenia zaobserwowałeś na 2018/10/22 01:01:12:587, to jest tym, co widzę (około minuty po zalogowaniu ostatniej aktywności)

[CllocationManag:2725] zakończenie z opisem: { właściciel = ; target = rw.Sp. z o. o.flitsmeister.ramy.CllocationManagerBackgroundTest;}

To jest w zasadzie saing, że aplikacja została zakończona, ponieważ system potrzebował miejsca na dysku i zabił kilka aplikacji, aby mógł usunąć ich /tmp i /Library / Caches katalogów. Widziałem ten proces być trochę bardziej agresywny w iOS 12, Ale widząc, że jesteś na Urządzenie 256GB i mają ~179 GB za darmo po oczyszczeniu, znajduję to trudno uwierzyć, że to było uzasadnione.

Po wysłaniu kilku kolejnych przypadków sysdiagnozowania i reprodukcji Apple zrobił wszystko, co w jego mocy, aby przeanalizować i zakończył się następującym wnioskiem:

Niestety nie przynoszę dobrych wieści.

Okazało się, że obecnie w iOS 12 jest nowy mechanizm, który zakończy długotrwałe uruchamianie aplikacji w tle okresowo jako system musi uwolnić zasoby. W tej chwili proces ten jest trochę zbyt agresywny, a ja współpracuję z odpowiednimi zespołami, aby to zachowuj się lepiej.

Więc, w tym momencie, chciałbym, aby złożyć raport o błędzie. Wyjaśnij objawy. I upewnij się, że przesyłasz pliki sysdiagnose wraz z raport o błędzie. (Już wysłałem Twoje, ale nie zaszkodzi mieć na Nowe również). I daj mi znać numer błędu.

Oznacza to, że obecnie w iOS 12 aplikacja nie będzie działać bez końca w tle. Wypełniłem raport o błędzie, numer to 45581276 i postaram się aktualizować ten wątek.

 28
Author: Sjoerd Perfors,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-02-19 08:29:05

Próbowałem wyczyścić katalogi /tmp i /Library / Caches, gdy aplikacja przechodzi w tle bez żadnych zmian w zachowaniu. Próbowałem też tego samego okresowo, gdy aplikacja przetwarza lokalizacje w tle bez żadnych zmian.

 3
Author: Scott,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-11-12 22:28:31