Guideline 4.0
Guideline 4.0 - Design: App Looks Like a Website
Our Take
Apple rejected your app because it does not feel like a native iOS experience. The app may be a WebView wrapper around a mobile website, use web-style navigation patterns (hamburger menus, browser-like back buttons, or page URLs visible in the UI), or lack standard iOS conventions such as tab bars, navigation controllers, and native controls. Apple expects apps to offer value beyond what the equivalent website provides.
Resolution Guide
**Replace WebView screens with native views** — Identify which screens are loaded via WKWebView and rebuild them using UIKit or SwiftUI. Prioritize the main user flows (home, detail, settings).
**Adopt standard iOS navigation** — Use `UINavigationController` (or SwiftUI `NavigationStack`) with a back button, and a `UITabBarController` (or SwiftUI `TabView`) for top-level sections. Remove hamburger menus and web-style breadcrumbs.
**Add native features** — Incorporate at least 2–3 iOS-specific features that a website cannot offer:
- Haptic feedback (`UIImpactFeedbackGenerator`)
- Swipe gestures (swipe to delete, pull to refresh)
- Widgets or Live Activities
- Spotlight search integration
**Use system controls** — Replace HTML form elements with native `UITextField`, `UISwitch`, `UIDatePicker`, etc. Users expect the platform’s look and feel.
**Support offline mode** — Cache key data locally so the app remains partially usable without a network connection. Websites can’t do this.
**Test on airplane mode** — Ensure the app gracefully handles no connectivity instead of showing a blank WebView error page.
**Highlight native features in reviewer notes** — When resubmitting, list the native iOS features you’ve integrated so the reviewer can quickly verify them.
Example Rejection Email
Consider Appealing
Appeals are unlikely to succeed unless your app already uses native navigation and controls and the reviewer overlooked them. If your app intentionally loads some content via web views (e.g., terms of service, blog posts) but the core experience is native, explain this clearly in your appeal with screenshots of native screens.
Before & After
// Entire app is a WKWebView loading a responsive website
class MainViewController: UIViewController {
let webView = WKWebView()
override func viewDidLoad() {
super.viewDidLoad()
view.addSubview(webView)
webView.load(URLRequest(url: URL(string: "https://example.com/app")!))
}
}
// Native SwiftUI app with tab navigation and native list
struct ContentView: View {
var body: some View {
TabView {
NavigationStack {
ItemListView()
.navigationTitle("Items")
}
.tabItem { Label("Home", systemImage: "house") }
NavigationStack {
SettingsView()
.navigationTitle("Settings")
}
.tabItem { Label("Settings", systemImage: "gear") }
}
}
}
What changed: Replace the single-WebView architecture with a native SwiftUI TabView and NavigationStack. Each section should use native list views, controls, and navigation patterns.
Community Solutions · 0
Sign in to share your solution.
More Guideline 4 (Design) rejections
- Guideline 4.0 - Design: App Does Not Include iOS Features
- Guideline 4.0 - Design: Apple Pay Button Not Following Guidelines
- Guideline 4.0 - Design: Blurry Icons or Low-Resolution Assets
- Guideline 4.0 - Design: Broken Layout on iPad
- Guideline 4.0 - Design: Content Clipped by Notch or Safe Area
- Guideline 4.0 - Design: Crowded or Poor Layout