Diese Datei gilt fuer dieses Repo (sopa-ios).
SOPA iOS soll in der Spiellogik Android-Verhalten erreichen (UI darf abweichen).
- iOS-Projekt:
SOPA.xcodeproj - Scheme:
SOPA - Test-Target:
SOPATests - Deployment Target: iOS 18.0
- Build:
xcodebuild -project SOPA.xcodeproj -scheme SOPA -destination 'platform=iOS Simulator,name=iPhone 17 Pro' build
- Voller Testlauf:
xcodebuild -project SOPA.xcodeproj -scheme SOPA -destination 'platform=iOS Simulator,name=iPhone 17 Pro' test
- Hinweis: Simulator-Namen mit
xcrun simctl list devices availableprüfen (der Name variiert je nach installierter Xcode-Version; aktuell iOS 26.5, iPhone 17 Pro).
Für UI-/Design-Arbeit lässt sich die App im Simulator fernsteuern (Taps/Swipes), um Screens gegen das Android-Design abzugleichen. Setup ist installiert (siehe unten bei Problemen).
Ablauf (Beispiel iPhone 17 Pro):
export PATH="$HOME/.local/bin:$PATH" # idb-CLI liegt in ~/.local/bin (pipx)
UDID=$(xcrun simctl list devices booted | grep -oE '[0-9A-F-]{36}' | head -1)
BUNDLE=de.davidschilling.SOPA
xcrun simctl boot "iPhone 17 Pro" 2>/dev/null # falls nicht gebootet
xcrun simctl install "$UDID" "$(find ~/Library/Developer/Xcode/DerivedData/SOPA-*/Build/Products/Debug-iphonesimulator -maxdepth 1 -name SOPA.app | head -1)"
xcrun simctl launch "$UDID" "$BUNDLE"
idb connect "$UDID"
idb ui tap --udid "$UDID" <x> <y> # Koordinaten in POINTS (iPhone 17 Pro = 402x874)
idb ui swipe --udid "$UDID" <x1> <y1> <x2> <y2> # z.B. Reihe/Spalte im Spielfeld schieben
xcrun simctl io "$UDID" screenshot out.png # Screenshot zum VergleichMenü-Tap-Punkte (Points, iPhone 17 Pro): LEVEL MODE ≈ (201,345), JUST PLAY ≈ (201,439), TUTORIAL ≈ (201,535), CREDITS ≈ (201,629).
Grenzen: Screens hinter Gameplay (Level Complete, JustPlay-Score) erscheinen erst nach gelöstem Puzzle und lassen sich per Blind-Swipe kaum reproduzierbar erreichen – dafür Quellcode heranziehen. JustPlay-Game-Over erreicht man einfach, indem man den Timer ablaufen lässt (~12 s ohne Lösung).
brew install facebook/fb/idb-companionpipx install --python /opt/homebrew/bin/python3.12 fb-idb(muss Python 3.12 sein, nicht 3.14 – fb-idb 1.1.7 crasht auf 3.14 wegen entferntemasyncio.get_event_loop()).- Die Meldung
objc[...] Class FBProcess is implemented in both ...bei jedem Aufruf ist harmlos.
- Produktplan:
IOS_PRODUCT_COMPLETION_PLAN.md - Navigation/Flow:
SOPA/manager/StoryServiceImpl.swift - JustPlay-Logik:
SOPA/JustPlay/JustPlayGameScene.swift,SOPA/model/game/*JustPlay* - Level/Unlocking:
SOPA/helper/LevelServiceImp.swift - Level-Content:
SOPA/levels/
- Tests in Xcode-Projekt eintragen: neue Testdateien muessen in
SOPA.xcodeproj/project.pbxprojals FileReference + BuildFile + Sources-Phase enthalten sein. - CoreData Klassenkonflikt im Testhost:
LevelInfoMO/JustPlayResultswerden in App + Test-Bundle geladen. Tests sollten CoreData-kritische Pfade moeglichst vermeiden oder als reine Logiktests gebaut werden. - Asset-Warnung: Doppelte Symbolauflosung fuer
restartin Assets (GeneratedAssetSymbols.swiftWarnung).
- Erweiterte Tests vorhanden fuer:
- JustPlay Score/Timer-Basislogik
- JustPlay Highscore-Persistenz
- Unlocking-Regel (highest solved + 1) als pure Logik
- StarCalculator Grenzwerte
- GameService-Verhalten bei bereits geloestem Puzzle
- Letzter gesamter Lauf:
19 tests, 0 failures.
- Keine unbeabsichtigten Aenderungen ausserhalb dieses iOS-Projekts.
- Vor groesseren Refactorings immer erst
xcodebuild testlaufen lassen. - Bei UI-Flows immer Ruecknavigation pruefen (Startmenu <-> Mode <-> Level/JustPlay).
- Unlocking-Regel beibehalten: freigeschaltet = geloest + 1.
- Settings (mind. Audio-Mute)
- Credits
- Tutorial/Onboarding
- Optional Loading-Transition
- Release-Haertung (Dev-Flags, Info.plist-Aufraeumen, Signing/Versionierung)