Skip to content
Back to Blog
·6 min read

App Store pre-submit checklist for indie developers

A checklist worth going through before you press Submit for Review in App Store Connect, in a practical order. Build, listing, media, in-app purchases, review notes and what to do after you submit, each with one line of why and a link to the guide or browser tool that checks it.

Most App Store rejections are not hard problems. In our experience they are small things nobody looked at closely: a word in the subtitle, a purchase that was not attached, a screenshot with an alpha channel. It helps to go through a list like this by hand, in this order, on real devices, before you submit. Each item says why it matters and where to check it.

Why this order

  • Build first. A new build means re-checking everything that reads the build: permissions, privacy manifest, screenshots of the UI.
  • Listing and media next. Once a version is waiting for review, App Store Connect locks its screenshots and previews, so fixing a wrong image means removing the version from review.
  • Purchases and notes last. They depend on the final build and the final listing, and they are the items most often forgotten in the last ten minutes.

Build

  1. The build is signed for distribution. A development-signed build can upload fine and then turn into Invalid Binary after you submit. Open the embedded profile in our provisioning profile viewer and check that it is an App Store profile and that get-task-allow is not in the entitlements.
  2. Every entitlement has a reason. If you cannot explain an entitlement in one sentence, remove it. Over-broad entitlements are a Mac App Store rejection in their own right; see the Mac App Store checklist.
  3. The privacy manifest is in the build. Apple's docs say that since May 1, 2024, App Store Connect does not accept apps that use a "required reason" API without declaring the reason in PrivacyInfo.xcprivacy. Build or check one with the privacy manifest generator.
  4. Every permission has a purpose string, and it explains. Apple requires a purpose string for every protected resource your code touches. Explain what the access is for; never pressure ("allow this or the app won't work"), which reads as coercion under Guideline 5.1.1. Read the strings out of the actual .ipa with the IPA inspector.
  5. The export compliance key is set. Without ITSAppUsesNonExemptEncryption in Info.plist, App Store Connect walks you through the export compliance questions every time you upload. Set it to NO only if your app really uses no encryption, or only exempt encryption.
  6. Debug switches are compiled out. A switch that unlocks paid features while you test, or shows a stand-in price, must sit inside #if DEBUG. Guideline 2.5.19 forbids hidden or undocumented features, and a free-unlock switch in a release binary is exactly that.
  7. The icon comes from one opaque 1024 × 1024 source. Make the whole set from one file with the app icon generator, so no size is stale or transparent.
  8. Universal links resolve. If you use associated domains, check the live apple-app-site-association file with the AASA validator before the reviewer taps a link.
  9. Every language you list is translated. Open your string catalog in the xcstrings translation progress tool. A language at 70% shows English in the middle of the UI.
  10. A cold start works, on iPhone and on iPad. Install on a clean device, deny every permission, and walk the first path with no data. In our submissions, review of iPhone-only apps ran on an iPad Air, and Guideline 2.4.1 says iPhone apps should run on iPad whenever possible. More in 2.1, App Completeness.

Listing

  1. Every field is inside Apple's limits. Name 30 characters, subtitle 30, promotional text 170, description 4000, What's New 4000, keywords 100. Paste each language into the App Store metadata checker.
  2. The keyword field has no wasted words. Words already in the name or subtitle, and plurals of words you already have, are wasted. Full rules in how to fill the keyword field.
  3. No price words. "Free", "50% off" or a price in the name, subtitle or screenshots draws Guideline 2.3.7. See the price words guide.
  4. No one else's brand. A competitor's name in the subtitle or keywords is a 4.1(c) or 5.2.5 problem. See brand names in metadata.
  5. The store name matches the name under the icon, in every language. See 2.3.8, name mismatch.
  6. Paid features are labelled. If the description lists something that needs a purchase, say so. See 2.3.2, paid features.
  7. What's New names real changes. Guideline 2.3.12 allows a generic note only for bug fixes and small improvements.
  8. Promotional text is not a second keyword field. Apple says promotional text doesn't affect search ranking; use it for what is new right now.
  9. The support and privacy policy links open. Apple lists broken links among the most common review issues.

Media

  1. Screenshots are accepted sizes, with no alpha channel. App Store Connect requires at least one screenshot for the iPhone with Dynamic Island (medium display), plus iPad 13-inch if the app runs on iPad, and its help says images can't include alpha channels or transparencies. Check and fix files in the screenshot sizes tool.
  2. Screenshots show the real app, as a free user sees it. Not a splash screen, not a feature the build does not have. See 2.3.3, screenshots.
  3. Previews meet the spec. 15 to 30 seconds, at most 30 frames per second, and only screen capture of the app itself (Guideline 2.3.4). Check the file in the app preview video checker.

In-app purchases

  1. Every product is in the same submission as the version. Apple's help says the app version, the subscription group and every purchase you want reviewed together "must all be added to the same draft submission before you click Submit for Review", and the first purchase of each type must go with a new app version. They are not included unless you add them. A missing one came back to us as a 2.1(b) rejection.
  2. The paywall works on a device and on iPad. Products load, the buy button responds, restore works. A paywall that freezes is a 2.1(a) rejection, and the reviewer may be holding an iPad.
  3. The price is one you chose on purpose. Check what you keep after Apple's commission with the commission calculator.

Review notes and demo account

  1. The notes explain what is hard to find. Where the paid features are, why each background mode is used (see 2.5.4, background modes), and what the app does on the network if it might look like a VPN (see the VPN question). The notes field holds up to 4000 bytes.
  2. The demo account works and does not expire. If the app has no login, make sure "Sign-in required" is not ticked. Fill in the contact phone in international format; the field does not accept a number without the country code.

After you submit

  1. Leave it alone. Apple says it typically reviews at least 50% of submissions in under 24 hours and 90% in under 48. Pick the version release option (manual, on approval, or on a date) before you submit, not after approval.
  2. If it comes back rejected, read the guideline number before you change anything. A step-by-step approach is in what to do after a rejection.
  3. After release, see where the app sits in the charts by country with our App Store rank checker, and if you sell subscriptions, track them with the subscription metrics calculator.

One-minute check

If you only have a minute, do the three items that are easiest to miss: open the version page and confirm every in-app purchase is in the submission, paste each language's subtitle into the metadata checker, and launch the build once on an iPad simulator. More browser tools for releases are on the toolkit page.

These notes draw on rejections Obelisk Club's own apps have received. Apple's wording and App Store Connect change; check the current App Review Guidelines and App Store Connect Help before you submit.

Written by

Building local-first Mac & iOS productivity apps at Obelisk Club. About the author →