How to Automate App Store Screenshots With Claude Code

DavidDavid September 2, 2026 8 min read
A laptop showing a terminal running a screenshot script beside a printed sheet of framed iPhone screenshots on a desk
Original image, App Store Launch Club

What Automating Your Screenshots Actually Means

Automating App Store screenshots means replacing a manual routine (open the simulator, take a screenshot, drop it into Figma, add a device frame, type a caption, export, repeat for every size) with a script you run once per release. It does not mean an AI generates your screenshots from nothing. The pipeline has three layers: capture the raw screens from a real build, composite them with a device frame and caption text, then export the exact pixel sizes each store size class needs. Each layer is a separate, ownable script, and Claude Code is good at writing and rerunning all three once you describe the screens you want.

The payoff is not speed on day one, it is speed on every release after that. The first time you build this pipeline takes about the same effort as a manual pass through Figma. The second time, and every time after, it takes one command.

Layer 1: Capture Raw Screens With a Maestro Flow

For a one-off screenshot, the built-in simulator command is enough: xcrun simctl io booted screenshot raw.png captures whatever is on screen in your booted iOS simulator, in PNG by default. That works fine if you are grabbing a single frame by hand.

For a repeatable pipeline, you want something that drives the app to each screen and takes the shot automatically, because 'open the app, log in, navigate to screen four, screenshot' is not something you want to do by hand every release. Maestro is the tool for this: it runs plain YAML flows against your simulator or device, and its takeScreenshot command writes a PNG straight to a folder you point it at with MAESTRO_TESTS_DIR. Expo's own EAS Workflows examples reach for Maestro for exactly this, so it plugs into a build pipeline you may already have started.

  • Write one Maestro flow per screenshot: launch app, tap through to the screen, takeScreenshot with a clear filename.
  • Run the flow against a fresh EAS build or a local dev build, never against a stale cached state, so the captures match what a reviewer or a real user will see.
  • Point MAESTRO_TESTS_DIR at a dedicated raw-screenshots folder that the next layer reads from.

Layer 2: Composite the Device Frame and Caption

A raw simulator capture is not a store-ready screenshot. It needs a device frame and, usually, a caption line above or below it. The long-standing tool for this is frameit, a fastlane action: it reads each raw PNG, matches it to the right device frame automatically based on resolution, and can composite a background color and marketing text around it. It leans on ImageMagick under the hood, and the device frames themselves download automatically the first time you run it.

If you want more control over the caption typography and layout than frameit's defaults give you, the alternative is a small Node script using the sharp image library: load the raw screenshot, place it inside a device-frame PNG at the right offset, draw your caption text on a canvas layer above it, export. This is a script Claude Code can write end to end once you show it one target screenshot mockup and describe the caption copy for each screen. Either path works. Pick frameit if you want speed and are fine with its defaults, write the sharp script if your caption design needs to match a specific brand look.

Layer 3: Export Every Size Apple Actually Requires in 2026

This is the layer most indie builders get wrong, usually by uploading too many redundant sizes because that is what older tutorials describe. Apple simplified this: for iPhone, you only need to supply the largest current display size and Apple scales it down automatically to populate the listing on smaller and older phones. As of 2026 that primary size is the 6.9-inch class at 1320x2868 pixels. If your app supports iPad, you also need the 13-inch iPad size at 2064x2752 pixels. Older fallback sizes (6.5-inch at 1284x2778 or 1242x2688, and 12.9-inch iPad at 2048x2732) are still accepted if you already have them, but they are no longer required from a fresh pipeline.

Screenshot sizes to build your export step around (2026)

Device classRequired?Pixel size
iPhone 6.9-inch (primary)Required1320 x 2868
iPad 13-inch (if app supports iPad)Required if iPad-compatible2064 x 2752
iPhone 6.5-inch (legacy fallback)Optional1284 x 2778 or 1242 x 2688
iPad 12.9-inch (legacy fallback)Optional2048 x 2732

Build your export step to output the two required sizes by default, and only add the legacy fallbacks if you have a specific reason (an existing listing that already carries them, for example). A shorter export list is fewer files to keep captioned and current every release, and it is exactly what Apple asks for now, not what it asked for two years ago.

Running the Whole Pipeline From Claude Code's Desktop App

