Dans le cadre du programme Apple Foundation Program dispensé par Simplon, j'ai travaillé sur un projet d’application iOS baptisé A2PAS. Conçu pour favoriser la découverte des événements locaux autour de soi, le projet m’a permis de me concentrer sur des fonctionnalités géospatiales avancées, notamment l'intégration de MapKit, la gestion d’itinéraires et la création d’un système de filtres dynamiques avec SwiftUI.
Ce billet détaille les éléments techniques de la vue Map, les choix d’implémentation, ainsi que les apprentissages issus de cette formation.
Objectif de l’application
A2PAS est une application mobile qui permet aux utilisateurs de visualiser, filtrer et accéder à des événements culturels ou sociaux proches d'eux. L’expérience repose principalement sur une carte interactive affichant des événements par catégorie avec une logique de proximité (géolocalisation + rayon).
Fonctionnalités clés :
- Affichage des événements géolocalisés via MapKit
- Pins personnalisés (couleur, symbole, style) selon le type d’événement
- Lancement d’un itinéraire direct depuis la position utilisateur
- Filtrage multicatégorie des événements (concert, cinéma, marché…)
- Recherche textuelle en temps réel
- Slider de zoom précis sur la map
Architecture technique
L’application a été développée en SwiftUI, en structurant les composants autour du principe MVVM. Voici les principaux modules :
MapView.swift
: Vue principale affichant la carte, la géolocalisation et les interactions utilisateurRouteMapView.swift
: WrapperUIViewRepresentable
pour intégrerMKMapView
et gérer les pins/overlaysModalEventView.swift
: Vue détaillée d’un événement avec actions (itinéraire, favoris…)LocationManager.swift
: Gestion de la localisation avecCoreLocation
MapActivity.swift
: Struct de données combinant une activité et ses coordonnées
Map personnalisée avec RouteMapView.swift
Pour offrir une meilleure lisibilité, les événements sont représentés par des bulles colorées avec des symboles contextuels. Ces vues sont générées via une customisation de MKAnnotationView
, en injectant une image SVG rendue dynamiquement :
let icon = UIImage(systemName: iconFor(label))
let background = colorFor(label) // -> UIColor
L’intégration de MKMapView
dans SwiftUI s’est faite via UIViewRepresentable
, ce qui permet une communication fluide avec les composants natifs UIKit tout en conservant la logique SwiftUI pour le reste de l’interface.
Nous avons également implémenté un système de clustering d’événements avec MKClusterAnnotation
afin de ne pas surcharger visuellement la carte.
Enfin, une interaction fluide est assurée grâce à des animations SwiftUI et une gestion des états réactifs sur les événements sélectionnés.
Le projet A2PAS m’a permis de mettre en œuvre des concepts avancés de SwiftUI, de travailler avec des APIs Apple comme MapKit et CoreLocation, tout en développant une application utile, lisible et interactive.
Ce fut aussi une occasion unique de travailler avec des données géographiques réelles, d'améliorer la précision UX/UI, et de maîtriser des outils professionnels modernes dans un cadre formateur stimulant.