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>
85 lines
2.7 KiB
Markdown
85 lines
2.7 KiB
Markdown
# 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
|