Screengrab (Fastlane) — چیست، قابلیت‌ها و خودکارسازی اسکرین‌شات‌ها

نویسنده: IT Sectr منتشر شده: 2026-04-15 زمان مطالعه: 8 دقیقه

Screengrab ابزاری از اکوسیستم Fastlane برای خودکارسازی ایجاد اسکرین‌شات برنامه‌های موبایل برای Android و iOS است. به جای پیمایش دستی صفحه‌ها روی ده‌ها دستگاه، توسعه‌دهنده یک دستور اجرا می‌کند و Screengrab به طور مستقل از تمام صفحه‌های مورد نیاز عکس می‌گیرد. به گفته Fastlane Docs, 2026، این ابزار همزمان تا 30 زبان و هر رزولوشن صفحه‌ای که در پیکربندی تنظیم شده را پشتیبانی می‌کند.

خلاصه

  • Screengrab — ابزار Fastlane برای ایجاد خودکار اسکرین‌شات برنامه‌های موبایل Android و iOS.
  • خودکارسازی ایجاد دستی صدها اسکرین‌شات را با یک دستور در ترمینال جایگزین می‌کند.
  • بومی‌سازی — تولید همزمان اسکرین‌شات به ده‌ها زبان بدون تنظیمات اضافی.
  • CI/CD — ادغام با هر pipeline: Jenkins, GitHub Actions, GitLab CI.
  • انعطاف‌پذیری — پشتیبانی از چندین دستگاه، جهت‌گیری و زبان در یک اجرا.

Screengrab چیست و چرا به آن نیاز داریم

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 حول دو مؤلفه کلیدی ساخته شده است: کلاینت روی دستگاه (screengrab-lib) و runner که اجرای تست‌ها و جمع‌آوری نتایج را مدیریت می‌کند. در Android از فریم‌ورک تست ابزاری و در iOS از XCTest استفاده می‌شود.

چرخه حیات یک اجرا

Fastlane اکشن screengrab را فراخوانی می‌کند که فایل پیکربندی Screengrabfile را می‌خواند. Runner یک APK تست با کتابخانه screengrab-lib متصل می‌سازد، آن را روی دستگاه‌های متصل یا شبیه‌سازها نصب می‌کند و تست‌های UI که با حاشیه‌نویسی برای اسکرین‌شات مشخص شده‌اند را اجرا می‌کند.

ruby
# 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

نصب Screengrab از دو بخش تشکیل شده است: افزودن کتابخانه به پروژه و پیکربندی فایل پیکربندی. در Android به فریم‌ورک UI Espresso و کتابخانه screengrab-lib از مخزن Fastlane نیاز است.

افزودن وابستگی‌ها

در build.gradle ماژول برنامه، وابستگی screengrab-lib اضافه می‌شود. کتابخانه کلاس ScreenCapturer را فراهم می‌کند که در لحظه فراخوانی از صفحه عکس می‌گیرد.

groovy
// build.gradle (ماژول: app)
androidTestImplementation(
  'tools.fastlane:screengrab-lib:2.1.0'
)

نوشتن تست با اسکرین‌شات

تست UI با حاشیه‌نویسی Screengrab.screenshot() در نقاط مورد نیاز مشخص می‌شود. هر فراخوانی از صفحه فعلی عکس گرفته و آن را با نام مشخص شده ذخیره می‌کند.

kotlin
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

فایل Screengrabfile پارامترهای اجرا را ذخیره می‌کند: لیست دستگاه‌ها، زبان‌ها، زمان‌های انتظار و مسیر ذخیره‌سازی. فایل معمولاً در پوشه fastlane در کنار Fastfile قرار دارد.

بومی‌سازی اسکرین‌شات‌ها و چندین زبان

بومی‌سازی — قابلیت کلیدی Screengrab که اغلب به خاطر آن انتخاب می‌شود. این ابزار به طور خودکار زبان برنامه را قبل از هر اجرای تست تغییر می‌دهد و در تمام زبان‌های مشخص شده عکس می‌گیرد.

تنظیم زبان‌ها

زبان‌ها در Screengrabfile با پارامتر locales تنظیم می‌شوند. برای هر زبان، Screengrab برنامه را با منابع مربوطه دوباره نصب می‌کند و یک چرخه کامل تست را اجرا می‌کند. LocaleTestRule در Android به طور خودکار locale دستگاه را تغییر می‌دهد.

ruby
# 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 را در زمان انتشار به فرمت مورد نیاز تبدیل می‌کند.

ادغام Screengrab در pipeline CI/CD

CI/CD ادغام یکی از مزایای اصلی Screengrab است. این ابزار از خط فرمان اجرا می‌شود و به رابط گرافیکی نیاز ندارد که آن را برای بیلدهای سروری ایده‌آل می‌کند.

GitHub Actions

در محیط CI باید شبیه‌ساز Android یا iOS را راه‌اندازی کرده و سپس lane با اسکرین‌شات‌ها را فراخوانی کرد. GitHub Actions از کش AVD پشتیبانی می‌کند که اجراهای مکرر را سرعت می‌بخشد.

پارامترهای CI

در پیکربندی CI مهم است که محدودیت‌های حافظه و زمان در نظر گرفته شود. شبیه‌سازهای Android حداقل به 2 گیگابایت RAM برای هر دستگاه نیاز دارند و اجرای کامل روی 7 زبان و 2 دستگاه 20–40 دقیقه طول می‌کشد.

