Screengrab, Android ve iOS’ta mobil uygulamalar için ekran görüntüsü oluşturmayı otomatikleştiren Fastlane ekosisteminden bir araçtır. Onlarca cihazda ekranları manuel olarak kaydırmak yerine, geliştirici tek bir komut çalıştırır ve Screengrab bağımsız olarak gereken tüm ekranları yakalar. Fastlane Docs, 2026’ya göre, araç aynı anda 30 dile ve yapılandırmada belirtilen herhangi bir ekran çözünürlüğüne kadar destekler.
Önemli Noktalar
Screengrab, mobil uygulamaların otomatik ekran görüntüsü oluşturması için tasarlanmış Fastlane ekosisteminin bir bileşenidir. Araç, 2015 yılında şu soruna yanıt olarak ortaya çıktı: Google Play ve App Store’da yayınlamak için her dil için 4 ila 10 ekran görüntüsü gerekir. 30 dil desteğiyle bu, 120–300 manuel çekim anlamına gelir.
Bir geliştirici, uygulamayı bir simülatör veya cihazda manuel olarak başlatır, istenen ekrana kaydırır, ekran görüntüsü alır, bilgisayara aktarır, kırpar ve doğru klasöre kaydeder. Prosedür her dil ve her yönlendirme için tekrarlanır. Google Play Console’a göre, ortalama bir uygulama iki haftada bir güncellenir ve bu da ekran görüntülerini düzenli bir rutin haline getirir.
Screengrab sorunu kökten çözer: geliştirici bir UI çerçevesi (Android için Espresso, iOS için XCTest) kullanarak test senaryolarını tanımlar ve Screengrab bunları gereken tüm cihazlarda ve dillerde otomatik olarak çalıştırır. Fastlane süreci koordine eder: uygulamayı derler, testleri çalıştırır, ekran görüntülerini toplar ve bunları gerekli klasör yapısına paketler.
Sonuç — birkaç saatlik manuel çalışma yerine 10–15 dakikada yüz ekran görüntüsü. Google, önemli her arayüz değişikliğinde ekran görüntülerinin güncellenmesini önerir ve otomasyon olmadan bu öneri genellikle göz ardı edilir.
Screengrab’in mimarisi, iki temel bileşen etrafında inşa edilmiştir: cihazdaki bir istemci (screengrab-lib) ve test yürütmesini ve sonuç toplamayı yöneten bir çalıştırıcı. Android’de enstrümante test çerçevesini kullanır; iOS’ta — XCTest.
Fastlane, Screengrabfile yapılandırma dosyasını okuyan screengrab eylemini çağırır. Çalıştırıcı, bağlı screengrab-lib kitaplığıyla test APK’sını derler, bağlı cihazlara veya emülatörlere yükler ve ekran görüntüleri için ek açıklamalarla işaretlenmiş UI testlerini çalıştırır.
# Fastfile — ekran görüntüleri için lane açıklaması
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 bir klasör hiyerarşisi oluşturur: dil → cihaz → ekran görüntüleri. Yapı, Google Play Console ve App Store Connect gereksinimleriyle tamamen eşleşir. App Store, her cihaz türü için kesin olarak tanımlanmış boyutlar gerektirir ve Screengrab, özelliklere tam olarak uygun çekimler yapar.
Araç, bağlı tüm cihazlarda ve emülatörlerde paralel olarak test çalıştırabilir. Android emülatörleri aktif değillerse otomatik olarak başlatılır. iOS için Screengrab, Xcode simülatörlerini kullanır.
Screengrab kurulumu iki bölümden oluşur: kitaplığı projeye ekleme ve yapılandırma dosyasını yapılandırma. Android’de, Espresso UI çerçevesi ve Fastlane deposundan screengrab-lib kitaplığı gereklidir.
Uygulama modülünün build.gradle dosyasına screengrab-lib bağımlılığı eklenir. Kitaplık, çağrı anında ekran görüntüsü alan ScreenCapturer sınıfını sağlar.
// build.gradle (module: app)
androidTestImplementation(
'tools.fastlane:screengrab-lib:2.1.0'
)
Bir UI testi, gerekli noktalarda Screengrab.screenshot() ek açıklamasıyla işaretlenir. Her çağrı, geçerli ekranı yakalar ve belirtilen adla kaydeder.
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")
// Eylemler: giriş düğmesine dokun
Screengrab.screenshot("login_screen")
}
}
Screengrabfile dosyası, başlatma parametrelerini saklar: cihaz listesi, diller, zaman aşımları ve kaydetme yolu. Dosya genellikle Fastfile’ın yanındaki fastlane klasöründe bulunur.
Yerelleştirme, Screengrab’in temel özelliğidir ve en sık seçilmesinin ana nedenidir. Araç, her test çalıştırmasından önce uygulama dilini otomatik olarak değiştirir ve belirtilen tüm dillerde ekran görüntüleri alır.
Diller, Screengrabfile’da locales parametresi kullanılarak ayarlanır. Her dil için Screengrab, uygulamayı ilgili kaynaklarla yeniden yükler ve tam test döngüsünü çalıştırır. Android’de LocaleTestRule, cihazın yerel ayarını otomatik olarak değiştirir.
# Screengrabfile
locales [
"ru-RU",
"en-US",
"de-DE",
"fr-FR",
"es-ES",
"ja-JP",
"ko-KR"
]
Screengrab, şu şemaya göre dizinler oluşturur: screenshots/{locale}/{device_name}/{screenshot_name}.png. Bu yapı, Google Play gereksinimleriyle doğrudan eşleşir ve Fastlane deliver aracılığıyla tek bir komutla ekran görüntülerinin yüklenmesine olanak tanır.
iOS için, App Store Connect ekran görüntülerini dile göre düz bir yapıda bekler. Fastlane, yayınlama sırasında Screengrab hiyerarşisini otomatik olarak gerekli biçime dönüştürür.
CI/CD entegrasyonu, Screengrab’in ana avantajlarından biridir. Araç, komut satırından çalışır ve grafik arayüz gerektirmez, bu da onu sunucu derlemeleri için ideal kılar.
Bir CI ortamında, bir Android emülatörü veya iOS simülatörü başlatmanız ve ardından ekran görüntüleriyle lane’i çağırmanız gerekir. GitHub Actions, AVD önbelleklemesini destekleyerek tekrarlanan çalıştırmaları hızlandırır.
CI yapılandırmasında bellek ve zaman sınırlamalarını dikkate almak önemlidir. Android emülatörleri cihaz başına en az 2 GB RAM gerektirir ve 7 dilde ve 2 cihazda tam bir çalıştırma 20–40 dakika sürer.
# Fastfile — zaman aşımlı CI için lane
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 için, bundle exec fastlane çağrısıyla sh adımı kullanılır. Geliştirme döngüsünü yavaşlatmamak için ekran görüntülerinin gece veya ana dalda birleştirmeden sonra tetikleyiciyle çalıştırılması önerilir.
Screengrab, ekran görüntüsü otomasyonu için tek araç değildir. Farklı yaklaşımlara sahip alternatifler mevcuttur: yerleşik işletim sistemi araçları, ticari platformlar ve kod içi ekran görüntüsü kitaplıkları.
| Araç | Platform | Yerelleştirme | CI/CD |
|---|---|---|---|
| Screengrab | Android, iOS | Otomatik | Yerel |
| ADB Shell | Android | Manuel | Komut dosyalarıyla |
| XCTest | iOS | Manuel | xcodebuild ile |
| Firebase Test Lab | Android | Yapılandırma gerektirir | Evet |
| Appium | Platformlar arası | Manuel | WebDriver ile |
ADB Shell tam kontrol sağlar ancak her senaryo için komut dosyası yazılmasını gerektirir. XCTest, Xcode’a entegredir ancak yerelleştirmeyi otomatik olarak yönetmez. Firebase Test Lab, bulutta gerçek cihazlarda testler çalıştırarak maksimum kapsama alanı sağlar ancak dakika başına ücret alır.
Screengrab kombinasyon sayesinde kazanır: Fastlane, derlemeden yayınlamaya kadar tüm derleme yaşam döngüsünü yönetir. Google Play, Fastlane deliver aracılığıyla Screengrab klasör yapısını doğrudan kabul eder.
Screengrab ile çalışırken geliştiriciler en çok birkaç tekrarlanan sorunla karşılaşır. Yaygın hataları bilmek, ilk çalıştırmada hata ayıklama süresini kısaltır.
Sorun, Screengrab ekran oluşturma tamamlanmadan önce ekran görüntüsü aldığında ortaya çıkar. Çözüm, screenshot() çağırmadan önce bir Thread.sleep() gecikmesi eklemek veya eşzamansız işlemleri beklemek için Espresso’nun IdlingResource’unu kullanmaktır.
screengrab-lib sürümü, Fastlane sürümüyle eşleşmelidir. Fastlane aylık olarak güncellenir ve eski bir kitaplık yeni yapılandırma parametrelerini desteklemeyebilir. Çözüm, sürümleri Gemfile ve gradle.properties aracılığıyla senkronize etmektir.
5 cihazda 30 dilde çalıştırma bir saatten fazla sürebilir. Çözüm, çalıştırmaları bölmektir: biri tüm dillerde mağaza için, diğeri iki dilde iç ihtiyaçlar için. GitHub Actions, paralel çalıştırmalar için matris stratejileri kullanılmasına izin verir.
Android emülatörü, CI sunucularında her zaman bulunmayan donanım sanallaştırması gerektirir. KVM etkinleştirilmelidir, aksi takdirde emülatör başlatılmaz. Çözüm, GPU hızlandırması olmadan x86 görüntüleri veya Firebase Test Lab kullanmaktır.
Sıkça Sorulan Sorular
ADB, ekranda o anda görüntüleneni yakalar. Screengrab, UI testleriyle entegre olur, otomatik olarak dilleri ve cihazları değiştirir ve insan müdahalesi olmadan bir senaryoya göre bir dizi ekran görüntüsü alır.
Hayır, Screengrab, Fastlane ekosisteminin bir bileşenidir ve derleme, yükleme ve koordinasyon için altyapısını kullanır. screengrab-lib kitaplığı ayrı olarak çalıştırılamaz — orkestratör olarak Fastlane gereklidir.
Tek bir cihazda, 10 dilde bir çalıştırma 15–25 dakika sürer. Her dil, uygulamanın yeniden yüklenmesini ve tam bir UI test döngüsünü gerektirir. Birden çok cihazda paralel çalıştırma, süreyi orantılı olarak azaltır.
Evet, Screengrab, XCTest ve Xcode simülatörleri aracılığıyla iOS’u destekler. Yapılandırma Android’e benzer: diller ve cihazlar eklenir ve Swift’teki UI testleri XCTest kullanılarak XCUIScreenshot ile yakalanarak yazılır.
Screengrab artımlı modu desteklemez — her çalıştırma tam bir ekran görüntüsü kümesi oluşturur. Ana çalıştırmadaki mevcut çekimlerin üzerine yazılmasını önlemek için sınırlı bir dil listesiyle CI için ayrı bir lane ayarlanması önerilir.
Özet
Anahtar teslim bir mobil uygulama geliştireceğiz
IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.
Ayrıca okuyun