[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.
My Setup
-
Unreal Engine: 5.4 (from source)
-
Platform: iOS (iPad + iPhone)
-
Online Subsystem: iOS
-
IAP Method: Blueprint + App Store Connect
What Worked
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
-
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
-
In-App Purchase
-
Signed with a valid Distribution or Development cert
-
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
-
In-App Purchase
-
-
Assign the correct provisioning profile and turn off auto-signing
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
-
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
-
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
-
Use Query In App Purchases node
-
Product Identifiers MUST match App Store exactly
-
Access IOS subsystem explicitly if your default is EOS
![]() |
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!