No "beta," "test," "preview," or pre-release language visible in the production build
Why it matters
Apple guideline 2.1 requires that submitted apps be complete and production-ready — 'Beta Features' tab labels, '0.9.x' version numbers, and visible debug overlays signal to reviewers that the app is not ready for the store. This is one of the most mechanical rejection causes: automated pre-review scanning flags 0.x version numbers and common pre-release strings before a human reviewer sees the app. The allowFontScaling={false} anti-pattern from AI code generation frequently co-occurs with beta labels for the same reason: the AI scaffolds placeholder-quality code that ships to review without cleanup.
Severity rationale
Low because pre-release language is easy to remove once identified and causes no user harm — but it wastes a full submission cycle and, if repeated, trains the reviewer team to scrutinize future submissions more aggressively.
Remediation
Update the app version to 1.0.0 or higher in app.json before first submission:
// app.json
{
"expo": {
"version": "1.0.0",
"ios": { "buildNumber": "1" },
"android": { "versionCode": 1 }
}
}
Search for pre-release labels: grep -r '"Beta"\|"Alpha"\|"Preview"\|"Staging"' src/ --include="*.tsx". Gate all debug components behind __DEV__:
// Correct — invisible in release builds
{__DEV__ && <DebugPanel />}
Flutter: set debugShowCheckedModeBanner: false in MaterialApp. Remove any tab, navigation label, or screen title that contains 'Beta', '(Beta)', or 'Preview' — these strings are visible to reviewers and trigger rejection.
Detection
-
ID:
no-beta-language -
Severity:
low -
What to look for: Count all relevant instances and enumerate each. Search all UI source files, string constants, screen components, navigation labels, and tab bar labels for pre-release language that would be visible in a production build:
"Beta","(Beta)","[Beta]","Preview","Alpha","Test"(as a standalone label),"Staging","Dev Build","Canary","RC"(release candidate). Also check: (1) Version numbers — Does the user-visible version number show0.x.x? Both stores reject apps displaying0.xas the user-facing version. (2) Debug overlays — Search for React Native dev menu components, FlutterdebugShowCheckedModeBanner: true, or Xcode build configuration banners that survive into release builds. (3) Environment indicators — Look for environment name displayed in the UI:"[DEV]","[STAGING]","Environment: production"text shown in the app header or status bar. (4) TestFlight-specific UI — Look for UI elements that checkIS_TESTFLIGHTorTESTFLIGHT_ENVIRONMENTand render extra content — ensure these are properly gated. This check is distinct from the App Store Review Blockers audit's beta-indicators check in scope: that audit focuses on obvious unfinished UI; this check focuses on policy-violating pre-release labels that suggest the app is not production-ready. -
Pass criteria: No pre-release labels, beta indicators, or staging environment markers visible in production-bound source. At least 1 implementation must be verified. App version is 1.0.0 or higher for first submission. Debug overlays are gated behind
__DEV__/kDebugMode/#if DEBUG. -
Fail criteria: Any visible beta, alpha, preview, test, or staging label in production UI; version number showing
0.x.xto users; debug overlay rendered without a debug-mode gate. -
Skip (N/A) when: Never.
-
Detail on fail:
"Tab bar label 'Beta Features' visible in src/navigation/TabNavigator.tsx — this string will be visible to App Store reviewers"or"User-facing version displayed in About screen shows '0.9.2' — must be 1.0.0 or higher for store submission" -
Remediation: Reviewers reject apps that appear to be pre-release submissions.
- Remove all beta/alpha/preview labels from production UI. Gate any experimental feature sections with
__DEV__checks that are false in release builds - Update the app version to
1.0.0or higher inapp.json(expo.version) before submission - Wrap all debug components:
{__DEV__ && <DebugPanel />}(React Native) orif kDebugMode { DebugView() }(Swift) - Use environment-specific build configurations rather than runtime environment labels visible to users
Review the configuration in
src/orapp/directory for implementation patterns. - Remove all beta/alpha/preview labels from production UI. Gate any experimental feature sections with
External references
- external · apple-guideline-2.1 — App Store Review Guidelines 2.1 — App Completeness (no beta/test language)
- external · google-play-pre-registration — Google Play Developer Policy — App Completeness Requirements
Taxons
History
- 2026-04-18·v1.0.0·Initial import from app-store-policy-compliance·automated