Snapshot (Fastlane) هي أداة للإنشاء التلقائي للقطات الشاشة لتطبيقات iOS على جميع الأجهزة واللغات المدعومة. على عكس الإنشاء اليدوي للقطات الشاشة عبر المحاكي، يقوم Snapshot بتشغيل اختبارات واجهة المستخدم والتقاط الصور في نقاط محددة من التطبيق. وفقًا لوثائق Fastlane الرسمية (2026)، يعمل Snapshot على تقليل وقت تحضير لقطات الشاشة للإصدار من 4 ساعات إلى 15 دقيقة.
الرئيسية
Snapshot (Fastlane) هو مكون من نظام Fastlane البيئي الذي يؤتمتة إنشاء لقطات شاشة التطبيق لـ App Store. يقوم بتشغيل اختبارات واجهة المستخدم على محاكيات iOS، ويلتقط لقطات الشاشة في حالات محددة للتطبيق ويحفظها في دليل منظم بأسماء صحيحة لكل لغة وجهاز.
بدون Snapshot، يقوم المطورون يدويًا بتشغيل المحاكي، وفتح كل شاشة، والتقاط لقطة شاشة عبر Cmd+S، وتبديل اللغة وتكرار العملية لجميع التركيبات. أتمتة لقطات الشاشة هي عنصر رئيسي في تحسين ASO، حيث يتطلب App Store لقطات محدثة لكل إصدار جديد، ويستغرق التحديث اليدوي لأكثر من 60 لقطة ساعات من العمل.
وفقًا لوثائق App Store Connect (2025)، تحصل التطبيقات ذات اللقطات المترجمة على 25% زيادة في التحويلات في البلدان المستهدفة. يتيح Snapshot للفرق تحديث المحتوى المرئي لـ 32 لغة في تشغيل واحد، وهو أمر مهم بشكل خاص لحملات التسويق المرتبطة بميزات التطبيق الجديدة.
استخدم Snapshot في أي مشروع يتم نشره على App Store — إنها الأداة القياسية للفرق التي تسعى إلى أتمتة عملية الإصدار وتحسين ASO.
عملية إنشاء لقطات الشاشة في Snapshot تتكون من عدة مراحل: تحضير اختبارات واجهة المستخدم، إعداد Snapfile، تشغيل المحاكيات وجمع النتائج. يقوم Snapshot بتشغيل كل محاكي بالتسلسل للأجهزة واللغات المحددة، وينفذ اختبارات واجهة المستخدم ويلتقط الصور في النقاط التي يتم فيها استدعاء الدالة snapshot().
بعد اكتمال جميع الاختبارات، يقوم Snapshot بتجميع لقطات الشاشة في دليل screenshots/[Language]/ بأسماء تتوافق مع متطلبات App Store. يتم حفظ كل لقطة شاشة بتنسيق PNG بدقة تتوافق مع الجهاز المستهدف. يقوم Snapshot أيضًا بإنشاء تقرير HTML للتحقق البصري من جميع اللقطات المنشأة.
لكي يعمل Snapshot، يجب إضافة استدعاءات snapshot() إلى كود XCTest لاختبارات واجهة المستخدم للتطبيق. تقوم الدالة بالتقاط لقطة شاشة للحالة الحالية للشاشة في لحظة الاستدعاء. يضع المطور snapshot() بعد كل إجراء رئيسي: فتح شاشة، إدخال بيانات، التنقل عبر علامات التبويب أو عرض النتائج.
مثال على بنية اختبار واجهة المستخدم: يقوم الاختبار بتسجيل الدخول إلى التطبيق، يستدعي snapshot("01-LoginScreen") لالتقاط شاشة تسجيل الدخول، ثم ينتقل إلى الشاشة الرئيسية ويستدعي snapshot("02-HomeScreen") لالتقاط الشاشة الرئيسية. XCTest هو إطار Apple للاختبارات الوحدوية واختبارات واجهة المستخدم لتطبيقات iOS، المدمج مباشرة في Xcode.
// اختبار واجهة المستخدم لـ Snapshot
- (void)testScreenshots {
XCUIApplication *app = [[XCUIApplication alloc] init];
[app launch];
snapshot(@"01-LoginScreen");
[app.textFields[@"email"] tap];
[app.textFields[@"email"] typeText:@"user@company.com"];
[app.buttons[@"Login"] tap];
snapshot(@"02-HomeScreen");
}
يقوم Snapshot تلقائيًا بتبديل لغة المحاكي لكل لغة محددة في Snapfile. يتم تشغيل التطبيق مع التوطين المقابل، ويتم تنفيذ اختبارات واجهة المستخدم بتلك اللغة. توطين لقطات الشاشة هو عامل حاسم في ASO: يفضل المستخدمون في 75% من الحالات التطبيقات التي تحتوي على محتوى بلغتهم الأم، بما في ذلك لقطات الشاشة في App Store.
لكل جهاز، يقوم Snapshot بتشغيل محاكي منفصل بقطر الشاشة المقابل. جميع الأحجام المطلوبة من App Store مدعومة: iPhone 6.5 بوصة (iPhone 15 Pro Max) و5.5 بوصة (iPhone 8 Plus) و6.7 بوصة (iPhone 15 Plus) وiPad 12.9 بوصة. محاكي iOS هو محاكاة برمجية لجهاز iOS مدمجة في Xcode لاختبار التطبيقات بدون جهاز فعلي.
# إنشاء لقطات الشاشة لجميع الأجهزة واللغات
fastlane snapshot
# إنشاء فقط للأجهزة المحددة
fastlane snapshot --devices "iPhone 15 Pro Max,iPhone 15"
# مسح قبل إنشاء لقطات الشاشة
fastlane snapshot --reinstall_app --erase_simulator
Snapfile هو ملف إعدادات Fastlane الذي يحدد معلمات إنشاء لقطات الشاشة: قائمة الأجهزة واللغات ووقت الانتظار وخيارات التشغيل. يتم تخزين Snapfile في دليل fastlane ويتم إدارته بإصدارات مع المشروع، مما يضمن إعدادًا موحدًا لجميع أعضاء الفريق.
# Snapfile — إعداد لقطات الشاشة
devices([
"iPhone 15 Pro Max",
"iPhone 15",
"iPad Pro (12.9-inch)"
])
languages([
"en-US",
"ru",
"de-DE"
])
scheme("MyAppUITests")
output_directory("./screenshots")
clear_previous_screenshots(true)
reinstall_app(true)
erase_simulator(true)
المعلمة clear_previous_screenshots تحذف لقطات الشاشة القديمة قبل بدء الإنشاء — مما يمنع تراكم اللقطات القديمة في دليل الإخراج. reinstall_app يعيد تثبيت التطبيق على المحاكي قبل كل تشغيل، مما يضمن جلسة نظيفة دون تأثير من الاختبارات السابقة على الإنشاء الجديد.
المعلمة erase_simulator تمسح محتويات المحاكي قبل بدء الاختبارات — بما في ذلك ذاكرة التخزين المؤقت والإعدادات وبيانات الجلسات السابقة. هذا مهم بشكل خاص للاختبارات التي تتحقق من مرحلة الترحيب أو أول تشغيل للتطبيق. يدعم Snapshot أيضًا معلمة ios_version لتحديد إصدار iOS على المحاكي و stop_after_first_error لإيقاف الإنشاء عند أول خطأ في اختبار واجهة المستخدم.
لمشاريع SwiftUI، تتوفر معلمة use_simulator_for_language التي تتحكم في تبديل اللغة من خلال إعدادات المحاكي بدلاً من تغيير منطقة النظام. يدعم Snapshot أيضًا launch_arguments لتمرير وسائط إضافية عند تشغيل التطبيق — مفيد للاختبارات بتكوينات خلفية مختلفة أو اختبارات A/B.
واجهة Snapshot تتضمن أوامر أساسية لتشغيل الإنشاء وأعلام موسعة للتحكم الدقيق في العملية. الأمر الرئيسي fastlane snapshot يقوم بتشغيل دورة الإنشاء الكاملة للقطات الشاشة بناءً على إعدادات Snapfile.
الأمر fastlane snapshot --devices "iPhone 15" يقوم بإنشاء لقطات الشاشة فقط للأجهزة المحددة، متجاهلاً الباقي من Snapfile. --languages "en-US,ru" يقوم بتصفية اللغات للإنشاء. مزيج هذه الأعلام مفيد للتحقق السريع من لقطات الشاشة على جهاز ولغة واحدة دون دورة إنشاء كاملة، والتي قد تستغرق حتى 30 دقيقة لـ 5 أجهزة و 10 لغات.
# إنشاء سريع لجهاز واحد
fastlane snapshot --devices "iPhone 15" --languages "en-US"
# إنشاء مع إعادة تثبيت التطبيق
fastlane snapshot --reinstall_app --erase_simulator
# إنشاء مع تقرير HTML
fastlane snapshot --output_directory "./build/screenshots"
العلم --output_directory يغير دليل حفظ النتائج. افتراضيًا، يحفظ Snapshot لقطات الشاشة في fastlane/screenshots. للتكامل مع Deliver، حدد دليلاً يتطابق مع بنية Deliverfile المتوقعة — مما يسمح بتمرير لقطات الشاشة مباشرة إلى عملية النشر دون نسخ يدوي للملفات بين المجلدات.
| معلمة Snapshot | الغرض | مثال |
|---|---|---|
| devices | قائمة الأجهزة للإنشاء | iPhone 15, iPad Pro |
| languages | قائمة لغات التوطين | en-US, ru, de-DE |
| reinstall_app | إعادة تثبيت التطبيق قبل الاختبارات | true / false |
| erase_simulator | مسح المحاكي قبل التشغيل | true / false |
| clear_previous | حذف لقطات الشاشة القديمة | true / false |
Snapshot في CI/CD هو الإنشاء التلقائي للقطات الشاشة مع كل commit إصدار. يتم تشغيل Snapshot قبل مرحلة Deliver لضمان أن لقطات الشاشة في App Store تتطابق مع إصدار التطبيق الحالي ولا تحتوي على عناصر واجهة قديمة من الإصدارات السابقة.
لكي يعمل Snapshot في CI، يلزم وجود Xcode مع محاكيات iOS مثبتة. في بيئات CI، يستخدم Snapshot محاكيات من Xcode التي يتم تحميلها مسبقًا على runner. GitHub Actions يوفر صورًا مع Xcode مثبت مسبقًا ومحاكيات iOS لتشغيل اختبارات واجهة المستخدم دون إعداد إضافي.
# تشغيل Snapshot في بيئة CI
fastlane snapshot --skip_open_summary \
--output_directory "$CI_PROJECT_DIR/screenshots"
# حفظ لقطات الشاشة كقطع أثرية لـ CI
cp -R "screenshots/" "$CI_PROJECT_DIR/artifacts/"
المعلمة --skip_open_summary تعطل فتح تقرير HTML بعد الإنشاء — في بيئات CI، الواجهة الرسومية غير متاحة. يتم حفظ نتائج الإنشاء في دليل يتم تمريره كقطعة أثرية لمهمة CI ثم يستخدمه Deliver للتحميل إلى App Store مع الإصدار.
لتسريع خط أنابيب CI، استخدم الإنشاء المتوازي للقطات الشاشة عبر concurrent_simulators — معلمة Snapfile التي تشغل عدة محاكيات في وقت واحد. هذا يقلل وقت إنشاء لقطات الشاشة لـ 5 أجهزة و 10 لغات من 40 دقيقة إلى 15 دقيقة عند استخدام 4 تدفقات متوازية.
عند استخدام Snapshot، يواجه المطورون غالبًا أخطاء تتعلق بعدم استقرار اختبارات واجهة المستخدم ومشاكل المحاكيات وتكوين الأجهزة غير الصحيح. تشخيص الأخطاء في Snapshot يبدأ بتحليل تقرير HTML الذي يحتوي على لقطات شاشة لكل خطوة ومعلومات عن الاختبارات الفاشلة.
يحدث خطأ "Failed to build scheme MyAppUITests" عندما لا يتم تكوين مخطط اختبارات واجهة المستخدم للبناء. الحل: تأكد من إنشاء Scheme منفصل لاختبارات واجهة المستخدم في Xcode وأن خيار Shared مفعل للوصول من سطر الأوامر. Xcode Scheme هو تكوين بناء واختبار وتشغيل التطبيق الذي يحدد مجموعة الأهداف والمعلمات لكل إجراء.
يشير خطأ "No simulators found matching..." إلى عدم وجود محاكي بنوع الجهاز أو إصدار iOS المحدد. الحل: قم بتشغيل xcrun simctl create لإنشاء محاكي أو حدد جهازًا موجودًا من قائمة xcrun simctl list. xcrun simctl هي أداة سطر أوامر Xcode لإدارة محاكيات iOS: الإنشاء والحذف والتشغيل والتشخيص.
بالنسبة لخطأ "UI test failure" يفشل اختبار واجهة المستخدم في إحدى اللغات أو الأجهزة. الحل: قم بتشغيل Snapshot مع العلم --stop_after_first_error للتوقف عند أول خطأ، وحلل لقطة الشاشة في تقرير HTML وأصلح الاختبار. سبب شائع هو اختلاف طول النص عبر اللغات، مما يؤدي إلى تداخل عناصر الواجهة أو خروجها عن حدود الشاشة.
الأسئلة الشائعة
يدعم Snapshot جميع أجهزة عائلة iPhone وiPad، بما في ذلك iPhone 15 Pro Max (6.7 بوصة) وiPhone 15 (6.1 بوصة) وiPad Pro 12.9 بوصة وiPad mini. لكل جهاز، يقوم Snapshot بتحميل جلود المحاكي المقابلة من Xcode، مما يضمن دقة دقة الشاشة.
لا، يعمل Snapshot حصريًا مع محاكيات iOS من Xcode. لا تتطلب الأجهزة الحقيقية ولا يتم دعمها — يتم إنشاء جميع لقطات الشاشة في بيئة المحاكي، التي توفر دقة واستنساخ ألوان متطابقين لمتطلبات App Store.
يقوم Snapshot بتبديل لغة المحاكي قبل تشغيل اختبارات واجهة المستخدم لكل لغة من Snapfile. يتم عرض التطبيق باللغة المقابلة من خلال إعدادات توطين النظام. اختبارات واجهة المستخدم تستخدم السلاسل المترجمة عبر NSLocalizedString، مما يضمن نصًا صحيحًا في جميع لقطات الشاشة.
نعم، يدعم Snapshot تطبيقات macOS بدءًا من إصدار Fastlane 2.200. لنظام macOS، حدد النظام الأساسي في Snapfile عبر المعلمة app_platform("macOS"). يقوم Snapshot بتشغيل اختبارات واجهة المستخدم على macOS وينشئ لقطات الشاشة وفقًا لمتطلبات Mac App Store.
تتطلب لقطة الشاشة اليدوية فتح كل شاشة يدويًا وتبديل اللغات وتغيير الأجهزة — حوالي 60 إجراءً لمجموعة كاملة. Snapshot يؤتمتة العملية بأكملها: يبدل اللغات والأجهزة ويشغل اختبارات واجهة المستخدم ويحفظ لقطات الشاشة بأسماء صحيحة لـ App Store في 15 دقيقة.
الخلاصة
سنقوم بتطوير تطبيق جوال جاهز
تقدم IT Sectr تطبيقات iOS وAndroid للشركات الناشئة والشركات منذ عام 2017. سوف نقدم لك النصح ونقترح أفضل حل.
اقرأ أيضًا