Guideline 4.0

Guideline 4.0 - Design: App Looks Like a Website

Medium RiskMedium DifficultyTypical Fix: 1-3 days0 Reports
Also known as:App is essentially a WKWebView wrapper with no native featuresApp uses web-style navigation (hamburger menu, breadcrumbs) instead of UINavigationControllerApp does not use any iOS-specific features like push notifications, haptics, or gesturesApp UI is indistinguishable from the company’s mobile websiteApp loads all content from remote web pages with visible loading spinners

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

01

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


02

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


03

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

    04

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


    05

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


    06

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


    07

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

    From:Apple App Review Team
    Subject:Guideline 4.0 - Design: App Looks Like a Website
    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.

    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.

    Generate Appeal

    Before & After

    Before — Rejected

    // 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 — Approved

    // 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

    View all Guideline 4 rejections