Screengrab (Fastlane) — ما هو، إمكانياته وأتمتة لقطات الشاشة

المؤلف: IT Sectr نُشر: 2026-04-15 وقت القراءة: 8 دق

Screengrab هي أداة مساعدة من بيئة Fastlane لأتمتة إنشاء لقطات شاشة التطبيقات المحمولة على Android و iOS. بدلاً من التمرير اليدوي عبر الشاشات على عشرات الأجهزة، يقوم المطور بتشغيل أمر واحد، ويقوم Screengrab بالتقاط جميع الشاشات المطلوبة بشكل مستقل. وفقاً لـ Fastlane Docs, 2026، تدعم الأداة ما يصل إلى 30 لغة في نفس الوقت وأي دقات شاشة محددة في التكوين.

النقاط الرئيسية

  • Screengrab — أداة Fastlane للإنشاء التلقائي للقطات الشاشة للتطبيقات المحمولة على Android و iOS.
  • الأتمتة تستبدل الإنشاء اليدوي لمئات اللقطات بأمر واحد في الطرفية.
  • التوطين — إنشاء متزامن للقطات الشاشة بعشرات اللغات دون إعدادات إضافية.
  • CI/CD — التكامل مع أي خطوط توزيع: 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) ومشغّل يدير تنفيذ الاختبارات وجمع النتائج. على Android، يتم استخدام إطار الاختبارات المأثورة؛ على iOS — XCTest.

دورة حياة تشغيل واحد

يستدعي Fastlane إجراء screengrab، الذي يقرأ ملف التكوين Screengrabfile. يقوم المشغّل ببناء 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 (module: 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 بتبديل الإعدادات الإقليمية للجهاز تلقائياً.

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 في خط توزيع CI/CD

يعد التكامل مع CI/CD واحداً من المزايا الرئيسية لـ Screengrab. تعمل الأداة من سطر الأوامر ولا تتطلب واجهة رسومية، مما يجعلها مثالية لبناءات الخادم.

GitHub Actions

في بيئة CI، يلزم تشغيل محاكي Android أو محاكي iOS، ثم استدعاء lane مع اللقطات. يدعم GitHub Actions التخزين المؤقت لـ AVD، مما يسرع عمليات التشغيل المتكررة.

معلمات لـ CI

في تكوين CI، من المهم مراعاة قيود الذاكرة والوقت. تتطلب محاكيات Android على الأقل 2 جيجابايت من ذاكرة RAM للجهاز الواحد، ويستغرق تشغيل كامل على 7 لغات وجهازين ما بين 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. يوصى بتشغيل اللقطات ليلاً أو عن طريق مشغّل بعد الدمج في الفرع الرئيسي لتجنب إبطاء دورة التطوير.

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 كموزع.

كم من الوقت يستغرق إنشاء لقطات شاشة بـ 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 وغيرها من خطوط التوزيع بدون واجهة رسومية.
  • هيكل الملفات الناتجة يتطابق مع متطلبات Google Play و App Store للتحميل المباشر.
  • المرونة — دعم أجهزة متعددة واتجاهات شاشة وسيناريوهات اختبار مخصصة.
  • توفير — مائة لقطة شاشة في 15 دقيقة بدلاً من عدة ساعات من العمل اليدوي مع كل تحديث.

سنقوم بتطوير تطبيق جوال جاهز

تقدم IT Sectr تطبيقات iOS وAndroid للشركات الناشئة والشركات منذ عام 2017. سوف نقدم لك النصح ونقترح أفضل حل.

مناقشة المشروع

اقرأ أيضًا