iOS-Apps auf TestFlight + NeuroBirds Web-zu-iOS-Port
7 min read

Meine ersten iOS-Apps gehen auf TestFlight — und NeuroBirds wird Mobile

#iOS #SwiftUI #TestFlight #NeuroBirds #Game Dev #App Store Connect

Nach Monaten Lernkurve, in denen ich versucht habe, das Apple-Ökosystem mit dem Verstand eines Webentwicklers zu navigieren, ist es so weit: meine ersten iOS-Apps sind in der TestFlight-Verteilung. Freunde testen sie gerade. Und das Highlight: mein Browser-Spiel NeuroBirds wurde komplett auf iOS portiert und steht kurz vor dem Release.

Monate
Lernkurve Apple-Ökosystem
TestFlight
Beta-Verteilung läuft
v2.5.0
NeuroBirds iOS Build 12
Bald
Public Release

Die Lernkurve, die niemand erwähnt

Als Webentwickler dachte ich, dass iOS “halt nur eine andere Plattform” wäre. SwiftUI ist deklarativ wie React, Xcode ist eine IDE, und das Konzept von App-Distribution kannte ich von npm.

Falsch. Das Apple-Ökosystem ist ein eigener Planet mit eigener Kultur, eigenen Bürokratien und eigener Sprache. Was ich in den letzten Monaten gelernt habe (oft auf die harte Tour):

Apple Developer Program

Jährlich 99 €, Bezahlung über deutsche Steueradresse — die Verknüpfung von Steuer-ID, deutschem Personalausweis und Apple ID kann Tage dauern, mit Verifikations-Anrufen aus den USA.

Verträge: Paid Apps Agreement

Bevor du irgendetwas in TestFlight oder im Store anbieten kannst, musst du das "Paid Apps Agreement" akzeptieren. Plus W-8BEN für die US-Quellensteuer-Befreiung. Plus DAC7 für EU-Marktteilnahme. Drei separate Verträge, jeder mit eigenen Edge-Cases.

Signing & Certificates

Apple Development Certificate, Apple Distribution Certificate, Provisioning Profile pro Bundle ID, App ID Registration — und wenn du nur einmal versehentlich CODE_SIGN_STYLE auf Manual hattest in der Release-Konfiguration, kannst du nicht zu TestFlight uploaden.

Bundle ID Registration

Eine Bundle ID muss im Apple Developer Portal registriert sein, BEVOR sie in App Store Connect auftaucht. Wenn sie nicht im Dropdown erscheint: meistens Vertragsproblem (Paid Apps fehlt) oder Signing-Konfiguration falsch.

TestFlight-Workflow

Build → Archive → Upload via Xcode oder altool → Apple verarbeitet (5-30 Min) → Beta-Tester werden eingeladen → sie installieren TestFlight-App → installieren deine App → testen → schicken Crash-Logs zurück. Pro Upload muss CURRENT_PROJECT_VERSION inkrementiert werden, sonst lehnt Apple silent ab.

App Store Connect

Eigenes Web-Backend mit eigener Logik. Age Rating-Fragebogen, App Privacy-Erklärung (Datenschutz-Pflichtangaben pro Datenkategorie), Pricing-Matrix für 175 Märkte, Screenshots in 6 Bildschirmgrößen. Alles bevor du auf "Submit for Review" klicken kannst.

NeuroBirds: vom Browser auf iOS

Mein Spiel NeuroBirds lief ursprünglich nur im Browser auf neurobirds.com — ein Flappy-Bird-inspiriertes Spiel mit Neuro-Twist (jeder Vogel repräsentiert eine Nervenzellen-Aktivität, die Punkte ändern sich mit der Spieldynamik).

Es funktionierte gut im Web. Aber das Spielgefühl auf einem Touch-Screen ist anders als mit Maus, und das Spiel verdient eine native Erfahrung.

Also habe ich es komplett portiert:

SwiftUI + SpriteKit

