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 изчиства съдържанието на симулатора преди началото на тестовете — включително кеш, настройки и данни от предишни сесии. Това е особено важно за тестове, които проверяват onboarding или първото стартиране на приложението. Snapshot също поддържа параметри ios_version за посочване на версията на iOS на симулатора и stop_after_first_error за спиране на генерирането при първата грешка на UI тест.
За проекти със SwiftUI е наличен параметърът use_simulator_for_language, който управлява смяната на езика чрез настройките на симулатора вместо промяна на региона на системата. Snapshot също поддържа launch_arguments за предаване на допълнителни аргументи при стартиране на приложението — полезно за тестове с различни конфигурации на backend или 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 симулатори за стартиране на 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 г. Ще ви консултираме и ще предложим най-доброто решение.
Прочетете също