Інтеграція 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 дні. Вартість розраховується індивідуально.







