What’s actually slowing this PC down?

Pick the symptom - the matching free tool is one click away.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Fastlane automates app screenshots by driving your UI tests on selected simulators or emulators, saving each named capture by device and language, and generating a reviewable HTML summary. On iOS, the workflow is called snapshot and is built on Xcode UI Tests. On Android, the separate screengrab action uses instrumented tests and Espresso. The reliable pattern is to check in your capture configuration, run from the command line, inspect for partial failures, and only then frame or upload the files.

What Fastlane automates

A screenshot run has four moving parts:

  • Test interaction: the UI test navigates to a known state.
  • Capture points: a named call records the current screen.
  • Variants: devices, languages, launch arguments, and output settings are generated from configuration.
  • Review and delivery: Fastlane writes organized files and an HTML overview; optional actions can frame or upload them.

Use the iOS instructions below for an Xcode project. Do not mix them with Android instructions: Android uses Screengrab, not SnapshotHelper.swift or a Snapfile.

iOS: set up Snapshot once

1. Create a UI Test target

In Xcode, add a UI Testing target to the application project. The target must be able to build and launch the app on the simulators you intend to capture. Create or select a scheme for that test target, share the scheme in the project, and enable the test target in the scheme’s Run configuration.

2. Generate Fastlane’s helper

From the project directory, initialize the screenshot setup:

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
#1 Best Overall
Apple iPhone 14, 128GB, Blue - Unlocked (Renewed)
  • Vibrant 6.1-inch Super Retina XDR display with OLED technology. Action mode for smooth, steady, handheld videos.
fastlane snapshot init

The command creates the files needed by the Snapshot workflow, including a SnapshotHelper.swift file and a starter Snapfile. Add SnapshotHelper.swift to the UI Test target in Xcode (verify its target membership). If the helper is not compiled into the test target, calls to setupSnapshot and snapshot will fail to build.

3. Prepare the test case

In the UI test, initialize Snapshot in setup and launch the app. The capture call belongs immediately after the interactions that establish the desired state.

import XCTest

class ScreenshotTests: XCTestCase {
    let app = XCUIApplication()

    override func setUpWithError() throws {
        continueAfterFailure = false
        setupSnapshot(app)
        app.launch()
    }

    func testScreens() throws {
        snapshot("home")

        app.buttons["Get started"].tap()
        snapshot("onboarding")

        app.buttons["Settings"].tap()
        snapshot("settings")
    }
}

Fastlane’s documented rule is: “To take a screenshot, call the following between interactions.” Give each screenshot a stable name. Avoid names that include a device, locale, or timestamp; Fastlane supplies those dimensions when it organizes output.

4. Make the UI deterministic

  • Reset test data or use a dedicated launch argument so every run starts from the same state.
  • Wait for a visible element before capturing rather than relying on a fixed animation duration.
  • Dismiss permission prompts in test code or provide test-safe launch settings.
  • Keep accessibility identifiers and button labels stable across localizations; use identifiers for interactions when possible.
  • Ensure network-dependent content has a fixture or a reliable test endpoint. A screenshot taken while a request is still loading is technically successful but visually wrong.

Configure devices, languages, and output in a Snapfile

Put the choices that define coverage in a checked-in Snapfile. A representative configuration is:

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
scheme "MyAppUITests"
devices [
  "iPhone 15 Pro",
  "iPad Pro (12.9-inch) (6th generation)"
]
languages ["en-US", "de-DE", "ja"]
output_directory "./fastlane/screenshots"
clear_previous_screenshots true

Use the exact simulator names installed on the Mac running the job. Keep the scheme name aligned with the shared UI-test scheme. The snapshot action also supports multiple launch-argument sets, status-bar overrides, and other output options; add only settings your test actually needs so the file remains reviewable.

Why configuration belongs in source control

A checked-in Snapfile gives every developer and CI job the same device and locale matrix. It also makes deliberate changes visible in code review: adding a language, changing a device, or switching an output directory is no longer a hidden command-line variation. Launch arguments in the configuration are useful for feature flags, seeded data, and alternate product tiers.

