App Store Submission
Instructions
App Store review is a gate every iOS app crosses. Most rejections are avoidable by knowing the rules and preparing metadata deliberately. Plan submissions; do not discover review at the end.
1. Accounts and Signing
- Apple Developer Program membership (paid) and an enrolled team.
- App ID registered with the bundle identifier that matches the Xcode project.
- Distribution certificate and provisioning profile for App Store distribution.
- App Store Connect app record created with matching bundle ID before the first upload.
- Use automatic signing for small teams; manual signing with profiles checked into secure storage for larger ones. Do not commit
.p12 files to the repo.
2. App Store Connect Metadata
Required for every locale you list:
- App name (30 chars) and subtitle (30 chars).
- Promotional text (170 chars), editable without review.
- Description (4000 chars).
- Keywords (100 chars, comma-separated).
- Support URL and marketing URL.
- Screenshots for required display sizes (6.7", 6.5", 5.5", iPad 12.9" as applicable). One display size can cover others via up-scaling rules, but provide at least the 6.7" and iPad sizes explicitly.
- App preview videos (optional, 15-30s).
- Category (primary + optional secondary).
- Age rating via questionnaire.
- App icon 1024x1024 PNG, no transparency, no rounded corners.
Keep screenshots in a Figma/Sketch file under version control; update per release.
3. Privacy Nutrition Label
Since iOS 14.3, every app declares data collection in the "App Privacy" section. Inventory every SDK and backend:
| Data type |
Collected? |
Linked to user? |
Tracking? |
Purpose |
| Email |
Yes |
Yes |
No |
Auth, account |
| Device ID |
Yes |
No |
No |
Analytics |
| Crash data |
Yes |
No |
No |
App functionality |
Rules:
- Every SDK counts. Analytics, crash reporters, and ads in third-party SDKs add to your disclosures.
- "Linked to user" means it can be tied to identity post-transmission.
- "Tracking" specifically means combining with data for advertising or sharing with data brokers. Tracking requires App Tracking Transparency (ATT) prompt under
NSUserTrackingUsageDescription.
- Update the label when you add/remove SDKs. Discrepancies are a rejection reason and a regulatory risk.
4. Permission Purpose Strings
Every sensitive permission needs a clear purpose string in Info.plist:
<key>NSCameraUsageDescription</key>
<string>Used to scan barcodes when adding an item to your pantry.</string>
<key>NSLocationWhenInUseUsageDescription</key>
<string>Used to find stores near you while you browse.</string>
<key>NSUserTrackingUsageDescription</key>
<string>Allows us to show more relevant ads.</string>
Be specific, user-centered, and honest. Generic strings ("for features") are rejected.
5. Export Compliance
Answer the encryption questions accurately:
- Standard HTTPS use typically qualifies for the exemption (
ITSAppUsesNonExemptEncryption = false).
- Using custom crypto or proprietary protocols requires an ERN (Encryption Registration Number) and potentially US BIS filings.
- Declare in
Info.plist to skip the Connect questionnaire per build.
6. Common Rejection Reasons
- Guideline 2.1 (App Completeness): broken features, crashes on launch, placeholder text.
- Guideline 2.3 (Accurate Metadata): screenshots that do not match the app, misleading promotional text.
- Guideline 3.1.1 (In-App Purchase): unlocking digital features through external payment. Must use IAP unless a reader-app or alt-payments exception applies.
- Guideline 4.0 (Design): poor UX, broken layouts, not respecting platform conventions.
- Guideline 5.1.1 (Data Collection): mandatory sign-up with no option to use app first, missing privacy policy URL.
- Guideline 5.1.5 (Location): collecting location not needed for declared features.
- Sign in with Apple: required when you offer third-party sign-in providers that are primarily social/identity (Google, Facebook).
Write a short reviewer notes text with test credentials and reproduction steps for features behind auth.
7. Build Submission Flow
- Archive in Xcode or CI (
xcodebuild -archive -exportArchive) producing a signed .ipa.
- Upload with
altool, xcrun notarytool, or Transporter. Automated CI: GitHub Actions + fastlane pilot.
- Wait for processing (minutes to an hour) in TestFlight.
- Distribute to internal testers, validate smoke.
- Submit for review via App Store Connect. Attach release notes.
- Review typically under 24 hours; complex apps longer.
8. Phased Release
Use App Store Connect's Phased Release to deliver to 1% -> 2% -> 5% -> 10% -> 20% -> 50% -> 100% over seven days. Pair with server-side feature flags and crash monitoring; see staged-rollouts.
9. Post-Release Hygiene
- Respond to reviews within a few days. Public tone matters.
- Monitor crash-free sessions and escalate on breach.
- Keep TestFlight builds flowing for the next version; do not wait a month between submissions or store cadence skills atrophy.
10. Anti-Patterns
- Starting metadata the day of submission.
- SDKs added without privacy-label review.
- Permission strings that paraphrase the OS text ("Needs camera access").
- Submitting a build that has not been on TestFlight.
- Ignoring the phased release curve and pushing 100% on day one.
Checklist
1---2name: app-store-submission3description: Apple App Store submission - review guidelines, metadata, privacy nutrition labels, encryption compliance, and common rejection patterns. Use when preparing a first or recurring submission.4---56# App Store Submission78## Instructions910App Store review is a gate every iOS app crosses. Most rejections are avoidable by knowing the rules and preparing metadata deliberately. Plan submissions; do not discover review at the end.1112### 1. Accounts and Signing1314- Apple Developer Program membership (paid) and an enrolled team.15- App ID registered with the bundle identifier that matches the Xcode project.16- Distribution certificate and provisioning profile for App Store distribution.17- App Store Connect app record created with matching bundle ID before the first upload.18- Use **automatic signing** for small teams; **manual signing** with profiles checked into secure storage for larger ones. Do not commit `.p12` files to the repo.1920### 2. App Store Connect Metadata2122Required for every locale you list:2324- **App name** (30 chars) and **subtitle** (30 chars).25- **Promotional text** (170 chars), editable without review.26- **Description** (4000 chars).27- **Keywords** (100 chars, comma-separated).28- **Support URL** and **marketing URL**.29- **Screenshots** for required display sizes (6.7", 6.5", 5.5", iPad 12.9" as applicable). One display size can cover others via up-scaling rules, but provide at least the 6.7" and iPad sizes explicitly.30- **App preview videos** (optional, 15-30s).31- **Category** (primary + optional secondary).32- **Age rating** via questionnaire.33- **App icon** 1024x1024 PNG, no transparency, no rounded corners.3435Keep screenshots in a Figma/Sketch file under version control; update per release.3637### 3. Privacy Nutrition Label3839Since iOS 14.3, every app declares data collection in the "App Privacy" section. Inventory every SDK and backend:4041| Data type | Collected? | Linked to user? | Tracking? | Purpose |42| --- | --- | --- | --- | --- |43| Email | Yes | Yes | No | Auth, account |44| Device ID | Yes | No | No | Analytics |45| Crash data | Yes | No | No | App functionality |4647Rules:4849- Every SDK counts. Analytics, crash reporters, and ads in third-party SDKs add to your disclosures.50- "Linked to user" means it can be tied to identity post-transmission.51- "Tracking" specifically means combining with data for advertising or sharing with data brokers. Tracking requires **App Tracking Transparency** (ATT) prompt under `NSUserTrackingUsageDescription`.52- Update the label when you add/remove SDKs. Discrepancies are a rejection reason and a regulatory risk.5354### 4. Permission Purpose Strings5556Every sensitive permission needs a clear purpose string in `Info.plist`:5758```xml59<key>NSCameraUsageDescription</key>60<string>Used to scan barcodes when adding an item to your pantry.</string>61<key>NSLocationWhenInUseUsageDescription</key>62<string>Used to find stores near you while you browse.</string>63<key>NSUserTrackingUsageDescription</key>64<string>Allows us to show more relevant ads.</string>65```6667Be specific, user-centered, and honest. Generic strings ("for features") are rejected.6869### 5. Export Compliance7071Answer the encryption questions accurately:7273- Standard HTTPS use typically qualifies for the exemption (`ITSAppUsesNonExemptEncryption = false`).74- Using custom crypto or proprietary protocols requires an **ERN** (Encryption Registration Number) and potentially US BIS filings.75- Declare in `Info.plist` to skip the Connect questionnaire per build.7677### 6. Common Rejection Reasons7879- **Guideline 2.1 (App Completeness)**: broken features, crashes on launch, placeholder text.80- **Guideline 2.3 (Accurate Metadata)**: screenshots that do not match the app, misleading promotional text.81- **Guideline 3.1.1 (In-App Purchase)**: unlocking digital features through external payment. Must use IAP unless a reader-app or alt-payments exception applies.82- **Guideline 4.0 (Design)**: poor UX, broken layouts, not respecting platform conventions.83- **Guideline 5.1.1 (Data Collection)**: mandatory sign-up with no option to use app first, missing privacy policy URL.84- **Guideline 5.1.5 (Location)**: collecting location not needed for declared features.85- **Sign in with Apple**: required when you offer third-party sign-in providers that are primarily social/identity (Google, Facebook).8687Write a short reviewer notes text with test credentials and reproduction steps for features behind auth.8889### 7. Build Submission Flow90911. Archive in Xcode or CI (`xcodebuild -archive -exportArchive`) producing a signed `.ipa`.922. Upload with `altool`, `xcrun notarytool`, or Transporter. Automated CI: GitHub Actions + `fastlane pilot`.933. Wait for processing (minutes to an hour) in TestFlight.944. Distribute to internal testers, validate smoke.955. Submit for review via App Store Connect. Attach release notes.966. Review typically under 24 hours; complex apps longer.9798### 8. Phased Release99100Use App Store Connect's **Phased Release** to deliver to 1% -> 2% -> 5% -> 10% -> 20% -> 50% -> 100% over seven days. Pair with server-side feature flags and crash monitoring; see `staged-rollouts`.101102### 9. Post-Release Hygiene103104- Respond to reviews within a few days. Public tone matters.105- Monitor crash-free sessions and escalate on breach.106- Keep TestFlight builds flowing for the next version; do not wait a month between submissions or store cadence skills atrophy.107108### 10. Anti-Patterns109110- Starting metadata the day of submission.111- SDKs added without privacy-label review.112- Permission strings that paraphrase the OS text ("Needs camera access").113- Submitting a build that has not been on TestFlight.114- Ignoring the phased release curve and pushing 100% on day one.115116## Checklist117118- [ ] Bundle ID, App ID, signing certs, and App Store Connect record all aligned.119- [ ] Metadata (icon, screenshots, description, keywords) complete per locale.120- [ ] Privacy nutrition label matches current SDK inventory.121- [ ] Every permission has a clear, specific purpose string.122- [ ] Export compliance declared.123- [ ] Reviewer notes provide test credentials and repro steps.124- [ ] Build has been on TestFlight for internal validation.125- [ ] Phased release enabled with a halt plan.126- [ ] Guideline-4.0 and 2.3 self-check performed on screenshots and flows.127- [ ] Sign in with Apple offered when required.