What is minimum functionality?
App stores require apps to provide real value Both Apple and Google reject apps that are too simple, feel like websites wrapped in an app shell, or don’t offer meaningful native functionality. This applies to all native apps, whether built with React Native, SwiftUI, Kotlin, Flutter, or Despia. Every native app must provide native value. Common rejection messages:- “Your app does not provide enough functionality to be suitable for the App Store”
- “This app appears to be a repackaged website”
- “The app lacks the features expected of an app in this category”
Why this happens
Easy deployment invites misuse Despia makes it simple to build and deploy native apps from web technologies. That’s a feature, but it also means some users try to submit things that were never meant to be apps, like landing pages, single-screen brochures, or simple contact forms. App stores reject these submissions regardless of how they were built. A landing page built in SwiftUI would get the same rejection as one built with Despia. Common mistakes:- Submitting a landing page or marketing site as an app
- No native features like push notifications, offline support, or haptics
- Limited interactivity or depth
- Single-screen apps with minimal navigation
- Layout looks like a mobile website instead of a native app
How to fix it
Priority order: Mobile UI/UX comes first. Even with native features, a website-style layout will get rejected. Get the foundation right, then add native capabilities on top.Make your app look like an app
Mobile apps have a distinct layout pattern Reviewers recognize mobile website layouts instantly. If your app has sidebars, hamburger menus, or top navigation bars like a desktop site, it signals “website wrapper” immediately. What reviewers expect to see:- Top bar showing the current page title (optional back button)
- Content area in the middle
- Bottom navigation bar with icons for main sections
- No sidebars or dropdown menus
- No desktop-style top navigation
Foundation architecture
Applications require a root frame element that establishes viewport boundaries- Use
position: fixedfor root frame (do not useheight: 100vh) - Include dedicated safe area spacer elements
- Header and footer use
flex-shrink: 0(non-scrolling) - Content area uses
flex: 1andoverflow-y: auto(scrollable) - Apply
scrollbar-width: nonefor native appearance
Device boundaries
Safe area variables The Despia runtime automatically injects CSS variables for device-specific boundary insets (notches, status bars, home indicators).Bottom navigation example
Use clean, minimal SVG icons with current state highlighting:- Keep to 3-5 items maximum
- Highlight current tab with color or fill
- Labels are optional but helpful
- Use consistent icon style (outline or filled)
Add native functionality
Show reviewers your app does more than a browser Despia provides native features through thedespia-native SDK. These universal features help any app pass review:
1. Push notifications. Register for remote push via OneSignal.
/despia/local.json manifest. The native container caches assets and serves them offline.
See: Localhost Server
Fix: Implement at least two native features before resubmitting. See the full SDK reference for all available features.
Conditionally hide web UI in native
If you have a PWA, hide web-specific features in the native app Some features make sense on the web but not in a native app, like Stripe checkout buttons, cookie banners, or PWA install prompts. Use user agent detection to show the right UI for each environment. See: User Agent Detection Basic platform detection:- Stripe/web payment buttons (use RevenueCat instead)
- Cookie consent banners
- PWA install prompts
- Browser-specific footer links
- “Open in app” banners
despia-iphone, despia-ipad, or despia-android for quick testing without deploying to a device.
Differentiate from your website
Your app should feel distinct If your app looks exactly like your website, reviewers will reject it. Example problem:- Website lives at
https://example.com - App loads
https://example.comwith no changes - Reviewer sees no reason for the app to exist
- Use bottom navigation instead of website menus
- Add haptic feedback to buttons and interactions
- Use biometric login instead of password-only
- Enable push notifications for updates
- Add offline support so the app works without internet
- Remove browser-specific elements like footer links and cookie banners
Add depth and content
Thin apps get rejected Single-purpose apps with minimal screens are high-risk. What reviewers want to see:- Multiple screens or sections
- Interactive elements like forms, filters, and search
- User-generated content or personalization
- Regular content updates
- App has one screen showing business hours and a contact form
- This works fine as a website but fails as an app
Write a strong App Store description
Help reviewers understand your app’s value A vague description makes reviewers assume the worst. Bad description:“Access our website on your phone.”Better description:
“Get instant push notifications when your order ships, unlock the app with Face ID, and browse products offline. Includes haptic feedback for a responsive native experience.”Fix: List specific native features and benefits. Mention push notifications, biometrics, and offline support explicitly.
Use the reviewer notes field
Explain what makes your app an app When submitting, use the reviewer notes to preempt objections. Include:- Which native features you implemented
- How the app differs from your website
- Why users benefit from the app vs. browser
“This app uses native features including push notifications via OneSignal, Face ID authentication through Identity Vault, haptic feedback on all interactive elements, and full offline support via localhost server. The app experience is streamlined for mobile with bottom tab navigation and proper safe area handling.”Fix: Write detailed reviewer notes for every submission.
Quick checklist
Layout (get this right first):- App uses mobile layout pattern (bottom nav, no sidebars)
- Root frame uses
position: fixed(notheight: 100vh) - Safe areas handled with dedicated spacer elements
- Viewport meta tag includes
viewport-fit=cover - Browser-specific elements removed
- At least two native features implemented via
despia-native - Push notifications registered and configured
- Haptic feedback added to key interactions
- App experience differs from public website
- App has multiple screens or meaningful depth
- App Store description highlights native functionality
- Reviewer notes explain app value
Native features that help pass review
Highest impact:- Mobile-like UI/UX (bottom navigation, no sidebars, proper safe areas)
- Push notifications (
registerpush://,setonesignalplayerid://) - Local notifications (
sendlocalpushmsg://) - Offline support (
@despia/locallocalhost server) - Biometric authentication (
setvault://withlocked=true)
- Haptic feedback (
successhaptic://,errorhaptic://, etc.) - Native sharing (
shareapp://) - Safe area CSS variables (
var(--safe-area-top),var(--safe-area-bottom))
Still stuck?
If you keep getting rejected:- Read the full rejection reason carefully. Apple and Google often include specific guidance.
- Compare your app to approved competitors. What native features do they use?
- Contact support: support@despia.com with:
- Your rejection notice in full
- Current app URL
- List of native features implemented
- How your app differs from your website