How to Submit an iOS App with In-App Purchases to the App Store (2026 Complete Guide)

Submitting an iOS app to the App Store is straightforward once you know the steps. Add in-app purchases — especially auto-renewable subscriptions — and there are a dozen extra requirements that can get your app rejected if you miss even one. This guide walks you through the entire process from App Store Connect setup to passing App Review.


What You’ll Need Before You Start

  • An active Apple Developer Program membership ($99/year)
  • Your app built and archived in Xcode
  • An App Store Connect account with your app record created
  • In-app purchase or subscription products created in App Store Connect
  • A Privacy Policy URL hosted publicly (required for any app with subscriptions)

Step 1 — Set Up Your In-App Purchases in App Store Connect

Before you touch Xcode, your products need to be fully configured in App Store Connect. Incomplete product setup is the most common reason the Subscribe button appears grayed out on production builds.

For Auto-Renewable Subscriptions:

1. Create a Subscription Group

  • In App Store Connect, go to your app → Monetization → Subscriptions
  • Click the + button to create a Subscription Group (e.g. “Premium Plans”)
  • Give it a Reference Name — this is internal only

2. Add Your Subscription Products Click + inside the group to add each product. For each one you need:

  • Reference Name — internal label (e.g. “Monthly Plan”)
  • Product ID — must match your code exactly, e.g. com.yourapp.premium.monthly
  • Duration — 1 month, 6 months, 1 year, etc.

3. Set Pricing

  • Click Subscription Prices → +
  • Select your base country and price tier
  • App Store Connect will auto-populate prices for other regions

4. Add Localization — This Is Required This is the most commonly missed step. Without it your product stays in “Missing Metadata” status and StoreKit cannot fetch it on production.

  • Scroll to Localization → Add Localization
  • Select English (U.S.)
  • Fill in Subscription Display Name (what users see, e.g. “Monthly”)
  • Fill in Description (e.g. “Full access to session history and location logs”)
  • Click Add, then Save

5. Upload a Review Screenshot

  • Scroll to Review Information
  • Upload a screenshot of your paywall as it appears in your app
  • This is required — Apple reviewers use it to verify your purchase flow

6. Confirm Status is “Ready to Submit” After completing all fields and saving, the yellow “Missing Metadata” badge should change to “Ready to Submit”. Do not proceed until all products show this status.


Step 2 — Configure Your Xcode Project

Enable In-App Purchase Capability

  • In Xcode, select your Target → Signing & Capabilities
  • Click + Capability
  • Add In-App Purchase

Match Your Bundle ID

Your Bundle ID in Xcode must exactly match the one in App Store Connect. Even a single character difference will cause upload failures.

Remove Your StoreKit Test Configuration from the Scheme

If you used a .storekit configuration file for local testing:

  • Go to Product → Scheme → Edit Scheme
  • Select Run → Options
  • Set StoreKit Configuration to None

Shipping with a test configuration attached causes undefined behavior on production.

Bump Your Build Number

Every upload to App Store Connect requires a unique build number. Increment it in your target’s General tab before archiving.


Step 3 — Archive and Upload

  1. Select Any iOS Device (arm64) as your build target — you cannot archive to a Simulator
  2. Go to Product → Archive
  3. When the Organizer window opens, select your archive and click Distribute App
  4. Choose App Store Connect → Upload
  5. Leave the default options (include bitcode, upload symbols) and click Upload
  6. Wait 15–30 minutes for the build to finish processing in App Store Connect

Step 4 — Complete Your App Store Listing

While your build processes, fill out your App Store listing. All of these fields are required:

App Information

  • App Name and Subtitle
  • Description (up to 4,000 characters — lead with your strongest features)
  • Keywords (100 characters — separate with commas, no spaces)
  • Support URL and Marketing URL
  • Privacy Policy URL — mandatory for any app using subscriptions or location

Screenshots

Apple requires screenshots for specific device sizes:

  • 6.9-inch display (iPhone 16 Pro Max) — 1320 × 2868px
  • 6.5-inch display (iPhone 14 Plus) — 1242 × 2688px
  • iPad sizes if your app supports iPad

Take these in the Simulator using Cmd+S or use a tool like Sketch or Figma to create them.

Age Rating

Complete the questionnaire honestly. Most utility apps land at 4+.

Category

Choose the most accurate primary category. Productivity, Utilities, and Business are common for timer and tracking apps.


Step 5 — Attach Your Build and In-App Purchases to the Version

This step is easy to forget and will block your submission.

  1. Go to your app in App Store Connect → Distribution → your version
  2. Under Build, click the + and select the build you just uploaded
  3. Scroll down to In-App Purchases and Subscriptions
  4. Click + and attach every subscription product you created
  5. Click Save

