Snapshot (Fastlane) — это инструмент для автоматической генерации скриншотов iOS-приложений на всех поддерживаемых устройствах и языках. В отличие от ручного создания снимков экрана через симулятор, Snapshot запускает UI-тесты и делает скриншоты в заданных точках приложения. По данным официальной документации Fastlane (2026), Snapshot сокращает время подготовки скриншотов для релиза с 4 часов до 15 минут.
Главное
Snapshot (Fastlane) — это компонент экосистемы Fastlane, который автоматизирует создание скриншотов приложения для App Store. Он запускает UI-тесты на симуляторах iOS, делает снимки экрана в заданных состояниях приложения и сохраняет их в структурированной директории с правильными именами для каждого языка и устройства.
Без Snapshot разработчики вручную запускают симулятор, открывают каждый экран, делают скриншот через Cmd+S, переключают язык и повторяют процесс для всех комбинаций. Автоматизация скриншотов — это ключевой элемент ASO-оптимизации, поскольку App Store требует актуальные снимки для каждого нового релиза, а ручное обновление 60+ скриншотов отнимает часы работы.
По данным App Store Connect Documentation (2025), приложения с локализованными скриншотами получают на 25% больше конверсий в целевых странах. Snapshot позволяет командам обновлять визуальный контент для 32 языков за один запуск, что особенно важно для маркетинговых кампаний, привязанных к новым функциям приложения.
Используйте Snapshot в любом проекте, который публикуется в App Store — это стандартный инструмент для команд, стремящихся к автоматизации релизного процесса и улучшению ASO.
Процесс генерации скриншотов в Snapshot состоит из нескольких этапов: подготовка UI-тестов, настройка Snapfile, запуск симуляторов и сбор результатов. Snapshot последовательно запускает каждый симулятор для указанных устройств и языков, выполняет UI-тесты и делает снимки в точках вызова функции snapshot().
После завершения всех тестов Snapshot собирает скриншоты в директорию screenshots/[Language]/ с именами, соответствующими требованиям App Store. Каждый скриншот сохраняется в формате PNG с разрешением, соответствующим целевому устройству. Snapshot также генерирует HTML-отчёт для визуальной проверки всех созданных снимков.
Для работы Snapshot необходимо добавить вызовы snapshot() в XCTest-код UI-тестов приложения. Функция делает скриншот текущего состояния экрана в момент вызова. Разработчик размещает snapshot() после каждого ключевого действия: открытия экрана, ввода данных, навигации по табам или отображения результатов.
Пример структуры UI-теста: тест авторизуется в приложении, вызывает snapshot("01-LoginScreen") для снимка экрана логина, затем переходит на главный экран и вызывает snapshot("02-HomeScreen") для снимка главного экрана. XCTest — это фреймворк Apple для модульного и UI-тестирования iOS-приложений, интегрированный напрямую в Xcode.
// UI-тест для Snapshot
- (void)testScreenshots {
XCUIApplication *app = [[XCUIApplication alloc] init];
[app launch];
snapshot(@"01-LoginScreen");
[app.textFields[@"email"] tap];
[app.textFields[@"email"] typeText:@"user@company.com"];
[app.buttons[@"Login"] tap];
snapshot(@"02-HomeScreen");
}
Snapshot автоматически переключает язык симулятора для каждого языка, указанного в Snapfile. Приложение запускается с соответствующей локализацией, и UI-тесты выполняются на этом языке. Локализация скриншотов — критический фактор ASO: пользователи в 75% случаев предпочитают приложения с контентом на родном языке, включая скриншоты в App Store.
Для каждого устройства Snapshot запускает отдельный симулятор с соответствующей диагональю экрана. Поддерживаются все размеры, требуемые App Store: iPhone 6.5 дюйма (iPhone 15 Pro Max), 5.5 дюйма (iPhone 8 Plus), 6.7 дюйма (iPhone 15 Plus) и iPad 12.9 дюйма. Симулятор iOS — это программная эмуляция устройства iOS, встроенная в Xcode для тестирования приложений без физического устройства.
# Генерация скриншотов для всех устройств и языков
fastlane snapshot
# Генерация только для указанных устройств
fastlane snapshot --devices "iPhone 15 Pro Max,iPhone 15"
# Очистка перед генерацией скриншотов
fastlane snapshot --reinstall_app --erase_simulator
Snapfile — это конфигурационный файл Fastlane, который определяет параметры генерации скриншотов: список устройств, языки, время ожидания и опции запуска. Snapfile хранится в директории fastlane и версионируется вместе с проектом, что гарантирует единую конфигурацию для всех участников команды.
# Snapfile — конфигурация скриншотов
devices([
"iPhone 15 Pro Max",
"iPhone 15",
"iPad Pro (12.9-inch)"
])
languages([
"en-US",
"ru",
"de-DE"
])
scheme("MyAppUITests")
output_directory("./screenshots")
clear_previous_screenshots(true)
reinstall_app(true)
erase_simulator(true)
Параметр clear_previous_screenshots удаляет старые скриншоты перед началом генерации — это предотвращает накопление устаревших снимков в output-директории. reinstall_app переустанавливает приложение на симулятор перед каждым запуском, что гарантирует чистую сессию без влияния предыдущих тестов на новую генерацию.
Параметр erase_simulator очищает содержимое симулятора перед началом тестов — включая кэш, настройки и данные предыдущих сессий. Это особенно важно для тестов, которые проверяют онбординг или первый запуск приложения. Snapshot также поддерживает параметры ios_version для указания версии iOS на симуляторе и stop_after_first_error для остановки генерации при первой ошибке UI-теста.
Для проектов с SwiftUI доступен параметр use_simulator_for_language, который управляет переключением языка через настройки симулятора вместо изменения региона системы. Snapshot также поддерживает launch_arguments для передачи дополнительных аргументов при запуске приложения — полезно для тестов с разными конфигурациями бэкенда или A/B тестами.
Интерфейс Snapshot включает базовые команды для запуска генерации и расширенные флаги для точного контроля над процессом. Основная команда fastlane snapshot запускает полный цикл генерации скриншотов на основе конфигурации из Snapfile.
Команда fastlane snapshot --devices "iPhone 15" генерирует скриншоты только для указанных устройств, игнорируя остальные из Snapfile. --languages "en-US,ru" фильтрует языки для генерации. Комбинация этих флагов полезна для быстрой проверки скриншотов на одном устройстве и языке без полного цикла генерации, который может занимать до 30 минут при 5 устройствах и 10 языках.
# Быстрая генерация для одного устройства
fastlane snapshot --devices "iPhone 15" --languages "en-US"
# Генерация с переустановкой приложения
fastlane snapshot --reinstall_app --erase_simulator
# Генерация с HTML-отчётом
fastlane snapshot --output_directory "./build/screenshots"
Флаг --output_directory меняет директорию сохранения результатов. По умолчанию Snapshot сохраняет скриншоты в fastlane/screenshots. Для интеграции с Deliver указывайте директорию, которая совпадает с ожидаемой структурой Deliverfile — это позволяет передавать скриншоты напрямую в процесс публикации без ручного копирования файлов между папками.
| Параметр Snapshot | Назначение | Пример |
|---|---|---|
| devices | Список устройств для генерации | iPhone 15, iPad Pro |
| languages | Список языков локализации | en-US, ru, de-DE |
| reinstall_app | Переустановка приложения перед тестами | true / false |
| erase_simulator | Очистка симулятора перед запуском | true / false |
| clear_previous | Удаление старых скриншотов | true / false |
Snapshot в CI/CD — это автоматическая генерация скриншотов при каждом релизном коммите. Snapshot запускается перед этапом Deliver, чтобы гарантировать, что скриншоты в App Store соответствуют текущей версии приложения и не содержат устаревших элементов интерфейса от предыдущих версий.
Для работы Snapshot в CI требуется Xcode с установленными симуляторами iOS. В CI-окружении Snapshot использует симуляторы из состава Xcode, которые предварительно загружаются на раннер. GitHub Actions предоставляет образы с предустановленным Xcode и iOS-симуляторами для запуска UI-тестов без дополнительной настройки.
# Запуск Snapshot в CI окружении
fastlane snapshot --skip_open_summary \
--output_directory "$CI_PROJECT_DIR/screenshots"
# Сохранение скриншотов как артефактов CI
cp -R "screenshots/" "$CI_PROJECT_DIR/artifacts/"
Параметр --skip_open_summary отключает открытие HTML-отчёта после генерации — в CI-окружении графический интерфейс недоступен. Результаты генерации сохраняются в директории, которая передаётся как артефакт CI-задачи и затем используется Deliver для загрузки в App Store вместе с релизом.
Для ускорения CI-пайплайна используйте параллельную генерацию скриншотов через concurrent_simulators — параметр Snapfile, который запускает несколько симуляторов одновременно. Это сокращает время генерации скриншотов на 5 устройств и 10 языков с 40 минут до 15 минут при использовании 4 параллельных потоков.
При использовании Snapshot разработчики чаще всего сталкиваются с ошибками, связанными с нестабильностью UI-тестов, проблемами симуляторов и неверной конфигурацией устройств. Диагностика ошибок Snapshot начинается с анализа HTML-отчёта, который содержит скриншоты каждого шага и информацию о проваленных тестах.
Ошибка «Failed to build scheme MyAppUITests» возникает, когда схема UI-тестов не настроена для сборки. Решение: убедитесь, что в Xcode создан отдельный Scheme для UI-тестов и Shared опция включена для доступа из командной строки. Xcode Scheme — это конфигурация сборки, тестирования и запуска приложения, которая определяет набор целей и параметров для каждого действия.
Ошибка «No simulators found matching...» указывает на отсутствие симулятора с указанным типом устройства или версией iOS. Решение: выполните xcrun simctl create для создания симулятора или укажите существующее устройство из списка xcrun simctl list. xcrun simctl — это командная утилита Xcode для управления симуляторами iOS: создания, удаления, запуска и диагностики.
При ошибке «UI test failure» UI-тест не проходит на одном из языков или устройств. Решение: запустите Snapshot с флагом --stop_after_first_error для остановки при первой ошибке, проанализируйте скриншот в HTML-отчёте и исправьте тест. Частая причина — разная длина текста на разных языках, из-за которой элементы интерфейса перекрываются или выходят за границы экрана.
Часто задаваемые вопросы
Snapshot поддерживает все устройства из семейства iPhone и iPad, включая iPhone 15 Pro Max (6.7 дюйма), iPhone 15 (6.1 дюйма), iPad Pro 12.9 дюйма и iPad mini. Для каждого устройства Snapshot загружает соответствующие скины симуляторов из Xcode, что гарантирует точное разрешение экрана.
Нет, Snapshot работает исключительно с симуляторами iOS из состава Xcode. Реальные устройства не требуются и не поддерживаются — все скриншоты генерируются в среде симулятора, который обеспечивает идентичное разрешение и цветопередачу для требований App Store.
Snapshot переключает язык симулятора перед запуском UI-тестов для каждого языка из Snapfile. Приложение отображается на соответствующем языке через системные настройки локализации. UI-тесты используют локализованные строки через NSLocalizedString, что гарантирует корректный текст на всех скриншотах.
Да, Snapshot поддерживает macOS приложения начиная с версии Fastlane 2.200. Для macOS укажите платформу в Snapfile через параметр app_platform("macOS"). Snapshot запускает UI-тесты на macOS и создаёт скриншоты в соответствии с требованиями Mac App Store.
Ручной скриншот требует открыть каждый экран вручную, переключить язык, изменить устройство — около 60 действий для полного набора. Snapshot автоматизирует весь процесс: переключает языки, устройства, запускает UI-тесты и сохраняет скриншоты с правильными именами для App Store за 15 минут.
Итоги
Мы разработаем мобильное приложение под ключ
IT Sectr создаёт приложения для iOS и Android для стартапов и бизнеса с 2017 года. Мы проконсультируем вас и предложим наилучшее решение.
Читайте также