Skip to content

Commit c7fb753

Browse files
committed
Implement JustPlay parity, start menu flow, and level progression fixes
1 parent 595524d commit c7fb753

45 files changed

Lines changed: 1312 additions & 313 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

IOS_PRODUCT_COMPLETION_PLAN.md

Lines changed: 136 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,136 @@
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.

SOPA.xcodeproj/project.pbxproj

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -702,7 +702,7 @@
702702
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
703703
GCC_WARN_UNUSED_FUNCTION = YES;
704704
GCC_WARN_UNUSED_VARIABLE = YES;
705-
IPHONEOS_DEPLOYMENT_TARGET = 11.0;
705+
IPHONEOS_DEPLOYMENT_TARGET = 18.0;
706706
MTL_ENABLE_DEBUG_INFO = YES;
707707
ONLY_ACTIVE_ARCH = YES;
708708
SDKROOT = iphoneos;
@@ -755,7 +755,7 @@
755755
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
756756
GCC_WARN_UNUSED_FUNCTION = YES;
757757
GCC_WARN_UNUSED_VARIABLE = YES;
758-
IPHONEOS_DEPLOYMENT_TARGET = 11.0;
758+
IPHONEOS_DEPLOYMENT_TARGET = 18.0;
759759
MTL_ENABLE_DEBUG_INFO = NO;
760760
SDKROOT = iphoneos;
761761
SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
{
2+
"images" : [
3+
{
4+
"filename" : "ModeJustPlay.png",
5+
"idiom" : "universal",
6+
"scale" : "1x"
7+
}
8+
],
9+
"info" : {
10+
"author" : "xcode",
11+
"version" : 1
12+
}
13+
}
36.2 KB
Loading
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
{
2+
"images" : [
3+
{
4+
"filename" : "ModeLevel.png",
5+
"idiom" : "universal",
6+
"scale" : "1x"
7+
}
8+
],
9+
"info" : {
10+
"author" : "xcode",
11+
"version" : 1
12+
}
13+
}
15.9 KB
Loading

0 commit comments

Comments
 (0)