Powrót do strony głównej

Zbieranie logów iOS: 7 sposobów na debugowanie

Artykuł opisuje 7 metod zbierania logów iOS: .ips za pomocą sysdiagnose, log collect CLI, Console. Przykłady crashy EXC_BAD_ACCESS, JetsamEvent, błędy sieciowe. Do analizy wydajności i błędów bez Xcode

7 metod logów iOS: sysdiagnose i CLI
Advertisement 728x90

Debugowanie aplikacji iOS: 7 metod zbierania logów systemowych

Logi iOS rejestrują wewnętrzne zdarzenia aplikacji: żądania sieciowe, błędy, zawieszanie UI i crashe. Umożliwiają lokalizowanie problemów bez wskaźników wizualnych. Przykłady to EXC_BAD_ACCESS w Pokemon GO, operacje I/O na głównym wątku w Console oraz timeouty CFNetwork w log collect.

Logi dzielą się na raporty crashy (EXC_BAD_ACCESS, SIGSEGV) i diagnostyczne (wydajność, sieć, pamięć). Testerzy używają ich do sprawdzania wywołań funkcji, analizy interakcji z serwerem i wykrywania ukrytych błędów.

Pliki .ips za pomocą sysdiagnose

Automatycznie generowane raporty dostępne w Ustawienia → Prywatność i bezpieczeństwo → Analityka i ulepszenia → Dane analityczne. Format: type_events_data_time.ips, np. AtiClient-2024-08-14-152242.ips.

Google AdInline article slot

Typy raportów:

  • CrashReport: wyjątki i sygnały (wg bundle ID, np. VKClient).
  • JetsamEvent: wyrzucanie z powodu braku RAM (wycieki pamięci).
  • Watchdog: timeouty uruchamiania lub zawieszenia.
  • SpinReport: wysokie obciążenie CPU bez odpowiedzi (deadlocki).
  • NotificationServiceExtension: awarie powiadomień push.

Ręczna generacja: jednoczesne naciśnięcie przycisków głośności + boczny (1–1,5 s), plik stacks.

Eksport przez AirDrop. Pliki są automatycznie usuwane — zbieraj natychmiast.

Google AdInline article slot

Zastosowanie: awarie bez Xcode, analiza pamięci/sieci.

log collect CLI: wiersz poleceń dla archiwów

Wymaga Xcode Command Line Tools, podłączenie przez USB, Terminal. Pobiera UDID za pomocą libimobiledevice.

Zebra logi za okres do 10 dni (w porównaniu do sysdiagnose — wycinek w momencie). Szybsze, automatyzowalne, kontrolowany rozmiar.

Google AdInline article slot

Podstawowa komenda:

sudo log collect --device-udid <UDID> --last 10m --output iphone_logs.logarchive

Kluczowe parametry:

  • --output ~/Desktop/iphone_logs.logarchive — ścieżka zapisu.
  • --last 30m / 2h / 1d — okres.
  • --start "2025-08-20" --end "2025-08-20 14:30:00" — daty.
  • --size 100m — limit rozmiaru.
  • --device-udid A1B2C3D4R5F8G8H8I1J0 — wg UDID (zalecane).

Analiza:

log show --archive system_logs.logarchive --predicate 'process == "AtiClient" AND messageType == "error"'

Filtry: proces, błędy, okres.

Porównanie z sysdiagnose:

| Parametr | log collect | sysdiagnose |

|----------|-------------|-------------|

| Czas | do 10 dni | dzień generacji |

| Automatyzacja | CLI | ręczna |

| Rozmiar | kontrolowany| duży |

| Szybkość | szybka | 10–15 min |

Zastosowanie: niestabilne bugi, trendy wydajności, kontekst crashy.

Console: monitorowanie na żywo

Xcode → Window → Devices and Simulators → Open Console. Filtry wg procesu (np. AtiClient). Pokazuje w czasie rzeczywistym: Hang Risk na głównym wątku, awarie libRPAC.dylib.

Przykład logu:

Hang Risk com.apple.runtime-issues
message: This method does I/O on the main thread...
libRPAC.dylib awaria 19:12:18.350727+0300 AtiClient

Eksport do .logarchive do analizy offline.

Metody 4–7: zaawansowane zbieranie

  • Xcode Devices and Simulators: logi wg UDID, filtry wg podsystemu (CFNetwork, Jetsam).
  • libimobiledevice: idevicesyslog do streamingu logów bez Xcode.
idevicesyslog -u <UDID>
  • os_log w kodzie: niestandardowe logi za pomocą os_log_t i API os_log. Poziomy: debug, info, error.
  • Instruments: profilowanie z logami (Time Profiler, Leaks).

Co ważne

  • .ips do natychmiastowych awarii (CrashReport, Jetsam).
  • log collect do długoterminowych trendów (do 10 dni, CLI).
  • Console do live debugowania I/O na głównym wątku.
  • UDID obowiązkowy do precyzyjnego targetowania urządzeń.
  • Łącz metody: sysdiagnose + log show do pełnej analizy.

— Editorial Team

Advertisement 728x90

Czytaj dalej