SwiftUI für Menüs, World Map, Settings, Onboarding. SpriteKit für die eigentliche Spiellogik (Vogel-Physik, Pipes, Collision Detection, Score-Animation, Particle Effects beim Tod).

Game Modes

Classic (endless), Daily Challenge (täglich neuer Seed), Gauntlet (Level-basiert mit Schwierigkeitsstufen), Zen (no-death modus), World Map (Levels mit Themen). Pro Mode eigene SpriteKit-Scene.

Haptisches Feedback

iPhone-Vibrationen bei Tap, Death, High Score. Web hatte keinen Zugriff auf Haptics — auf iOS plötzlich verfügbar und macht das Spielen massiv besser.

GameKit Integration

Game Center-Leaderboards (geplant für post-Release), Achievements, Cloud-Save für Progress. Web-Version hatte localStorage; iOS bekommt iCloud-Sync.

Was im Port am meisten Zeit gekostet hat

Die nicht-offensichtlichen Schwierigkeiten

  1. Vogel-Ghost zwischen Modes

    Wechsel von Classic zu Daily zu Gauntlet ließ den Vogel manchmal als "Geist" am Bildschirmrand stecken. Root cause: SpriteKit-Aktionen wurden nicht zwischen Scene-Wechseln geclearet. Fix: removeAllActions() + Scale-Reset bei jeder restartGame().

  2. World Map vs. startGame

    Eine Schutz-Bedingung mit currentLevelId blockierte World Map-Levels nach einem Mode-Wechsel. Stille Regression — keine Fehlermeldung, nur "Tap macht nichts".

  3. LevelCompleteView Edge Cases

    Wenn ein Level beendet wurde, zeigte die View statt der lokalisierten Strings buchstäblich "level.complete.title" an, und der Vogel fiel statt zu feiern. Race-Condition zwischen completing-State und death-Detection.

  4. Daily/Gauntlet Hang

    On-device hing das Spiel sporadisch beim Tap im Daily/Gauntlet Mode. Kein Crash, einfach nur eingefroren. Diagnose via NSLog telemetry + simctl log show — letztendlich ein Zustandsproblem im Tap-Handler, das nur unter bestimmten Race-Conditions auftrat.

  5. Build-Nummern-Disziplin

    Jeder TestFlight-Upload erfordert ein Increment von CURRENT_PROJECT_VERSION. Ich habe das in einer Session zwölfmal vergessen — jeder vergessene Bump = Apple-Server lehnt den Upload silent ab, kein Fehler im Xcode UI.

Aktueller Status

NeuroBirds steht aktuell auf v2.5.0 Build 12 in der internen TestFlight-Verteilung. Freunde aus dem näheren Umfeld testen aktiv, ein paar Bugs sind im Backlog (vor allem Edge-Cases in der World Map-Progression), und der Public Release ist innerhalb der nächsten Wochen geplant — sobald die letzten Bugs gefixt und die Screenshots für 6 Bildschirmgrößen final sind.

Wenn du es testen willst

Wenn du iOS hast und den Beta-Test mitmachen willst, schreib mir kurz — ich erweitere die TestFlight-Liste gerne. Voraussetzung: TestFlight-App installiert, iOS 17+, ehrliche Rückmeldung über Bugs / Verbesserungsvorschläge.

Reflexion

Die iOS-Welt zu betreten war frustrierender als erwartet, aber auch lohnender. Was im Web in einem Nachmittag deployed ist, braucht auf iOS Wochen wegen Bürokratie, Verträgen, Signing, Reviews. Aber das Endprodukt fühlt sich auf einer anderen Ebene “richtig” an — natives Touch, Haptics, Push Notifications, App Store-Distribution, Discovery.

Für ein Web-Studio, das in Hardware/Mobile expandiert, ist die iOS-Lernkurve einmal zu zahlen. Danach hat man einen zweiten Distributions-Channel und ein zweites Produkt-Surface, das man als Wender Media-Marke besitzen kann.

Das Pendant für Android steht noch aus — nächste Lernkurve.


Links: