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) و runner که اجرای تستها و جمعآوری نتایج را مدیریت میکند. در Android از فریمورک تست ابزاری و در iOS از XCTest استفاده میشود.
Fastlane اکشن screengrab را فراخوانی میکند که فایل پیکربندی Screengrabfile را میخواند. Runner یک 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 به طور خودکار locale دستگاه را تغییر میدهد.
# 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 گیگابایت 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 استفاده میشود. توصیه میشود اسکرینشاتها را شب یا پس از trigger پس از merge به شاخه اصلی اجرا کنید تا چرخه توسعه کند نشود.
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 به عنوان orchestrator لازم است.
روی یک دستگاه، اجرا روی 10 زبان 15–25 دقیقه طول میکشد. هر زبان نیاز به نصب مجدد برنامه و یک چرخه کامل تست UI دارد. اجرای موازی روی چندین دستگاه زمان را به نسبت کاهش میدهد.
بله، Screengrab از iOS از طریق XCTest و شبیهسازهای Xcode پشتیبانی میکند. پیکربندی مشابه Android است: زبانها و دستگاهها اضافه میشوند و تستهای UI در Swift با استفاده از XCTest و تصاویر از طریق XCUIScreenshot نوشته میشوند.
Screengrab از حالت افزایشی پشتیبانی نمیکند — هر اجرا مجموعه کاملی از اسکرینشاتها را تولید میکند. توصیه میشود یک lane جداگانه برای CI با لیست محدودی از زبانها تنظیم کنید تا تصاویر موجود از اجرای اصلی بازنویسی نشوند.
نتیجهگیری
ما یک اپلیکیشن موبایل به صورت کلید در دست توسعه خواهیم داد
IT Sectr از سال 2017 برنامههای iOS و Android را برای استارتاپها و کسبوکارها ایجاد میکند. ما به شما مشاوره میدهیم و بهترین راهحل را پیشنهاد خواهیم کرد.
همچنین بخوانید