Używaj LogBrew Swift 0.1.6 lub nowszego. Do przesyłania artefaktów
debugowania używaj natywnego CLI LogBrew 0.1.24 lub nowszego.
Zaplanuj zakres rejestrowania
Sprawdź, kiedy aplikacja może ponownie wysłać każdy rodzaj niepowodzenia.
Ustaw wartość wydania przed buildem. Musi ona identyfikować wersję aplikacji
i build. Użyj tej samej wartości w SDK, przy przesyłaniu dSYM i w filtrze
problemów.
Nie dołączaj do metadanych awarii danych użytkownika, treści żądań ani
nagłówków.
Dodaj produkt obsługi awarii
Najpierw skonfiguruj telemetrię SDK w aplikacji. Ponowne wysyłanie używa tych obiektówclient i transport.
Dodaj publiczny zestaw SDK przez Swift Package Manager.
LogBrew, aby wysyłać telemetrię. Dodaj LogBrewCrash tylko
wtedy, gdy aplikacja jawnie włącza rejestrowanie natywnych awarii lub
zawieszeń.
Integracja rejestrowania obsługuje iOS 15 lub nowszy. Utrzymuj jeden obiekt
rejestrowania należący do aplikacji, bo natywne procedury obsługi błędów
krytycznych działają w całym procesie.
Skonfiguruj jedną dokładną tożsamość
Użyj tego samego projektu, wydania, środowiska i usługi w konfiguracji aplikacji i przy przesyłaniu artefaktów. LogBrew nie wylicza ani nie zastępuje tych wartości.NativeCrashConfiguration ma dwa opcjonalne limity:
Wartość spoza zakresu sprawia, że konfiguracja zgłasza
crash_invalid_configuration.
Włącz rejestrowanie zawieszeń
Rejestrowanie zawieszeń jest wyłączone, gdywatchdog ma wartość nil. Aby
je włączyć, zastąp powyższą deklarację watchdog, zanim wywołasz install():
artifactIdentity. Bez niej konfiguracja zgłasza
crash_invalid_configuration.
Utrzymuj jeden obiekt crashCapture przez cały czas życia procesu. Drugiego
obiektu rejestrowania nie da się zainstalować. Jego wywołanie install()
zgłasza crash_capture_owned. Aby zmienić próg, użyj nowej wartości przy
kolejnym uruchomieniu aplikacji.
Zawieszenie, po którym aplikacja wróciła do działania, jest wysyłane ponownie
z crash.handled ustawionym na true. Trwające zawieszenie przerwane
zamknięciem procesu jest wysyłane ponownie z crash.handled ustawionym na
false.
Oba warianty zawierają liczbowe metadane durationMs. Zachowują tę samą
tożsamość artefaktu, której używają ramki krytycznej awarii.
Watchdog wstrzymuje działanie, gdy aplikacja jest nieaktywna lub działa pod
debuggerem. Wyłącza też rejestrowanie przy poważnym obciążeniu termicznym.
Krótki próg może zgłaszać zwykłą pracę głównego wątku jako zawieszenia.
Przetestuj próg w konfiguracji builda, którą wydajesz. Stan obsłużenia opisuje
powrót do działania. Nie oznacza problemu jako rozwiązanego. Obsłużone
zawieszenie i tak zablokowało interfejs, więc też je przejrzyj.
Wyślij raporty ponownie po uruchomieniu
Po zainstalowaniu rejestrowania wyślij ponownie oczekujące raporty przez klienta SDK.maxReplayBytes. Sprawdź wszystkie trzy liczniki. Sam zerowy
licznik oczekujących raportów nie dowodzi dostarczenia.
Włącz trwałe dostarczanie przed ponownym wysyłaniem, gdy nieudane żądanie musi
przetrwać kolejny restart. Nie wywołuj purge(), gdy naprawiasz zwykłe
problemy z siecią lub uwierzytelnianiem.
Prześlij pasujący dSYM
Zarchiwizuj aplikację z włączonymi informacjami debugowania. Zachowaj dSYM z dokładnie tego builda, którego używają użytkownicy. Sprawdź UUID jego obrazów.--expect-image-uuid dla każdej wymaganej architektury. Polecenie
kończy się błędem, gdy znaleziony zbiór UUID różni się od oczekiwanego.
Sprawdź dostęp do konta. Potem uruchom to samo polecenie bez --dry-run.
status:
Maszyna do buildów może przesyłać pliki z kluczem artefaktów projektu w
LOGBREW_TOKEN zamiast dostępu do konta. Utwórz klucz tak, jak opisuje
sekcja Utwórz klucz artefaktów.
Takie przesłanie zgłasza uploaded. Później zweryfikuj każdą tożsamość z
dostępem do konta:
status: "found" potwierdza artefakt. status: "missing" oznacza, że LogBrew
nie ma artefaktu dla tej tożsamości.
Rozwiązywanie ramek dopasowuje UUID obrazu i pełną tożsamość artefaktu, a nie
nazwę pliku źródłowego. Ponowny build tego samego kodu może mieć inne UUID.
Prześlij dokładnie ten pakiet dSYM, a nie cały katalog builda.
Sprawdź dane odczytane z LogBrew
Przefiltruj listę problemów, używając tego samego zakresu co w aplikacji. Ten przykład wybiera problemyunresolved. Problem rozwiązany lub
zarchiwizowany się nie pojawi.
symbolication. Ten przykład pokazuje wybrane
pola problemu z rozwiązaną ramką, a nie pełną odpowiedź.
Odczytaj dowody awarii
Każda ramka ma własnystatus. Pole symbolication.status używa tych samych
wartości:
W notatkach zostaw nierozwiązaną ramkę jako nierozwiązaną. Nie zgłaszaj jej
jako pustego stosu.
LogBrew rozwiązuje ramki, gdy odczytujesz problem. dSYM przesłany później może
rozwiązać ramki wcześniejszego zdarzenia. Nie może dodać ramek, których
zdarzenie nie zarejestrowało.
Ramka aplikacji zawęża szukanie w kodzie, ale nie dowodzi przyczyny.
Breadcrumby, łańcuch wyjątków i dowody ze śladu znajdziesz w analizie
problemu:
source: "symbolicated" pochodzi z przesłanego
artefaktu. Ramka z source: "captured" to miejsce, które wysłała aplikacja.
Pola odpowiedzi opisuje strona Zbadaj problem.
Przy każdym odczycie zachowaj pełny zakres: projekt, wydanie, środowisko i
usługę. Nie rozszerzaj nieudanego wyszukiwania na inne projekty.
Sprawdź konfigurację produkcyjną
Wywołaj zatwierdzony testowy błąd we wdrożonym buildzie. Nigdy nie używaj działania klienta jako wyzwalacza. Sprawdzaj punkty po kolei i zatrzymaj się przy pierwszym niepowodzeniu:- Tożsamość w aplikacji zgadza się z tożsamością przesłanego artefaktu.
- Kolejne uruchomienie wysyła ponownie jedno potwierdzone zdarzenie, bez odrzuconych i bez oczekujących raportów.
- Lista problemów w tym zakresie zwraca problem testowy z oczekiwanym stanem obsłużenia.
- Oczekiwana ramka aplikacji zostaje rozwiązana.
- Kolejne czyste uruchomienie nie dodaje następnego wystąpienia.
Bezpiecznie przywróć działanie
Ogólną analizę problemów opisuje strona
Zbadaj problem przez API.
