- Home
- Skills
- Mobile Development
- iOS Release to TestFlight (Flutter & React Native)
Works with the AI tools you already use
iOS Release to TestFlight (Flutter & React Native)
Take a Flutter, React Native or Expo app from a fresh fork to a build in App Store review, in the order Apple enforces, with a known fix for each error on the way.
$15
iOS Release to TestFlight (Flutter & React Native)
Example session with this skill installed
Ship chore-jar to TestFlight. It was forked from my-app-template last week.
- Read your context and instructions
- Compiled the ios release to
What the skill printed
The preflight, before anything was built or uploaded:
ok config using ~/apps/.flutter-store-pipeline.json
ok version pubspec version 1.0.0+1
ok bundle-id com.example.basicapp
WARN bundle-id com.example.basicapp does not start with bundle_id_prefix com.buyertest
FAIL bundle-id same bundle id as the parent (com.example.basicapp): the build would upload to the parent's record
FAIL firebase same Firebase project number as the parent (123456789012, id basic-app): analytics and crashes report into its project
FAIL admob 2 ad unit id(s) shared with the parent: ca-app-pub-0000000000000000/1111111111, ca-app-pub-0000000000000000/1111111111. Inherited units serve, against the parent's app. Blank them until this app's exist.
WARN admob AdMob app id shared with the parent (ca-app-pub-0000000000000000~1111111111, ca-app-pub-0000000000000000~1111111111). It cannot be blanked (the SDK refuses to start), so staging is fine; replace before prod.
WARN flavor scripts/release_ios.sh builds without --dart-define=APP_FLAVOR, so a release build gets whatever the code falls back to (usually prod: live ad units on an app whose AdMob records may not be live)
WARN flutter-sdk scripts/release_ios.sh takes flutter from PATH but the app pins a version in .fvmrc; the build uses whichever SDK the machine has
WARN signing no ios/ExportOptions*.plist; `flutter build ipa` will pick a distribution identity itself and this keychain holds 2: name the certificate in full
ok icon Icon-App-1024x1024@1x.png has no alpha
info ipad TARGETED_DEVICE_FAMILY includes iPad (1,2): iPad screenshots are required
WARN metadata no fastlane/metadata/ios tree; listing text will be entered by hand
WARN fastlane FASTLANE_SESSION is set in this shell: any lane that reaches Spaceship session auth acts as that Apple ID, whichever account it belongs to. Unset it; use the API key.
3 fail, 7 warn
Connects securely to your tools. The creator never sees your data.
About this skill
Getting a Flutter, React Native or Expo app from a local build to a build in App Store review means signing, profiles, store records, upload, metadata and screenshots, and each step fails with an error that only makes sense once you have seen it before. Skip a step and the error shows up three steps later.
This skill runs the iOS release in the order Apple enforces: preflight, Firebase, bundle id, App Store Connect record, AdMob, build, verify the signature, upload, metadata and screenshots, then the items to collect before submission.
What it handles
- A preflight that compares your app with the one it was forked from: shared bundle id, Firebase project number, ad units and AdMob app id, a release script with no flavor, an unpinned Flutter SDK, no export options with two distribution identities in the keychain, an icon with alpha, iPad screenshots that will be required, and a stray
FASTLANE_SESSION. Run it again on the built.ipawith--ipa. - Registering the bundle id and creating and installing the App Store provisioning profile through the App Store Connect API (
asc.py register-bundle,create-profile,install-profile). - Checking which certificate actually signed the
.ipa. - Upload with altool, then
asc.py build-statusandnext-buildfor processing and build numbers. - Metadata and screenshots with fastlane deliver, and
prune-screenshotsfor duplicates. Known failures written out: "No profiles for", "No Accounts", "No Builds Available", metadata that uploads nothing, a build missing from the version's picker, and "App is missing required pricing" (the price dropdown is a search box; "Free" matches nothing, pick $0.00). - Age rating: the two API calls are documented and
asc.py getreads the declaration back to confirm the band. The privacy label has no API; the skill tells you how to derive it from the app's code.
asc.py signs its own token with openssl, so there is nothing to pip install. Every write needs --yes, and --dry-run prints the request first. It never submits for review; that stays your click.
React Native and Expo
For Expo it builds with eas build and uploads with eas submit; for bare React Native it runs pod install and xcodebuild archive and export. The preflight reads version and build numbers from wherever the build takes them (app.json, or the Xcode project when ios/ is committed), checks that app.json and a committed ios/ project agree on the bundle id, checks Firebase setup (@react-native-firebase or the Expo config plugin) and AdMob app ids (react-native-google-mobile-ads), and with --parent fails on the parent's EAS projectId, updates URL or ascAppId.
What you need: Claude Code, a Mac with Xcode, Python 3.9+, openssl, an App Store Connect API key (.p8), and Flutter, React Native (CocoaPods) or Expo (EAS CLI). For Flutter, the Firebase and FlutterFire CLIs for the Firebase step, and fastlane only for metadata and screenshots. No Firebase or no ads? Skip those two steps.
Part of the Indie Mobile Release Pipeline (Flutter & React Native) bundle ($39 for four skills: new-app, bug-hunt, ship-ios, daily-update).
I build small apps on my own and have a shelf of them on the App Store and Google Play. Each known error in this skill is one I hit on a real release.
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 4 days ago
- Passed all security checks, Safe to install
Needs access to