App Store Submission Checklist
App Store Submission Checklist
Project: {{PROJECT_NAME}} Version: {{APP_VERSION}} Build: {{BUILD_NUMBER}} Date: {{DATE}} Author: {{AUTHOR}} Status: Draft | In Review | Approved Reviewers: {{REVIEWERS}}
Document History
| Version | Date | Author | Changes |
|---|---|---|---|
| 0.1 | {{DATE}} | {{AUTHOR}} | Initial draft |
Pre-Submission Requirements
General Readiness
- All P1 and P2 bugs resolved — issue tracker link:
{{URL}} - QA sign-off obtained — sign-off document:
{{URL}} - Legal sign-off obtained (privacy policy, terms) —
{{URL}} - Release notes written and reviewed
- Version number follows
{{SemVer: MAJOR.MINOR.PATCH}} - Build number incremented (monotonically — never reused)
- All environment variables set for production
- Crash-free rate > 99.5% in staging (Sentry)
- Analytics verified — events firing correctly in staging
Apple App Store
App Store Connect Setup
- App record created in App Store Connect
- App ID registered in Apple Developer Portal
- Capabilities match Xcode project:
{{list capabilities used}} - Provisioning profiles up to date (distribution profile)
- Code signing certificate valid (not expiring within 30 days)
- App Store Connect API key configured for CI/CD submission
App Metadata
- App name:
{{App name}}(max 30 chars) - Subtitle:
{{Subtitle}}(max 30 chars) — highlights key feature - Description:
{{Description}}(max 4000 chars) — engaging, keyword-rich - Keywords:
{{keyword1, keyword2, ...}}(max 100 chars total, comma-separated) - Promotional text:
{{Promo text}}(max 170 chars) — can update without new build - Support URL:
{{https://support.domain.com}} - Marketing URL:
{{https://domain.com}} - Privacy policy URL:
{{https://domain.com/privacy}} - Age rating completed (4+ / 12+ / 17+)
- Category: Primary:
{{Category}}| Secondary:{{Category}} - Copyright:
{{Year}} {{Company Name}}
Screenshots
| Device | Dimensions | Required | Status |
|---|---|---|---|
| iPhone 6.7" (15 Pro Max) | 1320×2868 | Required | {{Done/TODO}} |
| iPhone 6.5" (11 Pro Max / 12 Pro Max) | 1242×2688 | Required | {{Done/TODO}} |
| iPhone 5.5" (8 Plus) | 1242×2208 | Required | {{Done/TODO}} |
| iPad Pro 12.9" (6th gen) | 2048×2732 | Required if iPad supported | {{Done/TODO}} |
| iPad Pro 12.9" (2nd gen) | 2048×2732 | Required if iPad supported | {{Done/TODO}} |
Screenshot rules:
- Max 10 screenshots per device
- First screenshot = most compelling (primary impression)
- No device frames required (add if chosen)
- No "Download on the App Store" badge in screenshots
- Text overlays readable at thumbnail size
- No third-party IP without permission
App Preview video (optional):
- Max 30 seconds, format MP4 or MOV
- Actual app footage — no simulated/demo content
App Privacy Details
- Data types collected declared — mapped to usage purpose:
| Data Type | Collected? | Linked to User? | Used for Tracking? |
|---|---|---|---|
| Name | {{Yes/No}} |
{{Yes/No}} |
{{Yes/No}} |
{{Yes/No}} |
{{Yes/No}} |
{{Yes/No}} |
|
| Phone | {{Yes/No}} |
{{Yes/No}} |
{{Yes/No}} |
| Location (precise) | {{Yes/No}} |
{{Yes/No}} |
{{Yes/No}} |
| Location (coarse) | {{Yes/No}} |
{{Yes/No}} |
{{Yes/No}} |
| Usage data | {{Yes/No}} |
{{Yes/No}} |
{{Yes/No}} |
| Crash data | {{Yes/No}} |
{{Yes/No}} |
{{Yes/No}} |
| Identifiers (device ID) | {{Yes/No}} |
{{Yes/No}} |
{{Yes/No}} |
- App Tracking Transparency (ATT) framework implemented if using IDFA
- NSUserTrackingUsageDescription string provided in Info.plist
Review Guidelines Compliance
- No private API usage (review using
{{otool | MachOView}}) - No undocumented device capabilities
- In-app purchase implemented for digital goods (not bypassing IAP)
- External payment links removed or comply with court order rules (US only)
- Login options: if Sign in with Apple is available elsewhere, it MUST be offered
- User account deletion implemented (required since June 2022)
- App functions as described — demo account provided for review if needed
Demo account for App Review:
- Username:
{{[email protected]}} - Password:
{{vault reference}} - Notes to reviewer:
{{special setup instructions}}
TestFlight Beta Testing
- Internal testing completed (team members — up to 100)
- External beta testing completed — testers:
{{N}}, duration:{{N days}} - Crash rate < 1% in TestFlight
- Beta feedback addressed
- What's New in This Version:
{{Beta release notes}}
App Transport Security
- All network connections use HTTPS
- No
NSAllowsArbitraryLoads: true(or justified withNSExceptionDomains) - Certificate pinning active for critical endpoints
- ATS exceptions documented:
{{list any exceptions and justification}}
Common iOS Rejection Reasons — Prevention
| Risk | Prevention |
|---|---|
| Crashes on launch | Test on physical device, clean install |
| Misleading screenshots | Screenshots match actual app UI |
| Login required without guest mode | Provide review demo account |
| Missing privacy strings | All NS*UsageDescription keys populated |
| IAP bypass | All digital content purchases go through IAP |
| Placeholder content | Remove all Lorem Ipsum, test data |
| Performance issues on older devices | Test on min supported device |
Google Play Store
Google Play Console Setup
- App created in Google Play Console
- Signing key configured (Play App Signing — recommended)
- Service account configured for CI/CD API access
- Developer account in good standing
Store Listing
- App name:
{{App name}}(max 50 chars) - Short description:
{{Short desc}}(max 80 chars) - Full description:
{{Full description}}(max 4000 chars) - App icon: 512×512 PNG, no alpha, no rounded corners (Play adds them)
- Feature graphic: 1024×500 JPG/PNG — shown at top of listing
- Screenshots: min 2, max 8 per device type
| Device | Min Dimensions | Status |
|---|---|---|
| Phone | 320×568 (min), 3840×3840 (max) | {{Done/TODO}} |
| 7" tablet | Same constraints | {{Done/TODO}} |
| 10" tablet | Same constraints | {{Done/TODO}} |
Content Rating Questionnaire
- IARC questionnaire completed in Play Console
- Rating certificate generated and applied
- Rating matches app content (honest answers — inaccurate rating = suspension)
Data Safety Form
- Data types collected declared
- Data sharing disclosures complete
- Security practices answered:
- Data in transit encrypted:
{{Yes/No}} - Data at rest encrypted:
{{Yes/No}} - Users can request deletion:
{{Yes/No}}
- Data in transit encrypted:
Target Audience & Content
- Target age group declared (under 13? — COPPA compliance required)
- Ads configuration (if using ads) — appropriate ad formats for age group
- Sensitive app permissions justified in declaration
Testing Tracks
| Track | Audience | Status |
|---|---|---|
| Internal testing | Up to 100 internal testers | {{Done/TODO}} |
| Closed testing (alpha) | Limited testers, feedback | {{Done/TODO}} |
| Open testing (beta) | Public opt-in | {{Done/TODO}} |
| Production | 100% rollout / staged | {{Done/TODO}} |
Staged rollout: Start at {{10%}} → increase after {{48 hours}} → {{100%}}
Common Android Rejection Reasons — Prevention
| Risk | Prevention |
|---|---|
| Permission over-declaration | Request only necessary permissions |
| Misleading app behavior | App does exactly what listing says |
| Policy violations (ads) | No interstitials on back press, no deceptive ads |
| Malware detection | Scan APK/AAB with VirusTotal before upload |
| Crashes | Test on multiple API levels, both ARM architectures |
| Data safety inaccurate | Audit all SDKs for data collection |
Cross-Platform Checklist
Version Naming
| Field | iOS | Android | Value |
|---|---|---|---|
| Version string | CFBundleShortVersionString |
versionName |
{{X.Y.Z}} |
| Build number | CFBundleVersion |
versionCode |
{{N}} (monotonic) |
Version naming convention: MAJOR.MINOR.PATCH
- MAJOR: Breaking change / major redesign
- MINOR: New feature
- PATCH: Bug fix / performance
Release Notes Format
What's new in v{{X.Y.Z}}:
• {{New feature 1}}
• {{Bug fix 1}}
• {{Improvement 1}}
Questions or feedback? Contact us at support@{{domain.com}}
Rules:
- Max 500 characters (App Store) / 500 characters (Play Store)
- Translate for each supported locale
- No marketing language — factual changes only
- Reference to known issues if applicable
Marketing Assets
- App icon final (no placeholder)
- Feature graphic final (Google Play)
- Press kit updated:
{{URL}} - App preview video (if applicable)
- Social media announcement content prepared
Legal Requirements
- Privacy Policy URL:
{{URL}}— covers all data collected - Terms of Service URL:
{{URL}} - GDPR: Right to deletion implemented
- CCPA: Do Not Sell link (if US users)
- COPPA: Kids category compliance (if < 13)
- In-app purchase terms linked
Final Submission Sign-Off
| Item | Status | Sign-Off |
|---|---|---|
| All checklist items complete | {{Yes/No}} |
|
| QA approval received | {{Yes/No}} |
|
| Legal approval received | {{Yes/No}} |
|
| Marketing assets ready | {{Yes/No}} |
|
| Support team briefed | {{Yes/No}} |
Approval
| Role | Name | Date | Signature |
|---|---|---|---|
| Author | |||
| Mobile Lead | |||
| QA Lead | |||
| Product Manager | |||
| Legal |
No comments to display
No comments to display