More screenshots

    Works with the AI tools you already use

    Claude CodeClaude CodeCursorCursorCodex CLICodex CLIMuseMuseDotsDots+22 more

    Store Preflight: One Check Before Every Store Build

    1

    One command before every store build of a Flutter, React Native or Expo app that catches what passes a build and fails a store, and runs your other release checks in the same report.

    $15

    Secure checkout via Stripe

    30-day refund guarantee

    Converts to your local currency at checkout

    Security scanned
    Store Preflight: One Check Before Every Store Build

    Store Preflight: One Check Before Every Store Build

    Example session with this skill installed

    Run the release checks on this app before I build.

    • Read your context and instructions
    • Compiled the store preflight

    What the skill printed

    my-app (flutter)
      version 1.0.0 build 1 (pubspec, both platforms)
    
    FAIL     source
               [ANDROID-DEBUG-KEY] android/key.properties is missing, and build.gradle falls back to the debug key without a word when it is. Restore it before building a release
               [IOS-IPAD] the app declares iPad support, and no iPad screenshots were found; App Store Connect requires them
    FAIL     compliance
               warning [ATT-LAUNCH]: packages/flutter_data/lib/ads/ad_service.dart: the tracking prompt is requested in _initialize; ask after the user has got something from the app (first result, first level)
               warning [PRIV-CRASH]: a crash reporter is in the build but Crash Data is not declared in PrivacyInfo.xcprivacy
               error [ADS-REVOKE]: nothing opens the privacy options form. AdMob's European message tells users the app has a link to change consent
               error [ADS-APPID]: the iOS AdMob app id is Google's sample id (ca-app-pub-3940256099942544~1458002511): every impression is a test
               error [ADS-APPID]: the Android AdMob app id is Google's sample id (ca-app-pub-3940256099942544~3347511713): every impression is a test
               3 errors, 2 warnings.
    pass     launch
               warning: ios/Runner.xcodeproj/project.pbxproj has ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = AppIcon. flutter_launcher_icons 0.14 writes that by mistake; Xcode reads it as NO today, but it should be YES. Revert that line after every icon run
               warning: packages/ui/lib/screens/splash/splash_view.dart:20: splash held for 2000 ms; under 1 s reads as fast, 2 s as a slow app
               0 errors, 2 warnings.
    
    2 errors, 1 warnings.
    

    Connects securely to your tools. The creator never sees your data.

    About this skill

    A release build can compile, install and run, and still be signed with the debug key, missing a camera purpose string, or declaring iPad support with no iPad screenshots. You find out from a store rejection or, for the signing key, after Play has pinned the wrong one on a first upload.

    preflight.py works on Flutter, React Native and Expo projects. It runs last, before the build you upload, and prints one verdict per section. It exits non-zero on any error.

    Source checks

    • ANDROID-DEBUG-KEY: the release build falls back to the debug key (Flutter's Gradle does this in silence when key.properties is missing, and the React Native template signs release with the debug key by default).
    • IOS-PURPOSE: a plugin that needs an Info.plist usage string has none, or a near-empty one.
    • IOS-ENCRYPTION: no ITSAppUsesNonExemptEncryption, so every upload stops at the export-compliance question.
    • IOS-IPAD: iPad support declared with no iPad screenshots found.
    • VERSION-MISMATCH: iOS and Android version or build numbers out of step (Expo keeps them separately).
    • STALE-AAB: the .aab is older than the last commit.

    Then, in the same report

    • compliance: the app-compliance audit
    • launch: the launch-branding check
    • screenshots: the flutter-store-screenshots validator, when the app has a screenshots/ folder made by it
    • play: play-release's AAB preflight, when an .aab exists
    • ipa: the shipped .app inside an .ipa: privacy manifest included, no sample AdMob id

    A section whose skill is not installed is reported as skipped, never as passed.

    What you need: Python 3.9+ and git. No packages to install. The other sections need their skills installed.

    I build small apps on my own and have a shelf of them on the App Store and Google Play. This is the one command I run before every store build.

    How to use

    Skills on Agensi run inside your AI agent. Copy the prompt, paste it into your agent, and it connects to Agensi and installs this skill for you. If a payment is needed, your agent shows it to you first.

    Reviews

    No reviews yet

    Be one of the first to try it. Every listed skill passes our trust checks below.

    Security scanned

    Passed our 8-point scan before listing

    Fresh listing

    Recently published to Agensi

    30-day refund

    Not a fit? Get your money back

    Trust & safety

    Security scanned

    Verified clean 5 days ago

    • Passed all security checks, Safe to install

    Listed5 days ago

    What's inside

    Frequently Asked Questions