App is not merely a web view wrapper around a website
Why it matters
Apple's guideline 4.2 requires apps to offer functionality beyond what a mobile web browser can provide. A root <WebView> loading your website URL — or a tab navigator where every tab is a WebView — provides exactly zero native value and is rejected routinely. Google Play applies the same standard. Beyond rejection: a WebView wrapper offers worse performance than Safari/Chrome, no access to native APIs, broken back-button behavior on Android, and user interfaces that feel foreign on mobile. The rejection is not a technicality — the platforms genuinely won't distribute apps that are just website containers.
Severity rationale
High because Apple guideline 4.2 minimum-functionality rejections are applied consistently — any app whose primary content is a WebView loading a URL will be rejected.
Remediation
Replace WebView-based primary content with native components. Start with the root navigator.
// Before (rejected):
export default function HomeScreen() {
return <WebView source={{ uri: 'https://yoursite.com/home' }} style={{ flex: 1 }} />;
}
// After (native):
export default function HomeScreen() {
const { data } = useHomeData();
return (
<ScrollView>
<FlatList data={data} renderItem={({ item }) => <PostCard post={item} />} />
</ScrollView>
);
}
WebViews are permitted for: OAuth flows, in-app help browser, PDF preview, or one specific screen of third-party external content. Every tab in your tab navigator must render native components as its primary content.
DetectionPro
The detection method for this pattern is part of AuditBuffet Pro.
The full method (what to look for, pass and fail conditions, and how results get reported) ships inside the App Store Review Blockers Audit. The pattern definition, severity rationale, and remediation remain openly licensed under CC-BY-4.0.
External references
- external · apple-guideline-4.2-minimum-functionality — Apple App Store Review Guideline 4.2 — Minimum Functionality (no web-view wrappers)
Taxons
History
- 2026-04-18·v1.0.0·Initial import from app-store-review-blockers·automated