Критические сбои (CRASH
) обозначают неожиданное или аварийное завершение работы приложения из-за ошибки или необработанного исключения. Помимо негативного пользовательского опыта возникновение таких проблем может привести к потере данных, а потому требует эффективных механизмов и инструментов для их обнаружения и решения. Отчёты о полученных Tracer-ом сбоях и графики по событиям можно найти в разделе «Сбои». За отправку данных о событиях типа CRASH
отвечает FeatureConfiguration.crashReporter.
ВАЖНО! Tracer хранит данные о событиях за последние 90 дней.
Для того чтобы оценить надежность приложения и его способность сохранять работоспособность в течение продолжительного периода, Tracer позволяет рассчитывать crash-free
– процент пользователей, у которых не возникало сбоев в работе приложения за выбранный период. Рассчитывается метрика как (1 - (Пользователи со сбоем / Все пользователи)) * 100%
. При этом важно понимать, что использование приложения на разных устройствах одного пользователя будет обозначено как самостоятельныя единица при расчётах. Переустановка приложения на текущем устройстве также генерирует новую самостоятельную единицу, но только в случае, если на устройстве на момент установки нет приложений этого вендора. Отвечает за фичу настройка в .crashReporter
.
Для отслеживания некритических сбоев (или пользовательских событий) – NON_FATAL
– есть отдельный инструмент.
Для cocoapods Podfile
:
source 'https://github.com/odnoklassniki/tracer-ios.git' pod 'OKTracer'
Для создания и запуска Tracer используются TracerFactory
– статическая фабрика для удобства создания типовых настроек, и TracerService
– он объединяет все сервисы и возможности и обрабатывает их делегаты. Самым быстрым способом создания Tracer в вашем проекте и будет использование TracerFactory
с типовой настройкой tracerServiceForCrashReporting
– в неё остаётся лишь передать appToken
вашего приложения.
import OKTracer let tracerService = TracerFactory.tracerServiceForCrashReporting(token: "Ваш appToken") tracerService.start()
Существует также способ комбинированного запуска Tracer с использованием FeatureConfiguration
. При таком подключении Tracer возможно более тонко задать необходимые настройки. В FeatureConfiguration
необходимо указать нужные FeatureType
(опции) Tracer-а, которые хочется использовать в вашем приложении. Для отслеживания крэшей вам понадобится .crashReporter
. .assertReporter
отвечает за NON_FATAL
-ы, прочитать об этом инструменте подробнее можно в разделе о NON_FATAL-ах.
import OKTracer let features: [FeatureConfiguration] = [ .crashReporter(maxUploadsCount: 3, shouldUseHack: false), // другие опции, которые хочется подключить ] let configuration = Configuration(token: "Ваш appToken", features: features) let tracerService = TracerFactory.tracerService(configuration: configuration) tracerService.start()
За инициализацию .crashReporter
отвечает TracerCrashReporterConfiguration
– в ней есть несколько параметров, отвечающих за отправку событий определенных типов.
Параметр | Тип | Описание |
---|---|---|
maxUploadsCount | Int | Максимальное количество отчетов в вытесняющейся очереди. По умолчанию 3. |
shouldUseHack | Bool | Отвечает за включение/выключение экспериментального способа перехвата сбоев. По умолчанию false . |
useTrackSession | Bool | Отвечает за включение/выключение отслеживания сессий. Впоследствии данные преобразовываются в статистику crashFree . По умолчанию true . |
В TracerService
есть инструменты, которые позволяют узнать состояние предыдущей завершенной сессии. Это может быть полезно для обработки сбоя приложения после его перезапуска. Отвечает за это опция lastSessionState()
от делегата TracerServiceProtocol
, которая возвращает одно из двух состояний:
Состояние | Значение |
---|---|
crashed | Предыдущая сессия завершилась со сбоем. |
normal | Предыдущая сессия завершилась без сбоев. |
Каждое из значений хранит crashCount
– количество сбоев, которое еще не было отправлено на сервер по различным причинам. При этом для crashed
указан статус отправки сбоя: success
при успешной отправке и failure
, если при отправке сбоя произошла ошибка. Детали предыдущей сессии можно уточнить в CrashReporterModelProtocol
:
Параметр | Тип | Описание |
---|---|---|
versionCode | Int? | Номер сборки приложения, в котором зафиксирован сбой. |
versionName | String? | Название сборки приложения, в котором зафиксирован сбой. |
processName | String? | Название процесса, в котором зафиксирован сбой. |
text | String | Сообщение, переданное с зафиксированным сбоем. |
timestamp | Date? | Момент, в который зафиксирован сбой. |
startTime | Date? | Момент запуска приложения. |
osVersion | String? | Версия операционной системы устройства, на котором произошёл сбой. |
Пример использования .lastSessionState()
:
switch tracerService.lastSessionState() { case let .normal(crashCount): print("В последней сессии сбоев не было. Не отправлено \(crashCount) сбоев.") case let .crashed(crashCount, result): print("В последней сессии был сбой. Не отправлено \(crashCount) сбоев.") switch result { case let .success(crashModel): print("Время последнего сбоя\(crashModel.timestamp). Время последнего запуска приложения \(crashModel.startTime).") case let .failure(error): print("При получении последнего сбоя произошла ошибка \(error)") } }