Rank #2
Apple iPhone 14, 128GB, Midnight - Unlocked (Renewed)
  • This phone is unlocked and compatible with any carrier of choice on GSM and CDMA networks (e.g. AT&T, T-Mobile, Sprint, Verizon, US Cellular, Cricket, Metro, Tracfone, Mint Mobile, etc.).
  • Please check with your carrier to verify compatibility.
  • The device does not come with headphones or a SIM card. It does include a generic (Mfi certified) charging cable.
  • Tested for battery health and guaranteed to have a minimum battery capacity of 80%.

Parallel runs and partial coverage

Snapshot can run simulator jobs concurrently. Concurrency shortens wall-clock time but increases CPU, memory, and simulator contention; start with a smaller matrix on a constrained CI runner. Fastlane documents a stop_after_first_error option. Without stopping, a failure on one device or language can leave the remaining combinations running. Always inspect the summary and output directories—successful files do not prove that every requested combination was captured.

Run the capture from the command line

Run Snapshot rather than launching the test directly from Xcode:

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
fastlane snapshot

The command-line action creates the organized screenshot directories and HTML overview expected from Snapshot. Running the UI test directly in Xcode is useful for debugging interactions, but it does not produce the same Snapshot output structure.

What to check after a run

  1. Open the generated HTML summary and review every requested device and language.
  2. Compare the requested matrix in the Snapfile with the directories that were actually created.
  3. Open representative images at 100% size; look for truncated text, untranslated strings, keyboard overlays, loading indicators, and status-bar differences.
  4. Keep the run’s screenshots separate from older output when diagnosing failures. Set clear_previous_screenshots deliberately so stale files cannot be mistaken for new captures.

Review, frame, and upload

HTML review

Snapshot’s HTML summary is a practical handoff for QA, marketing, and localization reviewers. Reviewers can compare the same named screen across devices and languages before files are sent to a store.

Optional device frames with Frameit

Frameit can add a device frame, background, padding, and text. Treat framing as a presentation step, not as part of the UI test. Fastlane warns that framed output without the App Store-oriented title and background configuration may have dimensions that App Store Connect will not accept. Validate the final framed files, not just the unframed Snapshot images.

Upload with a lane

The iOS guide documents deliver and the upload_to_app_store lane action as upload paths. A lane can chain capture and upload, for example:

Free tools Windows power users keep installed

One-click scans. No signup required.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
Rank #3
Apple iPhone 13, 128GB, Midnight - Unlocked (Renewed)
  • This pre-owned product is not Apple certified, but has been professionally inspected, tested and cleaned by Amazon-qualified suppliers.
  • There will be no visible cosmetic imperfections when held at an arm’s length.
  • This product is eligible for a replacement or refund within 90 days of receipt if you are not satisfied.
  • Product may come in generic Box.
lane :screenshots_and_upload do
  snapshot
  upload_to_app_store
end

Use an upload lane only after a human or automated review confirms the set. Upload actions change App Store Connect metadata and screenshots; inspect the upload summary and verify that the intended app, version, locale, and device files are selected.

Android: use Screengrab instead of Snapshot

Fastlane’s Android counterpart is Screengrab. It uses instrumented tests and Espresso interactions to capture screens, and it has its own configuration and Google Play upload workflow. Create the Android test setup described by Fastlane, place capture calls at deterministic points in Espresso tests, and run the Screengrab action from the command line.

The iOS helper, shared Xcode scheme, and Snapfile do not apply to Android. Keep the two pipelines separate in your repository and CI jobs. For both platforms, review the generated set for missing locales and devices before uploading.

Common failures and fixes

The helper symbols are undefined

Symptom: Xcode cannot find setupSnapshot or snapshot. Fix: select SnapshotHelper.swift in Xcode and enable membership for the UI Test target. Rebuild the test target, not only the application target.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

The test runs, but no organized screenshots appear

Cause: the test was run directly from Xcode. Fix: run fastlane snapshot from the project directory and check the configured output directory.

One locale or device is missing

