# Guideline 4.0 - Design: App Looks Like a Website

**Guideline:** 4.0 · **Store:** Apple App Store · **Severity:** medium · **Fix difficulty:** medium · **Typical turnaround:** 1-3 days

Canonical URL: https://appstorereject.com/rejections/apple/4/guideline-40-design-app-looks-like-a-website

## Description

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.

## Common variations

- App is essentially a WKWebView wrapper with no native features
- App uses web-style navigation (hamburger menu, breadcrumbs) instead of UINavigationController
- App does not use any iOS-specific features like push notifications, haptics, or gestures
- App UI is indistinguishable from the company’s mobile website
- App loads all content from remote web pages with visible loading spinners

## Example rejection email

```
We noticed an issue in your app that contributes to a lower quality user experience than Apple users expect:

- Your app did not include iOS features.

Specifically, your app appears to be a web-based experience that does not take advantage of the features available in iOS, such as native navigation, tab bars, and system controls. The app experience is similar to a mobile website. Next Steps: We encourage you to review the iOS Human Interface Guidelines and consider incorporating native iOS features to provide a more engaging user experience.
```

## Resolution steps

## How to Fix “App Looks Like a Website”

1. **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).

2. **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.

3. **Add native features** — Incorporate at least 2–3 iOS-specific features that a website cannot offer:
   - Push notifications
   - Haptic feedback (`UIImpactFeedbackGenerator`)
   - Swipe gestures (swipe to delete, pull to refresh)
   - Widgets or Live Activities
   - Spotlight search integration

4. **Use system controls** — Replace HTML form elements with native `UITextField`, `UISwitch`, `UIDatePicker`, etc. Users expect the platform’s look and feel.

5. **Support offline mode** — Cache key data locally so the app remains partially usable without a network connection. Websites can’t do this.

6. **Test on airplane mode** — Ensure the app gracefully handles no connectivity instead of showing a blank WebView error page.

7. **Highlight native features in reviewer notes** — When resubmitting, list the native iOS features you’ve integrated so the reviewer can quickly verify them.

## Appeal guidance

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 examples

**Before:** // 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")!))
    }
}
**After:** // 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") }
        }
    }
}
**Why it works:** Replace the single-WebView architecture with a native SwiftUI TabView and NavigationStack. Each section should use native list views, controls, and navigation patterns.

## Common questions

**Can you appeal a 4.0 rejection?**

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.

**How long does this typically take to fix?**

Typical turnaround is 1-3 days (difficulty: medium). After resubmission, most re-reviews complete within 24-48 hours.

---
*Machine-readable source: https://api.appstorereject.com/api/rejections/detail?slug=guideline-40-design-app-looks-like-a-website*