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.
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.
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.
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:
idevicesyslogdo streamingu logów bez Xcode.
idevicesyslog -u <UDID>
- os_log w kodzie: niestandardowe logi za pomocą
os_log_ti APIos_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
Brak komentarzy.