Phase 5
Publish on the App Store
Xcode, signing, TestFlight, review
1 day + 1–3 days review0/8 done
The iOS path is shorter to describe but stricter to pass. Everything here needs a Mac with Xcode. Apple reviews every build by hand, so the polish work from Phase 3 matters more here than anywhere else.
npm install @capacitor/ios
npm run build
npx cap add ios
npx cap sync ios
npx cap open ios # opens Xcode- Select the App target → Signing & Capabilities.
- Tick Automatically manage signing and pick your Team. Xcode creates the certificate and provisioning profile for you.
- Confirm the Bundle Identifier is
com.example.myapp— it must match the App ID you register in App Store Connect. - General → set Display Name to
My App, Version to1.0.0, Build to1. - Set the Deployment Target to iOS 14 or later (Capacitor 7 requires 14+).
- Set supported orientations. If you only support portrait, say so — a broken landscape layout is a rejection.
iOS crashes the app instantly if you request a permission without a usage description, and Apple rejects vague ones. Write a specific sentence for every permission your plugins use, in ios/App/App/Info.plist.
<key>NSCameraUsageDescription</key>
<string>My App uses the camera so you can attach photos to your entries.</string>
<key>NSPhotoLibraryUsageDescription</key>
<string>My App needs photo access so you can choose an existing image.</string>
<key>NSLocationWhenInUseUsageDescription</key>
<string>My App uses your location to show nearby results.</string>- developer.apple.com → Certificates, Identifiers & Profiles → Identifiers → register
com.example.myappand enable any capabilities you use (Push Notifications, Sign in with Apple). - appstoreconnect.apple.com → My Apps → + → New App.
- Platform iOS, name (30 characters), primary language, the Bundle ID you just registered, and an SKU (any internal string).
- In Xcode set the run destination to Any iOS Device (arm64) — Archive is disabled for simulators.
- Product → Archive. Wait for the build.
- In the Organizer window: Distribute App → App Store Connect → Upload.
- Keep the default options (symbols included, manage version and build number automatically off).
- Processing in App Store Connect takes 10–60 minutes before the build appears.
- Internal testers (up to 100 people on your team) get builds immediately, no review.
- External testers (up to 10,000) require a short Beta App Review, usually under a day.
- Provide a test description and, if there is a login, working demo credentials.
- Install on a real iPhone and exercise every flow, especially permissions and offline.
| Field | Limit | Note |
|---|---|---|
| App name | 30 characters | Shown under the icon |
| Subtitle | 30 characters | The one-line pitch |
| Promotional text | 170 characters | Editable without a new build |
| Description | 4000 characters | Requires a new version to change |
| Keywords | 100 characters total | Comma separated, no spaces, no competitor names |
| Support URL | required | A real page that answers questions |
| Screenshots | 6.9" and 6.5" iPhone required | iPad set required if you support iPad |
Then complete the App Privacy questionnaire — the same content as Play's data safety form, asked differently. It must match what your app and SDKs actually do.
- Attach the processed build to the version.
- Fill in App Review Information: contact details, demo account, and notes explaining anything non-obvious (how to reach a feature, what a permission is for).
- Choose manual or automatic release after approval. Manual is safer for a first launch.
- Add to Review → Submit. Typical turnaround is 24–48 hours.
| Common rejection | Fix |
|---|---|
| 4.2 Minimum functionality — 'this is a website' | Add native features, offline state, proper navigation; explain the native value in review notes |
| 2.1 Incomplete information | Provide working demo credentials and reachable support URL |
| 5.1.1 Data collection | Do not force sign-up for features that do not need an account; add account deletion |
| 4.0 Design — broken layout | Fix safe areas, keyboard overlap, and the largest and smallest device sizes |
| 3.1.1 In-app purchase | Digital goods must use Apple's IAP, not your own checkout |
| Sign in with Apple missing | Required if you offer other third-party logins |