|
| 1 | +# SOPA iOS – Produktfertigstellungsplan |
| 2 | + |
| 3 | +## Ziel |
| 4 | +Die iOS-Version soll sich in der **Spiellogik** wie die Android-Version verhalten (funktionale Parität), darf aber eine eigene UI/Navigation haben. |
| 5 | + |
| 6 | +## Aktueller Stand (Kurz) |
| 7 | +- iOS hat eine solide Basis für den Level-Mode. |
| 8 | +- Android hat deutlich mehr vollständige Produktbausteine (u.a. JustPlay-System mit Zeit/Score, zusätzliche Flows/Szenen). |
| 9 | +- iOS ist derzeit nicht release-ready als vollwertiges Pendant. |
| 10 | + |
| 11 | +## Priorisierter Umsetzungsplan |
| 12 | + |
| 13 | +### 1. JustPlay auf Android-Logik heben (höchste Priorität) |
| 14 | +**Ziel:** Gleiches Gameplay-Verhalten wie Android in JustPlay. |
| 15 | + |
| 16 | +**Fehlt auf iOS aktuell:** |
| 17 | +- [x] Countdown-Timer pro Runde |
| 18 | +- [x] Difficulty-/Levelsetting-Kurven über Fortschritt |
| 19 | +- [x] Score-Berechnung und Zeitbonus-Mechanik |
| 20 | +- [x] Game-Over- und Score-Screens |
| 21 | +- [x] JustPlay-Highscore-Persistenz |
| 22 | + |
| 23 | +**Umsetzung:** |
| 24 | +- [x] `JustPlayService` (+ Implementierung) in iOS ergänzen |
| 25 | +- [x] Zeitbasierten Game-Service ergänzen (analog Android-Verhalten) |
| 26 | +- [x] JustPlay-Flow in `StoryService` erweitern (Score/Lost/Next) |
| 27 | +- [x] Neue Szenen für Score/GameOver hinzufügen |
| 28 | +- [x] CoreData-Entity `JustPlayResults` aktiv nutzen |
| 29 | + |
| 30 | +**Abnahmekriterium:** |
| 31 | +- [ ] Bei identischer Eingabe ergibt sich gleiches Zeit-/Score-Verhalten wie auf Android. |
| 32 | + |
| 33 | +### 2. Content-Parität herstellen (100 Level) |
| 34 | +**Ziel:** Identische Levelbasis wie Android. |
| 35 | + |
| 36 | +**Aktuell:** iOS enthält nur 75 `.lv`-Level, Android 100. |
| 37 | + |
| 38 | +**Umsetzung:** |
| 39 | +- [x] Fehlende Level 76–100 nach iOS übernehmen |
| 40 | +- [x] Reihenfolge/IDs und Freischaltlogik validieren |
| 41 | + |
| 42 | +**Abnahmekriterium:** |
| 43 | +- [x] iOS hat 100 Levels und korrektes sequentielles Unlocking. |
| 44 | + |
| 45 | +### 3. Release-blockierende Endgame-Crashs beheben |
| 46 | +**Ziel:** Kein Crash am Ende des letzten Levels. |
| 47 | + |
| 48 | +**Risiko aktuell:** |
| 49 | +- `levelId + 1` wird ohne Bounds-Check geladen/entsperrt. |
| 50 | + |
| 51 | +**Umsetzung:** |
| 52 | +- Bounds-Prüfung beim Unlock und beim Laden des nächsten Levels |
| 53 | +- Letztes Level führt zu sauberem Abschlusszustand (z.B. Completion Scene) |
| 54 | + |
| 55 | +**Abnahmekriterium:** |
| 56 | +- Letztes Level ist stabil lösbar, kein Force-Unwrap-Crash. |
| 57 | + |
| 58 | +### 4. Fehlende Produkt-Flows ergänzen |
| 59 | +**Ziel:** Funktionsgleichwertige App-Flows wie Android. |
| 60 | + |
| 61 | +**Android-seitig vorhanden, iOS-seitig unvollständig/fehlend:** |
| 62 | +- [x] Hauptmenü |
| 63 | +- [ ] Settings (mind. Audio-Mute) |
| 64 | +- [ ] Credits |
| 65 | +- [ ] Tutorial/Onboarding |
| 66 | +- [x] Levelmode-Completion |
| 67 | +- [ ] Optional Loading-Übergang |
| 68 | + |
| 69 | +**Umsetzung:** |
| 70 | +- [x] Story-/Navigation auf iOS erweitern |
| 71 | +- [ ] Flows als eigene Szenen oder äquivalente iOS-Navigation umsetzen |
| 72 | + |
| 73 | +**Abnahmekriterium:** |
| 74 | +- [ ] Alle wesentlichen Modi/Zustände sind für Nutzer erreichbar und vollständig rücknavigierbar. |
| 75 | + |
| 76 | +### 5. Release-Härtung (Dev/Debug entfernen) |
| 77 | +**Ziel:** Produktionsreife Laufzeitkonfiguration. |
| 78 | + |
| 79 | +**Umsetzung:** |
| 80 | +- `DEVELOPER_MODE` standardmäßig deaktivieren |
| 81 | +- Debug-Ausgaben/temporäre Buttons entfernen |
| 82 | +- Auskommentierte Steuer-Elemente finalisieren |
| 83 | + |
| 84 | +**Abnahmekriterium:** |
| 85 | +- Kein Dev-only Verhalten in Release-Builds. |
| 86 | + |
| 87 | +### 6. Stabilität erhöhen (fatalError in Runtimepfaden reduzieren) |
| 88 | +**Ziel:** Robustes Fehlerverhalten statt App-Abbruch. |
| 89 | + |
| 90 | +**Umsetzung:** |
| 91 | +- Kritische `fatalError()` in Datenzugriff/State-Handling durch kontrollierte Fehlerpfade ersetzen |
| 92 | +- Fehler protokollieren und Nutzerfluss erhalten, wo möglich |
| 93 | + |
| 94 | +**Abnahmekriterium:** |
| 95 | +- Typische Daten-/State-Fehler führen nicht zum sofortigen Crash. |
| 96 | + |
| 97 | +### 7. Teststrategie auf Parität ausrichten |
| 98 | +**Ziel:** Nachweisbare Gleichheit der Spiellogik Android vs iOS. |
| 99 | + |
| 100 | +**Umsetzung:** |
| 101 | +- Bestehende iOS-Tests aktualisieren (inkl. korrekter Level-Anzahl) |
| 102 | +- Golden-Tests einführen für: |
| 103 | + - Shift-/Move-Verhalten |
| 104 | + - Solve-Check |
| 105 | + - Star-Berechnung |
| 106 | + - JustPlay-Zeit-/Score-Logik |
| 107 | +- Optional: Vergleichsfixtures zwischen Android und iOS nutzen |
| 108 | + |
| 109 | +**Abnahmekriterium:** |
| 110 | +- Kritische Kernlogik ist automatisiert getestet und stabil reproduzierbar. |
| 111 | + |
| 112 | +### 8. Technische Modernisierung für Store-Release |
| 113 | +**Ziel:** Zeitgemäße iOS-Build-/Release-Basis. |
| 114 | + |
| 115 | +**Umsetzung:** |
| 116 | +- [x] Deployment-Target und Build-Einstellungen aktualisieren |
| 117 | +- [ ] `Info.plist` auf aktuelle Anforderungen prüfen/aufräumen |
| 118 | +- [ ] Signierung/Versionierung finalisieren |
| 119 | + |
| 120 | +**Abnahmekriterium:** |
| 121 | +- [ ] Sauberer Release-Build mit aktueller Toolchain und plausiblen Store-Metadaten. |
| 122 | + |
| 123 | +## Empfohlene Reihenfolge |
| 124 | +1. Crash-Fixes + 100-Level-Parität |
| 125 | +2. JustPlay vollständig (Timer/Score/Lost/Score/Highscore) |
| 126 | +3. Fehlende Flows (Menü/Settings/Tutorial/Credits/Completion) |
| 127 | +4. Release-Härtung + Testausbau |
| 128 | +5. Build-/Store-Modernisierung und finaler Release-Check |
| 129 | + |
| 130 | +## Definition of Done |
| 131 | +- iOS-Gameplay entspricht Android in der Spiellogik (Levelmode + JustPlay). |
| 132 | +- 100 Level vollständig, Unlocking stabil. |
| 133 | +- Keine bekannten Crashes in Standard-Flows. |
| 134 | +- Alle relevanten Nutzerflüsse vollständig bedienbar. |
| 135 | +- Testabdeckung für Kernlogik vorhanden und grün. |
| 136 | +- Release-Build erfolgreich, produktionsreif. |
0 commit comments