Snapshot (Fastlane) — це інструмент для автоматичної генерації скріншотів iOS-додатків на всіх підтримуваних пристроях і мовах. На відміну від ручного створення знімків екрана через симулятор, Snapshot запускає UI-тести та робить скріншоти в заданих точках додатка. Згідно з офіційною документацією Fastlane (2026), Snapshot скорочує час підготовки скріншотів для релізу з 4 годин до 15 хвилин.
Головне
Snapshot (Fastlane) — це компонент екосистеми Fastlane, який автоматизує створення скріншотів додатка для App Store. Він запускає UI-тести на симуляторах iOS, робить знімки екрана в заданих станах додатка та зберігає їх у структурованій директорії з правильними іменами для кожної мови та пристрою.
Без Snapshot розробники вручну запускають симулятор, відкривають кожен екран, роблять скріншот через Cmd+S, перемикають мову та повторюють процес для всіх комбінацій. Автоматизація скріншотів — це ключовий елемент ASO-оптимізації, оскільки App Store вимагає актуальні знімки для кожного нового релізу, а ручне оновлення 60+ скріншотів займає години роботи.
За даними App Store Connect Documentation (2025), додатки з локалізованими скріншотами отримують на 25% більше конверсій у цільових країнах. Snapshot дозволяє командам оновлювати візуальний контент для 32 мов за один запуск, що особливо важливо для маркетингових кампаній, прив'язаних до нових функцій додатка.
Використовуйте 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: користувачі в 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 для зупинки генерації при першій помилці 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" фільтрує мови для генерації. Комбінація цих прапорців корисна для швидкої перевірки скріншотів на одному пристрої та мові без повного циклу генерації, який може займати до 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 — це автоматична генерація скріншотів при кожному релізному коміті. Snapshot запускається перед етапом Deliver, щоб гарантувати, що скріншоти в App Store відповідають поточній версії додатка та не містять застарілих елементів інтерфейсу від попередніх версій.
Для роботи Snapshot в CI потрібен Xcode з встановленими симуляторами iOS. У CI-середовищі Snapshot використовує симулятори зі складу Xcode, які попередньо завантажуються на ранер. 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, який запускає кілька симуляторів одночасно. Це скорочує час генерації скріншотів на 5 пристроїв і 10 мов з 40 хвилин до 15 хвилин при використанні 4 паралельних потоків.
При використанні 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. Реальні пристрої не потрібні та не підтримуються — всі скріншоти генеруються в середовищі симулятора, який забезпечує ідентичну роздільну здатність і кольоропередачу для вимог App Store.
Snapshot перемикає мову симулятора перед запуском UI-тестів для кожної мови з Snapfile. Додаток відображається відповідною мовою через системні налаштування локалізації. UI-тести використовують локалізовані рядки через NSLocalizedString, що гарантує коректний текст на всіх скріншотах.
Так, Snapshot підтримує macOS додатки починаючи з версії Fastlane 2.200. Для macOS вкажіть платформу в Snapfile через параметр app_platform("macOS"). Snapshot запускає UI-тести на macOS і створює скріншоти відповідно до вимог Mac App Store.
Ручний скріншот вимагає відкрити кожен екран вручну, перемкнути мову, змінити пристрій — близько 60 дій для повного набору. Snapshot автоматизує весь процес: перемикає мови, пристрої, запускає UI-тести та зберігає скріншоти з правильними іменами для App Store за 15 хвилин.
Підсумки
Ми розробимо мобільний застосунок під ключ
IT Sectr створює застосунки для iOS та Android для стартапів і бізнесу з 2017 року. Ми проконсультуємо вас і запропонуємо найкраще рішення.
Читайте також