Snapshot (Fastlane) је алат за аутоматско генерисање снимака екрана iOS апликација на свим подржаним уређајима и језицима. За разлику од ручног креирања снимака екрана преко симулатора, Snapshot покреће UI тестове и прави снимке у одређеним тачкама апликације. Према званичној документацији Fastlane (2026), Snapshot скраћује време припреме снимака екрана за објављивање са 4 сата на 15 минута.
Главне ствари
Snapshot (Fastlane) је компонента Fastlane екосистема која аутоматизује креирање снимака екрана апликација за App Store. Покреће UI тестове на iOS симулаторима, прави снимке екрана у одређеним стањима апликације и чува их у структурираном директоријуму са исправним именима за сваки језик и уређај.
Без Snapshota, програмери ручно покрећу симулатор, отварају сваки екран, праве снимак екрана преко 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 извештај за визуелну проверу свих креираних снимака.
За рад Snapshota потребно је додати позиве 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 тестовима.
Интерфејс Snapshota укључује основне команде за покретање генерисања и напредне заставице за прецизну контролу над процесом. Главна команда 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-у одговарају тренутној верзији апликације и не садрже застареле елементе интерфејса из претходних верзија.
За рад Snapshota у CI-ју потребан је Xcode са инсталираним iOS симулаторима. У CI окружењу, Snapshot користи симулаторе из Xcode-а који се унапред учитавају на ранер. GitHub Actions пружа слике са пред-инсталираним Xcode-ом и iOS симулаторима за покретање UI тестова без додатног подешавања.
# Покретање Snapshota у 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 паралелне нити.
При коришћењу Snapshota, програмери се најчешће сусрећу са грешкама везаним за нестабилност UI тестова, проблеме са симулаторима и нетачну конфигурацију уређаја. Дијагностика грешака Snapshota почиње анализом 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. године. Саветоваћемо вас и предложити најбоље решење.
Прочитајте такође