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 викликає дію 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 року. Ми проконсультуємо вас і запропонуємо найкраще рішення.

Обговорити проект

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