ruby
# 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 Pipeline

برای Jenkins از مرحله sh با فراخوانی bundle exec fastlane استفاده می‌شود. توصیه می‌شود اسکرین‌شات‌ها را شب یا پس از trigger پس از merge به شاخه اصلی اجرا کنید تا چرخه توسعه کند نشود.

Screengrab در مقابل جایگزین‌ها: مقایسه ابزارها

Screengrab — تنها ابزار خودکارسازی اسکرین‌شات نیست. جایگزین‌هایی با رویکردهای مختلف وجود دارند: ابزارهای داخلی سیستم‌عامل، پلتفرم‌های تجاری و کتابخانه‌های اسکرین‌شات در کد.

ابزارپلتفرمبومی‌سازیCI/CD
ScreengrabAndroid, iOSخودکاربومی
ADB ShellAndroidدستیاز طریق اسکریپت
XCTestiOSدستیاز طریق xcodebuild
Firebase Test LabAndroidنیاز به تنظیماتبله
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.

زمان اجرای طولانی در CI

اجرا روی 30 زبان در 5 دستگاه ممکن است بیش از یک ساعت طول بکشد. راه‌حل — تقسیم اجراها: یکی برای فروشگاه به تمام زبان‌ها، دیگری برای نیازهای داخلی به دو زبان. GitHub Actions امکان استفاده از ماتریس استراتژی برای اجراهای موازی را فراهم می‌کند.

مشکلات شبیه‌ساز در CI

شبیه‌ساز Android نیاز به مجازی‌سازی سخت‌افزاری دارد که همیشه در سرورهای CI در دسترس نیست. KVM باید فعال باشد وگرنه شبیه‌ساز راه نمی‌افتد. راه‌حل — استفاده از تصاویر x86 بدون شتاب GPU یا Firebase Test Lab.

سوالات متداول

Screengrab چه تفاوتی با اسکرین‌شات معمولی از طریق ADB دارد؟

ADB از آنچه در حال حاضر روی صفحه نمایش داده می‌شود عکس می‌گیرد. Screengrab با تست‌های UI ادغام می‌شود، به طور خودکار زبان‌ها و دستگاه‌ها را تغییر می‌دهد و مجموعه‌ای از تصاویر را طبق سناریو بدون دخالت انسان می‌گیرد.

آیا می‌توان از Screengrab بدون Fastlane استفاده کرد؟

خیر، Screengrab جزئی از اکوسیستم Fastlane است و از زیرساخت آن برای ساخت، نصب و هماهنگی استفاده می‌کند. کتابخانه screengrab-lib به تنهایی اجرا نمی‌شود — Fastlane به عنوان orchestrator لازم است.

تولید اسکرین‌شات به 10 زبان چقدر زمان می‌برد؟

روی یک دستگاه، اجرا روی 10 زبان 15–25 دقیقه طول می‌کشد. هر زبان نیاز به نصب مجدد برنامه و یک چرخه کامل تست UI دارد. اجرای موازی روی چندین دستگاه زمان را به نسبت کاهش می‌دهد.

آیا Screengrab از برنامه‌های iOS پشتیبانی می‌کند؟

بله، Screengrab از iOS از طریق XCTest و شبیه‌سازهای Xcode پشتیبانی می‌کند. پیکربندی مشابه Android است: زبان‌ها و دستگاه‌ها اضافه می‌شوند و تست‌های UI در Swift با استفاده از XCTest و تصاویر از طریق XCUIScreenshot نوشته می‌شوند.

چگونه اسکرین‌شات‌ها را فقط برای زبان‌های جدید به‌روز کنیم؟

Screengrab از حالت افزایشی پشتیبانی نمی‌کند — هر اجرا مجموعه کاملی از اسکرین‌شات‌ها را تولید می‌کند. توصیه می‌شود یک lane جداگانه برای CI با لیست محدودی از زبان‌ها تنظیم کنید تا تصاویر موجود از اجرای اصلی بازنویسی نشوند.

نتیجه‌گیری

  • Screengrab — کامپوننت Fastlane برای خودکارسازی اسکرین‌شات برنامه‌های موبایل Android و iOS.
  • خودکارسازی ایجاد دستی صدها اسکرین‌شات را با یک دستور در ترمینال جایگزین می‌کند.
  • بومی‌سازی — ابزار به طور خودکار زبان برنامه را قبل از هر اجرای تست تغییر می‌دهد.
  • CI/CD — ادغام با Jenkins, GitHub Actions, GitLab CI و سایر pipelineهای بدون رابط گرافیکی.
  • ساختار فایل‌های خروجی مطابق با الزامات Google Play و App Store برای آپلود مستقیم است.
  • انعطاف‌پذیری — پشتیبانی از چندین دستگاه، جهت‌گیری صفحه و سناریوهای تست سفارشی.
  • صرفه‌جویی — صد اسکرین‌شات در 15 دقیقه به جای چندین ساعت کار دستی در هر به‌روزرسانی.

ما یک اپلیکیشن موبایل به صورت کلید در دست توسعه خواهیم داد

IT Sectr از سال 2017 برنامه‌های iOS و Android را برای استارتاپ‌ها و کسب‌وکارها ایجاد می‌کند. ما به شما مشاوره می‌دهیم و بهترین راه‌حل را پیشنهاد خواهیم کرد.

بحث درباره پروژه

همچنین بخوانید