Screengrab (Fastlane) — что это, возможности и автоматизация скриншотов

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

Screengrab — это утилита из экосистемы Fastlane для автоматизации создания скриншотов мобильных приложений под Android и iOS. Вместо ручного пролистывания экранов на десятках устройств разработчик запускает одну команду, и Screengrab самостоятельно делает снимки всех нужных экранов. По данным Fastlane Docs, 2026, инструмент поддерживает одновременно до 30 языков и любые разрешения экранов, заданные в конфигурации.

Главное

  • Screengrab — инструмент Fastlane для автоматического создания скриншотов мобильных приложений под Android и iOS.
  • Автоматизация заменяет ручное создание сотен скриншотов одной командой в терминале.
  • Локализация — одновременная генерация скриншотов на десятках языков без дополнительных настроек.
  • CI/CD — интеграция с любыми пайплайнами: Jenkins, GitHub Actions, GitLab CI.
  • Гибкость — поддержка нескольких устройств, ориентаций и языков в одном запуске.

Что такое Screengrab и зачем он нужен

Screengrab — это компонент экосистемы Fastlane, предназначенный для автоматизированного создания скриншотов мобильных приложений. Инструмент появился в 2015 году как ответ на проблему: для публикации в Google Play и App Store требуется от 4 до 10 скриншотов на каждый язык. При поддержке 30 языков это 120–300 снимков вручную.

Проблема ручного создания скриншотов

Разработчик вручную запускает приложение на симуляторе или устройстве, пролистывает до нужного экрана, делает снимок экрана, переносит его на компьютер, обрезает и сохраняет в нужную папку. Процедура повторяется для каждого языка и каждой ориентации. По данным Google Play Console, среднее приложение обновляется раз в две недели, что превращает скриншоты в регулярную рутину.

Преимущества автоматизации

Screengrab решает проблему кардинально: разработчик описывает сценарии тестов на UI-фреймворке (Espresso для Android, XCTest для iOS), а Screengrab запускает их на всех нужных устройствах и языках автоматически. Fastlane координирует процесс: собирает билд, запускает тесты, собирает скриншоты и упаковывает их в нужную структуру папок.

Результат — сотня скриншотов за 10–15 минут вместо нескольких часов ручной работы. Google рекомендует обновлять скриншоты при каждом значительном изменении интерфейса, и без автоматизации этот совет часто игнорируется.

Как работает Screengrab: архитектура и принцип действия

Архитектура Screengrab построена вокруг двух ключевых компонентов: клиента на устройстве (screengrab-lib) и раннера, который управляет запуском тестов и сбором результатов. На Android используется инструментальный тестовый фреймворк, на iOS — XCTest.

Жизненный цикл одного запуска

Fastlane вызывает action screengrab, который читает конфигурационный файл Screengrabfile. Раннер собирает тестовый APK с подключённой библиотекой screengrab-lib, устанавливает его на подключённые устройства или эмуляторы и запускает UI-тесты, помеченные аннотациями для скриншотов.

ruby
# Fastfile — описание lane для скриншотов
lane :screenshots do
  capture_android_screenshots(
    output_directory: "fastlane/metadata/android/screenshots",
    locales: ["ru-RU", "en-US", "de-DE"],
    devices: ["pixel_6", "pixel_tablet"],
    use_tests_external_storage: true
  )
end

Структура выходных файлов

Screengrab создаёт иерархию папок: язык → устройство → скриншоты. Структура полностью совпадает с требованиями Google Play Console и App Store Connect. App Store требует строго определённые размеры для каждого типа устройства, и Screengrab генерирует снимки точно под спецификации.

Поддержка нескольких устройств

Инструмент умеет запускать тесты параллельно на всех подключённых устройствах и эмуляторах. Эмуляторы Android запускаются автоматически, если они не активны. Для iOS Screengrab использует симуляторы Xcode.

Установка и настройка Screengrab для Android

Установка Screengrab состоит из двух частей: добавление библиотеки в проект и настройка конфигурационного файла. На Android необходим UI-фреймворк Espresso и библиотека screengrab-lib из репозитория Fastlane.

