Screengrab is een hulpprogramma uit het Fastlane-ecosysteem voor het automatiseren van het maken van screenshots van mobiele applicaties voor Android en iOS. In plaats van handmatig door schermen te scrollen op tientallen apparaten, voert de ontwikkelaar een commando uit en Screengrab maakt zelfstandig opnames van alle benodigde schermen. Volgens Fastlane Docs, 2026 ondersteunt het hulpmiddel tegelijkertijd tot 30 talen en elke schermresolutie die in de configuratie is ingesteld.
Belangrijkste
Screengrab — is een component van het Fastlane-ecosysteem voor het geautomatiseerd maken van screenshots van mobiele applicaties. Het hulpmiddel verscheen in 2015 als antwoord op het probleem: voor publicatie in Google Play en App Store zijn 4 tot 10 screenshots per taal vereist. Bij ondersteuning van 30 talen betekent dit 120–300 handmatig gemaakte afbeeldingen.
De ontwikkelaar start handmatig de app op een simulator of apparaat, scrolt naar het gewenste scherm, maakt een screenshot, brengt het over naar de computer, snijdt het bij en slaat het op in de juiste map. De procedure wordt herhaald voor elke taal en elke oriëntatie. Volgens Google Play Console wordt de gemiddelde app elke twee weken bijgewerkt, wat screenshots tot een regelmatige routine maakt.
Screengrab lost het probleem radicaal op: de ontwikkelaar beschrijft testsenario's in het UI-framework (Espresso voor Android, XCTest voor iOS) en Screengrab voert ze automatisch uit op alle benodigde apparaten en talen. Fastlane coördineert het proces: compileert de build, voert tests uit, verzamelt screenshots en verpakt ze in de juiste mapstructuur.
Het resultaat — honderd screenshots in 10–15 minuten in plaats van enkele uren handmatig werk. Google raadt aan om screenshots bij elke significante interfacewijziging bij te werken, en zonder automatisering wordt dit advies vaak genegeerd.
De architectuur van Screengrab is opgebouwd rond twee kerncomponenten: de client op het apparaat (screengrab-lib) en de runner die het uitvoeren van tests en het verzamelen van resultaten beheert. Op Android wordt het instrumentele testframework gebruikt, op iOS — XCTest.
Fastlane roept de actie screengrab aan, die het configuratiebestand Screengrabfile leest. De runner compileert de test-APK met de aangesloten screengrab-lib bibliotheek, installeert deze op aangesloten apparaten of emulators en voert UI-tests uit die zijn gemarkeerd met annotaties voor screenshots.
# Fastfile — beschrijving lane voor screenshots
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 creëert een hiërarchie van mappen: taal → apparaat → screenshots. De structuur voldoet volledig aan de vereisten van Google Play Console en App Store Connect. App Store vereist strikt gedefinieerde afmetingen voor elk apparaattype en Screengrab genereert afbeeldingen exact volgens specificaties.
Het hulpmiddel kan tests parallel uitvoeren op alle aangesloten apparaten en emulators. Android emulators worden automatisch gestart als ze niet actief zijn. Voor iOS gebruikt Screengrab Xcode-simulators.
Installatie van Screengrab bestaat uit twee delen: toevoegen van de bibliotheek aan het project en configuratie van het configuratiebestand. Op Android is het UI-framework Espresso en de bibliotheek screengrab-lib uit de Fastlane-repository nodig.
In build.gradle van de app-module wordt de afhankelijkheid screengrab-lib toegevoegd. De bibliotheek biedt de klasse ScreenCapturer die op het moment van aanroep een screenshot maakt.
// build.gradle (module: app)
androidTestImplementation(
'tools.fastlane:screengrab-lib:2.1.0'
)
De UI-test wordt gemarkeerd met de annotatie Screengrab.screenshot() op de benodigde punten. Elke aanroep maakt een screenshot van het huidige scherm en slaat deze op met de opgegeven naam.
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")
// Acties: klik op de inlogknop
Screengrab.screenshot("login_screen")
}
}
Het bestand Screengrabfile slaat de uitvoeringsparameters op: lijst van apparaten, talen, time-outs en opslagpad. Het bestand bevindt zich meestal in de fastlane-map naast Fastfile.
Lokalisatie — de belangrijkste mogelijkheid van Screengrab, waarvoor het het vaakst wordt gekozen. Het hulpmiddel schakelt automatisch de taal van de app vóór elke testuitvoering en maakt opnames in alle opgegeven talen.
Talen worden ingesteld in Screengrabfile met de parameter locales. Voor elke taal herinstalleert Screengrab de app met de bijbehorende bronnen en voert een volledige testcyclus uit. LocaleTestRule op Android schakelt automatisch de locale van het apparaat.
# Screengrabfile
locales [
"ru-RU",
"en-US",
"de-DE",
"fr-FR",
"es-ES",
"ja-JP",
"ko-KR"
]
Screengrab maakt directories volgens het schema: screenshots/{locale}/{device_name}/{screenshot_name}.png. Deze structuur komt direct overeen met de vereisten van Google Play, waardoor screenshots via Fastlane deliver met één commando kunnen worden geüpload.
Voor iOS verwacht App Store Connect screenshots in een platte structuur per taal. Fastlane converteert automatisch de Screengrab-hiërarchie naar het vereiste formaat bij publicatie.
CI/CD integratie is een van de belangrijkste voordelen van Screengrab. Het hulpmiddel wordt gestart vanaf de commandoregel en vereist geen grafische interface, wat het ideaal maakt voor server-builds.
In een CI-omgeving moet de Android-emulator of iOS-simulator worden gestart, waarna de lane met screenshots wordt aangeroepen. GitHub Actions ondersteunt caching van AVD, wat herhaalde uitvoeringen versnelt.
In de CI-configuratie is het belangrijk rekening te houden met geheugen- en tijdsbeperkingen. Android emulators vereisen minimaal 2 GB RAM per apparaat en een volledige uitvoering op 7 talen en 2 apparaten duurt 20–40 minuten.
# Fastfile — lane voor CI met time-outs
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
Voor Jenkins wordt de stap sh gebruikt met de aanroep bundle exec fastlane. Het wordt aanbevolen om screenshots 's nachts of na een trigger na een merge in de hoofd branch uit te voeren om de ontwikkelcyclus niet te vertragen.
Screengrab is niet de enige tool voor het automatiseren van screenshots. Er zijn alternatieven met verschillende benaderingen: ingebouwde OS-hulpmiddelen, commerciële platforms en bibliotheken voor screenshots in code.
| Tool | Platform | Lokalisatie | CI/CD |
|---|---|---|---|
| Screengrab | Android, iOS | Automatisch | Native |
| ADB Shell | Android | Handmatig | Via scripts |
| XCTest | iOS | Handmatig | Via xcodebuild |
| Firebase Test Lab | Android | Configuratie vereist | Ja |
| Appium | Cross-platform | Handmatig | Via WebDriver |
ADB Shell geeft volledige controle, maar vereist het schrijven van scripts voor elk scenario. XCTest is ingebouwd in Xcode, maar beheert lokalisatie niet automatisch. Firebase Test Lab voert tests uit op echte apparaten in de cloud, wat maximale dekking biedt, maar vereist betaling per minuut.
Screengrab wint door de combinatie: Fastlane beheert de volledige levenscyclus van de build — van compilatie tot publicatie. Google Play accepteert de Screengrab-mapstructuur direct via Fastlane deliver.
Bij het werken met Screengrab komen ontwikkelaars het vaakst een aantal terugkerende problemen tegen. Kennis van typische fouten verkort de debuggingstijd bij de eerste uitvoering.
Het probleem treedt op wanneer Screengrab een opname maakt vóór voltooiing van het renderen van het scherm. Oplossing — voeg een vertraging Thread.sleep() toe vóór de screenshot()-aanroep of gebruik IdlingResource van Espresso om te wachten op asynchrone bewerkingen.
De bibliotheek screengrab-lib moet overeenkomen met de Fastlane-versie. Fastlane wordt maandelijks bijgewerkt en de oude bibliotheek ondersteunt mogelijk nieuwe configuratieparameters niet. Oplossing — synchroniseer versies via Gemfile en gradle.properties.
Uitvoering op 30 talen op 5 apparaten kan meer dan een uur duren. Oplossing — splits uitvoeringen: één voor de winkel in alle talen, een andere voor interne behoeften in twee talen. GitHub Actions maakt gebruik van een strategiematrix voor parallelle uitvoeringen.
De Android-emulator vereist hardwarevirtualisatie, die niet altijd beschikbaar is op CI-servers. KVM moet zijn ingeschakeld, anders start de emulator niet. Oplossing — gebruik x86-images zonder GPU-versnelling of Firebase Test Lab.
Veelgestelde vragen
ADB maakt een opname van wat er op dat moment op het scherm wordt weergegeven. Screengrab integreert met UI-tests, schakelt automatisch talen en apparaten en maakt een reeks opnames volgens scenario zonder menselijke tussenkomst.
Nee, Screengrab is een component van het Fastlane-ecosysteem en gebruikt de infrastructuur voor compilatie, installatie en coördinatie. De bibliotheek screengrab-lib werkt niet apart — Fastlane is nodig als orkestrator.
Op één apparaat duurt een uitvoering in 10 talen 15–25 minuten. Elke taal vereist herinstallatie van de app en een volledige cyclus van UI-tests. Parallelle uitvoering op meerdere apparaten verkort de tijd evenredig.
Ja, Screengrab ondersteunt iOS via XCTest en Xcode-simulators. Configuratie is vergelijkbaar met Android: talen en apparaten worden toegevoegd en UI-tests in Swift worden geschreven met XCTest en opnames via XCUIScreenshot.
Screengrab ondersteunt geen incrementele modus — elke uitvoering genereert een volledige set screenshots. Het wordt aanbevolen om een aparte lane voor CI in te stellen met een beperkte lijst van talen om bestaande opnames van de hoofd uitvoering niet te overschrijven.
Samenvatting
We ontwikkelen een mobiele applicatie turnkey
IT Sectr creëert sinds 2017 iOS- en Android-applicaties voor startups en bedrijven. We adviseren u en stellen de beste oplossing voor.
Lees ook