Skip to main content

No beta labels or unfinished UI indicators

ab-000491 · app-store-review-blockers.completeness-stability.no-beta-indicators
Severity: highactive

Why it matters

Visible Beta, Alpha, Preview, or v0.3.1 labels signal to App Review and Play Console reviewers that the submitter is using the public store as a test environment, which violates Apple Guideline 2.2 (Beta Testing) — TestFlight is the only sanctioned beta channel. Debug overlays, raw JSON error dumps, and ungated developer panels leaking into production builds also trip the same guideline and cause immediate rejection, often with a terse reviewer note that wastes a full resubmission cycle.

Severity rationale

High because beta indicators cause immediate rejection under Apple Guideline 2.2 and Play policy.

Remediation

Strip beta/alpha badges from production UI, bump the user-visible version to 1.0.0 or higher, and gate every debug surface behind a compile-time flag. In React Native use __DEV__; in Flutter use kDebugMode; in Swift use #if DEBUG. Example in src/components/Header.tsx:

{__DEV__ && <DebugPanel />}

Remove any process.env.IS_TESTFLIGHT branches that leave visible artifacts in the App Store build.

Detection

  • ID: app-store-review-blockers.completeness-stability.no-beta-indicators
  • Severity: high
  • What to look for: Count all relevant instances and enumerate each. Before evaluating, extract and quote any relevant configuration or UI text found. Search for visible beta indicators in UI source files: strings like "Beta", "(Beta)", "[Beta]", "v0.", "alpha", "preview", "experimental" in rendered text. Also look for TestFlight-specific code paths that survive into production builds (e.g., if (process.env.IS_TESTFLIGHT) blocks that leave visual artifacts), unfinished loading states that show raw JSON or API error objects to users, and development-mode UI that is not properly gated by __DEV__ or equivalent.
  • Pass criteria: No beta labels, alpha indicators, or unfinished UI markers visible in production-bound source code. At least 1 implementation must be verified. Any development overlays or debug panels are properly gated to __DEV__ (React Native), kDebugMode (Flutter), or #if DEBUG (Swift). A partial or placeholder implementation does not count as pass. Report the count even on pass.
  • Fail criteria: "Beta" or "alpha" labels visible in production UI. Version number showing 0.x in the user-visible app header. Debug overlay components rendered without __DEV__ guard.
  • Skip (N/A) when: Never.
  • Detail on fail: "Beta badge rendered unconditionally in src/components/Header.tsx" or "Version shown to user is '0.3.1-beta' in app header"
  • Remediation: Reviewers reject apps that appear unfinished.
    1. Remove or hide all beta/alpha labels before submission
    2. Gate any developer tools or overlays behind __DEV__ checks:
      {__DEV__ && <DebugPanel />}
      
    3. Set the app version to 1.0.0 or higher for first public release
    4. Remove TestFlight-specific branches that alter visible UI before building for store submission

Taxons

History