Cause: a simulator failed, a locale could not launch, or a test assertion stopped that combination. Fix: read the Fastlane summary, inspect the failing simulator log, and compare output folders with the Snapfile matrix. If you need fail-fast behavior, enable stop_after_first_error; otherwise, treat the run as partial until every combination is accounted for.

Rank #4
Apple iPhone 16e, 128GB, Black - Unlocked (Renewed)
  • 6.1" Super Retina XDR OLED, HDR10, 800 nits (HBM), 1200 nits (peak), 2532x1170px at 460ppi, 4005mAh Battery
  • 8GB RAM, Apple A18 6-core CPU (2 performance + 4 efficiency cores), Apple GPU 4-core, 16‑core Neural Engine
  • Rear camera: 48MP, f/1.6, wide, Front Camera: 12MP, f/1.9, wide, iOS 18.3.1, upgradable to iOS 18.5
  • Connectivity: Global 4G LTE, Sub-6 GHz 5G, LTE, Wi-Fi 6, Bluetooth 5.3, NFC, USB-C, Wireless Charging (7.5W). (does not have mmWave 5G or MagSafe or physical SIM card) - Dual eSIM Only
  • Unlocked for freedom to choose your carrier. Compatible with both GSM & CDMA networks. The phone is unlocked to work with all GSM Carriers & CDMA Carriers Including AT&T, T-Mobile, Verizon, Straight Talk., Etc.

Captures show the wrong screen

Cause: the call occurs before navigation or asynchronous content is ready. Fix: wait for a specific UI element, remove animation or network nondeterminism in the test environment, and place snapshot after the state assertion.

Localized text is clipped

Cause: a layout that fits one language does not fit another. Fix: inspect the HTML overview by locale, adjust constraints and dynamic type handling, and rerun the complete matrix rather than replacing only the failing image.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Framed images are rejected by the store

Cause: Frameit output dimensions or title/background settings do not match App Store Connect’s current validation. Fix: validate the final files against the current store requirements and regenerate with the appropriate App Store-oriented configuration. The available material does not establish a universal, current pixel table, so do not hard-code one into your pipeline without checking Apple’s current guidance.

CI cannot start the iOS workflow

Cause: the documented flow depends on Xcode UI Tests and simulators, so a runner without a compatible macOS/Xcode environment cannot execute it. Fix: use a macOS runner with the project, shared scheme, installed simulator runtimes, and Fastlane dependencies available. The documentation does not establish a particular Mac model or a universal minimum Xcode/Fastlane version.

Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

Reliability, speed, and cost planning

Make failures diagnosable

  • Pin the device and language matrix in the Snapfile.
  • Archive the HTML summary and logs with the CI job.
  • Record the commit, build configuration, and launch arguments used for the run.
  • Reject a release artifact when any requested combination is missing, even if Fastlane continued after an error.

Control runtime

Each additional device-language combination multiplies UI-test work. Use concurrency where the runner has enough resources, but keep a smaller smoke matrix for pull requests and the full matrix for release jobs. Capture only the screens required by the store or review process; extra screenshots increase test time and review burden.

Keep upload separate from capture

Capture and review are repeatable build steps. Upload is a change to store metadata. Separating them lets you rerun a failed simulator without accidentally replacing approved store assets.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
Best Value
Apple iPhone 15, 128GB, Black - Unlocked (Renewed)
  • 6.1inch Super Retina XDR display. Aluminum with color-infused glass back. Ring/Silent switch
  • Dynamic Island. A magical way to interact with iPhone. A16 Bionic chip with 5-core GPU
  • Advanced dual-camera system. 48MP Main | Ultra Wide. Super-high-resolution photos (24MP and 48MP). Next-generation portraits with Focus and Depth Control. 4X optical zoom range
  • Emergency SOS via satellite. Crash Detection. Roadside Assistance via satellite
  • Up to 26 hours video playback. USB C, Supports USB 2. Face ID

Or skip the browser setup

