Snapshot (Fastlane) — суть, генерация скриншотов и настройка в мобильных приложениях

Автор: IT Sectr Опубликовано: 2026-04-15 Время чтения: 10 мин

Snapshot (Fastlane) — это инструмент для автоматической генерации скриншотов iOS-приложений на всех поддерживаемых устройствах и языках. В отличие от ручного создания снимков экрана через симулятор, Snapshot запускает UI-тесты и делает скриншоты в заданных точках приложения. По данным официальной документации Fastlane (2026), Snapshot сокращает время подготовки скриншотов для релиза с 4 часов до 15 минут.

Главное

  • Snapshot — утилита Fastlane для автоматического создания скриншотов iOS-приложений через UI-тесты на всех устройствах и языках.
  • Инструмент интегрируется с XCTest UI-тестами: разработчик добавляет команды snapshot() в тестовый код для захвата снимков в ключевых экранах приложения.
  • Snapshot поддерживает все размеры устройств iPhone и iPad, требуемые App Store: 6.5, 5.5, 6.7, 12.9 дюймов и другие форматы экрана.
  • Настройка выполняется через файл Snapfile, где указываются устройства, языки, локализация и параметры запуска симулятора для генерации.
  • Результаты сохраняются в директории screenshots/, совместимой с Deliver — скриншоты готовы к загрузке в App Store без дополнительной обработки.

Что такое Snapshot (Fastlane)?

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 генерирует скриншоты

Процесс генерации скриншотов в Snapshot состоит из нескольких этапов: подготовка UI-тестов, настройка Snapfile, запуск симуляторов и сбор результатов. Snapshot последовательно запускает каждый симулятор для указанных устройств и языков, выполняет UI-тесты и делает снимки в точках вызова функции snapshot().

После завершения всех тестов Snapshot собирает скриншоты в директорию screenshots/[Language]/ с именами, соответствующими требованиям App Store. Каждый скриншот сохраняется в формате PNG с разрешением, соответствующим целевому устройству. Snapshot также генерирует HTML-отчёт для визуальной проверки всех созданных снимков.

Настройка UI-тестов для Snapshot

Для работы Snapshot необходимо добавить вызовы snapshot() в XCTest-код UI-тестов приложения. Функция делает скриншот текущего состояния экрана в момент вызова. Разработчик размещает snapshot() после каждого ключевого действия: открытия экрана, ввода данных, навигации по табам или отображения результатов.

Пример структуры UI-теста: тест авторизуется в приложении, вызывает snapshot("01-LoginScreen") для снимка экрана логина, затем переходит на главный экран и вызывает snapshot("02-HomeScreen") для снимка главного экрана. XCTest — это фреймворк Apple для модульного и UI-тестирования iOS-приложений, интегрированный напрямую в Xcode.

objective-c
// 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 для тестирования приложений без физического устройства.

bash
# Генерация скриншотов для всех устройств и языков
fastlane snapshot

# Генерация только для указанных устройств
fastlane snapshot --devices "iPhone 15 Pro Max,iPhone 15"

# Очистка перед генерацией скриншотов
fastlane snapshot --reinstall_app --erase_simulator

Конфигурация Snapshot через Snapfile

Snapfile — это конфигурационный файл Fastlane, который определяет параметры генерации скриншотов: список устройств, языки, время ожидания и опции запуска. Snapfile хранится в директории fastlane и версионируется вместе с проектом, что гарантирует единую конфигурацию для всех участников команды.

ruby
# 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 для генерации снимков

Интерфейс Snapshot включает базовые команды для запуска генерации и расширенные флаги для точного контроля над процессом. Основная команда fastlane snapshot запускает полный цикл генерации скриншотов на основе конфигурации из Snapfile.

Быстрая генерация и фильтрация

