Snapshot (Fastlane) ابزاری برای تولید خودکار اسکرینشاتهای برنامههای iOS در تمام دستگاهها و زبانهای پشتیبانیشده است. برخلاف ایجاد دستی تصاویر صفحه از طریق شبیهساز، Snapshot تستهای UI را اجرا میکند و در نقاط مشخصی از برنامه اسکرینشات میگیرد. طبق مستندات رسمی Fastlane (2026)، Snapshot زمان آمادهسازی اسکرینشاتها برای انتشار را از ۴ ساعت به ۱۵ دقیقه کاهش میدهد.
نکات اصلی
Snapshot (Fastlane) — مؤلفهای از اکوسیستم Fastlane است که ایجاد اسکرینشاتهای برنامه را برای App Store خودکار میکند. این ابزار تستهای UI را روی شبیهسازهای iOS اجرا میکند، در حالتهای مشخصی از برنامه اسکرینشات میگیرد و آنها را در پوشهای ساختاریافته با نامهای صحیح برای هر زبان و دستگاه ذخیره میکند.
بدون Snapshot، توسعهدهندگان به صورت دستی شبیهساز را راهاندازی میکنند، هر صفحه را باز میکنند، با Cmd+S اسکرینشات میگیرند، زبان را تغییر میدهند و این فرآیند را برای همه ترکیبها تکرار میکنند. خودکارسازی اسکرینشاتها یک عنصر کلیدی بهینهسازی ASO است، زیرا App Store برای هر نسخه جدید به تصاویر بهروز نیاز دارد و بهروزرسانی دستی بیش از ۶۰ اسکرینشات ساعتها زمان میبرد.
طبق App Store Connect Documentation (2025)، برنامههایی با اسکرینشاتهای محلیسازیشده ۲۵٪ تبدیل بیشتری در کشورهای هدف دارند. Snapshot به تیمها امکان میدهد محتوای بصری را برای ۳۲ زبان در یک بار اجرا بهروزرسانی کنند که به ویژه برای کمپینهای بازاریابی مرتبط با ویژگیهای جدید برنامه مهم است.
از Snapshot در هر پروژهای که در App Store منتشر میشود استفاده کنید — این یک ابزار استاندارد برای تیمهایی است که به دنبال خودکارسازی فرآیند انتشار و بهبود ASO هستند.
فرآیند تولید اسکرینشاتها در Snapshot از چند مرحله تشکیل شده است: آمادهسازی تستهای UI، پیکربندی Snapfile، راهاندازی شبیهسازها و جمعآوری نتایج. Snapshot به ترتیب هر شبیهساز را برای دستگاهها و زبانهای مشخص شده راهاندازی میکند، تستهای UI را اجرا میکند و در نقاط فراخوانی تابع snapshot() تصاویر میگیرد.
پس از اتمام همه تستها، Snapshot اسکرینشاتها را در پوشه screenshots/[Language]/ با نامهای منطبق با الزامات App Store جمعآوری میکند. هر اسکرینشات با وضوح متناسب با دستگاه هدف در قالب PNG ذخیره میشود. Snapshot همچنین یک گزارش HTML برای بررسی بصری تمام تصاویر ایجاد شده تولید میکند.
برای کار Snapshot، باید فراخوانیهای snapshot() را در کد XCTest تستهای UI برنامه اضافه کنید. تابع در لحظه فراخوانی از وضعیت فعلی صفحه اسکرینشات میگیرد. توسعهدهنده snapshot() را پس از هر اقدام کلیدی قرار میدهد: باز کردن صفحه، وارد کردن داده، پیمایش بین برگهها یا نمایش نتایج.
مثال ساختار تست UI: تست وارد برنامه میشود، برای تصویر صفحه ورود snapshot("01-LoginScreen") را فراخوانی میکند، سپس به صفحه اصلی میرود و برای تصویر صفحه اصلی snapshot("02-HomeScreen") را فراخوانی میکند. XCTest — چارچوب Apple برای تست واحد و UI برنامههای iOS است که مستقیماً در Xcode یکپارچه شده است.
// تست UI برای 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 تغییر میدهد. برنامه با محلیسازی مربوطه راهاندازی میشود و تستهای UI در آن زبان اجرا میشوند. محلیسازی اسکرینشاتها یک عامل حیاتی ASO است: کاربران در ۷۵٪ موارد برنامههایی با محتوا به زبان مادری خود ترجیح میدهند، از جمله اسکرینشاتها در 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 برای توقف تولید در اولین خطای تست UI پشتیبانی میکند.
برای پروژههای SwiftUI، پارامتر use_simulator_for_language در دسترس است که تغییر زبان را از طریق تنظیمات شبیهساز به جای تغییر منطقه سیستم مدیریت میکند. Snapshot همچنین از launch_arguments برای ارسال آرگومانهای اضافی هنگام راهاندازی برنامه پشتیبانی میکند — برای تست با پیکربندیهای مختلف بکاند یا تستهای A/B مفید است.
رابط Snapshot شامل دستورات پایه برای اجرای تولید و فلگهای پیشرفته برای کنترل دقیق بر فرآیند است. دستور اصلی fastlane snapshot چرخه کامل تولید اسکرینشاتها را بر اساس پیکربندی Snapfile اجرا میکند.
دستور fastlane snapshot --devices "iPhone 15" اسکرینشاتها را فقط برای دستگاههای مشخص شده تولید میکند و بقیه را از Snapfile نادیده میگیرد. --languages "en-US,ru" زبانها را برای تولید فیلتر میکند. ترکیب این فلگها برای بررسی سریع اسکرینشاتها روی یک دستگاه و زبان بدون چرخه کامل تولید که میتواند با ۵ دستگاه و ۱۰ زبان تا ۳۰ دقیقه طول بکشد مفید است.
# تولید سریع برای یک دستگاه
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 از پیش نصب شده برای اجرای تستهای UI بدون پیکربندی اضافی ارائه میدهد.
# اجرای 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 که چندین شبیهساز را همزمان اجرا میکند. این زمان تولید اسکرینشاتها را برای ۵ دستگاه و ۱۰ زبان از ۴۰ دقیقه به ۱۵ دقیقه با استفاده از ۴ رشته موازی کاهش میدهد.
هنگام استفاده از Snapshot، توسعهدهندگان اغلب با خطاهای مربوط به ناپایداری تستهای UI، مشکلات شبیهسازها و پیکربندی نادرست دستگاهها مواجه میشوند. تشخیص خطاهای Snapshot با تجزیه و تحلیل گزارش HTML که شامل اسکرینشاتهای هر مرحله و اطلاعات مربوط به تستهای ناموفق است آغاز میشود.
خطای «Failed to build scheme MyAppUITests» زمانی رخ میدهد که طرح تستهای UI برای ساخت پیکربندی نشده باشد. راهحل: مطمئن شوید که در Xcode یک Scheme جداگانه برای تستهای UI ایجاد شده و گزینه Shared برای دسترسی از خط فرمان فعال است. Xcode Scheme — پیکربندی ساخت، تست و اجرای برنامه است که مجموعه اهداف و پارامترها را برای هر اقدام تعریف میکند.
خطای «No simulators found matching...» نشاندهنده عدم وجود شبیهساز با نوع دستگاه یا نسخه iOS مشخص شده است. راهحل: xcrun simctl create را برای ایجاد شبیهساز اجرا کنید یا یک دستگاه موجود از لیست xcrun simctl list را مشخص کنید. xcrun simctl — ابزار خط فرمان Xcode برای مدیریت شبیهسازهای iOS: ایجاد، حذف، راهاندازی و تشخیص.
در خطای «UI test failure» تست UI در یکی از زبانها یا دستگاهها عبور نمیکند. راهحل: 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 کار میکند. دستگاههای واقعی نه required هستند و نه پشتیبانی میشوند — تمام اسکرینشاتها در محیط شبیهساز تولید میشوند که وضوح و بازتولید رنگ یکسانی را برای الزامات App Store فراهم میکند.
Snapshot قبل از اجرای تستهای UI برای هر زبان از Snapfile، زبان شبیهساز را تغییر میدهد. برنامه از طریق تنظیمات محلیسازی سیستم به زبان مربوطه نمایش داده میشود. تستهای UI از رشتههای محلیسازیشده از طریق NSLocalizedString استفاده میکنند که متن صحیح را در تمام اسکرینشاتها تضمین میکند.
بله، Snapshot از برنامههای macOS از نسخه Fastlane 2.200 پشتیبانی میکند. برای macOS، پلتفرم را در Snapfile از طریق پارامتر app_platform("macOS") مشخص کنید. Snapshot تستهای UI را روی macOS اجرا میکند و اسکرینشاتهایی مطابق با الزامات Mac App Store ایجاد میکند.
اسکرینشات دستی نیاز به باز کردن هر صفحه به صورت دستی، تغییر زبان، تغییر دستگاه دارد — حدود ۶۰ عمل برای مجموعه کامل. Snapshot کل فرآیند را خودکار میکند: زبانها و دستگاهها را تغییر میدهد، تستهای UI را اجرا میکند و اسکرینشاتها را با نامهای صحیح برای App Store در ۱۵ دقیقه ذخیره میکند.
خلاصه
ما یک اپلیکیشن موبایل به صورت کلید در دست توسعه خواهیم داد
IT Sectr از سال 2017 برنامههای iOS و Android را برای استارتاپها و کسبوکارها ایجاد میکند. ما به شما مشاوره میدهیم و بهترین راهحل را پیشنهاد خواهیم کرد.
همچنین بخوانید