None of this requires living in a raw terminal. Claude Code's desktop app runs shell commands and reads your project the same way the CLI does, so you can hand it a plain description ('run the Maestro flows, then run the compositing script, then export at both required sizes') and watch it execute each step, showing you the output as it goes. The terminal is there if you want to poke at a single command yourself, but nothing about this pipeline requires you to have written a line of YAML or a compositing script before today. You describe the screens and the caption copy, Claude Code writes and runs the three scripts.

Once the pipeline exists, rerunning it after a UI change is one prompt: 'the dashboard screen changed, recapture screenshot 01 and recomposite it.' That is the actual return on building this instead of doing screenshots by hand every release: the second release is nearly free.

What Automation Still Cannot Do For You

A scripted pipeline captures, frames, and exports faithfully. It does not decide which six screens tell your app's story, and it does not write captions that convert a browser into an install. Those are the two decisions that move App Store conversion, and they stay entirely yours. Automate the mechanical repetition, keep the taste calls.

  • Which screens to show and in what order is a positioning decision, not a technical one.
  • Caption copy needs to speak to the benefit a user gets, not the feature you built.
  • A screenshot that misrepresents what the app actually does risks a Guideline 2.3.3 metadata rejection, no matter how clean the pipeline that produced it was. Only automate captures of your real, current UI.
Free app-building tips, straight to your inbox

Short, practical drops on app ideas, validating fast, store listings, and passing app review. No spam, unsubscribe anytime.

Frequently asked questions

Do I still need to write my own screenshot captions?

Yes. The pipeline captures and composites the raw screens automatically, but the caption copy above or below each screenshot is a conversion decision, and it should say what the user gets, not just list a feature. Write those by hand or with Claude Code as a drafting partner, then plug the final text into the compositing script.

Does Apple still require the older 6.5-inch and 5.5-inch screenshot sizes?

No, not as a hard requirement. Apple's 2026 process asks for one primary size per device family and scales it down automatically for smaller and older devices: 6.9-inch for iPhone (1320x2868) and 13-inch for iPad (2064x2752) if your app supports iPad. Older sizes are still accepted if you already have them on an existing listing, but a new pipeline only needs to produce the current required sizes.

Can I automate Google Play screenshots the same way?

The capture and compositing layers work the same way on Android: an emulator screenshot command or a Maestro flow captures the raw screen, and the same compositing script can frame it for Google Play's listing sizes. The export sizes differ from Apple's, so that final layer needs its own size list for Play.

Will Apple reject automatically generated screenshots?

Not because they were automated. App Review cares whether a screenshot accurately represents the current app under Guideline 2.3.3, not how it was produced. A scripted pipeline that captures your real, current UI is safer than a manually designed screenshot that quietly drifted out of date, because the script always captures what the build actually looks like today.

What if I only have one or two screens to capture, is the pipeline worth building?

Probably not yet. For a single screenshot, xcrun simctl io booted screenshot plus a manual frame in Figma is faster than building a pipeline. The automation pays off once you are capturing five or more screens across multiple releases, which is most apps by the time they are past their first submission.

Last reviewed by David on September 2, 2026

David

Written by

David

Founder and app builder

Keep reading

App StoreLaunch

App Store Phased Release: How the 7-Day Rollout Works, How to Pause It, and When to Skip It

App Store phased release rolls a version update out to a random sample of users with automatic updates on over 7 days: 1 percent on day one, then 2, 5, 10, 20, 50 and 100. You can pause it for up to 30 days in total, or release to everyone with one button. Here is exactly what Apple says it does, what it does not do, and how I decide when an Expo app update should use it.

David 8 min
Read article
ASOApp Store

App Store In-App Events: How to Set One Up for Your Expo App (and When It Is Worth It)

App Store in-app events are event cards Apple shows on your product page, in search results and in its editorial tabs to promote a timely moment inside your app, such as a challenge, a competition or a major update. An event can run for up to 31 days, be promoted up to 14 days early, and be submitted for review without a new app version. Here is what Apple allows, what gets an event rejected, how to wire the deep link in an Expo app, and the Real Moment Test I use before creating one.

David 10 min
Read article

Ready to build it yourself?

Join App Store Launch Club, the #1 community for building and launching apps, for $9/month.

← Back to the blog