Час холодного запуску — перша метрика, яку помічає користувач. Якщо ваш cold launch перевищує 2 секунди, кожен двадцятий користувач може закрити додаток. Apple рекомендує холодний запуск менше 20 секунд, але реальний поріг терпіння нижчий. Без моніторингу ви не дізнаєтесь, що P95 сягає 5 секунд. Моніторинг перцентилів (P50, P95) дає повну картину: середнє значення приховує хвіст, який вбиває користувацький досвід. Налаштування алертів на регресію дозволяє не пропустити погіршення між релізами. Ми налаштовуємо моніторинг запуску для iOS та Android, використовуючи MetricKit і Firebase Performance — багаторічний досвід та десятки реалізованих інтеграцій. За нашої допомоги ви зможете протягом двох днів отримати прозору систему метрик і перестати гадати, що гальмує запуск. Налаштування включає інтеграцію SDK, створення дашборду та налаштування сповіщень у Slack або Telegram. Це дозволяє зекономити до 40% часу на налагодження регресій та підвищити конверсію утримання на 5-10%.
Моніторинг швидкості запуску: що вимірюємо та як
Cold launch — додаток не в пам'яті, процес створюється заново. Найповільніший, найважливіший для моніторингу. Warm launch (iOS) — додаток був у пам'яті, але скинутий у background. Процес живий, але viewDidLoad виконується заново. Hot launch — повернення з background. Практично миттєвий. Моніторити потрібно cold та warm. Hot не показовий.
Чому холодний запуск — головна метрика?
Холодний запуск — перше враження користувача. Якщо він триває довше 3 секунд, кожен двадцятий користувач може закрити додаток. Apple у рекомендаціях щодо продуктивності вимагає холодний запуск менше 20 секунд, але реальний поріг терпіння — близько 2 секунд. Моніторинг P95 показує найгірший сценарій, який не видно в середньому.
Який інструмент моніторингу обрати для вашого проєкту?
Вибір між MetricKit та Firebase Performance залежить від платформи та вимог до real-time даних. MetricKit ідеальний для iOS-only проєктів, де потрібна агрегована статистика від усіх користувачів без встановлення SDK. Firebase Performance підходить для кроссплатформених додатків і дозволяє отримувати дані в реальному часі з розбивкою по пристроях. Детальніше про Firebase Performance можна дізнатися в документації Firebase Performance.
Як налаштувати моніторинг запуску?
- Виберіть інструмент: MetricKit або Firebase Performance.
- Інтегруйте SDK у проєкт.
- Додайте кастомні мітки для pre-main часу (iOS) або ініціалізації (Android).
- Створіть дашборд метрик (P50, P95, розподіл по версіях).
- Налаштуйте алерти на регресію: сповіщення, якщо P95 холодного запуску зріс на 20% порівняно з попередньою версією.
- Перевірте збір даних на реальних пристроях через TestFlight або Firebase App Distribution.
Вбудовані інструменти платформ
iOS — MetricKit. Починаючи з iOS 13, система агрегує діагностику реальних користувачів і віддає через MXMetricManager:
class AppDelegate: MXMetricManagerSubscriber { func applicationDidFinishLaunching() { MXMetricManager.shared.add(self) } func didReceive(_ payloads: [MXMetricPayload]) { for payload in payloads { if let launchMetric = payload.applicationLaunchMetrics { let coldLaunchP50 = launchMetric.histogrammedTimeToFirstDrawKey .histogram(for: .applicationLaunchTimeToFirstDraw) Analytics.track("cold_launch_p50", value: coldLaunchP50) } } } } MetricKit віддає дані раз на добу, агреговані за попередні 24 години. Це не real-time, але реальна вибірка по всіх користувачах.
Android — Firebase Performance Monitoring. app_start trace збирається автоматично при підключенні SDK. Розділяє app_start_cold та app_start_warm. Доступний у Firebase Console з розбивкою по пристроях, версіях ОС, версіях додатку.
Для кастомних міток в Android — FirebasePerformance.getInstance().newTrace("custom_init") + start() / stop(). Дозволяє зрозуміти, яка саме ініціалізація гальмує.
Як виміряти pre-main час на iOS?
Pre-main час (завантаження dynamic linker, ініціалізація Objective-C runtime) не покривається звичайними вимірами в AppDelegate. Єдиний спосіб побачити його — увімкнути змінну середовища DYLD_PRINT_STATISTICS у схемі Xcode. Для автоматичного збору використовуйте інструментування через MetricKit та спеціалізовані бібліотеки.
Інструментування в коді
Навіть без зовнішніх SDK можна виміряти запуск самостійно. iOS:
// В AppDelegate або @main static let appLaunchTimestamp = Date() // В viewDidAppear першого екрану let launchDuration = Date().timeIntervalSince(AppDelegate.appLaunchTimestamp) Analytics.track("cold_launch_duration", value: launchDuration) Але цей метод неточний — не враховує pre-main час (динамічні бібліотеки, runtime). Для pre-main: змінна середовища DYLD_PRINT_STATISTICS у схемі Xcode.
Android:
class App : Application() { override fun onCreate() { val start = SystemClock.elapsedRealtime() super.onCreate() // ... ініціалізації val initDuration = SystemClock.elapsedRealtime() - start FirebaseAnalytics.getInstance(this).logEvent("app_init_duration") { param("duration_ms", initDuration) } } } SystemClock.elapsedRealtime() точніше System.currentTimeMillis() для вимірювання інтервалів.
Dashboard та алерти
Мінімальний набір метрик для моніторингу:
| Метрика | Інструмент | Цільове значення |
|---|---|---|
| Cold launch P50 | Firebase / MetricKit | < 1.5 сек |
| Cold launch P95 | Firebase / MetricKit | < 3.0 сек |
| Cold launch по версіях | Firebase | Не зростає |
| Slow cold launches (> 5 сек) | Firebase | < 5% |
Алерт на зростання P95 між версіями — важливіше абсолютного значення. Регресія на 500 мс між двома релізами — сигнал шукати винуватця в diff змін.
У Grafana або Firebase Alerts налаштовуємо сповіщення: якщо P95 cold launch у поточній версії перевищує P95 попередньої версії на 20% — сповіщення в Slack.
Порівняння інструментів
| Інструмент | Частота оновлення | Кроссплатформеність | Кастомні метрики |
|---|---|---|---|
| MetricKit | Раз на добу | Тільки iOS | Обмежена |
| Firebase Performance | Real-time | iOS + Android | Так |
Firebase Performance краще підходить для кроссплатформених проєктів, MetricKit — якщо потрібні дані від усіх користувачів iOS без встановлення SDK.
Що входить у налаштування моніторингу
- Інтеграція MetricKit або Firebase Performance SDK.
- Налаштування збору даних cold/warm launch.
- Створення дашборду в Firebase Console або Grafana.
- Налаштування алертів на регресію (Slack, email).
- Документація з експлуатації та рекомендації з оптимізації.
- Навчання розробників — до 1 години консультації.
Ми гарантуємо, що після налаштування ви будете бачити P50, P95 та розподіл часу запуску по версіях і пристроях.
Строки: від 1 до 2 днів на базову інтеграцію. Оцінимо ваш проєкт безкоштовно — зв'яжіться з нами для консультації. Замовте налаштування моніторингу запуску під ключ і отримайте готову систему з алертами.







