How to Publish an Ionic App on the App Store
Ionic apps use web technologies (HTML, CSS, JavaScript) wrapped in a native container via Capacitor (or the legacy Cordova). While this means your app runs in a WebView, modern Ionic apps with Capacitor can access native APIs and feel genuinely native. The App Store submission process requires generating an Xcode project from your web app and navigating Apple's standard review process. This guide covers the Ionic-specific workflow.
Prerequisites
- A Mac with Xcode 15+ installed
- An Apple Developer Program membership ($99/year)
- Node.js 18+ and npm/yarn installed
- Ionic CLI installed (npm install -g @ionic/cli)
- Capacitor configured in your Ionic project (ionic integrations enable capacitor)
Step-by-Step Build Process
Build the production web assets
Run `ionic build --prod`. This creates optimized, minified web assets in the www/ or build/ directory. Angular Ionic apps use `ionic build --prod --configuration=production`. React and Vue Ionic apps use their respective build tools.
Sync to the iOS native project
Run `npx cap sync ios`. This copies the web build to the native iOS project and installs any Capacitor plugins' native dependencies via CocoaPods. Always sync after changing web code or adding plugins.
Open in Xcode
Run `npx cap open ios` to open the Xcode workspace. Set your development team, bundle identifier, and deployment target. Review capacitor.config.ts for any iOS-specific settings.
Configure app appearance
Set the launch screen (LaunchScreen.storyboard) — don't use the default Capacitor splash screen in production. Configure status bar style and safe area handling for modern iPhones with notches.
Archive and distribute
Select 'Any iOS Device', archive via Product > Archive, validate, and distribute to App Store Connect. Ionic apps' archive process is identical to native apps once in Xcode.
Code Signing & Certificates
Standard Xcode signing
Use automatic signing with your Apple Developer team selected. Capacitor's Xcode project structure follows standard conventions, so signing works identically to native apps. No special configuration needed for Ionic.
Plugin native code signing
Some Capacitor plugins include native iOS code that appears as separate pods. These are handled by CocoaPods and signed automatically. Ensure `pod install` runs cleanly during `cap sync`.
Store Submission Steps
Create the app in App Store Connect
Set up the app with your bundle ID. Ionic/Capacitor apps appear as standard native apps to Apple — there's no need to disclose the hybrid nature of the app.
Upload and test with TestFlight
Upload via Xcode Organizer. Test thoroughly with TestFlight — WebView-based apps sometimes behave differently between iOS versions. Test on the oldest iOS version you support.
Prepare metadata and submit
Upload screenshots captured on real devices or simulators. Fill in descriptions and keywords. Submit for App Review. Include any demo credentials if the app requires login.
Common Rejection Reasons & Fixes
Guideline 4.0 - Minimum Functionality (web wrapper)
Apple may reject apps that are 'merely repackaged websites'. Ensure your Ionic app uses native features (camera, push notifications, haptics) via Capacitor plugins. Show Apple that the app provides functionality beyond what a mobile website offers.
Performance issues (slow loading, unresponsive)
Optimize your web bundle size aggressively. Use lazy loading for routes. Implement skeleton screens during loading. Enable hardware acceleration for animations. Apple expects 60fps interactions.
Navigation doesn't feel native
Use Ionic's iOS mode (`mode: 'ios'` in ionic config) which applies iOS-specific styling and animations. Implement swipe-to-go-back with Ionic's gesture system. Use `ion-back-button` for consistent navigation.
Offline functionality missing
If your app requires internet but doesn't gracefully handle offline state, Apple may reject it. Implement service workers or Capacitor's network plugin to detect connectivity and show appropriate UI.
Pro Tips
- Use Ionic's platform-specific styling (mode: 'ios') for App Store submissions — it makes WebView-based apps feel more native
- Implement Capacitor's SplashScreen plugin with a native splash screen, not a web-based one
- Use WKWebView performance optimizations: enable `limitsNavigationsToAppBoundDomains` for better JavaScript performance
- Consider using Capacitor's live reload during development but disable it for production builds
- Add native haptic feedback using Capacitor's Haptics plugin to enhance the native feel
Skip the hassle. Let us handle it.
Publishing a Ionic app on the App Store (iOS) involves dozens of steps, certificates, and potential rejection pitfalls. Our team handles the entire process for you — from build configuration to store approval.