Dev Log · Anpfiff1, iOS, App Store, Apple Review, Devlog
Wie Anpfiff1 in den App Store kam: 5 Ablehnungen und ein Review-Marathon
Mai 2026, Rückblick auf den iOS-Weg:
Seit dem 18. Mai 2026 ist Anpfiff1 im Apple App Store. Bis dahin lagen rund sechs Wochen App Review und fünf Ablehnungen. Hier die ganze Geschichte, ehrlich und ungeschönt, für alle, die ein Godot-Spiel auf iOS bringen wollen.
Ablehnung 1 (27. April): ARKit, das nie benutzt wurde
Die erste Einreichung (v2.0.3) wurde unter zwei Richtlinien abgelehnt.
Guideline 2.5.1: Apple meldete, die App nutze die TrueDepth-API. Das Problem dabei: Anpfiff1 ist ein 2D-Fußballmanager ohne Kamera, ohne Gesichtserkennung, ohne AR. Trotzdem war ARKit.framework im Binary verlinkt, als transitive Abhängigkeit des Game-Center- und StoreKit-Plugins (GodotApplePlugins). Eine Framework-Verknüpfung, die nie ein einziges Mal aufgerufen wurde, aber für Apple wie TrueDepth-Nutzung aussah.
Guideline 2.3.10: In der App und in 38 Sprachdateien standen Verweise auf Google Play, Steam und itch.io. Auf iOS darf eine App nicht auf andere Plattformen verweisen.
Build 5: das SDK selbst neu bauen
Die Lösung für 2.5.1 war kein Schalter, sondern Handarbeit. Das GodotApplePlugins-Framework wurde komplett aus dem Quellcode neu gebaut, mit entfernten ARKit-Modulen. Ergebnis danach: 0 Treffer für ARFaceTracking, ARFaceAnchor, TrueDepth oder ARKit im gesamten Binary.
Für 2.3.10: alle Plattform-Verweise aus den Übersetzungen entfernt, Steam- und itch.io-Nachrichten auf iOS aus dem News-Pool gefiltert, Android-, Steam- und AdMob-Plugin-Code per Export-Filter komplett aus dem iOS-Build ausgeschlossen, Werbe- und Tracking-Schlüssel aus der Info.plist gestrichen. Gleichzeitig proaktiv weitere Review-Themen abgeräumt: In-App-Account-Löschung, Melde- und Block-Funktion für hochgeladene Custom-Datenbanken, PrivacyInfo-Deklarationen.
Ablehnung 2 (30. April): das Spiel kommt nicht über den Splash
Build 11 wurde unter Guideline 2.1(a) abgelehnt, mit der Begründung, die App komme nicht über den Splash-Screen hinaus. Bittere Ironie: genau das Entfernen der Android-Plugins für 2.3.10 hatte das verursacht. Fünf GDScript-Dateien, die im iOS-Build ausgeliefert wurden, referenzierten noch Klassen aus den entfernten Plugins (BillingClient, PlayGamesSignInClient und weitere). Auf iOS gibt es diese Klassen nicht, also brach GDScript die Skripte beim Laden mit Parse-Fehlern ab. Fünf Autoloads und die Startszene luden nicht, und das Spiel blieb beim Verlags-Logo hängen.
Build 12 brachte den Fix: die Klassen werden jetzt zur Laufzeit aufgelöst statt statisch referenziert, zwei Phantom-Autoloads wurden vor dem Export entfernt. Das Spiel bootet seitdem sauber.
Das IAP-Drama nebenbei: HTTP 500
Parallel lief ein Nebenschauplatz, der nichts mit der App selbst zu tun hatte. Nach der v2.0.4-Ablehnung gingen alle 13 In-App-Käufe in den Status „Developer Action Needed“. Jeder IAP trug eine verwaiste, abgelehnte Übersetzung, die sich schlicht nicht löschen ließ: Apples Server antwortete mit HTTP 500 „UNEXPECTED_ERROR“, über Tage, 20+ Versuche, sowohl per API als auch im Web-Interface. Ein bekannter Server-Bug auf Apple-Seite. Lösung am Ende: ein Support-Ticket, weil sich das von außen nicht beheben ließ.
Ablehnung 3 (15. Mai): die Dynamic Island
Fast geschafft, dann kam mit v2.0.5 noch Guideline 4 (Design). Auf dem iPhone 17 Pro Max war im Budget-Bildschirm die linke Spalte abgeschnitten, verdeckt von der Dynamic Island. Godot rendert standardmäßig randlos, ein Safe-Area-Handling gab es nicht. Build 2.0.5.2 brachte einen globalen Safe-Area-Manager: die gesamte Bedien-Oberfläche sitzt jetzt innerhalb der sicheren Fläche, nur dekorative Hintergründe bleiben randlos.
18. Mai: durch.
Anpfiff1 ist im App Store, für iPhone und iPad. Die Version, die es durch das Review geschafft hat, war 2.0.5 (Build 2.0.5.2).
Was ich gelernt habe
✅ Transitive Framework-Abhängigkeiten prüfen. Ein Plugin kann ARKit verlinken, ohne dass du es je benutzt, und Apple sieht nur die Verknüpfung.
✅ Plattform-Verweise gehören auf iOS komplett raus, auch aus Übersetzungs-CSVs und zufälligen In-Game-Nachrichten.
✅ Wer Plugins für einen Plattform-Build entfernt, muss auch jeden Code entfernen, der sie referenziert, sonst bootet das Spiel nicht.
✅ Safe-Area-Handling von Anfang an einplanen, sonst grüßt die Dynamic Island.
✅ Manche Fehler liegen bei Apple. Dann hilft nur ein Support-Ticket und Geduld.
Sechs Wochen, fünf Ablehnungen, ein Release. Würde ich es wieder machen? Ja. Aber mit dieser Liste im Kopf.
Der Manufaktur-Dev
Herzliche Grüße aus der WerkstattDigitale Manufaktur Rudolstadt