Интеграция Sentry для отслеживания ошибок мобильного приложения
Sentry отличается от Firebase Crashlytics одним принципиальным моментом — он умеет отслеживать не только краши, но и производительность: транзакции, spans, медленные HTTP-запросы, ANR/hang на UI-потоке. Для приложений, где важен не только факт падения, но и деградация UX, это делает Sentry более информативным инструментом.
iOS: подключение через SPM
Добавляем https://github.com/getsentry/sentry-cocoa в Package Dependencies, затем в AppDelegate или @main:
import Sentry
SentrySDK.start { options in
options.dsn = "https://<key>@sentry.io/<project>"
options.environment = Bundle.main.object(forInfoDictionaryKey: "SentryEnvironment") as? String ?? "production"
options.tracesSampleRate = 0.2 // 20% транзакций для performance
options.profilesSampleRate = 0.1
options.attachViewHierarchy = true // снимок иерархии при краше
}
attachViewHierarchy = true — полезная фича: в каждом краш-репорте появляется дерево UIView/SwiftUI-иерархии в момент падения. Сразу видно, на каком экране и в каком состоянии UI произошёл краш.
Android: Gradle + Application
implementation("io.sentry:sentry-android:7.+")
// Application.onCreate()
SentryAndroid.init(this) { options ->
options.dsn = "https://<key>@sentry.io/<project>"
options.environment = BuildConfig.SENTRY_ENVIRONMENT
options.tracesSampleRate = 0.2
options.isEnableUserInteractionTracing = true // автотрейсинг тапов
}
isEnableUserInteractionTracing автоматически создаёт транзакции при взаимодействии пользователя с UI. Без дополнительного кода видно, что кнопка "Оформить заказ" вызывает сетевой запрос длиной 4,2 секунды на 3G.
Мониторинг производительности
// iOS: ручная транзакция
let transaction = SentrySDK.startTransaction(name: "checkout", operation: "ui.action")
let span = transaction.startChild(operation: "http.client", description: "POST /orders")
// ... запрос ...
span.finish()
transaction.finish()
Транзакции попадают в раздел Performance в Sentry. Там видны p50/p75/p95/p99 перцентили, тепловая карта медленных запросов и точные spans.
Кастомные теги и breadcrumbs
SentrySDK.configureScope { scope in
scope.setUser(SentryUser(userId: userId))
scope.setTag(value: "premium", key: "subscription")
scope.addBreadcrumb({
let crumb = Breadcrumb()
crumb.message = "Открыт экран корзины"
crumb.category = "navigation"
return crumb
}())
}
Breadcrumbs — последовательность событий до краша. Позволяют восстановить путь пользователя без воспроизведения бага.
Source maps для React Native
Если проект на React Native — нужна выгрузка JS bundle source maps при каждом релизе:
npx sentry-cli releases \
files "$VERSION" \
upload-sourcemaps \
--dist "$BUILD_NUMBER" \
./dist/bundle.js.map
Без source maps стектрейс RN-крашей выглядит как набор анонимных функций из минифицированного бандла.
Что входит в работу
- Подключение sentry-cocoa / sentry-android / sentry-react-native
- Настройка environments (dev / staging / production)
- Конфигурация performance tracing с разумным sample rate
- Интеграция scope: User ID, теги, breadcrumbs
- Настройка алертов по error rate и p95 latency
- Upload dSYM / ProGuard mapping / JS source maps в CI
Сроки
Базовая интеграция с краш-репортингом: 0,5–1 день. Полноценный performance tracing с custom транзакциями: 1–2 дня. Стоимость рассчитывается индивидуально.







