Dead-end screens are a leading cause of App Store rejection under Apple's guideline 2.1 (completeness). Reviewers systematically navigate every registered tab and screen — a blank render or immediate crash on any reachable route results in an automatic reject. ISO 25010:2011 functional-completeness defines this failure directly: functionality that exists in the navigator but cannot be used provides zero functional value and destroys reviewer trust, putting the entire binary at risk regardless of how polished the rest of the app is.
Critical because a single blank or crashing screen causes immediate rejection — no other metric matters if a reviewer cannot navigate the app.
Audit every screen registered in your navigator before submission. Remove or replace any that render null or an empty <View />.
// app/(tabs)/settings.tsx — replace null renders with real content
export default function SettingsScreen() {
// Was: return null;
return (
<View style={styles.container}>
<Text>Settings coming in v2</Text>
</View>
);
}
For screens not ready for launch, remove them from the navigator file entirely rather than leaving them registered. A tab that doesn't exist beats a tab that crashes.
ID: app-store-review-blockers.completeness-stability.all-links-functional
Severity: critical
What to look for: Count all relevant instances and enumerate each. Examine the navigation structure (root stack navigator, tab navigator, drawer navigator, or Expo Router file-system layout). Look for: screens registered in the navigator that render null or an empty <View />; navigation links (navigation.navigate('ScreenName')) pointing to screens that throw errors or show blank content; tab bar items pointing to placeholder screens; deep link handlers that resolve to empty screens. In Flutter, check MaterialApp routes or GoRouter for routes with empty builders. In Swift/Kotlin, check UINavigationController push targets and NavHost destinations.
Pass criteria: All screens reachable from the main navigation have meaningful content. At least 1 implementation must be verified. No dead-end routes that render empty or crash immediately. A partial or placeholder implementation does not count as pass.
Fail criteria: Any navigable screen (reachable without special credentials or edge cases) that renders blank, throws an exception, or shows placeholder copy.
Skip (N/A) when: Never — every registered route must have real content.
Detail on fail: "SettingsScreen is registered in tab navigator but renders null — navigating to it shows a blank screen" or "'Help' tab navigates to HelpScreen which immediately throws 'Cannot read property of undefined'"
Remediation: Reviewers systematically explore every tab and navigable screen.
return null, not return <View />)Review the configuration in src/ or app/ directory for implementation patterns.