Publishing
Find answers to common mobile publishing issues.
My app submission was rejected
If your app submission was rejected, you probably got an email with the reason. You'll need to fix the issues and upload a new build of your app to the store and send it for review again.
Make sure to follow the guidelines when submitting your app to ensure that everything is setup correctly.
App Store screenshots don't match requirements
If your app submission was rejected due to screenshot issues, make sure:
- Screenshots match the required dimensions for each device
- Screenshots accurately represent your app's functionality
- You have provided screenshots for all required device sizes
- Screenshots don't contain device frames unless they match Apple's requirements
See Apple's screenshot specifications
Version number conflicts
If you get version number conflicts when submitting:
- Ensure your
app.jsonversion matches what's in the store - Increment the version number appropriately:
"version": "1.0.1", "android.versionCode": 2, "ios.buildNumber": "2" - Make sure both stores have unique version numbers
Missing or incorrect environment variables
If your build succeeds but the binary is misconfigured (e.g., API URL shows as undefined, Sentry auth fails, or app.config.* settings don’t apply), verify your EAS environment variables:
- Define variables on EAS and assign them to the correct environment (
development,preview,production). - For values used in app code, prefix with
EXPO_PUBLIC_and read viaprocess.env.EXPO_PUBLIC_.... - For config-time values (bundle identifiers, file paths), read
process.env.VARNAMEfrom yourapp.config.*. - Explicitly set
environmentineas.jsonbuild profiles, or pass--environmenttoeas updateso updates use the same variables as builds. - For local development, pull variables into a
.envfile:eas env:pull --environment development - Use secret file variables (e.g.,
GOOGLE_SERVICES_JSON) and reference them inapp.config.*. - Keep
.envout of git; cloud builds don’t rely on your local.env.
See: Environment variables in EAS.
My app crashes on production build
If the app works in development but crashes in a production build, check these common causes:
- Missing or incorrect environment variables at build time. EAS cloud jobs don’t use your local
.envby default. Ensure variables exist on EAS, are assigned to the correct environment, and useEXPO_PUBLIC_for values read in app code. See: Environment variables in EAS. - Missing native config files. Provide
google-services.json/GoogleService-Info.plistvia secret file variables (e.g.,GOOGLE_SERVICES_JSON) and reference them inapp.config.*. - Production-only code paths. Guard dev-only code with
__DEV__, avoid importing dev tools in production, and ensure feature flags don’t access undefined values. - Misconfigured native modules or plugins. Verify required plugins/babel config are present and rebuild after cache clears.
Try this:
- Run the app with a production JS bundle locally to surface minification issues:
npx expo start --no-dev --minify - Inspect device logs when the crash occurs (Android:
adb logcat, iOS: Console.app or Xcode Devices). - Rebuild with a clean cache if needed:
eas build --clear-cache
How is this guide?
Last updated on