Application iOS de télécommande universelle pour TV/box via réseau local.
- Une seule app pour contrôler Roku, Google Cast et autres TV compatibles.
- Découverte LAN (SSDP + mDNS/Bonjour).
- Télécommande complète (navigation, volume, lecture, etc.).
- Casting média avec fallback AirPlay.
- Commandes vocales (Speech framework).
- Architecture modulaire via drivers/adapters.
- iOS 16+
- Xcode 15+
- Accès réseau local (LAN Wi-Fi)
- Ouvre
UniversalTVRemote.xcodeprojdans Xcode (la racine contient le projet et le README). - Vérifie l’identifiant de bundle et l’équipe de signature si besoin.
- Les sources sont organisées dans
UniversalTVRemote/et les tests dansUniversalTVRemoteTests/(structure Xcode classique). - Les frameworks système requis sont utilisés via
import(Speech, AVFoundation, PhotosUI, Network).
Ajoute les clés suivantes :
NSLocalNetworkUsageDescription: "Découverte et contrôle des appareils TV sur le réseau local."NSBonjourServices:[_roku._tcp, _googlecast._tcp]NSMicrophoneUsageDescription: "Commandes vocales."NSSpeechRecognitionUsageDescription: "Reconnaissance des commandes vocales."NSPhotoLibraryUsageDescription: "Sélection de photos/vidéos à caster."
App/
Core/
Discovery/
Models/
Networking/
Persistence/
Remote/
Casting/
Drivers/
Tests/
TVDriver: contrat commun pour chaque marque/protocole.DeviceDiscoveryService: scan LAN (SSDP + Bonjour).DriverRegistry: sélection automatique d’un driver.CommandRouter: point d’entrée unique pour les commandes.
- Roku (ECP HTTP) : navigation, volume, lecture, texte, launch apps.
- Google Cast : nécessite Google Cast iOS SDK (GCKSessionManager, etc.).
- LG webOS : pairing via websocket (
ws://<ip>:3000). - Samsung Tizen : websocket (
wss://<ip>:8002). - Sony Bravia : JSON-RPC
/sony/system+ pairing par PIN. - DLNA/UPnP : SOAP AVTransport.
- Chromecast via SDK officiel (à intégrer).
- Roku : nécessite une app channel compatible (TODO).
- Fallback : AirPlay via feuille de partage iOS.
VoiceCommandRouterTestsDriverRegistryTestsSSDPParsingTestsRemoteViewModelTestsDeviceDiscoveryViewModelTests
- Créer un type
MyBrandDriverconforme àTVDriver. - Définir
capabilities. - Implémenter
connect,send,sendText,launch,castMedia. - Enregistrer dans
DefaultDriverRegistry.
- Certaines marques exigent des API cloud (SmartThings, etc.).
- Les intégrations Cast/webOS/Tizen/Bravia sont structurées mais nécessitent pairing + endpoints officiels.
Tout le code est documenté en français et extensible pour des intégrations supplémentaires.