Guideline 4.0

Guideline 4.0 - Design: Splash Screen Misuse or Slow Launch

Low RiskEasyTypical Fix: 2-4 hours0 Reports
Also known as:Launch screen displays a large company logo and taglineLaunch screen shows a loading spinner or progress barLaunch screen includes advertising or promotional contentApp intentionally delays launch to show branding for several secondsLaunch screen appearance does not match the first screen of the app

Our Take

Apple rejected your app because the launch screen (splash screen) violates their guidelines. This can mean the launch screen includes advertising, branding beyond a simple logo, text content, or loading indicators. It can also mean the app takes too long to reach an interactive state after launch. Apple requires the launch screen to be a static placeholder that closely resembles the first screen of your app, creating the illusion of a fast launch.

Resolution Guide

01

**Redesign your LaunchScreen.storyboard** — The launch screen should be a static representation of your app's first screen. Include the same background color, navigation bar placeholder, and tab bar outline — but no dynamic content, text, or images that change.


02

**Remove branding from the launch screen** — A small, centered app icon is acceptable but a full logo, tagline, or company name is not. If your app opens to a feed, make the launch screen look like an empty version of that feed.


03

**Remove artificial delays** — Delete any `sleep()`, `DispatchQueue.asyncAfter`, or `Timer` that holds the launch screen visible. The system should transition to your first view controller as soon as it's ready.


04

**Optimize app startup time** — Move heavy initialization (network requests, database migrations, analytics setup) to background queues. The main thread must reach `viewDidAppear` quickly:

```swift

func application(_ application: UIApplication,

didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {

// Only essential, synchronous setup here

DispatchQueue.global().async {

self.heavyInitialization()

}

return true

}

```

05

**Remove loading spinners from the launch screen** — LaunchScreen.storyboard does not support animations or dynamic content. If you need a loading state, show it on your first view controller after launch, not on the launch screen.


06

**Test launch time** — Use Xcode's Time Profiler and the `DYLD_PRINT_STATISTICS` environment variable to measure launch time. Aim for under 400ms to the first frame.


07

**Match the launch screen to your app's first screen** — If your app opens to a tab bar with a white background, the launch screen should show the same tab bar outline and white background.


Example Rejection Email

From:Apple App Review Team
Subject:Guideline 4.0 - Design: Splash Screen Misuse or Slow Lau
Your app displays a launch screen that includes advertising, branding, or text that is not part of the initial user interface. Specifically, your app's launch screen displays your company logo, tagline, and a loading spinner for approximately 4 seconds before showing the main interface. The launch screen should provide a simple placeholder that closely matches the first screen of your app, as described in the Human Interface Guidelines. Next Steps: Please revise your launch screen and ensure your app launches promptly.

Consider Appealing

Do not appeal this rejection. The fix is simple and Apple is consistent about enforcing launch screen guidelines. Even if you feel your branding is minimal, remove it and resubmit — it is not worth the appeal delay.

Generate Appeal

Before & After

Before — Rejected

<!-- LaunchScreen.storyboard: branded splash with logo and tagline -->

<viewController>

<view>

<imageView image="company_logo"

contentMode="scaleAspectFit"

centerX="superview" centerY="superview" />

<label text="Your Tagline Here"

font="system 18"

centerX="superview"

top="logo.bottom + 16" />

<activityIndicatorView style="medium"

centerX="superview"

top="tagline.bottom + 24" />

</view>

</viewController>

After — Approved

<!-- LaunchScreen.storyboard: matches the app's first screen -->

<viewController>

<view backgroundColor="systemBackground">

<!-- Empty navigation bar placeholder -->

<view backgroundColor="systemBackground"

top="safeArea.top" height="44"

leading="superview" trailing="superview" />

<!-- Empty content area matching the main feed layout -->

<view backgroundColor="secondarySystemBackground"

top="navBar.bottom" bottom="tabBar.top"

leading="superview" trailing="superview" />

<!-- Tab bar placeholder -->

<view backgroundColor="systemBackground"

bottom="safeArea.bottom" height="49"

leading="superview" trailing="superview" />

</view>

</viewController>

What changed: The launch screen should be a static skeleton of your app's first screen — same background colors, navigation bar shape, and tab bar outline. No logos, no text, no spinners. This creates the illusion of an instant launch.

Community Solutions · 0

Sign in to share your solution.

More Guideline 4 (Design) rejections

View all Guideline 4 rejections