
Expo App 上架被拒急救 · Ship Without Rejection
Expo Ship Checklist
Everything in this skill was learned by getting it wrong first: rejected builds, burned TestFlight build numbers, user photos that vanished after an update, and a Play Console that refused to unlock production. Nothing here is copied from the docs — if the docs covered it, it would not be in this skill.
Four Expo / React Native apps shipped solo on both stores. Every trap I hit is written up as Symptom → Cause → Fix, so your agent can match your error message and apply the fix in the right order.
What it does
When you hit a wall shipping an Expo app, your agent reads the matching reference file, matches your symptom, and walks you through the fix. Before a release, it runs a pre-submission checklist and reports each item as pass / fail / unknown — and it is told not to mark anything as passed without seeing evidence in your project.
When it triggers
- An EAS build fails, or a native build will not compile after an SDK bump
- App Store Review or Google Play rejected your app, or you want to avoid it
- You are stuck in Google Play closed testing and cannot reach production
- User data is missing or broken after an iOS update
- You are about to submit a release and want a pre-flight check
- SafeArea / edge-to-edge / i18n behaves differently on iOS and Android
What is inside
Five reference files, each a set of real traps with Symptom / Cause / Fix:
| Area | Covers |
|---|---|
| EAS build fixes | Missing Expo module headers after an SDK bump, New Architecture crashes on launch, dependency mismatches, burning through build credits |
| App review rejections | Version and build-number rules, Apple 4.3(b) "spam / minimum functionality", privacy-label mismatches, the AI-consent requirement (guideline 5.1.2(i)), the Xcode 26 / iOS 26 SDK deadline, IAP keys missing on one platform |
| Play Console traps | The 12-testers-for-14-days gate (per app, not per account), targetSdk deadlines, versionCode burned by internal testing, licence-testing accounts, adaptive icons |
| iOS storage pitfalls | Why every stored file:// path dies after an update (container UUID rotation), how to migrate safely, the real-device upgrade test that catches it |
| RN UI gotchas | SafeAreaView doing nothing on Android, edge-to-edge insets, hardcoded strings that escape i18n, iPad crashes, oversized font bundles |
Plus a pre-submission checklist covering versioning, compliance, monetisation, data safety and UI — one line per item, both platforms.
Example
Input
My iOS build fails with
'ExpoModulesCore/EXEventEmitter.h' file not foundafter upgrading Expo SDK.
What your agent does
Reads the EAS build reference, identifies the dependency / SDK mismatch, and gives the three-step fix in order — realign Expo packages, run the doctor, then reinstall node_modules — and explains why running them in a different order fails.
What this is not
- Not a tutorial on Expo or EAS basics
- Not a replacement for reading the store guidelines
- Not tied to any specific app — every fix is written for a generic Expo project
Requirements
Requires your own agent client (Claude Code, Codex, OpenClaw). Unzip into your skills directory (Claude Code: ~/.claude/skills/).


