# Guideline 4.0 - Design: App Does Not Include iOS Features

**Guideline:** 4.0 · **Store:** Apple App Store · **Risk:** medium · **Difficulty:** medium · **Typical turnaround:** 1-2 weeks

Canonical URL: https://appstorereject.com/rejections/apple/4/guideline-40-design-app-does-not-include-ios-features

## Description

Apple rejected your app because it does not leverage iOS platform capabilities. Even if your app is not a web wrapper, Apple may reject it if it ignores standard iOS design patterns, system features, and platform conventions. This includes missing support for features like Dynamic Type, Dark Mode, multitasking on iPad, system share sheets, standard gestures, or accessibility support. Apple wants apps to feel at home on iOS.

## Common variations

- App does not support Dynamic Type or text size accessibility settings
- App does not support Dark Mode and always displays a light interface
- App does not use standard iOS gestures (swipe-to-go-back, pull-to-refresh)
- App does not support multitasking or Split View on iPad
- App uses completely custom navigation instead of standard UIKit/SwiftUI patterns

## 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 does not support Dynamic Type, Dark Mode, or standard iOS gestures such as swipe-to-go-back. We encourage you to review the iOS Human Interface Guidelines and consider integrating features that iOS users have come to expect.
```

## Resolution steps

## How to Fix “App Does Not Include iOS Features”

1. **Add Dynamic Type support** — Replace hardcoded font sizes with `.preferredFont(forTextStyle:)` in UIKit or `.font(.body)` / `.font(.headline)` in SwiftUI. Test at the largest and smallest text sizes in Settings → Accessibility → Display & Text Size.

2. **Support Dark Mode** — Use semantic colors (`.label`, `.systemBackground`, `.secondarySystemGroupedBackground`) instead of hardcoded `.white` and `.black`. In SwiftUI, use `Color.primary`, `Color(.systemBackground)`, etc. Test by toggling Appearance in Settings.

3. **Enable swipe-to-go-back** — If using `UINavigationController`, this works automatically. If you’ve overridden it or use a custom navigation solution, restore the `interactivePopGestureRecognizer`.

4. **Support multitasking on iPad** — Enable all multitasking orientations in your target’s General settings. Ensure your layouts adapt to Split View and Slide Over sizes using Auto Layout or SwiftUI’s adaptive layout.

5. **Use the system share sheet** — Replace custom share implementations with `UIActivityViewController` or SwiftUI’s `.sheet` with `ShareLink`.

6. **Add accessibility labels** — Ensure all interactive elements have meaningful `accessibilityLabel` values. Test with VoiceOver enabled.

7. **Implement pull-to-refresh** — For scrollable content, add `UIRefreshControl` or SwiftUI’s `.refreshable` modifier.

8. **List integrated features in reviewer notes** — Explicitly state which iOS features you’ve added when resubmitting.

## Appeal guidance

Appeals can work if your app already supports several iOS features and the reviewer missed them. List every iOS feature you support with screenshots or a short video demo. If the rejection is vague, ask for specific details through the Resolution Center before investing in changes.

## Before / after examples

**Before:** // Hardcoded colors and fonts — no Dark Mode or Dynamic Type
Text("Welcome")
    .font(.system(size: 24))
    .foregroundColor(.black)
    .background(Color.white)
**After:** // Semantic colors and Dynamic Type
Text("Welcome")
    .font(.title)
    .foregroundStyle(.primary)
    .background(Color(.systemBackground))
**Why it works:** Using semantic text styles (.title, .body, .caption) enables Dynamic Type automatically. Semantic colors (.primary, .systemBackground) adapt to Dark Mode without any additional code.

**Before:** // Custom share with no system integration
Button("Share") {
    copyToClipboard(url)
    showToast("Link copied!")
}
**After:** // System share sheet with full iOS integration
ShareLink(item: url) {
    Label("Share", systemImage: "square.and.arrow.up")
}
**Why it works:** ShareLink (iOS 16+) presents the standard system share sheet, giving users access to AirDrop, Messages, Mail, and all their installed sharing extensions.

## Common questions

**Can you appeal a 4.0 rejection?**

Appeals can work if your app already supports several iOS features and the reviewer missed them. List every iOS feature you support with screenshots or a short video demo. If the rejection is vague, ask for specific details through the Resolution Center before investing in changes.

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

Typical turnaround is 1-2 weeks (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-does-not-include-ios-features*