If you skip step 4, your subscriptions will not be reviewed alongside your app, and Apple may reject the binary for incomplete IAP implementation.


Step 6 — Paywall Requirements (Apple Guidelines)

Apple has specific requirements for how paywalls must be presented. Missing any of these is a fast path to rejection under Guideline 3.1.1.

Required Elements on Your Paywall Screen:

  • Clear price display — show the exact price and billing period (e.g. “$0.99/month”)
  • Restore Purchase button — must be visible and functional
  • Links to Privacy Policy and Terms of Use — tap-able links, not just text
  • Cancellation instructions — tell users they can cancel in Settings → Apple ID → Subscriptions
  • Free trial terms — if you offer a trial, state the duration and what happens after

What Apple Reviewers Will Test:

  • Tapping Subscribe launches the native Apple payment sheet
  • Restore Purchase successfully restores an existing subscription
  • The paywall cannot be bypassed without purchasing or restoring
  • Tapping close/cancel returns the user to the app gracefully

Step 7 — Sandbox Testing Before Submission

Never submit without sandbox testing your full purchase flow on a real device.

Set Up a Sandbox Tester

  • In App Store Connect → Users & Access → Sandbox Testers
  • Click + and create a test account with a fake email
  • On your iPhone, go to Settings → App Store → Sandbox Account and sign in

What to Test

ScenarioExpected Result
Fresh installPaywall appears, no access to gated content
Tap a plan, complete purchasePaywall dismisses, content unlocked
Kill and reopen appContent still unlocked
Restore PurchaseSubscription restored, paywall dismisses
Cancel payment sheetApp handles gracefully, no crash
Revoked subscriptionPaywall reappears on next open

Sandbox subscriptions renew in minutes (a 1-month sub renews every ~5 minutes), making it easy to test renewal and expiration flows quickly.


Step 8 — Submit for Review

Once everything is in place:

  1. In App Store Connect, go to your version page
  2. Review all fields — look for any yellow warning badges
  3. Click Add for Review then Submit to App Review
  4. Answer the export compliance question (usually No for standard apps)
  5. Confirm and submit

Review Times

  • First submissions: typically 24–48 hours
  • Updates: often 12–24 hours
  • Check status at appstoreconnect.apple.com or enable email notifications

Common Rejection Reasons for Apps with In-App Purchases

Rejection ReasonGuidelineFix
Missing Privacy Policy5.1.1Add a hosted privacy policy URL to your app listing and link to it in your paywall
No Restore Purchase button3.1.1Add a clearly visible Restore button to your paywall
Subscription terms not shown3.1.1Display price, duration, and cancellation info on the paywall
IAP not working in review3.1.1Test with sandbox; ensure products are “Ready to Submit”
Missing IAP review screenshotMetadataUpload a paywall screenshot in each product’s Review Information section
Products not attached to versionMetadataAttach all IAP products to your app version before submitting
Paywall blocks all app functionality3.1.1At minimum, let users access core features or a free tier

Pro Tips

Use StoreKit 2 — If you’re building new, use the modern Product, Transaction, and AppStore APIs. They’re async-native, easier to test, and better supported going forward.

Listen for transaction updates — Always implement Transaction.updates in your app so subscriptions that renew in the background are handled correctly without requiring the user to reopen the app.

Don’t hardcode prices — Always display product.displayPrice from the StoreKit response rather than hardcoding “$0.99”. Prices vary by region and can be changed in App Store Connect without a code update.

Keep your product IDs consistent — Once your app is live, never change a product ID. Existing subscribers are tied to it. If you need a new product, create a new ID and migrate users gracefully.

Test restore on every update — Any time you change subscription logic, re-test the restore flow. It breaks more often than new purchases do.


Summary Checklist

  • [ ] All subscription products created in App Store Connect
  • [ ] Each product has Localization (display name + description) added
  • [ ] Each product has pricing set
  • [ ] Each product has a Review Screenshot uploaded
  • [ ] All products show “Ready to Submit” status
  • [ ] In-App Purchase capability added in Xcode
  • [ ] StoreKit test config removed from scheme before archiving
  • [ ] Build number incremented
  • [ ] Archive uploaded and processed
  • [ ] Build attached to app version
  • [ ] All IAP products attached to app version
  • [ ] Privacy Policy URL added to app listing
  • [ ] Paywall shows price, restore button, and cancellation instructions
  • [ ] Full purchase and restore flow tested on real device with sandbox account
  • [ ] Submitted for review

Following this checklist in order will get your app with in-app purchases through App Review on the first submission. The most common delays come from missing localization on subscription products, forgetting to attach IAPs to the app version, and paywall screens that don’t meet Apple’s disclosure requirements — all of which are easy to catch before you submit if you work through this list carefully.

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.