Подключение зависимостей

В build.gradle модуля приложения добавляется зависимость screengrab-lib. Библиотека предоставляет класс ScreenCapturer, который делает снимок экрана в момент вызова.

groovy
// build.gradle (module: app)
androidTestImplementation(
  'tools.fastlane:screengrab-lib:2.1.0'
)

Написание теста со скриншотами

UI-тест помечается аннотацией Screengrab.screenshot() в нужных точках. Каждый вызов делает снимок текущего экрана и сохраняет его с указанным именем.

kotlin
import tools.fastlane.screengrab.Screengrab
import tools.fastlane.screengrab.locale.LocaleTestRule

class ScreenshotTest {

    @get:Rule
    val localeTestRule = LocaleTestRule()

    @Test
    fun testTakeScreenshots() {
        Screengrab.screenshot("main_screen")
        // Действия: нажать на кнопку входа
        Screengrab.screenshot("login_screen")
    }
}

Screengrabfile конфигурация

Файл Screengrabfile хранит параметры запуска: список устройств, языки, тайм-ауты и путь для сохранения. Файл обычно располагается в папке fastlane рядом с Fastfile.

Локализация скриншотов и несколько языков

Локализация — ключевая возможность Screengrab, ради которой его чаще всего выбирают. Инструмент автоматически переключает язык приложения перед каждым прогоном тестов и делает снимки на всех указанных языках.

Настройка языков

Языки задаются в Screengrabfile параметром locales. Для каждого языка Screengrab переустанавливает приложение с соответствующими ресурсами и запускает полный цикл тестов. LocaleTestRule на Android автоматически переключает локаль устройства.

ruby
# Screengrabfile
locales [
  "ru-RU",
  "en-US",
  "de-DE",
  "fr-FR",
  "es-ES",
  "ja-JP",
  "ko-KR"
]

Структура папок для локализованных скриншотов

Screengrab создаёт директории по схеме: screenshots/{locale}/{device_name}/{screenshot_name}.png. Эта структура напрямую совпадает с требованиями Google Play, что позволяет загружать скриншоты через Fastlane deliver одной командой.

Для iOS App Store Connect ожидает скриншоты в плоской структуре по языкам. Fastlane автоматически конвертирует иерархию Screengrab в нужный формат при публикации.

Интеграция Screengrab в CI/CD пайплайн

CI/CD интеграция — одно из главных преимуществ Screengrab. Инструмент запускается из командной строки и не требует графического интерфейса, что делает его идеальным для серверных сборок.

GitHub Actions

В CI-окружении необходимо запустить эмулятор Android или симулятор iOS, после чего вызвать lane с скриншотами. GitHub Actions поддерживает кэширование AVD, что ускоряет повторные запуски.

Параметры для CI

В CI-конфигурации важно учитывать ограничения по памяти и времени. Эмуляторам Android требуется минимум 2 ГБ ОЗУ на устройство, а полный прогон на 7 языках и 2 устройствах занимает 20–40 минут.

ruby
# Fastfile — lane для CI с тайм-аутами
lane :ci_screenshots do
  capture_android_screenshots(
    locales: ["en-US", "ru-RU"],
    devices: ["pixel_6"],
    clear_previous_screenshots: true,
    tests_timeout: "600",
    output_directory: "screenshots/ci"
  )
end

Jenkins Pipeline

Для Jenkins используется шаг sh с вызовом bundle exec fastlane. Рекомендуется запускать скриншоты ночью или по триггеру после мержа в основную ветку, чтобы не замедлять цикл разработки.

Screengrab vs альтернативы: сравнение инструментов

Screengrab — не единственный инструмент для автоматизации скриншотов. Существуют альтернативы с разными подходами: встроенные средства ОС, коммерческие платформы и библиотеки для скриншотов в коде.

ИнструментПлатформаЛокализацияCI/CD
ScreengrabAndroid, iOSАвтоНативно
ADB ShellAndroidРучнаяЧерез скрипты
XCTestiOSРучнаяЧерез xcodebuild
Firebase Test LabAndroidТребует настройкиДа
AppiumКроссплатформаРучнаяЧерез WebDriver