Команда fastlane snapshot --devices "iPhone 15" генерирует скриншоты только для указанных устройств, игнорируя остальные из Snapfile. --languages "en-US,ru" фильтрует языки для генерации. Комбинация этих флагов полезна для быстрой проверки скриншотов на одном устройстве и языке без полного цикла генерации, который может занимать до 30 минут при 5 устройствах и 10 языках.

bash
# Быстрая генерация для одного устройства
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 в CI/CD — это автоматическая генерация скриншотов при каждом релизном коммите. Snapshot запускается перед этапом Deliver, чтобы гарантировать, что скриншоты в App Store соответствуют текущей версии приложения и не содержат устаревших элементов интерфейса от предыдущих версий.

Для работы Snapshot в CI требуется Xcode с установленными симуляторами iOS. В CI-окружении Snapshot использует симуляторы из состава Xcode, которые предварительно загружаются на раннер. GitHub Actions предоставляет образы с предустановленным Xcode и iOS-симуляторами для запуска UI-тестов без дополнительной настройки.

bash
# Запуск 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

При использовании 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-отчёте и исправьте тест. Частая причина — разная длина текста на разных языках, из-за которой элементы интерфейса перекрываются или выходят за границы экрана.

Часто задаваемые вопросы

Какие устройства iOS поддерживает Snapshot?

Snapshot поддерживает все устройства из семейства iPhone и iPad, включая iPhone 15 Pro Max (6.7 дюйма), iPhone 15 (6.1 дюйма), iPad Pro 12.9 дюйма и iPad mini. Для каждого устройства Snapshot загружает соответствующие скины симуляторов из Xcode, что гарантирует точное разрешение экрана.

Нужны ли реальные устройства для работы Snapshot?

Нет, Snapshot работает исключительно с симуляторами iOS из состава Xcode. Реальные устройства не требуются и не поддерживаются — все скриншоты генерируются в среде симулятора, который обеспечивает идентичное разрешение и цветопередачу для требований App Store.

Как Snapshot обрабатывает локализацию текста в скриншотах?

Snapshot переключает язык симулятора перед запуском UI-тестов для каждого языка из Snapfile. Приложение отображается на соответствующем языке через системные настройки локализации. UI-тесты используют локализованные строки через NSLocalizedString, что гарантирует корректный текст на всех скриншотах.

Можно ли генерировать скриншоты для macOS приложений?

Да, Snapshot поддерживает macOS приложения начиная с версии Fastlane 2.200. Для macOS укажите платформу в Snapfile через параметр app_platform("macOS"). Snapshot запускает UI-тесты на macOS и создаёт скриншоты в соответствии с требованиями Mac App Store.

Чем Snapshot отличается от обычного скриншота через Cmd+S?

Ручной скриншот требует открыть каждый экран вручную, переключить язык, изменить устройство — около 60 действий для полного набора. Snapshot автоматизирует весь процесс: переключает языки, устройства, запускает UI-тесты и сохраняет скриншоты с правильными именами для App Store за 15 минут.

Итоги

  • Snapshot — утилита Fastlane для автоматической генерации скриншотов iOS-приложений через XCTest UI-тесты на всех устройствах и языках.
  • Разработчик добавляет вызовы snapshot() в код UI-тестов в ключевых точках приложения — Snapshot делает снимки в этих местах.
  • Настройка через Snapfile определяет список устройств, языков и параметров симулятора: devices, languages, reinstall_app и erase_simulator.
  • Результаты сохраняются в директории screenshots/[Language]/ в формате, совместимом с Deliver для прямой загрузки в App Store.
  • Интеграция в CI/CD позволяет автоматически генерировать свежие скриншоты перед каждым релизом с параллельными симуляторами для ускорения процесса.
  • Типичные ошибки Snapshot связаны с нестабильными UI-тестами на разных языках, отсутствием симуляторов в Xcode или неверной конфигурацией Scheme.

Мы разработаем мобильное приложение под ключ

IT Sectr создаёт приложения для iOS и Android для стартапов и бизнеса с 2017 года. Мы проконсультируем вас и предложим наилучшее решение.

Обсудить проект

Читайте также