Dynamic Island è un'area interattiva nella parte superiore dell'iPhone 14 Pro e di tutti gli iPhone 15/16 che combina notifiche, attività in background e indicatori di sistema in un'unica zona dinamica. A differenza del tradizionale notch, Dynamic Island cambia forma e dimensioni in base al contesto attuale. Secondo Apple (WWDC 2024), gli utenti interagiscono con Dynamic Island in media 12 volte al giorno — tramite tocchi, pressioni lunghe e Live Activities con ActivityKit. Ulteriori informazioni sulle animazioni in iOS nell'articolo su Corner Radius.
Punti chiave
Dynamic Island è un'area interattiva basata sulla soluzione software-hardware di Apple, presentata a settembre 2022 insieme all'iPhone 14 Pro. Fisicamente, è un ritaglio a forma di pillola circondato da pixel OLED che cambiano dinamicamente colore e forma. Apple utilizza una combinazione di un ritaglio hardware per la fotocamera e Face ID con rendering software delle aree nere circostanti, creando l'illusione di un'isola «viva».
L'obiettivo principale di Dynamic Island è colmare il divario tra le notifiche di sistema e il contenuto attivo. Invece di far apparire le notifiche al centro dello schermo (come su Android) o come banner dall'alto (come nelle versioni precedenti di iOS), Dynamic Island le integra direttamente nella zona hardware. Questo riduce le distrazioni e crea una sensazione di spazio unificato.
Secondo i dati Apple (Statistiche di adozione di iOS 17, 2024), Dynamic Island è disponibile sul 38% degli iPhone attivi. A partire dall'iPhone 15 (2023), tutti i modelli della gamma hanno ricevuto Dynamic Island, inclusi i modelli base. In iOS 18, Apple ha ampliato l'API Live Activities, aggiungendo il supporto per timer di conto alla rovescia e punteggi sportivi direttamente su Dynamic Island.
Dynamic Island è disponibile su 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 non è disponibile su iPad. Lo sviluppo per Dynamic Island richiede Xcode 14.1+ e iOS 16.1+.
Dynamic Island supporta tre stati di visualizzazione: compatto, minimo ed espanso. Le transizioni tra gli stati sono animate utilizzando animazioni UIKit e Core Animation. Il sistema stesso gestisce la priorità delle attività: se più app tentano di visualizzare contenuti contemporaneamente, iOS utilizza una coda basata sull'ora di inizio dell'ultima attività.
| Stato | Dimensioni | Contenuto | Esempio |
|---|---|---|---|
| Compatto | 49×18 pt | Icona app + icona di sistema | Timer, musica, chiamata |
| Minimo | Fino a 66×18 pt | Icona + testo breve | Indicazioni di navigazione, passi |
| Espanso | Fino a 364×160 pt | Widget completo con contenuto | Punteggio sportivo, stato del taxi |
Stato compatto è la visualizzazione standard di Dynamic Island quando un'attività in background è attiva. Appare come una pillola arrotondata con l'icona dell'app a sinistra e un'icona di sistema a destra. Per impostazione predefinita, tutte le Live Activities iniziano in stato compatto.
Stato minimo si verifica quando due o più attività sono attive contemporaneamente. Dynamic Island si «divide» in due elementi separati a sinistra e a destra della fotocamera. Lo stato minimo consente di visualizzare due fonti di informazioni indipendenti, come il tempo di arrivo del taxi e il brano corrente.
Stato espanso viene attivato con una pressione lunga su Dynamic Island. In questa modalità, viene visualizzato un widget completo con contenuto personalizzabile: titoli, descrizioni, barre di avanzamento, pulsanti. Lo stato espanso supporta lo scorrimento e gli elementi interattivi.
ActivityKit è un framework Swift introdotto in iOS 16.1 che consente alle app di pubblicare Live Activities su Dynamic Island e sulla schermata di blocco. ActivityKit utilizza un'architettura basata su ActivityView e ActivityAttributes: il primo definisce il tipo di contenuto, il secondo definisce i dati modificabili. Il framework funziona in combinazione con WidgetKit, ma a differenza dei widget, le Live Activities possono essere aggiornate in tempo reale senza aprire l'app.
import ActivityKit
import SwiftUI
// Definire attributi dell'attività
struct DeliveryAttributes: ActivityAttributes {
public struct ContentState: Codable, Hashable {
var driverName: String
var distanceToArrival: Double
var estimatedMinutes: Int
}
var orderNumber: String
}
// Avviare Live Activity
func startDeliveryActivity() {
let initialState = DeliveryAttributes.ContentState(
driverName: "Aleksej",
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 vengono aggiornate tramite ActivityView, che renderizza il contenuto SwiftUI per Dynamic Island. Il sistema stesso determina quale modello utilizzare (compatto, minimo o espanso) in base alle dimensioni di Dynamic Island e al numero di attività. Per aggiornare il contenuto, chiama activity.update(using: contentState). Per terminare — activity.end(dismissalPolicy: .immediate).
ActivityKit supporta gli aggiornamenti push tramite APNs (Apple Push Notification Service). All'avvio di una Live Activity, puoi richiedere un pushToken e inviare aggiornamenti dal server senza dover avviare l'app sul dispositivo. Gli aggiornamenti push funzionano tramite activity.pushToken e Activity.pushToStartToken per l'avvio remoto di Live Activities.
// Aggiornare Live Activity tramite Push
func updateActivity(activity: Activity<DeliveryAttributes>) {
let updatedState = DeliveryAttributes.ContentState(
driverName: "Aleksej",
distanceToArrival: 1.2,
estimatedMinutes: 4
)
let alertConfiguration = AlertConfiguration(
title: "Corriere nelle vicinanze",
body: "Aleksej arriverà tra 4 minuti",
sound: .default
)
await activity.update(
using: updatedState,
alertConfiguration: alertConfiguration
)
}
AlertConfiguration è un parametro opzionale che mostra una notifica sopra Dynamic Island per aggiornamenti importanti (ad esempio, «Il corriere è arrivato»). Senza AlertConfiguration, il contenuto viene aggiornato silenziosamente, il che è adatto per barre di avanzamento e timer.
Notch è il ritaglio hardware dell'iPhone X–13 che contiene la fotocamera frontale, il sensore Face ID e l'altoparlante. Il notch è statico: le sue dimensioni e forma non cambiano e le notifiche vengono visualizzate sotto di esso come banner standard. Dynamic Island, al contrario, utilizza i pixel intorno al ritaglio per visualizzare il contenuto, rendendo l'elemento hardware parte dell'interfaccia.
| Criterio | Dynamic Island | Notch |
|---|---|---|
| Interattività | Supporta tocchi, pressioni lunghe, scorrimenti | Non interattivo |
| Adattamento del contenuto | Cambia forma in base al contesto | Statico, contenuto sotto il notch |
| Live Activities | Supporto integrato tramite ActivityKit | No — solo notifiche standard |
| Multitasking | Due attività simultanee (sinistra e destra) | Solo un'attività |
| Disponibilità | iOS 16.1+, iPhone 14 Pro e successivi | iOS 11+, iPhone X–13 |
Secondo le Linee guida per l'interfaccia umana di Apple (2025), Dynamic Island non deve essere utilizzato per pubblicità o visualizzazione permanente di contenuto statico. Le Live Activities sono destinate solo ad attività in background con un ciclo di vita chiaro: timer, consegne, sport, musica, navigazione. La violazione di queste regole comporta il rifiuto dell'app nella revisione dell'App Store.
Dynamic Island ha un ciclo di vita rigoroso: un'attività inizia con una richiesta tramite Activity.request(), attraversa gli stati attiva/in pausa/aggiornata e termina con una chiamata a activity.end(). Il sistema può forzare la terminazione di un'attività in caso di memoria insufficiente (ad esempio, all'avvio della fotocamera). In questo caso, l'app riceve una notifica tramite ActivityActivityState.finished.
I gesti su Dynamic Island vengono gestiti dal contenuto SwiftUI all'interno di ActivityView. Gesti standard: tocco sullo stato compatto apre l'app, pressione lunga espande lo stato espanso, scorrimento verso il basso chiude lo stato espanso. I gesti personalizzati vengono aggiunti tramite modificatori SwiftUI (onTapGesture, onLongPressGesture) all'interno della vista attività.
Quando il sistema termina una Live Activity (o l'utente la rimuove con uno scorrimento), l'app deve gestire lo stato finished per liberare risorse. Si consiglia di sottoscrivere Activity.activityStateUpdates e rimuovere i riferimenti locali all'attività dopo il completamento.
import ActivityKit
func observeActivityState(activity: Activity<DeliveryAttributes>) {
Task {
for await state in activity.activityStateUpdates {
switch state {
case .active:
print("Attività attiva su Dynamic Island")
case .dismissed:
print("Attività nascosta dall'utente")
await activity.end(dismissalPolicy: .immediate)
case .finished:
print("Attività terminata dal sistema")
cleanupResources()
@unknown default:
break
}
}
}
}
Raccomandazione Apple (WWDC 2024, Sessione 10146): non utilizzare Dynamic Island per visualizzare stati che non richiedono l'attenzione dell'utente. Ogni Live Activity deve avere un trigger di inizio e fine chiaro. Per aggiornamenti in background senza interfaccia utente, utilizza Background Tasks invece di Live Activities.
Domande frequenti
Dynamic Island è disponibile su iPhone 14 Pro, 14 Pro Max e tutti i modelli iPhone 15 e iPhone 16 (incluse le versioni base). Lo sviluppo richiede iOS 16.1+ e Xcode 14.1. Sui modelli più vecchi (iPhone X–13) viene utilizzato un notch statico che non supporta le Live Activities.
Dynamic Island integra la notifica nella zona hardware dello schermo senza coprire il contenuto. Una notifica normale appare come un banner in alto e scompare dopo pochi secondi. Le Live Activities su Dynamic Island possono rimanere attive per ore e aggiornarsi in tempo reale (stato della consegna, timer, musica).
Utilizza aggiornamenti push tramite APNs. All'avvio di una Live Activity, chiama activity.pushToken e invia il token al tuo server. Il server invia una richiesta di aggiornamento tramite APNs con il nuovo ContentState. Un'alternativa sono gli aggiornamenti locali tramite activity.update(using:) dall'interno dell'app stessa.
iOS divide automaticamente Dynamic Island in due segmenti quando due Live Activities sono attive. Ogni attività viene visualizzata in stato minimo a sinistra e a destra della fotocamera. Una pressione lunga su uno dei segmenti apre lo stato espanso solo per quell'app.
Verifica: (1) l'app ha NSSupportsLiveActivities = YES in Info.plist, (2) ActivityAttributes e ContentState implementano Codable e Hashable, (3) la versione iOS è 16.1+, (4) il dispositivo supporta Dynamic Island. Per il simulatore, utilizza iPhone 14 Pro o successivo in Xcode.
Riepilogo
Svilupperemo un'applicazione mobile chiavi in mano
IT Sectr crea applicazioni iOS e Android per startup e aziende dal 2017. Ti consulteremo e ti proporremo la soluzione migliore.