Portfolio
Sortie
Projet personnel · iOS / SwiftUI · 2026

CarDashboard
CarPlay Maison sur iPad

Ma voiture n'a pas CarPlay — alors je l'ai construit. Un iPad fixé au tableau de bord affiche en temps réel le mirroring de Waze depuis mon iPhone, la musique en cours, la météo et des contacts d'appel rapide. Le tout communique en pair-à-pair sur le hotspot de l'iPhone : aucun serveur, aucune connexion Internet requise pour le flux vidéo.

Code source : github.com/clementbalcon/CarDashboard
Dashboard iPad — mirroring Waze, musique, météo, appels rapides
iPad — le dashboard
App companion iPhone — broadcast et Waze
iPhone — le companion
3
Cibles Xcode
5
Widgets
H.264
Flux temps réel
0
Serveur requis

Conception, développement et intégration — projet solo, développé avec l'aide de Claude Code

Stack Technique

Dashboard iPad— SwiftUI, layout adaptatif portrait/paysage
Companion iPhone— broadcast, batterie, GPS
Broadcast Extension— capture d'écran ReplayKit
Multipeer Connectivity · VideoToolbox · ReplayKit · MediaPlayer · CoreLocation · Contacts
Swift / SwiftUI Streaming vidéo H.264 Multipeer Connectivity ReplayKit VideoToolbox Temps réel API REST (Open-Meteo) Architecture modulaire

Contexte & Problématique

Les systèmes CarPlay d'origine sont absents des voitures plus anciennes, et les solutions du marché (autoradios compatibles) sont coûteuses et limitées. L'idée : transformer un iPad en dashboard embarqué qui réplique l'essentiel — navigation, musique, appels — en exploitant l'iPhone déjà présent dans la voiture. Contrainte majeure : Waze ne partage ses données de navigation avec aucune app tierce, la seule voie possible est le mirroring d'écran temps réel.

Démarche

01
Dashboard & widgets autonomes
Grille SwiftUI modulaire (chaque widget conforme à un protocole commun), lecteur Apple Music interactif avec playlists, météo Open-Meteo sur 6 heures, contacts d'appel rapide configurables.
02
Liaison iPhone ↔ iPad
Canal pair-à-pair Multipeer Connectivity (découverte Bonjour, zéro configuration) transportant messages de données — batterie, position GPS relayée pour la météo — et flux vidéo sur le même lien.
03
Mirroring vidéo temps réel
Capture d'écran par Broadcast Upload Extension (ReplayKit), encodage H.264 matériel (VideoToolbox, budget mémoire 50 Mo), transport hybride fiable/non-fiable, décodage et affichage sur l'iPad.

Architecture

📱
App iPad — le dashboard
Layout adaptatif portrait/paysage, zone Waze dimensionnée au ratio exact de l'écran iPhone, widgets musique, météo, contacts et batterie.
📡
Extension broadcast — la capture
Capture chaque frame de l'écran iPhone, encode en H.264 temps réel et diffuse — keyframes en transport fiable, inter-frames en non-fiable pour minimiser la latence.
🔗
Transport Multipeer — le lien
Un seul canal pair-à-pair pour tout : vidéo, config décodeur (renvoyée à chaque keyframe pour la reconnexion à chaud), batterie et position GPS.
🎛️
App companion — le cockpit iPhone
Démarrage du broadcast en un tap (RPSystemBroadcastPickerView), ouverture de Waze, envoi périodique de la batterie et du GPS en arrière-plan.

Résultat

Le système fonctionne en conditions réelles dans ma Citroën C4 : l'iPad affiche la carte Waze avec une latence imperceptible, la musique se pilote depuis le tableau de bord, et le tout survit aux rotations d'écran et aux reconnexions. Développé intégralement avec un compte développeur Apple gratuit — le code est open source sur GitHub.