 [Guide] iOS In-App Purchases (IAP) Working in Unreal Engine (with Game Center + Apple Login)
 [Guide] iOS In-App Purchases (IAP) Working in Unreal Engine (with Game Center + Apple Login)
Hey devs  — 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.
 — 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. 
 My Setup
 My Setup
- 
Unreal Engine: 5.4 (from source) 
- 
Platform: iOS (iPad + iPhone) 
- 
Online Subsystem: iOS 
- 
IAP Method: Blueprint + App Store Connect 
 What Worked
 What Worked
 1. Configure DefaultEngine.ini / IOSEngine.ini
 1. Configure DefaultEngine.ini / IOSEngine.ini
[OnlineSubsystem]
DefaultPlatformService=IOS
[OnlineSubsystemIOS.Store]
bSupportsInAppPurchasing=true
bUseStoreV2=true
[/Script/IOSRuntimeSettings.IOSRuntimeSettings]
bEnableGameCenterSupport=True
 2. Fix Unreal Signing & Entitlements
 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: - 
 Game Center Game Center
- 
 In-App Purchase In-App Purchase
- 
Signed with a valid Distribution or Development cert 
 
- 
 3. Generate & Open Xcode Project
 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: - 
 Game Center Game Center
- 
 In-App Purchase In-App Purchase
 
- 
- 
Assign the correct provisioning profile and turn off auto-signing 
 IMPORTANT: Archive Using Xcode, Not Unreal
 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 
 4. Add In-App Products in App Store Connect
 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 
 
- 
 5. Test on Real Device with Sandbox Account
 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
 6. Blueprint Notes
 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 
|  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 
If you’re stuck, reply here — happy to share Blueprints or C++ examples.
Cheers!
