Skip to main content

Command Palette

Search for a command to run...

"IAP" The In-App Purchase Journey – Part 2: Apple Setup - The Bureaucratic Maze

Published
21 min read
"IAP" The In-App Purchase Journey – Part 2: Apple Setup - The Bureaucratic Maze
F
Full-stack software engineer with 15+ years of hands-on experience building scalable web and hybrid applications across startups, enterprises, and public institutions. Specialized in Angular, NestJS, and Ionic, with deep expertise in building modular admin systems, CMS integrations, and dynamic form engines. Proven track record in leading cross-functional teams, mentoring developers, and delivering production-ready solutions with a product mindset. Currently focused on launching MikaForm - a dynamic admin panel system with full modularity, multilingual support, and API-first integration.

Welcome back to IAP hell. If you missed Part 1, go read it first - you'll need the context for what's coming.

Remember that naive confidence from Part 1? Well, this is where it officially dies. Today we're diving into Apple's App Store Connect - a system that feels like it was designed by someone who really loves paperwork.

If you thought creating a simple product would be straightforward, prepare to discover that Apple has turned it into an art form involving endless forms, mysterious approval processes, and screenshots that nobody will actually look at.

⚡ Quick Setup Guide (Skip the Journey, Get It Done)

Need to set up IAP products fast? Here's the step-by-step without the commentary. For context and gotchas, read the detailed sections below.

Step-by-Step Apple IAP Setup

1. Navigate to IAP Section

  • App Store Connect → My Apps → [Your App] → Montization → In-App Purchases → Click "+"

2. Choose Product Type ⚠️ Cannot be changed later

  • Non-Consumable: Premium features, ad removal, permanent unlocks

  • Consumable: Coins, lives, temporary items

  • Subscriptions: Recurring access (complex setup)

3. Configure Basic Info

Product ID: com.yourapp.feature_v1 (permanent identifier)
Reference Name: "Premium Features" (internal only)
Price Tier: Pick from Apple's predetermined list

4. Localization ⚠️ Required for all supported countries

Display Name: "Premium Monthly"
Description: "Unlock advanced editing tools, exclusive templates, and priority support"

5. Screenshots (Subscriptions only)

  • Show subscription benefits clearly

  • Include text overlays explaining value

  • Professional quality required

6. Submit for Review

  • Status: "Waiting for Review"

  • Timeline: 24 hours to 2 weeks

  • Prepare for possible rejection and resubmission

7. Test in Sandbox

Create sandbox tester: App Store Connect → Users & Access → Sandbox Testers
Device: Sign out of App Store, don't sign back in until purchase prompt
Test: Look for [Environment: Sandbox] in purchase dialog

Common Mistakes to Avoid

  • ❌ Generic product names ("Pro", "Premium")

  • ❌ Missing localizations for supported countries

  • ❌ Screenshots that don't match description

  • ❌ Mixing sandbox and production Apple IDs

  • ❌ Insufficient description detail

  • Detailed Apple Process: [See below sections]

  • Product Type Selection: [Choosing Your Product Type section]

  • Sandbox Testing: [Testing in the Sandbox section]

  • Troubleshooting: [Common Issues section]


Need more context? Read on for the full journey, edge cases, and advanced scenarios.

🍎 Welcome to Apple's World of Forms

Apple's approach to IAP feels like they hired a bureaucrat from the DMV and said, "Make this more complex." Everything requires forms, approvals, and documentation that seems designed to test your commitment to mobile development.

Prerequisites (The Entry Fee)

