
Why the App Was Rejected (Guideline 4.0 – Design)
Apple rejected the Mac version of LingoBoard under App Store Review Guideline 4.0 (Design), citing a user experience issue related to window behavior.
According to the review feedback, when the user closes the main application window using the red close button in the upper-left corner, the app remains running in the background, but there is no clear way for the user to reopen the main window from the menu.
From Apple’s perspective, this creates confusion and results in a lower-quality user experience than expected on macOS.
Why This Is Considered a Design Issue
In a single-window macOS application, closing the main window does not necessarily terminate the app process. The application may still appear active in the system menu bar.
Apple expects that in this state, users should always have a clear and discoverable way to bring the main window back.
If the app remains running after the window is closed:
- There must be a menu item that allows the user to reopen the main window
- This menu item is typically placed under the Window menu, following common macOS conventions
The absence of such an option breaks platform expectations and is treated as a design issue, not a technical one.
What I Initially Got Wrong
I assumed that closing the main window was equivalent to exiting the app, since the primary interface was no longer visible.
However, on macOS, Apple considers the app to be “alive” as long as the process is running.
From a user’s point of view, an app that is running but has no visible entry point is confusing and feels broken.
This mismatch between developer assumptions and platform conventions is what triggered the rejection.
How I Fixed It
There are two acceptable approaches to resolve this issue:
Option 1: Fully Terminate the App When the Window Is Closed
If the app is designed around a single window, it can be configured to quit entirely when the user closes that window. In this case, the user reopens the app by launching it again from the Dock or Applications folder.
func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool {
return true
}