Skip to content

Dev Log · Anpfiff1, iOS, App Store, Apple review, Devlog

How Anpfiff1 got into the App Store: five rejections and a review marathon

May 2026, looking back at the road to iOS:

Anpfiff1 has been on the Apple App Store since 18 May 2026. Getting there took about six weeks of app review and five rejections. Here is the whole story, unvarnished, for anyone taking a Godot game to iOS.

Rejection 1 (27 April): ARKit, which was never used

The first submission (v2.0.3) was rejected under two guidelines.

Guideline 2.5.1: Apple reported that the app uses the TrueDepth API. The trouble with that: Anpfiff1 is a 2D football manager with no camera, no face detection and no AR. ARKit.framework was nonetheless linked into the binary as a transitive dependency of the Game Center and StoreKit plugin (GodotApplePlugins). A framework link that was never called once, but which looked to Apple like TrueDepth usage.

Guideline 2.3.10: the app and 38 language files carried references to Google Play, Steam and itch.io. On iOS an app may not point at other platforms.

Build 5: rebuilding the SDK itself

The fix for 2.5.1 was not a switch but manual work. The GodotApplePlugins framework was rebuilt from source with the ARKit modules removed. The result afterwards: zero hits for ARFaceTracking, ARFaceAnchor, TrueDepth or ARKit anywhere in the binary.

For 2.3.10: every platform reference stripped from the translations, Steam and itch.io messages filtered out of the news pool on iOS, the Android, Steam and AdMob plugin code excluded from the iOS build entirely through an export filter, and advertising and tracking keys removed from Info.plist. Other likely review topics were cleared proactively at the same time: in-app account deletion, a report and block function for uploaded custom databases, and privacy manifest declarations.

Rejection 2 (30 April): the game never gets past the splash

Build 11 was rejected under guideline 2.1(a), on the grounds that the app did not get past the splash screen. The bitter irony: removing the Android plugins for 2.3.10 had caused exactly that. Five GDScript files shipped in the iOS build still referenced classes from the removed plugins (BillingClient, PlayGamesSignInClient and others). Those classes do not exist on iOS, so GDScript aborted the scripts on load with parse errors. Five autoloads and the start scene failed to load, and the game sat on the publisher logo.

Build 12 carried the fix: the classes are resolved at runtime instead of referenced statically, and two phantom autoloads were removed before export. It has booted cleanly ever since.

A side plot: HTTP 500

Running alongside was something that had nothing to do with the app itself. After the v2.0.4 rejection, all 13 in-app purchases went into "Developer Action Needed". Each carried an orphaned, rejected localisation that simply would not delete: Apple's servers answered with HTTP 500 "UNEXPECTED_ERROR", for days, across more than 20 attempts, through both the API and the web interface. A known server-side bug at Apple. The eventual solution was a support ticket, because there was no fixing it from outside.

Rejection 3 (15 May): the Dynamic Island

Almost there, and then v2.0.5 met guideline 4 (design). On an iPhone 17 Pro Max the left column of the budget screen was cut off, hidden behind the Dynamic Island. Godot renders edge to edge by default and there was no safe-area handling. Build 2.0.5.2 brought a global safe-area manager: the whole interface now sits inside the safe area, and only decorative backgrounds still run to the edge.

18 May: through.

Anpfiff1 is on the App Store, for iPhone and iPad. The version that made it through review was 2.0.5, build 2.0.5.2.

What I learned

✅ Check transitive framework dependencies. A plugin can link ARKit without you ever using it, and Apple only sees the link.
✅ Platform references have to go completely on iOS, including from translation CSVs and random in-game messages.
✅ If you remove plugins for one platform build, remove every piece of code that references them, or the game will not boot.
✅ Plan safe-area handling from the start, or the Dynamic Island will say hello.
✅ Some faults are Apple's. Then all that helps is a support ticket and patience.

Six weeks, five rejections, one release. Would I do it again? Yes. But with this list in front of me.

The Manufaktur dev

Warm regards from the workshopDigitale Manufaktur Rudolstadt