Aggiunge app iOS nativa con parità multi-sport e test unitari.

Porting SwiftUI da Android (auth, hub, wizard, broadcast RTMP, overlay, scoring board-aware), reload hub al ritorno da diretta, decodifica score tollerante e documentazione allineata.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Emiliano Frascaro
2026-06-14 21:37:32 +02:00
parent b798e0ea06
commit 585332e32e
101 changed files with 7910 additions and 5 deletions

84
native/ios/README.md Normal file
View File

@@ -0,0 +1,84 @@
# Match Live TV — app iOS nativa
Porting SwiftUI dell'app Android con stessa UI, brand e contratti API backend.
## Stack
- UI: SwiftUI, NavigationStack
- Rete: URLSession + Codable
- Auth: Keychain
- Streaming: HaishinKit (RTMP) + AVFoundation
- Overlay: Core Graphics (bitmap composito su pipeline video)
## Struttura
```
MatchLiveTv/
App/ — entry point
Core/ — config, token store, utility
Data/ — API, repository, ActionCable
Domain/ — modelli
Streaming/ — motore RTMP, overlay nativi
UI/ — schermate SwiftUI
Resources/ — Assets.xcassets (brand), Info.plist
```
## Parità multi-sport (riferimento: `docs/TABELLONI_E_OVERLAY.md`)
| Board | Controlli broadcast | Overlay video | Stato iOS |
|-------|---------------------|---------------|-----------|
| volley / racket | +1, undo, chiudi set (API `close_set`) | Tabellone a colonne | Completo |
| basket | +1/+2/+3, undo, `advance_period` | Compact scoreboard | Completo |
| timed | +1, undo, `advance_period` | Compact scoreboard | Completo |
| generic | +1 / undo locale | Watermark | Completo |
| timer | — | Solo watermark | Completo |
Il cronometro basket/timed è gestito in **regia web**, non sull'overlay video (come Android).
## Asset brand
Gli asset in `brand/` sono importati in `Resources/Assets.xcassets`:
- `logo-white-m`, `logo-white-m-256` — wordmark e watermark
- `logo-dark-gradient`, `logo-dark-gradient-256` — app icon
- `CopertinaCanale*.png` — riferimenti visivi brand
## Build
```bash
python3 generate_xcodeproj.py # rigenera MatchLiveTv.xcodeproj
./scripts/build_ios_release.sh
```
Override API: `API_BASE_URL=https://staging.example.com ./scripts/build_ios_release.sh`
## Test
```bash
cd native/ios
python3 generate_xcodeproj.py
xcodebuild -project MatchLiveTv.xcodeproj -scheme MatchLiveTv \
-destination 'platform=iOS Simulator,name=iPhone 17' \
-derivedDataPath build/DerivedData \
ONLY_ACTIVE_ARCH=YES ARCHS=arm64 EXCLUDED_ARCHS=x86_64 \
test -only-testing:MatchLiveTvTests
```
## Requisiti
- Xcode 16+
- iOS 16+
- Mac con Apple Silicon o Intel
## Funzionalità
- Login JWT, hub partite (reload al ritorno da diretta), wizard 3 step
- Diretta RTMP 1280×720 con overlay tabellone/watermark
- ActionCable SessionChannel per punteggio e comandi regia
- Telemetria dispositivo periodica
- Orientamento: portrait ovunque, landscape solo in broadcast
## Documentazione correlata
- [`docs/TABELLONI_E_OVERLAY.md`](../../docs/TABELLONI_E_OVERLAY.md) — regolamenti, board, overlay
- [`docs/MULTI_SPORT.md`](../../docs/MULTI_SPORT.md) — catalogo sport e engine scoring
- [`docs/ARCHITECTURE.md`](../../docs/ARCHITECTURE.md) — infrastruttura e flussi live/HLS