ADB Shell даёт полный контроль, но требует написания скриптов для каждого сценария. XCTest встроен в Xcode, но не управляет локализацией автоматически. Firebase Test Lab запускает тесты на реальных устройствах в облаке, что даёт максимальное покрытие, но требует оплаты за каждую минуту.

Screengrab выигрывает за счёт связки: Fastlane управляет всем жизненным циклом сборки — от компиляции до публикации. Google Play напрямую принимает структуру папок Screengrab через Fastlane deliver.

Типовые проблемы и их решение

При работе с Screengrab разработчики чаще всего сталкиваются с несколькими повторяющимися проблемами. Знание типовых ошибок сокращает время отладки при первом запуске.

Скриншоты получаются пустыми или чёрными

Проблема возникает, когда Screengrab делает снимок до завершения рендеринга экрана. Решение — добавить задержку Thread.sleep() перед вызовом screenshot() или использовать IdlingResource из Espresso для ожидания асинхронных операций.

Ошибка несовместимости версий

Screengrab-lib должна соответствовать версии Fastlane. Fastlane обновляется ежемесячно, и старая библиотека может не поддерживать новые параметры конфигурации. Решение — синхронизировать версии через Gemfile и gradle.properties.

Долгий прогон на CI

Запуск на 30 языках на 5 устройствах может занимать более часа. Решение — разделить прогоны: один для магазина на всех языках, другой для внутренних нужд на двух языках. GitHub Actions позволяет использовать матрицу стратегий для параллельных запусков.

Проблемы с эмулятором на CI

Эмулятор Android требует аппаратной виртуализации, которая не всегда доступна на CI-серверах. KVM должен быть включён, иначе эмулятор не запускается. Решение — использовать x86-образы без GPU-ускорения или Firebase Test Lab.

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

Чем Screengrab отличается от обычного скриншота через ADB?

ADB делает снимок того, что отображается на экране в текущий момент. Screengrab интегрируется с UI-тестами, автоматически переключает языки, устройства и делает серию снимков по сценарию без участия человека.

Можно ли использовать Screengrab без Fastlane?

Нет, Screengrab является компонентом экосистемы Fastlane и использует его инфраструктуру для сборки, установки и координации. Отдельно библиотека screengrab-lib не запускается — необходим Fastlane как оркестратор.

Сколько времени занимает генерация скриншотов на 10 языках?

На одном устройстве прогон на 10 языках занимает 15–25 минут. Каждый язык требует переустановки приложения и полного цикла UI-тестов. Параллельный запуск на нескольких устройствах сокращает время пропорционально.

Поддерживает ли Screengrab iOS приложения?

Да, Screengrab поддерживает iOS через XCTest и симуляторы Xcode. Конфигурация аналогична Android: добавляются языки, устройства, а UI-тесты на Swift пишутся с использованием XCTest и снимков через XCUIScreenshot.

Как обновить скриншоты только для новых языков?

Screengrab не поддерживаетный режим — каждый запуск генерирует полный набор скриншотов. Рекомендуется настроить отдельный lane для CI с ограниченным списком языков, чтобы не перезаписывать существующие снимки из основного прогона.

Итоги

  • Screengrab — компонент Fastlane для автоматизации скриншотов мобильных приложений под Android и iOS.
  • Автоматизация заменяет ручное создание сотен скриншотов одной командой в терминале.
  • Локализация — инструмент переключает язык приложения перед каждым прогоном тестов автоматически.
  • CI/CD — интеграция с Jenkins, GitHub Actions, GitLab CI и другими пайплайнами без графического интерфейса.
  • Структура выходных файлов совпадает с требованиями Google Play и App Store для прямой загрузки.
  • Гибкость — поддержка нескольких устройств, ориентаций экрана и пользовательских сценариев тестирования.
  • Экономия — сотня скриншотов за 15 минут вместо нескольких часов ручной работы при каждом обновлении.

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

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

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

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