Screengrab je nástroj z ekosystému Fastlane pro automatizaci vytváření snímků obrazovky mobilních aplikací pro Android a iOS. Místo ručního procházení obrazovek na desítkách zařízení vývojář spustí jeden příkaz a Screengrab samostatně pořídí snímky všech potřebných obrazovek. Podle Fastlane Docs, 2026 nástroj současně podporuje až 30 jazyků a libovolná rozlišení obrazovek nastavená v konfiguraci.
Hlavní
Screengrab — je komponenta ekosystému Fastlane určená pro automatizované vytváření snímků obrazovky mobilních aplikací. Nástroj se objevil v roce 2015 jako odpověď na problém: pro publikování v Google Play a App Store je vyžadováno 4 až 10 snímků obrazovky pro každý jazyk. Při podpoře 30 jazyků to znamená 120–300 ručně pořízených snímků.
Vývojář ručně spouští aplikaci na simulátoru nebo zařízení, prochází na potřebnou obrazovku, pořídí snímek obrazovky, přenese jej do počítače, ořízne a uloží do správné složky. Postup se opakuje pro každý jazyk a každou orientaci. Podle Google Play Console se průměrná aplikace aktualizuje jednou za dva týdny, což ze snímků obrazovky dělá pravidelnou rutinu.
Screengrab řeší problém radikálně: vývojář popíše scénáře testů v UI frameworku (Espresso pro Android, XCTest pro iOS) a Screengrab je spouští na všech potřebných zařízeních a jazycích automaticky. Fastlane koordinuje proces: sestaví build, spustí testy, shromáždí snímky obrazovky a zabalí je do potřebné struktury složek.
Výsledek — sto snímků obrazovky za 10–15 minut místo několika hodin ruční práce. Google doporučuje aktualizovat snímky obrazovky při každé významné změně rozhraní a bez automatizace je tato rada často ignorována.
Architektura Screengrab je postavena kolem dvou klíčových komponent: klienta na zařízení (screengrab-lib) a runneru, který řídí spouštění testů a sběr výsledků. Na Androidu se používá instrumentální testovací framework, na iOS — XCTest.
Fastlane zavolá akci screengrab, která přečte konfigurační soubor Screengrabfile. Runner sestaví testovací APK s připojenou knihovnou screengrab-lib, nainstaluje jej na připojená zařízení nebo emulátory a spustí UI testy označené anotacemi pro snímky obrazovky.
# Fastfile — popis lane pro snímky obrazovky
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 vytváří hierarchii složek: jazyk → zařízení → snímky obrazovky. Struktura plně odpovídá požadavkům Google Play Console a App Store Connect. App Store vyžaduje přesně definované rozměry pro každý typ zařízení a Screengrab generuje snímky přesně podle specifikací.
Nástroj umí spouštět testy paralelně na všech připojených zařízeních a emulátorech. Android emulátory se spouštějí automaticky, pokud nejsou aktivní. Pro iOS Screengrab používá simulátory Xcode.
Instalace Screengrab se skládá ze dvou částí: přidání knihovny do projektu a konfigurace konfiguračního souboru. Na Androidu je potřeba UI framework Espresso a knihovna screengrab-lib z repozitáře Fastlane.
V build.gradle modulu aplikace se přidá závislost screengrab-lib. Knihovna poskytuje třídu ScreenCapturer, která pořídí snímek obrazovky v okamžiku volání.
// build.gradle (modul: app)
androidTestImplementation(
'tools.fastlane:screengrab-lib:2.1.0'
)
UI test je označen anotací Screengrab.screenshot() v potřebných bodech. Každé volání pořídí snímek aktuální obrazovky a uloží jej se zadaným názvem.
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")
// Akce: klikněte na tlačítko přihlášení
Screengrab.screenshot("login_screen")
}
}
Soubor Screengrabfile ukládá parametry spuštění: seznam zařízení, jazyky, časové limity a cestu pro uložení. Soubor se obvykle nachází ve složce fastlane vedle Fastfile.
Lokalizace — klíčová schopnost Screengrab, pro kterou je nejčastěji vybírán. Nástroj automaticky přepíná jazyk aplikace před každým spuštěním testů a pořizuje snímky ve všech zadaných jazycích.
Jazyky se zadávají v Screengrabfile parametrem locales. Pro každý jazyk Screengrab znovu nainstaluje aplikaci s odpovídajícími prostředky a spustí celý cyklus testů. LocaleTestRule na Androidu automaticky přepíná locale zařízení.
# Screengrabfile
locales [
"ru-RU",
"en-US",
"de-DE",
"fr-FR",
"es-ES",
"ja-JP",
"ko-KR"
]
Screengrab vytváří adresáře podle schématu: screenshots/{locale}/{device_name}/{screenshot_name}.png. Tato struktura přímo odpovídá požadavkům Google Play, což umožňuje nahrávat snímky obrazovky přes Fastlane deliver jedním příkazem.
Pro iOS App Store Connect očekává snímky obrazovky v ploché struktuře podle jazyků. Fastlane automaticky převede hierarchii Screengrab do požadovaného formátu při publikování.
CI/CD integrace je jednou z hlavních výhod Screengrab. Nástroj se spouští z příkazového řádku a nevyžaduje grafické rozhraní, což jej činí ideálním pro serverové sestavení.
V CI prostředí je nutné spustit emulátor Androidu nebo simulátor iOS, poté zavolat lane se snímky obrazovky. GitHub Actions podporuje cachování AVD, což urychluje opakovaná spuštění.
V CI konfiguraci je důležité zohlednit omezení paměti a času. Android emulátory vyžadují alespoň 2 GB RAM na zařízení a úplné spuštění na 7 jazycích a 2 zařízeních trvá 20–40 minut.
# Fastfile — lane pro CI s časovými limity
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
Pro Jenkins se používá krok sh s voláním bundle exec fastlane. Doporučuje se spouštět snímky obrazovky v noci nebo po triggeru po mergi do hlavní větve, aby se nezpomaloval vývojový cyklus.
Screengrab — není jediný nástroj pro automatizaci snímků obrazovky. Existují alternativy s různými přístupy: vestavěné nástroje OS, komerční platformy a knihovny pro snímky obrazovky v kódu.
| Nástroj | Platforma | Lokalizace | CI/CD |
|---|---|---|---|
| Screengrab | Android, iOS | Automatická | Nativně |
| ADB Shell | Android | Ruční | Přes skripty |
| XCTest | iOS | Ruční | Přes xcodebuild |
| Firebase Test Lab | Android | Vyžaduje nastavení | Ano |
| Appium | Multiplatformní | Ruční | Přes WebDriver |
ADB Shell dává plnou kontrolu, ale vyžaduje psaní skriptů pro každý scénář. XCTest je vestavěný v Xcode, ale neřídí lokalizaci automaticky. Firebase Test Lab spouští testy na skutečných zařízeních v cloudu, což poskytuje maximální pokrytí, ale vyžaduje platbu za každou minutu.
Screengrab vyhrává díky kombinaci: Fastlane řídí celý životní cyklus sestavení — od kompilace po publikování. Google Play přímo přijímá strukturu složek Screengrab přes Fastlane deliver.
Při práci s Screengrab se vývojáři nejčastěji setkávají s několika opakujícími se problémy. Znalost typických chyb zkracuje dobu ladění při prvním spuštění.
Problém nastává, když Screengrab pořídí snímek před dokončením vykreslení obrazovky. Řešení — přidat zpoždění Thread.sleep() před voláním screenshot() nebo použít IdlingResource z Espressa pro čekání na asynchronní operace.
Knihovna screengrab-lib musí odpovídat verzi Fastlane. Fastlane se aktualizuje měsíčně a stará knihovna nemusí podporovat nové konfigurační parametry. Řešení — synchronizovat verze přes Gemfile a gradle.properties.
Spuštění na 30 jazycích na 5 zařízeních může trvat déle než hodinu. Řešení — rozdělit spuštění: jedno pro obchod ve všech jazycích, druhé pro interní potřeby ve dvou jazycích. GitHub Actions umožňuje použít matici strategií pro paralelní spuštění.
Emulátor Androidu vyžaduje hardwarovou virtualizaci, která není vždy dostupná na CI serverech. KVM musí být zapnutý, jinak emulátor nenastartuje. Řešení — použít x86 obrazy bez GPU akcelerace nebo Firebase Test Lab.
Často kladené otázky
ADB pořídí snímek toho, co je právě zobrazeno na obrazovce. Screengrab se integruje s UI testy, automaticky přepíná jazyky a zařízení a pořizuje sérii snímků podle scénáře bez účasti člověka.
Ne, Screengrab je komponentou ekosystému Fastlane a využívá jeho infrastrukturu pro sestavení, instalaci a koordinaci. Knihovna screengrab-lib samostatně neběží — je potřeba Fastlane jako orchestrátor.
Na jednom zařízení spuštění v 10 jazycích trvá 15–25 minut. Každý jazyk vyžaduje přeinstalaci aplikace a celý cyklus UI testů. Paralelní spuštění na více zařízeních čas úměrně zkracuje.
Ano, Screengrab podporuje iOS přes XCTest a simulátory Xcode. Konfigurace je podobná Androidu: přidají se jazyky a zařízení a UI testy v Swiftu se píší pomocí XCTest a snímků přes XCUIScreenshot.
Screengrab nepodporuje inkrementální režim — každé spuštění generuje kompletní sadu snímků obrazovky. Doporučuje se nastavit samostatný lane pro CI s omezeným seznamem jazyků, aby se nepřepisovaly stávající snímky z hlavního spuštění.
Shrnutí
Vyvineme mobilní aplikaci na klíč
IT Sectr vytváří aplikace pro iOS a Android pro startupy a podniky od roku 2017. Poradíme vám a navrhneme nejlepší řešení.
Přečtěte si také