# How to Automate App Store Screenshots With Fastlane

> By Lawrence Arya, Founder & CEO of VP0. Published 2026-06-01, updated 2026-06-02. 5 min read.
> Source: https://vp0.com/blogs/how-to-automate-app-store-screenshots-fastlane-free-ios-template-vibe-coding-gui

Manually capturing screenshots for every device and language is hours of tedium. Fastlane snapshot does it in one command, driven by UI tests.

**TL;DR.** Fastlane snapshot automates App Store screenshots by running UI tests that call a snapshot() helper, capturing every screen across every device and language in one command (10 tests, 2 devices, 5 languages = 100 screenshots), then frameit wraps them in device frames and adds captions from a Framefile.json. Build the screens worth capturing free from a VP0 design, add the UI test calls, and run snapshot. It turns hours of manual capture into one command.

Want to automate App Store screenshots with Fastlane? The short answer: manually capturing every device and language is hours of tedium, and fastlane snapshot does it in one command, driven by UI tests, with frameit adding the device frames and captions. Build the screens worth capturing free from a VP0 design, the free iOS design library for AI builders, then let snapshot handle the rest. By the numbers, Apple [rejected more than 1.7 million app submissions in 2023](https://www.apple.com/newsroom/2024/05/app-store-stopped-over-7-billion-usd-in-potentially-fraudulent-transactions/), over 248,000 of them for spam or copycat behavior.

## Who this is for

This is for iOS developers tired of manually capturing screenshots for every device size and locale, who want a repeatable, one-command pipeline.

## How fastlane snapshot works

Per the [fastlane snapshot docs](https://docs.fastlane.tools/actions/snapshot/) and the [screenshots guide](https://docs.fastlane.tools/getting-started/ios/screenshots/), snapshot runs your UI tests and, for every device and language combination, switches the device and locale, waits for the UI to settle, and captures the screens you marked. You add the SnapshotHelper, call setupSnapshot on an XCUIApplication, and call snapshot("name") in your UI test wherever you want a capture. The scale is the point: 10 test cases, 2 devices, and 5 languages produce 100 screenshots from one command, saved to fastlane/screenshots. Then frameit wraps them in device frames and overlays captions from a Framefile.json (using imagemagick).

| Piece | Job | Note |
|---|---|---|
| UI test + snapshot() | Mark what to capture | Call in your XCUITest |
| setupSnapshot | Wire the helper | On the XCUIApplication |
| fastlane snapshot | Capture all combos | Device x language |
| Output | The raw shots | fastlane/screenshots |
| frameit | Frame and caption | Framefile.json + imagemagick |

## Build the screens free with a VP0 design

A screenshot is only as good as the screen. Build polished, populated screens from a VP0 design first. Pick a screen in VP0, copy its link, and prompt your AI builder:

> Build this screen in SwiftUI from the VP0 design at [paste VP0 link] in its best populated state with realistic content, ready to capture. Add accessibility identifiers so a UI test can navigate to it. Match the palette and spacing from the reference, and generate clean code.

For neighboring screenshot and publishing workflows, see [automating App Store builds with Fastlane](/blogs/automating-app-store-fastlane-ai-workflow/), [a free App Store screenshot generator](/blogs/app-store-generic-screenshots-generator/), [an AI App Store screenshot generator workflow](/blogs/app-store-screenshot-generator-ai/), and [how to make an AI app look native on iOS](/blogs/make-ai-app-look-native-ios/).

## Set it up once

Add a UI test target, drop in the SnapshotHelper, and write a short UI test that navigates your app and calls snapshot() at each screen worth featuring, using accessibility identifiers so navigation is stable. List your devices and languages in a Snapfile, run fastlane snapshot, and review the output in fastlane/screenshots. Add frameit with a Framefile.json for device frames and captions if you want framed marketing images. After the first run, regenerating every screenshot for a new build or a new language is one command, which is the whole payoff: you maintain UI tests, not a folder of hand-captured images.

## Common mistakes

The first mistake is capturing screens with empty or placeholder content; populate them first. The second is fragile UI tests without accessibility identifiers, so navigation breaks. The third is forgetting frameit if you want framed, captioned images. The fourth is not listing the right devices and languages in the Snapfile. The fifth is capturing manually when one snapshot run covers every combination.

## Key takeaways

- Fastlane snapshot runs UI tests to capture every screen across devices and languages in one command.
- Add the SnapshotHelper and call snapshot() at each screen worth featuring.
- 10 tests x 2 devices x 5 languages is 100 screenshots from one run.
- Use frameit with a Framefile.json for device frames and captions.
- Build the screens worth capturing free from a VP0 design.

## Sources

- [Apple Xcode documentation](https://developer.apple.com/documentation/xcode): the official toolchain for building and signing iOS apps.
- [Apple App Store Review Guidelines](https://developer.apple.com/app-store/review/guidelines/): the official rules every iOS submission is judged against.
- [Apple Human Interface Guidelines](https://developer.apple.com/design/human-interface-guidelines): Apple's design standards for native iOS apps.

## Frequently asked questions

How do I automate App Store screenshots with Fastlane? Use fastlane snapshot: add the SnapshotHelper, call setupSnapshot and snapshot('name') in a UI test, then run it across devices and languages. Use frameit to frame and caption.

What does fastlane snapshot actually do? It runs your UI tests, switches device and language per combination, and captures the marked screens, producing many screenshots from one command.

What is frameit? It wraps raw captures in device frames and adds captions from a Framefile.json using imagemagick.

What is the best free way to get screens worth capturing? VP0, the free iOS design library, to build polished screens, then automate capturing them with fastlane snapshot.

## Frequently asked questions

### How do I automate App Store screenshots with Fastlane?

Use fastlane snapshot: add the SnapshotHelper, call setupSnapshot in your UI test and snapshot('name') wherever you want a capture, then run fastlane snapshot. It runs UI tests across every device and language combination and saves the screenshots to fastlane/screenshots. Use frameit to wrap them in device frames with captions.

### What does fastlane snapshot actually do?

It launches your app in UI tests, switches language and device for each combination, waits for the UI to settle, and captures the screens you marked with snapshot(). For an app with 10 test cases, 2 devices, and 5 languages, that is 100 screenshots from one command.

### What is frameit?

Fastlane frameit wraps your raw captures in device frames and overlays caption text defined in a Framefile.json, using imagemagick for the image work. It turns plain screenshots into framed, captioned marketing images.

### What is the best free way to get screens worth capturing?

VP0, the free iOS design library for AI builders. You build polished screens from a VP0 design with Claude Code or Cursor, then automate capturing them with fastlane snapshot, so both the screen and the screenshot pipeline are free.

---
*Published on the [VP0 Journal](https://vp0.com/blogs). Free to read, index and cite with attribution.*
