In App Purchase for IOS

:white_check_mark: [Guide] iOS In-App Purchases (IAP) Working in Unreal Engine (with Game Center + Apple Login)

Hey devs :waving_hand: — after a lot of headbanging, I finally got In-App Purchases working in Unreal Engine on iOS, along with Game Center and Apple Login. Sharing everything I did so others don’t go through the same mess. :sweat_smile:


:mobile_phone: My Setup

  • Unreal Engine: 5.4 (from source)

  • Platform: iOS (iPad + iPhone)

  • Online Subsystem: iOS

  • IAP Method: Blueprint + App Store Connect


:white_check_mark: What Worked

:wrench: 1. Configure DefaultEngine.ini / IOSEngine.ini

[OnlineSubsystem]

DefaultPlatformService=IOS

[OnlineSubsystemIOS.Store]

bSupportsInAppPurchasing=true

bUseStoreV2=true

[/Script/IOSRuntimeSettings.IOSRuntimeSettings]

bEnableGameCenterSupport=True


:locked_with_key: 2. Fix Unreal Signing & Entitlements

  • Set Bundle Identifier to match your App Store app (e.g. com.YourCompany.Gamename)

  • Turn OFF “Automatically manage signing” in both Unreal and Xcode

  • Use Modern Xcode Build System in DefaultEngine.ini

  • Provisioning Profile MUST have:

    • :white_check_mark: Game Center

    • :white_check_mark: In-App Purchase

    • Signed with a valid Distribution or Development cert


:hammer_and_wrench: 3. Generate & Open Xcode Project

Run this in Terminal:

/Path/To/UnrealEngine/Engine/Build/BatchFiles/Mac/GenerateProjectFiles.sh \

-project=“/Path/To/YourProject/YourProject.uproject” \

-game -engine

Then:

  • Open the .xcodeproj

  • Manually add Capabilities:

    • :white_check_mark: Game Center

    • :white_check_mark: In-App Purchase

  • Assign the correct provisioning profile and turn off auto-signing


:warning: IMPORTANT: Archive Using Xcode, Not Unreal

Unreal’s built-in packaging tool may not correctly embed entitlements (e.g., Game Center, In-App Purchase).
ALWAYS do the final Archive in Xcode to ensure all capabilities are added properly.

How:

  • In Xcode, go to Product > Archive

  • Export the .ipa from Organizer

  • Upload to TestFlight or test locally


:money_bag: 4. Add In-App Products in App Store Connect

  • Go to App Store Connect > My App > Features > In-App Purchases

  • Add product (e.g., com.YourCompany.YourProject.goldcoins100)

  • Make sure:

    • Status is “Ready to Submit” or higher

    • Localized name and pricing are filled

    • Your app is uploaded via TestFlight or marked for review


:test_tube: 5. Test on Real Device with Sandbox Account

  • Must use a Sandbox Apple ID (Settings > App Store > Sign Out > Log into Sandbox)

  • Simulator won’t work

Log output shows:

Returning 0 product(s) and 1 invalid identifier(s) // if product not added to App Store Connect


:light_bulb: 6. Blueprint Notes

  • Use Query In App Purchases node

  • Product Identifiers MUST match App Store exactly

  • Access IOS subsystem explicitly if your default is EOS


:speech_balloon:

:white_check_mark: Step Description
DefaultEngine.ini Set bSupportsInAppPurchasing=true, Game Center = true
Xcode Project Add Capabilities manually
App Store Connect Create product IDs before testing
Archive MUST archive from Xcode to embed entitlements
TestFlight/Sandbox Must test with valid Apple ID
Logs Use Console app, Xcode Devices tab, or idevicesyslog

Hope this helps someone avoid the same chaos :upside_down_face:

If you’re stuck, reply here — happy to share Blueprints or C++ examples.
Cheers!

1 Like