Dynamic Island est une zone interactive en haut de l'iPhone 14 Pro et de tous les iPhone 15/16 qui combine notifications, activités en arrière-plan et indicateurs système dans une seule zone dynamique. Contrairement à l'encoche traditionnelle (notch), Dynamic Island change de forme et de taille selon le contexte actuel. Selon Apple (WWDC 2024), les utilisateurs interagissent avec Dynamic Island en moyenne 12 fois par jour — via des tapots, des pressions longues et des Live Activities avec ActivityKit. En savoir plus sur les animations dans iOS dans l'article sur Corner Radius.
Points clés
Dynamic Island est une zone interactive basée sur la solution logicielle-matérielle d'Apple, présentée en septembre 2022 avec l'iPhone 14 Pro. Physiquement, il s'agit d'une découpe en forme de pilule entourée de pixels OLED qui changent dynamiquement de couleur et de forme. Apple utilise une combinaison d'une découpe matérielle pour la caméra et Face ID avec un rendu logiciel des zones noires autour, créant l'illusion d'une île « vivante ».
L'objectif principal de Dynamic Island est de combler le fossé entre les notifications système et le contenu actif. Au lieu que les notifications apparaissent au centre de l'écran (comme sur Android) ou sous forme de bannières en haut (comme sur les anciennes versions d'iOS), Dynamic Island les intègre directement dans la zone matérielle. Cela réduit les distractions et crée une sensation d'espace unifié.
Selon les données d'Apple (Statistiques d'adoption d'iOS 17, 2024), Dynamic Island est disponible sur 38 % des iPhone actifs. À partir de l'iPhone 15 (2023), tous les modèles de la gamme ont reçu Dynamic Island, y compris les modèles de base. Dans iOS 18, Apple a étendu l'API Live Activities, ajoutant la prise en charge des minuteries de compte à rebours et des résultats sportifs directement sur Dynamic Island.
Dynamic Island est disponible sur iPhone 14 Pro, iPhone 14 Pro Max, iPhone 15, iPhone 15 Plus, iPhone 15 Pro, iPhone 15 Pro Max, iPhone 16, iPhone 16 Plus, iPhone 16 Pro, iPhone 16 Pro Max. Dynamic Island n'est pas disponible sur iPad. Le développement pour Dynamic Island nécessite Xcode 14.1+ et iOS 16.1+.
Dynamic Island prend en charge trois états d'affichage : compact, minimal et étendu. Les transitions entre les états sont animées à l'aide d'animations UIKit et Core Animation. Le système gère lui-même la priorité des activités : si plusieurs applications tentent d'afficher du contenu simultanément, iOS utilise une file d'attente basée sur l'heure de début de la dernière activité.
| État | Taille | Contenu | Exemple |
|---|---|---|---|
| Compact | 49×18 pt | Icône d'application + icône système | Minuteur, musique, appel |
| Minimal | Jusqu'à 66×18 pt | Icône + texte court | Directions de navigation, pas |
| Étendu | Jusqu'à 364×160 pt | Widget complet avec contenu | Score sportif, statut du taxi |
État compact est la vue standard de Dynamic Island lorsqu'une tâche en arrière-plan est active. Il apparaît comme une pilule arrondie avec l'icône de l'application à gauche et une icône système à droite. Par défaut, toutes les Live Activities commencent en état compact.
État minimal se produit lorsque deux tâches ou plus sont actives simultanément. Dynamic Island se « divise » en deux éléments séparés à gauche et à droite de la caméra. L'état minimal permet d'afficher deux sources d'information indépendantes, comme le temps d'arrivée du taxi et le morceau en cours.
État étendu est activé par une pression longue sur Dynamic Island. Dans ce mode, un widget complet avec contenu personnalisable est affiché : titres, descriptions, barres de progression, boutons. L'état étendu prend en charge le défilement et les éléments interactifs.
ActivityKit est un framework Swift introduit dans iOS 16.1 qui permet aux applications de publier des Live Activities sur Dynamic Island et l'écran de verrouillage. ActivityKit utilise une architecture basée sur ActivityView et ActivityAttributes : le premier définit le type de contenu, le second définit les données modifiables. Le framework fonctionne conjointement avec WidgetKit, mais contrairement aux widgets, les Live Activities peuvent être mises à jour en temps réel sans ouvrir l'application.
import ActivityKit
import SwiftUI
// Définir les attributs de l'activité
struct DeliveryAttributes: ActivityAttributes {
public struct ContentState: Codable, Hashable {
var driverName: String
var distanceToArrival: Double
var estimatedMinutes: Int
}
var orderNumber: String
}
// Démarrer Live Activity
func startDeliveryActivity() {
let initialState = DeliveryAttributes.ContentState(
driverName: "Alexeï",
distanceToArrival: 3.5,
estimatedMinutes: 12
)
let attributes = DeliveryAttributes(orderNumber: "ORD-2024-8912")
let activity = try? Activity.request(
attributes: attributes,
contentState: initialState,
pushType: .token
)
}
Live Activities sont mises à jour via ActivityView, qui rend le contenu SwiftUI pour Dynamic Island. Le système détermine lui-même quel modèle utiliser (compact, minimal ou étendu) en fonction de la taille de Dynamic Island et du nombre d'activités. Pour mettre à jour le contenu, appelez activity.update(using: contentState). Pour terminer — activity.end(dismissalPolicy: .immediate).
ActivityKit prend en charge les mises à jour push via APNs (Apple Push Notification Service). Au démarrage d'une Live Activity, vous pouvez demander un pushToken et envoyer des mises à jour depuis le serveur sans avoir à lancer l'application sur l'appareil. Les mises à jour push fonctionnent via activity.pushToken et Activity.pushToStartToken pour le démarrage à distance de Live Activities.
// Mettre à jour Live Activity via Push
func updateActivity(activity: Activity<DeliveryAttributes>) {
let updatedState = DeliveryAttributes.ContentState(
driverName: "Alexeï",
distanceToArrival: 1.2,
estimatedMinutes: 4
)
let alertConfiguration = AlertConfiguration(
title: "Livreur à proximité",
body: "Alexeï arrivera dans 4 minutes",
sound: .default
)
await activity.update(
using: updatedState,
alertConfiguration: alertConfiguration
)
}
AlertConfiguration est un paramètre optionnel qui affiche une notification au-dessus de Dynamic Island pour les mises à jour importantes (par exemple, « Le livreur est arrivé »). Sans AlertConfiguration, le contenu est mis à jour silencieusement, ce qui convient aux barres de progression et aux minuteries.
Notch (encoche) est la découpe matérielle de l'iPhone X–13 qui contient la caméra frontale, le capteur Face ID et le haut-parleur. L'encoche est statique : sa taille et sa forme ne changent pas, et les notifications s'affichent en dessous sous forme de bannières standard. Dynamic Island, en revanche, utilise les pixels autour de la découpe pour afficher du contenu, faisant de l'élément matériel une partie de l'interface.
| Critère | Dynamic Island | Notch |
|---|---|---|
| Interactivité | Prend en charge les tapots, pressions longues, balayages | Non interactif |
| Adaptation du contenu | Change de forme selon le contexte | Statique, contenu sous l'encoche |
| Live Activities | Prise en charge intégrée via ActivityKit | Non — notifications standard uniquement |
| Multitâche | Deux activités simultanées (gauche et droite) | Une seule activité |
| Disponibilité | iOS 16.1+, iPhone 14 Pro et plus récents | iOS 11+, iPhone X–13 |
Selon les Apple Human Interface Guidelines (2025), Dynamic Island ne doit pas être utilisé pour la publicité ou l'affichage permanent de contenu statique. Les Live Activities sont destinées uniquement aux tâches en arrière-plan avec un cycle de vie clair : minuteries, livraison, sport, musique, navigation. La violation de ces règles entraîne le rejet de l'application lors de la révision App Store.
Dynamic Island a un cycle de vie strict : une activité commence par une requête via Activity.request(), passe par les états active/pause/mise à jour et se termine par un appel à activity.end(). Le système peut forcer la fin d'une activité en cas de manque de mémoire (par exemple, lors du lancement de la caméra). Dans ce cas, l'application reçoit une notification via ActivityActivityState.finished.
Les gestes sur Dynamic Island sont gérés par le contenu SwiftUI dans ActivityView. Gestes standard : tap sur l'état compact ouvre l'application, pression longue développe l'état étendu, balayage vers le bas ferme l'état étendu. Les gestes personnalisés sont ajoutés via des modificateurs SwiftUI (onTapGesture, onLongPressGesture) dans la vue d'activité.
Lorsque le système termine une Live Activity (ou que l'utilisateur la supprime par balayage), l'application doit gérer l'état finished pour libérer les ressources. Il est recommandé de s'abonner à Activity.activityStateUpdates et de supprimer les références locales à l'activité après la fin.
import ActivityKit
func observeActivityState(activity: Activity<DeliveryAttributes>) {
Task {
for await state in activity.activityStateUpdates {
switch state {
case .active:
print("Activité active sur Dynamic Island")
case .dismissed:
print("Activité masquée par l'utilisateur")
await activity.end(dismissalPolicy: .immediate)
case .finished:
print("Activité terminée par le système")
cleanupResources()
@unknown default:
break
}
}
}
}
Recommandation d'Apple (WWDC 2024, Session 10146) : n'utilisez pas Dynamic Island pour afficher des statuts qui ne nécessitent pas l'attention de l'utilisateur. Chaque Live Activity doit avoir un déclencheur de début et de fin clair. Pour les mises à jour en arrière-plan sans interface utilisateur, utilisez Background Tasks plutôt que Live Activities.
Foire aux questions
Dynamic Island est disponible sur iPhone 14 Pro, 14 Pro Max et tous les modèles iPhone 15 et iPhone 16 (y compris les versions de base). Le développement nécessite iOS 16.1+ et Xcode 14.1. Sur les modèles plus anciens (iPhone X–13), une encoche statique est utilisée, qui ne prend pas en charge les Live Activities.
Dynamic Island intègre la notification dans la zone matérielle de l'écran sans masquer le contenu. Une notification ordinaire apparaît sous forme de bannière en haut et disparaît après quelques secondes. Les Live Activities sur Dynamic Island peuvent rester actives pendant des heures et se mettre à jour en temps réel (statut de livraison, minuteur, musique).
Utilisez les mises à jour push via APNs. Au démarrage d'une Live Activity, appelez activity.pushToken et envoyez le jeton à votre serveur. Le serveur envoie une demande de mise à jour via APNs avec le nouveau ContentState. Une alternative consiste à effectuer des mises à jour locales via activity.update(using:) depuis l'application elle-même.
iOS divise automatiquement Dynamic Island en deux segments lorsque deux Live Activities sont actives. Chaque activité s'affiche en état minimal à gauche et à droite de la caméra. Une pression longue sur l'un des segments ouvre l'état étendu uniquement pour cette application.
Vérifiez : (1) l'application a NSSupportsLiveActivities = YES dans Info.plist, (2) ActivityAttributes et ContentState implémentent Codable et Hashable, (3) la version iOS est 16.1+, (4) l'appareil prend en charge Dynamic Island. Pour le simulateur, utilisez iPhone 14 Pro ou plus récent dans Xcode.
Résumé
Nous développerons une application mobile clé en main
IT Sectr crée des applications iOS et Android pour les startups et les entreprises depuis 2017. Nous vous conseillerons et vous proposerons la meilleure solution.
Lisez aussi