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 (модул: 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 GB RAM-а по уређају, а потпуно покретање на 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. године. Саветоваћемо вас и предложити најбоље решење.
Прочитајте такође