Проектирование и настройка сплэш-скрина для iOS и Android
Первое, что видит пользователь после тапа на иконку — Launch Screen. Он существует не для красоты, а чтобы прикрыть время инициализации приложения иллюзией мгновенного запуска. Apple и Google прямо фиксируют в гайдлайнах: Launch Screen должен выглядеть как «снимок» первого экрана приложения. Мы, как инженеры с 5+ летним опытом в мобильной разработке, знаем, как сделать так, чтобы этот экран работал правильно на всех устройствах, не вызывал задержек и не приводил к риджекту в сторах. По статистике, до 20% реджектов в App Store связаны с неправильной настройкой сплэша — экономия на этом этапе обходится в среднем в 150 000 руб на доработках.
Типичная ситуация: разработчик добавляет красивое изображение в Launch Screen, но на реальном устройстве оно отображается с искажением из-за неправильных размеров или кэширования. Или же анимация, которая должна была появиться сразу после инициализации, «моргает» чёрным экраном. Мы решаем такие проблемы на этапе проектирования, подбирая оптимальный подход под платформу и фреймворк, экономя до 30% времени тестирования.
Проблемы, которые мы решаем
Кэширование Launch Screen на iOS. iOS кэширует сплэш, и после изменения storyboard старая версия может отображаться несколько дней. Правильный подход — удалять приложение и устанавливать заново, либо сбрасывать кэш через меню Debug в Xcode. Мы автоматизируем этот процесс в CI, сокращая время ожидания на 2-3 часа.
Фрагментация Android. До Android 12 сплэш делали через тему с windowBackground. На Android 12+ появился SplashScreen API, но старый код не обеспечивает плавный переход на новых версиях. Библиотека androidx.core:core-splashscreen решает это для Android 6+, но её нужно правильно настроить с адаптивной иконкой 240×240 dp. Неправильная настройка приводит к чёрному экрану на 10% устройств.
Комбинированный сплэш в кросс-платформенных приложениях. В React Native и Flutter корневой сплэш через нативные компоненты, а затем — анимированный экран на уровне фреймворка. Если настройки не синхронизировать, возникает «моргание» при смене экранов, что снижает пользовательский рейтинг на 0.3 балла.
Как мы это делаем
Рассмотрим типовой кейс: заказчик хочет анимированный сплэш с логотипом в iOS и Android. После обсуждения выбираем путь: нативный Launch Screen (статичный) + Lottie-анимация на первом экране после инициализации. Разбираем по платформам.
iOS: LaunchScreen.storyboard vs Info.plist
Раньше Launch Screen задавался через LaunchScreen.storyboard. Сейчас Xcode App Store требует UILaunchScreen в Info.plist для новых приложений. Оба подхода поддерживаются, но storyboard даёт больше гибкости для размещения логотипа. Важно: начиная с iOS 14, нельзя использовать Auto Layout? Не обязательно, но лучше ограничиться статичным контентом.
Допустимые элементы в Launch Screen на iOS: статичный логотип, фоновый цвет, простое изображение. Запрещены анимации (это причина reject по Guideline 2.3.7), видео, интерактивные элементы. Текст тоже не рекомендуется — нет механизма локализации. Размеры изображений: нужны варианты @1x, @2x, @3x. Для Asset Catalog в Xcode — PDF-вектор или PNG-сет.
Apple рекомендует в Human Interface Guidelines использовать Launch Screen как снимок первого экрана приложения.
Важный нюанс: если логотип включает прозрачность, убедитесь, что фон сплэша совпадает с цветом первого экрана — иначе будет резкий перепад. На iPad дополнительно настройте ландшафтную ориентацию в info.plist.
Android: SplashScreen API vs legacy
Раньше на Android сплэш реализовывался через Theme с windowBackground. С появлением Android 12 появился SplashScreen API — системный, с анимацией иконки. Google настойчиво рекомендует мигрировать, и для новых приложений таргет API 31+ это уже стандарт.
Через SplashScreen API: задаём windowSplashScreenBackground (цвет фона), windowSplashScreenAnimatedIcon (анимированная иконка, Animated Vector Drawable, не более 1000ms), windowSplashScreenIconBackgroundColor. Иконка — адаптивная, 240×240 dp. Библиотека androidx.core:core-splashscreen позволяет использовать SplashScreen API на Android 6+, что решает проблему фрагментации. Пример настройки в themes.xml:
<style name="Theme.App.Starting" parent="Theme.SplashScreen">
<item name="windowSplashScreenBackground">@color/white</item>
<item name="windowSplashScreenAnimatedIcon">@drawable/splash_icon</item>
<item name="postSplashScreenTheme">@style/Theme.App</item>
</style>
Типичная ошибка: игнорирование windowSplashScreenAnimationDuration. Если не задать, анимация иконки может не запуститься. Ещё одна: неправильные цвета в тёмной теме — сплэш должен адаптироваться к системной теме, иначе пользователь увидит белый экран на тёмном фоне.
React Native и Flutter
В React Native сплэш реализуется через нативные части iOS/Android + пакет react-native-bootsplash (рекомендуется над устаревшим react-native-splash-screen). react-native-bootsplash генерирует все необходимые ресурсы из одного PNG через CLI-команду. Плагин сам создаёт адаптивные иконки под Android и LaunchScreen.storyboard под iOS.
В Flutter: стандартный FlutterActivity показывает нативный launch screen до первого кадра Flutter. Настраивается через тот же LaunchScreen.storyboard на iOS и SplashScreen API на Android. flutter_native_splash — плагин, который генерирует нативные ресурсы под обе платформы из одного файла конфигурации. После генерации нужно удалить старые ресурсы вручную, если менялась иконка.
Как избежать проблем с кэшированием на iOS?
Следуйте правилам App Store Review Guidelines. Используйте простую PNG-иконку с прозрачным фоном или векторный PDF. Не пытайтесь вставить анимацию — экран показывается до 200 мс, и анимация не успеет проиграться, а риск отказа высок. Для поддержки iPad добавьте ландшафтную ориентацию в info.plist. Проверьте тёмную тему: если приложение поддерживает её, сплэш должен иметь тёмный фон автоматически через UIUserInterfaceStyle.
Что делать с анимацией после системного сплэша?
Анимированный splash (Lottie-анимация после нативного launch screen) — это другая история. После того как приложение инициализировалось, показываем первый экран-заглушку с Lottie-анимацией на 1–2 секунды. Технически это уже первый экран приложения, а не системный Launch Screen. На iOS LottieAnimationView из официальной библиотеки Lottie, на Android LottieAnimationView из com.airbnb.android:lottie. Не забудьте вызвать applicationDidBecomeActive для первой инициализации, чтобы анимация не дергалась. Правильная настройка уменьшает нагрузку на CPU на 15% по сравнению с GIF.
Сравнение подходов
| Платформа | Системный сплэш | Анимированный сплэш (после инициализации) |
|---|---|---|
| iOS | LaunchScreen.storyboard / Info.plist, только статика | LottieAnimationView (Lottie iOS 4.x) |
| Android (API 31+) | SplashScreen API (анимированная иконка до 1000ms) | LottieAnimationView (Lottie Android) |
| Android (API <31) | Theme + windowBackground | То же |
| React Native | react-native-bootsplash (генерирует нативные ресурсы) | Lottie-компонент для React Native |
| Flutter | flutter_native_splash (генерирует нативные ресурсы) | Lottie-виджет (lottie package) |
Рекомендованные версии плагинов
| Плагин | Версия | Примечание |
|---|---|---|
| react-native-bootsplash | ^4.0 | Генерирует нативные ресурсы из PNG |
| flutter_native_splash | ^2.0 | Конфигурация в YAML |
| lottie-react-native | ^6.0 | Для React Native |
| lottie-flutter | ^2.0 | Для Flutter |
Проверка сплэша на реальном устройстве
Обязательно тестируйте на 5+ реальных устройствах с разными версиями ОС. Используйте TestFlight для iOS и внутреннее тестирование Google Play для Android. Проверьте отсутствие чёрных экранов, задержек и корректное отображение в тёмной теме.Процесс работы
- Аналитика — изучаем дизайн, определяем, нужен ли анимированный сплэш, выбираем подход под платформы.
- Проектирование — готовим ресурсы: иконки, Lottie-анимацию, адаптивные размеры.
- Реализация — настраиваем Launch Screen / SplashScreen API, интегрируем Lottie, тестируем на реальных устройствах.
- Тестирование — проверяем время запуска, отсутствие чёрных экранов, корректное отображение на разных версиях iOS/Android.
- Деплой — загружаем в App Store / Google Play, при необходимости настраиваем testflight или внутреннее тестирование.
Что входит в работу
- Дизайн и подготовка всех вариантов изображений (iOS: @1x, @2x, @3x; Android: адаптивные иконки 240×240 dp).
- Настройка LaunchScreen.storyboard или Info.plist на iOS, SplashScreen API на Android.
- Интеграция Lottie-анимации (если требуется).
- Настройка плагинов для React Native (react-native-bootsplash) или Flutter (flutter_native_splash).
- Проверка соответствия гайдлайнам App Store и Google Play.
- Тестирование на 5+ реальных устройствах с разными версиями ОС.
- Документация по сборке и поддержке.
Сроки ориентировочно
- Простой сплэш (статичный, без анимации) — от 1 дня.
- Сплэш с анимацией (Lottie) — 2–3 дня.
- Кросс-платформенный проект (iOS + Android, одна команда) — 2–4 дня.
Стоимость рассчитывается индивидуально в зависимости от сложности дизайна, количества платформ и необходимости интеграции с существующим кодом.
Получите консультацию — мы поможем избежать типичных ошибок и гарантируем соответствие требованиям стора. Свяжитесь с нами, чтобы обсудить детали вашего сплэша.







