Screengrab — це утіліта з екосистеми Fastlane для автоматизації створення скріншотів мобільних додатків під Android та iOS. Замість ручного прогортання екранів на десятках пристроїв розробник запускає одну команду, і Screengrab самостійно робить знімки всіх потрібних екранів. Згідно з Fastlane Docs, 2026, інструмент підтримує одночасно до 30 мов і будь-які роздільності екранів, задані в конфігурації.
Головне
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-lib) та ранера, який керує запуском тестів та збором результатів. На Android використовується інструментальний тестовий фреймворк, на iOS — XCTest.
Fastlane викликає дію screengrab, яка читає конфігураційний файл Screengrabfile. Ранер збирає тестовий APK з підключеною бібліотекою screengrab-lib, встановлює його на підключені пристрої або емулятори та запускає UI-тести, позначені анотаціями для скріншотів.
# 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 потрібні UI-фреймворк Espresso та бібліотека screengrab-lib з репозиторію Fastlane.
В build.gradle модуля додатка додається залежність screengrab-lib. Бібліотека надає клас ScreenCapturer, який робить снімок екрана в момент виклику.
// build.gradle (module: app)
androidTestImplementation(
'tools.fastlane:screengrab-lib:2.1.0'
)
UI-тест позначається анотацією Screengrab.screenshot() у потрібних точках. Кожний виклик робить знімок поточного екрана Та зберігає його із заданою назвою.
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 зберігає параметри запуску: список пристроїв, мови, часи очікування та шлях збереження. Файл зазвичай розташовується в теці fastlane поруч із Fastfile.
Локалізація — ключова можливість Screengrab, завдяки якій його найчастіше обирають. Інструмент автоматично перемикає мову додатка перед кожним запуском тестів та робить знімки всіма заданими мовами.
Мови задаються в Screengrabfile параметром locales. Для кожної мови Screengrab перевстановлює додаток з відповідними ресурсами та запускає повний цикл тестів. LocaleTestRule на Android автоматично перемикає локаль пристрою.
# 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 у потрібний формат при публікації.
CI/CD інтеграція — одна з головних переваг Screengrab. Інструмент запускається з командного рядка і не потребує графічного інтерфейсу, що робить його ідеальним для серверних збірок.
У CI-середовищі необхідно запустити емулятор Android або симулятор iOS, після чого викликати lane зі скріншотами. GitHub Actions підтримує кешування AVD, що прискорює повторні запуски.
У CI-конфігурації важливо враховувати обмеження за пам’яттю та часом. Емулятори Android потребують щонайменше 2 ГБ ОЗУ на пристрій, а повний прогін на 7 мовах і 2 пристроях займає 20–40 хвилин.
# 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 використовується крок sh з викликом bundle exec fastlane. Рекомендується запускати скріншоти вночі або за трігером після злиття в основну гілку, щоб не уповільнювати цикл розробки.
Screengrab — не єдиний інструмент для автоматизації скріншотів. Існують альтернативи з різними підходами: вбудовані засоби ОС, комерційні платформи та бібліотеки для скріншотів у коді.
| Інструмент | Платформа | Локалізація | CI/CD |
|---|---|---|---|
| Screengrab | Android, iOS | Авто | Нативно |
| ADB Shell | Android | Ручна | Через скрипти |
| XCTest | iOS | Ручна | Через xcodebuild |
| Firebase Test Lab | Android | Потребує налаштування | Так |
| 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.
Запуск на 30 мовах на 5 пристроях може займати понад годину. Рішення — розділити прогони: один для магазину всіма мовами, інший для внутрішніх потреб на двох мовах. GitHub Actions дозволяє використовувати матричні стратегії для паралельних запусків.
Емулятор Android потребує апаратної віртуалізації, яка не завжди доступна на CI-серверах. KVM має бути увімкнений, інакше емулятор не запуститься. Рішення — використовувати x86-образи без GPU-прискорення або Firebase Test Lab.
Часто задавані питання
ADB робить знімок того, що відображається на екрані в поточний момент. Screengrab інтегрується з UI-тестами, автоматично перемикає мови та пристрої і робить серію знімків за сценарієм без участі людини.
Ні, Screengrab є компонентом екосистеми Fastlane та використовує його інфраструктуру для збірки, встановлення та координації. Окремо бібліотека screengrab-lib не запускається — необхідний Fastlane як оркестратор.
На одному пристрої прогін на 10 мовах займає 15–25 хвилин. Кожна мова потребує перевстановлення додатка та повного циклу UI-тестів. Паралельний запуск на кількох пристроях скорочує час пропорційно.
Так, Screengrab підтримує iOS через XCTest та симулятори Xcode. Конфігурація аналогічна Android: додаються мови та пристрої, а UI-тести на Swift пишуться з використанням XCTest та знімків через XCUIScreenshot.
Screengrab не підтримує інкрементальний режим — кожен запуск генерує повний набір скріншотів. Рекомендується налаштувати окремий lane для CI з обмеженим списком мов, щоб не перезаписувати існуючі знімки з основного прогону.
Підсумки
Ми розробимо мобільний застосунок під ключ
IT Sectr створює застосунки для iOS та Android для стартапів і бізнесу з 2017 року. Ми проконсультуємо вас і запропонуємо найкраще рішення.
Читайте також