Before you can even begin this journey, you'll need:

  • Active Apple Developer Program membership ($99/year - your first IAP cost)

  • App created in App Store Connect (even if it's not published yet)

  • Valid iOS Distribution Certificate (because Apple loves certificates)

  • Admin or App Manager role access (no peasants allowed)

Finding the IAP Section

Navigate to My Apps → Select Your App → FeaturesIn-App Purchases. Click that innocent-looking "+" button and welcome to the maze where your optimism goes to die.

🎭 Choosing Your Product Type (Choose Wisely, Young Hobbit)

Here's where Apple shows its true nature - you get one shot at picking the right product type. No take-backs, no changes, no "oops I meant the other one." It's like choosing your house at Bag End - commit now, face consequences later.

Consumable Products

Perfect for things users buy repeatedly - coins, gems, lives, or your will to continue this project. These disappear after use like your sanity during this process.

Use cases:

  • Virtual currency (coins, gems, credits)

  • Temporary boosts or power-ups

  • Extra lives or attempts

  • Consumable items that get "used up"

The fine print: No restore functionality needed because they're meant to be consumed. Apple won't test restore for these.

Technical note: While Apple technically allows restore functionality for consumables (useful for refund scenarios), best practice is to not implement it since consumables should be "consumed" after use.

Non-Consumable Products

The "buy once, own forever" items - premium features, ad removal, or that sense of accomplishment when this finally works.

Use cases:

  • Premium app features

  • Ad removal

  • Permanent character unlocks

  • One-time feature purchases

⚠️ Critical requirement: These must have restore functionality because Apple will test it. Your app needs to remember these purchases across devices and reinstalls.

Auto-Renewable Subscriptions

The money printer - automatic billing and renewal with the most complex approval process known to mankind.

Use cases:

  • Monthly/yearly premium memberships

  • Content subscriptions

  • Service access

  • Feature subscriptions

The complexity warning: Requires additional setup including subscription groups, promotional offers, and enough documentation to fill a small library. We'll dive deep into this complexity below.

Non-Renewing Subscriptions

The manual labor version - fixed-term access that users must manually renew.

Use cases:

  • Seasonal passes

  • Course access

  • Time-limited premium features

  • Event-based subscriptions

Reality check: Most developers want auto-renewable subscriptions but end up here because the approval process is simpler.

⚠️ Critical Warning: Product type cannot be changed after creation. Choose carefully, or you'll be deleting products and starting over.

📱 Case Study: The Rejection Loop from Hell

Before we dive into configuration, let me share a real scenario that happened to a popular photo editing app (anonymized for obvious reasons).

The Setup: They launched with a simple "Premium Monthly" subscription offering advanced filters and cloud storage. Seemed straightforward enough.

The Reality:

  • Attempt 1: Rejected for "insufficient description detail"

  • Attempt 2: Rejected for "screenshot doesn't clearly show subscription benefits"

  • Attempt 3: Rejected for "missing localization for French Canada" (they supported French, but not Canadian French specifically)

  • Attempt 4: Rejected for "product name too generic"

  • Attempt 5: Finally approved after 3 weeks

The Cost: 3 weeks of delays, missed marketing launch, frustrated team, and about 40 hours of developer time resubmitting the same product with minor tweaks.

The Lesson: Apple's review process for IAP products is just as unpredictable as app review, but with less clear feedback. Every detail matters, and "good enough" isn't good enough.

Now let's make sure you don't repeat their mistakes.

📝 The Product Configuration Gauntlet

Time for the real fun - filling out forms that feel designed to test your patience and attention to detail.

Product ID (Your Permanent Identity Crisis)

This is your unique identifier, and you're stuck with it forever. Apple prefers reverse domain notation, and they're very particular about format.

Apple's preferred format:

✅ Good: com.yourapp.premium
✅ Good: com.yourapp.coins_100
✅ Good: com.yourapp.monthly_subscription

❌ Bad: premium!
❌ Bad: my-product
❌ Bad: 123product
❌ Bad: Premium Features

The rules:

  • Alphanumeric characters, dots, and underscores only

  • Case-sensitive (they care about capitalization)

  • Can start with letter or underscore

  • Maximum 255 characters (generous compared to what's coming in Part 3)

Pro tip: Choose something descriptive but concise. You'll be typing this ID approximately 847 times during testing.

Reference Name (Your Internal Sanity Keeper)

This is what you'll see internally in App Store Connect. Make it descriptive because you'll be staring at it during 3 AM debugging sessions when nothing works and you're questioning your career choices.

Examples:

✅ Good: "Premium Monthly Subscription"
✅ Good: "100 Coins Pack"
✅ Good: "Remove Ads Forever"

❌ Bad: "Product 1"
❌ Bad: "Thing"
❌ Bad: "IAP"

Price Tiers (Apple's Price Prison)

Here's where Apple shows its control-freak nature. Want to charge $4.37? Too bad. You must pick from their predetermined price tiers.

Popular Price Tiers:

Tier USD Common Usage User Psychology
Tier 1 $0.99 Impulse purchases, small coin packs "Under a dollar" threshold
Tier 3 $2.99 Remove ads, small features Sweet spot for casual purchases
Tier 5 $4.99 Premium features "Fiver" psychological barrier
Tier 10 $9.99 Monthly subscriptions Standard subscription pricing
Tier 20 $19.99 Annual subscriptions Discount vs monthly
Tier 50 $49.99 Professional features High-value offerings

Pricing psychology tips:

  • Tier 1 ($0.99) triggers impulse buying behavior

  • Tier 3 ($2.99) is the most popular choice for small features

  • Avoid "awkward" tiers like $7.99 - users prefer round numbers

  • Higher tiers work for subscriptions but rarely for one-time purchases

💰 Complex Scenario: Multi-Region Pricing Strategy

Here's where Apple's price tiers become both a blessing and a curse. Let me walk you through a real-world pricing challenge.

The Challenge: You want to launch globally but need competitive pricing in different markets. A $9.99 subscription in the US might be too expensive in emerging markets but too cheap in premium markets like Switzerland.

Apple's Approach: You pick a tier, and Apple converts it globally using their predetermined rates:

Region Tier 10 Equivalent Local Competition Market Reality
United States $9.99 $8.99-$12.99 Perfect fit
United Kingdom £9.99 £6.99-£9.99 Slightly high
Germany €10.99 €7.99-€9.99 Too expensive
India ₹799 ₹199-₹499 Way too expensive
Brazil R$54.90 R\(19.90-R\)29.90 Completely uncompetitive

The Problem: Apple's conversion doesn't consider:

  • Local purchasing power

  • Competitive landscape

  • Cultural pricing preferences

  • Economic conditions

Your Options:

Option 1: Accept Apple's Global Pricing

  • Pros: Simple setup, consistent margins

  • Cons: Uncompetitive in many markets, lost revenue

Option 2: Create Region-Specific Products

premium_monthly_us_v1    ($9.99 - Tier 10)
premium_monthly_eu_v1    (€7.99 - Tier 8) 
premium_monthly_in_v1    (₹449 - Tier 4)
premium_monthly_br_v1    (R$27.90 - Tier 6)
  • Pros: Competitive pricing, better conversion

  • Cons: Complex management, different feature parity

Option 3: Tiered Feature Model

basic_monthly_v1     ($2.99 global - Tier 3)
premium_monthly_v1   ($9.99 in rich markets - Tier 10)
premium_monthly_v1   ($4.99 in emerging markets - Tier 5)
  • Pros: Market-appropriate pricing with feature differentiation

  • Cons: Most complex to implement and maintain

Real-World Recommendation: Most successful apps start with Option 1 for simplicity, then gradually implement Option 2 for their top 5-10 revenue markets. The complexity isn't worth it until you have significant international revenue.

🌍 The Localization Nightmare

Here's where Apple's attention to detail becomes your personal nightmare. They want localized names and descriptions for every single country your app supports. Not just languages - countries.

The Scope of Madness

It starts innocently - "Display Name" and "Description" for English. Then you realize Apple wants separate entries for:

  • English (United States)

  • English (United Kingdom)

  • English (Australia)

  • English (Canada)

  • English (India)

  • ...and 40+ other English "variations"

Plus every other language your app supports.

What Apple Wants For Each Locale

Display Name: What users see in the purchase dialog

English (US): "Premium Monthly"
Spanish: "Premium Mensual"
French: "Premium Mensuel"
German: "Premium Monatlich"

Description: Detailed explanation of what they're buying

English (US): "Unlock all premium features including advanced editing tools, exclusive templates, and priority support."

Spanish: "Desbloquea todas las funciones premium incluyendo herramientas de edición avanzadas, plantillas exclusivas y soporte prioritario."

Translation Strategy (Don't Get Burned)

Option 1: Professional Translation

  • Costs money but looks professional

  • Culturally appropriate messaging

  • Better conversion rates in international markets

Option 2: Google Translate

  • Free but risky

  • Can create embarrassing mistranslations

  • "Premium Features" might become "High-Quality Characteristics"

Option 3: English Only

  • Simple but limiting

  • Reduced international appeal

  • Apple may reject if your app supports multiple languages

⚠️ Rejection Warning: Missing localizations for countries your app supports = automatic rejection. Trust me on this one.

Smart Localization Tips

Start minimal: Only localize for countries that represent >5% of your user base Use consistent terminology: Keep product names similar across languages Cultural considerations: Some cultures prefer different value propositions Legal requirements: Some countries require specific subscription language

Reality check: Apple strongly recommends localization for all supported countries but won't automatically reject for missing translations if you provide comprehensive English (US) content. However, better localization = better user experience = higher conversion rates.

Advanced Localization Scenarios

The Family Sharing Complication: If your app supports family sharing, your product descriptions need to clearly explain what's shared vs. what's individual. Apple requires specific language:

✅ Good: "Premium subscription includes advanced features for the subscriber. Family members get basic access to shared templates."

❌ Bad: "Premium features for everyone in the family."

Subscription-Specific Requirements: Auto-renewable subscriptions need legal disclaimer text in many regions:

// Required for EU markets
"Subscription automatically renews unless auto-renew is turned off at least 24 hours before the end of the current period. Account will be charged for renewal within 24 hours prior to the end of the current period."

// Must be translated accurately - no Google Translate shortcuts

📸 The Screenshot Mystery (Subscriptions Only)

If you're dealing with subscriptions, Apple wants screenshots. Not of your app interface - screenshots that show what the subscription gives users. This is where things get weird.

What Apple Actually Wants

For subscription products:

  • Screenshots showing subscription benefits

  • Text overlays explaining the value proposition

  • Professional-looking marketing materials

  • Clear before/after comparisons

The reality gap:

  • What you have: A half-finished app and growing existential dread

  • What Apple wants: Professional marketing screenshots with perfect UI and compelling copy

Screenshot Requirements

Technical specs:

  • JPG or PNG format

  • Maximum 8MB file size

  • High resolution (recommended: iPhone Pro Max dimensions)

  • Clear, professional appearance

Content requirements:

  • Show actual app features (not generic stock photos)

  • Include text explaining subscription benefits

  • Demonstrate clear value proposition

  • Professional design quality

Examples of good screenshot content:

✅ Before/after showing premium features unlocked
✅ Feature comparison charts
✅ Screenshots with benefit callouts
✅ Value proposition overlays

❌ Generic app store screenshots
❌ Unrelated stock photos
❌ Poor quality or blurry images
❌ Screenshots that don't match the description

🧪 Testing in the Sandbox (Where Hope Goes to Die)

Apple's sandbox environment is where you'll test purchases without spending real money. In theory, it's simple. In practice, it's a special kind of purgatory designed to test your debugging skills and patience.

Creating Sandbox Testers (Your Fake Friends)

Step 1: Navigate to Users and AccessSandbox Testers Step 2: Click the "+" button to add a new tester Step 3: Fill out the form with fake but realistic information

Required information:

Email: test1@yourdomain.com (must be unique, never used for real Apple ID)
Password: TestPassword123! (meet Apple's complexity requirements)
First Name: Test
Last Name: User
Date of Birth: Valid date (affects content ratings)
App Store Territory: Your primary market (US, UK, etc.)

⚠️ The Golden Rule: Never, ever use a sandbox Apple ID for real App Store purchases. Write this on a sticky note and put it somewhere visible. Mixing sandbox and production accounts creates permanent, unfixable problems.

The Sandbox Testing Process

Device preparation:

  1. Go to SettingsApp Store

  2. Sign out of any existing Apple ID

  3. DO NOT sign back in until your app prompts for purchase

Testing flow:

  1. Launch your app

  2. Trigger a purchase

  3. iOS shows purchase dialog with [Environment: Sandbox] label

  4. Sign in with sandbox Apple ID when prompted

  5. Complete purchase (no real money charged)

  6. Verify purchase processing in your app

Common Sandbox Issues That Will Ruin Your Day

"Cannot Connect to iTunes Store"

Possible causes:

  • Mixed sandbox and production Apple IDs on the device

  • Network connectivity issues

  • Apple's sandbox servers having "a moment"

  • Device region doesn't match sandbox account region

Solutions:

  • Sign out of ALL Apple IDs, restart device, try again

  • Use a different sandbox account

  • Check Apple's system status page

  • Wait (sometimes it's literally just Apple having server issues)

"Invalid Product Identifier"

Possible causes:

  • Product not approved/released yet

  • Typo in product ID in your app code

  • App not using correct provisioning profile

  • Product not available in sandbox account's region

Solutions:

  • Verify product status in App Store Connect

  • Double-check product IDs match exactly (case-sensitive!)

  • Ensure app uses development or distribution provisioning profile

  • Check product availability in tester's region

Purchase Dialog Shows Wrong Information

Possible causes:

  • Cached product information

  • Product information updated but not propagated

  • Localization issues

Solutions:

  • Delete and reinstall app

  • Wait for Apple's cache to refresh (up to 24 hours)

  • Test with different sandbox account

Purchases Succeed But Don't Register in App

Possible causes:

  • Not properly listening for purchase updates

  • Receipt validation logic errors

  • Transaction finishing prematurely

Solutions:

  • Check purchase observer implementation

  • Verify receipt validation code

  • Add extensive logging to debug transaction flow

🔄 Sandbox Testing: Advanced Scenarios

Beyond basic purchase testing, here are complex scenarios you need to verify in sandbox:

Testing Subscription Renewals

The Challenge: How do you test monthly/yearly renewals without waiting months?

Apple's Solution: Accelerated renewal rates in sandbox:

  • 1 week subscription renews every 3 minutes

  • 1 month subscription renews every 5 minutes

  • 2 months subscription renews every 10 minutes

  • 3 months subscription renews every 15 minutes

  • 6 months subscription renews every 30 minutes

  • 1 year subscription renews every hour

What to Test:

// Your app should handle:
1. Successful renewals (subscription continues)
2. Failed renewals (payment method expired) 
3. Canceled renewals (user turned off auto-renew)
4. Billing retry periods (Apple tries failed payments for 60 days)
5. Billing grace periods (temporary access during payment issues)

Testing Family Sharing

Setup Requirements:

  • Multiple sandbox Apple IDs in same family

  • Different devices or simulator instances

  • Family organizer with valid payment method

Scenarios to Test:

  • Purchase on organizer account, verify access on family member device

  • Family member leaves family, verify access revocation

  • Multiple family members try to access same shared purchase

Testing Promotional Offers

Prerequisites:

  • Server-side signature generation setup

  • Promotional offer configured in App Store Connect

  • User eligible for promotional offer

Complex Flow:

// 1. Check user eligibility server-side
// 2. Generate promotional offer signature
// 3. Present offer in app
// 4. User accepts promotional pricing
// 5. Verify promotional receipt
// 6. Track promotional usage for business analytics

⏰ The Review Process (AKA "Pending Purgatory")

Apple's documentation cheerfully states that products are "usually reviewed within 24-48 hours." This is technically true in the same way that saying "it usually doesn't rain" is true - sometimes accurate, often wildly optimistic.

The Reality Timeline

Apple says: 24-48 hours Reality: Anywhere from 6 hours to 2 weeks, depending on:

  • Phase of the moon

  • Apple reviewer workload

  • Cosmic alignment

  • Whether Mercury is in retrograde

  • Your karma from previous app submissions

Common Rejection Reasons (And How to Fix Them)

"Description doesn't clearly explain the product"

What Apple sees: Generic or vague description What you probably wrote: "Premium features" What Apple wants: "Unlock advanced photo editing tools, 50+ exclusive filters, and cloud storage for unlimited photos"

"Screenshot doesn't show the feature"

What Apple sees: Screenshot that doesn't match description What you probably did: Used generic app screenshots What Apple wants: Screenshots specifically showing subscription benefits with clear callouts

"Product name is confusing"

What Apple sees: Unclear or misleading product name What you probably wrote: "Pro" What Apple wants: "Pro Monthly Subscription" or "Premium Photo Editor"

"Insufficient localization"

What Apple sees: Missing translations for supported countries What you probably did: Only provided English text What Apple wants: Proper localization for every country your app supports

Appealing Rejections

If your product gets rejected:

  1. Don't panic - it happens to everyone

  2. Read the rejection reason carefully - Apple usually tells you exactly what's wrong

  3. Fix the specific issues mentioned - don't change unrelated things

  4. Resubmit promptly - delays don't help your review time

🎯 Apple Setup Survival Tips

Before You Start

  • Plan your product hierarchy and naming scheme

  • Prepare localized content for all target markets

  • Create professional screenshots if doing subscriptions

  • Set up sandbox testers before you need them

During Setup

  • Double-check product IDs before submitting (you can't change them)

  • Be specific and detailed in descriptions

  • Include clear value propositions in product names

  • Test everything in sandbox before submitting for review

After Approval

  • Don't celebrate yet - implementation is where the real pain begins

  • Keep sandbox accounts organized and documented

  • Monitor for any status changes in App Store Connect

  • Prepare for Part 3: Google's completely different approach

🚧 Coming Next

Congratulations! You've survived Apple's bureaucratic maze and successfully configured your first IAP products. Your products are now sitting in "Ready to Submit" or "Waiting for Review" status, and you're probably questioning why you didn't just become an accountant.

But don't rest yet - in Part 3: Google Play Setup, we'll discover that Google took a completely different approach to the same problems. Where Apple loves forms, Google loves flexibility. Where Apple has rigid rules, Google has mysterious algorithms.

It's like learning a second language where nothing translates directly from the first.

📋 TL;DR - Apple Setup Quick Reference

Bottom Line: Apple's IAP setup is bureaucratic but predictable. Follow their rules exactly, prepare for rejection cycles, and plan for complexity from day one.

Series Focus: While this guide covers all product types, we'll primarily focus on non-consumable products (premium features, ad removal, permanent unlocks) throughout the series. They represent the most common use case and have the most complex backend implementation challenges. Consumables and subscriptions follow similar setup patterns with variations we'll note where relevant.

Essential Steps Checklist

□ Choose product type carefully (can't change later)
□ Use reverse domain notation for Product IDs
□ Write detailed, benefit-focused descriptions
□ Localize for ALL supported countries
□ Create professional screenshots (subscriptions only)
□ Set up sandbox testers with unique Apple IDs
□ Test everything in sandbox before submitting
□ Prepare for 24 hours to 2 weeks review time
□ Plan for rejection and resubmission cycles

Critical Success Factors

🎯 Product Configuration:

  • Product ID: com.yourapp.feature_v1 format

  • Reference Name: Descriptive for internal use

  • Price: Choose popular tiers (1, 3, 5, 10, 20)

  • Descriptions: Specific benefits, not generic features

🌍 Localization Strategy:

  • Start with top 5 revenue markets only

  • Use professional translation, not Google Translate

  • Include required legal language for subscriptions

  • Plan for region-specific compliance requirements

🧪 Testing Approach:

  • Never mix sandbox and production Apple IDs

  • Test all subscription states (renewal, failure, cancellation)

  • Verify family sharing behavior if enabled

  • Test promotional offers with signature generation

⚠️ Common Pitfalls to Avoid:

  • Generic product names ("Premium", "Pro")

  • Missing localizations for any supported country

  • Screenshots that don't match subscription benefits

  • Insufficient description detail

  • Wrong product type selection

Key Takeaways

  1. Apple favors detail over simplicity - More information is always better

  2. Rejection is normal - Plan for multiple submission cycles

  3. Subscriptions are complex - Intro offers, promotions, and family sharing add significant complexity

  4. Global pricing is rigid - Accept Apple's tiers or create region-specific products

  5. Testing is critical - Sandbox environment catches issues before production

When to Consider Advanced Features

  • Introductory Offers: If acquisition cost is high and you need conversion boost

  • Promotional Offers: If you have significant churn and want win-back campaigns

  • Subscription Groups: If you plan multiple subscription tiers

  • Family Sharing: If your app has family-oriented features

Red Flags That Indicate Problems

  • Product stuck in "Waiting for Review" > 1 week

  • Repeated rejections for same issue

  • Sandbox purchases not working after product approval

  • Missing product options in sandbox testing

  • Family sharing not working as expected


Survived Apple's bureaucratic gauntlet? Share your rejection stories in the comments. We're building a support group, and Apple App Store Connect trauma is our specialty.

Next is Part 3 - Google Play Setup, where we'll learn that "more flexible" doesn't necessarily mean "easier."