If you need screenshots of a website, documentation page, or web-based preview rather than an iOS or Android simulator, ScreenshotNeo provides a one-request API at screenshotneo.com. It accepts the cookie or consent banner before capture and removes more than 60 known consent platforms, newsletter popups, and chat widgets; each step can be turned off. Only clean shots are billed: bot checks or CAPTCHAs, blank pages, timeouts, failed loads, and cache hits cost nothing, and response headers report the page verdict and whether it was billed.

See the ScreenshotNeo API documentation for all options. This cURL request saves a WebP image:

curl -G "https://api.screenshotneo.com/v1/shot" -d access_key=YOUR_API_KEY --data-urlencode url=https://stripe.com -o shot.webp

Python:

import requests
r = requests.get("https://api.screenshotneo.com/v1/shot", params={"access_key": "YOUR_API_KEY", "url": "https://stripe.com"}, timeout=90)
open("shot.webp", "wb").write(r.content)

Node.js:

const q = new URLSearchParams({ access_key: 'YOUR_API_KEY', url: 'https://stripe.com' });
const res = await fetch(`https://api.screenshotneo.com/v1/shot?${q}`);

ScreenshotNeo also has an MCP server with take_screenshot, get_page_info, and capture_pdf tools for Claude, Cursor, and other MCP clients. It supports full-page captures with lazy images loaded, CSS-selector element shots, dark mode, device presets or custom viewports, retina scale, PDF output, custom CSS and JavaScript, click and wait conditions, request blocking, headers, cookies, user agents, timezone and geolocation, transparent backgrounds, resizing, chosen cache TTLs, signed links, async webhooks, bulk capture of up to 100 URLs per call, a usage API, and an OpenAPI specification. Its parameter names also match those used by other screenshot APIs, which can simplify a switch.

The Free plan includes 1,000 screenshots per month with no card. Paid plans start at $5 for 3,000 shots; every feature is on every plan. Create a free ScreenshotNeo account to try it.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Fastlane screenshot checklist

  1. Create and share the UI-test scheme.
  2. Add the generated SnapshotHelper to the UI Test target.
  3. Call setupSnapshot(app) during test setup and name each snapshot point.
  4. Check in devices, languages, launch arguments, and output settings in the Snapfile.
  5. Run fastlane snapshot, not only the Xcode test button.
  6. Review the HTML summary and confirm no matrix entries are missing.
  7. Frame only when needed, then validate final dimensions.
  8. Upload through deliver or upload_to_app_store only after review.
  9. Use the distinct Screengrab workflow for Android.

Frequently Asked Questions

Can I capture screenshots without writing UI-test interactions?

No. Snapshot records the app state reached by an Xcode UI Test; the test still needs to navigate to each screen and establish its data.

Should screenshot names include the locale?

Keep names stable, such as home or settings. Fastlane organizes variants by device and language, so embedding those values in names makes review and replacement harder.

Is Frameit required for App Store screenshots?

No. Framing is optional. If you use it, validate the resulting dimensions and App Store-oriented configuration before upload.

Does Screengrab use the same Snapfile as iOS Snapshot?

No. Screengrab is Android’s separate instrumented-test workflow; the iOS SnapshotHelper and Snapfile instructions do not configure it.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Quick Recap

Bestseller No. 2
Apple iPhone 14, 128GB, Midnight - Unlocked (Renewed)
Apple iPhone 14, 128GB, Midnight - Unlocked (Renewed)
Please check with your carrier to verify compatibility.; Tested for battery health and guaranteed to have a minimum battery capacity of 80%.
$300.00
Bestseller No. 3
Apple iPhone 13, 128GB, Midnight - Unlocked (Renewed)
Apple iPhone 13, 128GB, Midnight - Unlocked (Renewed)
There will be no visible cosmetic imperfections when held at an arm’s length.; Product may come in generic Box.
$262.00
Bestseller No. 5
Apple iPhone 15, 128GB, Black - Unlocked (Renewed)
Apple iPhone 15, 128GB, Black - Unlocked (Renewed)
Dynamic Island. A magical way to interact with iPhone. A16 Bionic chip with 5-core GPU; Emergency SOS via satellite. Crash Detection. Roadside Assistance via satellite
$405.00

Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.