Dynamic Island — μια διαδραστική περιοχή στο επάνω μέρος του iPhone 14 Pro και όλων των iPhone 15/16, που συνδυάζει ειδοποιήσεις, δραστηριότητες παρασκηνίου και δείκτες συστήματος σε μια ενιαία δυναμική ζώνη. Σε αντίθεση με την παραδοσιακή εγκοπή (notch), το Dynamic Island αλλάζει σχήμα και μέγεθος ανάλογα με το τρέχον περιβάλλον. Σύμφωνα με δεδομένα της Apple (WWDC 2024), οι χρήστες αλληλεπιδρούν με το Dynamic Island κατά μέσο όρο 12 φορές την ημέρα — μέσω αγγίγματος, παρατεταμένου πατήματος και Live Activities με ActivityKit. Διαβάστε περισσότερα για τα animations στο iOS στο άρθρο για το Corner Radius.
Κύρια σημεία
Dynamic Island — είναι μια διαδραστική περιοχή βασισμένη στη λύση λογισμικού-υλικού της Apple, που παρουσιάστηκε τον Σεπτέμβριο του 2022 μαζί με το iPhone 14 Pro. Φυσικά, είναι μια εγκοπή σε σχήμα χαπιού, που περιβάλλεται από pixel OLED που αλλάζουν δυναμικά χρώμα και σχήμα. Η Apple χρησιμοποιεί έναν συνδυασμό του διαμερίσματος υλικού για την κάμερα και το Face ID με λογισμικό rendering των μαύρων περιοχών γύρω του, δημιουργώντας την ψευδαίσθηση ενός «ζωντανού» νησιού.
Ο κύριος στόχος του Dynamic Island είναι να γεφυρώσει το χάσμα μεταξύ των ειδοποιήσεων συστήματος και του ενεργού περιεχομένου. Αντί οι ειδοποιήσεις να εμφανίζονται στο κέντρο της οθόνης (όπως στο Android) ή ως banner επάνω (όπως σε παλαιότερες εκδόσεις iOS), το Dynamic Island τις ενσωματώνει απευθείας στη ζώνη υλικού. Αυτό μειώνει την απόσπαση προσοχής και δημιουργεί μια αίσθηση ενιαίου χώρου.
Σύμφωνα με δεδομένα της Apple (iOS 17 Adoption Statistics, 2024), το Dynamic Island είναι διαθέσιμο στο 38% των ενεργών iPhone. Από το iPhone 15 (2023) και μετά, όλα τα μοντέλα της σειράς έλαβαν Dynamic Island, συμπεριλαμβανομένων των βασικών μοντέλων. Στο iOS 18, η Apple επέκτεινε το API Live Activities, προσθέτοντας υποστήριξη για χρονοδιακόπτες αντίστροφης μέτρησης και αθλητικά αποτελέσματα απευθείας στο Dynamic Island.
Dynamic Island είναι διαθέσιμο σε 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. Στο iPad, το Dynamic Island απουσιάζει. Για ανάπτυξη με Dynamic Island απαιτείται Xcode 14.1+ και iOS 16.1+.
Dynamic Island υποστηρίζει τρεις καταστάσεις εμφάνισης: συμπαγή (compact), ελάχιστη (minimal) και εκτεταμένη (expanded). Η μετάβαση μεταξύ καταστάσεων γίνεται με κίνηση χρησιμοποιώντας UIKit animations και Core Animation. Το σύστημα διαχειρίζεται το ίδιο την προτεραιότητα των δραστηριοτήτων: αν πολλές εφαρμογές προσπαθούν να εμφανίσουν περιεχόμενο ταυτόχρονα, το iOS χρησιμοποιεί μια ουρά βάσει του χρόνου έναρξης της τελευταίας δραστηριότητας.
| Κατάσταση | Μέγεθος | Περιεχόμενο | Παράδειγμα |
|---|---|---|---|
| Compact | 49×18 pt | Εικονίδιο εφαρμογής + εικονίδιο συστήματος | Χρονοδιακόπτης, μουσική, κλήση |
| Minimal | Έως 66×18 pt | Εικονίδιο + σύντομο κείμενο | Οδηγίες πλοήγησης, βήματα |
| Expanded | Έως 364×160 pt | Πλήρες widget με περιεχόμενο | Αθλητικό σκορ, κατάσταση ταξί |
Συμπαγής κατάσταση — η τυπική προβολή του Dynamic Island όταν μία εργασία παρασκηνίου είναι ενεργή. Εμφανίζεται ως στρογγυλεμένο χάπι με το εικονίδιο της εφαρμογής αριστερά και το εικονίδιο συστήματος δεξιά. Από προεπιλογή, όλες οι Live Activities ξεκινούν σε συμπαγή κατάσταση.
Ελάχιστη κατάσταση εμφανίζεται όταν δύο ή περισσότερες εργασίες είναι ταυτόχρονα ενεργές. Το Dynamic Island «χωρίζεται» σε δύο ξεχωριστά στοιχεία αριστερά και δεξιά της κάμερας. Η ελάχιστη κατάσταση επιτρέπει την εμφάνιση δύο ανεξάρτητων πηγών πληροφοριών, όπως ο χρόνος άφιξης ταξί και το τρέχον κομμάτι.
Εκτεταμένη κατάσταση ενεργοποιείται με παρατεταμένο πάτημα στο Dynamic Island. Σε αυτή τη λειτουργία εμφανίζεται ένα πλήρες widget με προσαρμόσιμο περιεχόμενο: τίτλοι, περιγραφές, γραμμές προόδου, κουμπιά. Η εκτεταμένη κατάσταση υποστηρίζει κύλιση και διαδραστικά στοιχεία.
ActivityKit — πλαίσιο Swift, που παρουσιάστηκε στο iOS 16.1, το οποίο επιτρέπει στις εφαρμογές να δημοσιεύουν Live Activities στο Dynamic Island και Lock Screen. Το ActivityKit χρησιμοποιεί αρχιτεκτονική βασισμένη σε ActivityView και ActivityAttributes: το πρώτο καθορίζει τον τύπο περιεχομένου, το δεύτερο — τα μεταβλητά δεδομένα. Το πλαίσιο λειτουργεί σε συνδυασμό με το WidgetKit, αλλά σε αντίθεση με τα widget, οι Live Activities μπορούν να ενημερώνονται σε πραγματικό χρόνο χωρίς άνοιγμα της εφαρμογής.
import ActivityKit
import SwiftUI
// Ορίζουμε τα χαρακτηριστικά δραστηριότητας
struct DeliveryAttributes: ActivityAttributes {
public struct ContentState: Codable, Hashable {
var driverName: String
var distanceToArrival: Double
var estimatedMinutes: Int
}
var orderNumber: String
}
// Εκκινούμε Live Activity
func startDeliveryActivity() {
let initialState = DeliveryAttributes.ContentState(
driverName: "Αλεξέι",
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 ενημερώνονται μέσω ActivityView, το οποίο κάνει render SwiftUI περιεχόμενο για το Dynamic Island. Το σύστημα καθορίζει ποιο πρότυπο θα χρησιμοποιήσει (συμπαγές, ελάχιστο ή εκτεταμένο), ανάλογα με το μέγεθος του Dynamic Island και τον αριθμό των δραστηριοτήτων. Για να ενημερώσετε το περιεχόμενο, καλέστε activity.update(using: contentState). Για τερματισμό — activity.end(dismissalPolicy: .immediate).
Το ActivityKit υποστηρίζει push ενημερώσεις μέσω APNs (Apple Push Notification Service). Κατά την εκκίνηση μιας Live Activity, μπορείτε να ζητήσετε pushToken και να στέλνετε ενημερώσεις από τον διακομιστή χωρίς να χρειάζεται να εκτελέσετε την εφαρμογή στη συσκευή. Οι push ενημερώσεις λειτουργούν μέσω activity.pushToken και Activity.pushToStartToken για απομακρυσμένη εκκίνηση Live Activity.
// Ενημέρωση Live Activity μέσω Push
func updateActivity(activity: Activity<DeliveryAttributes>) {
let updatedState = DeliveryAttributes.ContentState(
driverName: "Αλεξέι",
distanceToArrival: 1.2,
estimatedMinutes: 4
)
let alertConfiguration = AlertConfiguration(
title: "Ο courier είναι κοντά",
body: "Ο Αλεξέι φτάνει σε 4 λεπτά",
sound: .default
)
await activity.update(
using: updatedState,
alertConfiguration: alertConfiguration
)
}
AlertConfiguration — μια πρόσθετη παράμετρος που εμφανίζει ειδοποίηση πάνω από το Dynamic Island σε σημαντικές ενημερώσεις (π.χ. «Ο courier έφτασε»). Χωρίς AlertConfiguration, το περιεχόμενο ενημερώνεται αθόρυβα, το οποίο είναι κατάλληλο για γραμμές προόδου και χρονοδιακόπτες.
Notch (εγκοπή) — η ζώνη υλικού του iPhone X–13, που περιέχει την μπροστινή κάμερα, τον αισθητήρα Face ID και το ηχείο. Το Notch είναι στατικό: το μέγεθος και το σχήμα του δεν αλλάζουν, και οι ειδοποιήσεις εμφανίζονται κάτω από αυτό ως τυπικά banner. Το Dynamic Island, αντίθετα, χρησιμοποιεί τα pixel γύρω από την εγκοπή για να εμφανίζει περιεχόμενο, κάνοντας το στοιχείο υλικού μέρος της διεπαφής.
| Κριτήριο | Dynamic Island | Notch |
|---|---|---|
| Διαδραστικότητα | Υποστηρίζει άγγιγμα, παρατεταμένο πάτημα, σύρσιμο | Δεν είναι διαδραστικό |
| Προσαρμογή περιεχομένου | Αλλάζει σχήμα ανάλογα με το περιβάλλον | Στατικό, περιεχόμενο κάτω από εγκοπή |
| Live Activities | Ενσωματωμένη υποστήριξη μέσω ActivityKit | Όχι — μόνο συνηθισμένες ειδοποιήσεις |
| Πολλαπλές εργασίες | Δύο ταυτόχρονες δραστηριότητες (αριστερά και δεξιά) | Μόνο μία δραστηριότητα |
| Διαθεσιμότητα | iOS 16.1+, iPhone 14 Pro και νεότερα | iOS 11+, iPhone X–13 |
Σύμφωνα με τις Apple Human Interface Guidelines (2025), το Dynamic Island δεν πρέπει να χρησιμοποιείται για διαφημίσεις ή συνεχή εμφάνιση στατικού περιεχομένου. Οι Live Activities προορίζονται μόνο για εργασίες παρασκηνίου με σαφή κύκλο ζωής: χρονοδιακόπτες, παράδοση, αθλήματα, μουσική, πλοήγηση. Η παραβίαση αυτών των κανόνων οδηγεί σε απόρριψη της εφαρμογής στο App Store Review.
Dynamic Island έχει αυστηρό κύκλο ζωής: η δραστηριότητα ξεκινά με αίτημα μέσω Activity.request(), περνά από τις καταστάσεις ενεργή/σε παύση/ενημερωμένη και τελειώνει με κλήση activity.end(). Το σύστημα μπορεί να τερματίσει αναγκαστικά τη δραστηριότητα σε περίπτωση έλλειψης μνήμης (π.χ. κατά την εκκίνηση της κάμερας). Σε αυτή την περίπτωση, η εφαρμογή λαμβάνει ειδοποίηση μέσω ActivityActivityState.finished.
Οι χειρονομίες του Dynamic Island υποβάλλονται σε επεξεργασία από το SwiftUI περιεχόμενο εντός του ActivityView. Τυπικές χειρονομίες: άγγιγμα στη συμπαγή κατάσταση ανοίγει την εφαρμογή, παρατεταμένο πάτημα ανοίγει την εκτεταμένη κατάσταση, σύρσιμο προς τα κάτω κλείνει την εκτεταμένη κατάσταση. Προσαρμοσμένες χειρονομίες προστίθενται μέσω SwiftUI modifiers (onTapGesture, onLongPressGesture) εντός της προβολής δραστηριότητας.
Όταν το σύστημα τερματίζει μια Live Activity (ή ο χρήστης τη διαγράφει με σύρσιμο), η εφαρμογή πρέπει να διαχειριστεί την κατάσταση finished για απελευθέρωση πόρων. Συνιστάται να εγγραφείτε στο Activity.activityStateUpdates και να διαγράψετε τοπικές αναφορές στη δραστηριότητα μετά την ολοκλήρωση.
import ActivityKit
func observeActivityState(activity: Activity<DeliveryAttributes>) {
Task {
for await state in activity.activityStateUpdates {
switch state {
case .active:
print("Activity ενεργή στο Dynamic Island")
case .dismissed:
print("Activity κρυμμένη από τον χρήστη")
await activity.end(dismissalPolicy: .immediate)
case .finished:
print("Activity τερματίστηκε από το σύστημα")
cleanupResources()
@unknown default:
break
}
}
}
}
Σύσταση Apple (WWDC 2024, Session 10146): μην χρησιμοποιείτε το Dynamic Island για εμφάνιση καταστάσεων που δεν απαιτούν προσοχή του χρήστη. Κάθε Live Activity πρέπει να έχει σαφή ενεργοποιητή έναρξης και λήξης. Για ενημερώσεις παρασκηνίου χωρίς UI, χρησιμοποιήστε Background Tasks, όχι Live Activities.
Συχνές Ερωτήσεις
Dynamic Island είναι διαθέσιμο σε iPhone 14 Pro, 14 Pro Max και όλα τα μοντέλα iPhone 15 και iPhone 16 (συμπεριλαμβανομένων των βασικών εκδόσεων). Για ανάπτυξη απαιτείται iOS 16.1+ και Xcode 14.1. Σε παλαιότερα μοντέλα (iPhone X–13) χρησιμοποιείται η στατική εγκοπή notch, η οποία δεν υποστηρίζει Live Activities.
Dynamic Island ενσωματώνει την ειδοποίηση στη ζώνη υλικού της οθόνης χωρίς να καλύπτει το περιεχόμενο. Μια συνηθισμένη ειδοποίηση εμφανίζεται ως banner επάνω και εξαφανίζεται μετά από λίγα δευτερόλεπτα. Οι Live Activities στο Dynamic Island μπορούν να παραμείνουν ενεργές για ώρες και να ενημερώνονται σε πραγματικό χρόνο (κατάσταση παράδοσης, χρονοδιακόπτης, μουσική).
Χρησιμοποιήστε push ενημερώσεις μέσω APNs. Κατά την εκκίνηση μιας Live Activity, καλέστε activity.pushToken και στείλτε το token στον διακομιστή σας. Ο διακομιστής στέλνει ένα αίτημα ενημέρωσης μέσω APNs με νέο ContentState. Εναλλακτικά — τοπική ενημέρωση μέσω activity.update(using:) από την ίδια την εφαρμογή.
Το iOS χωρίζει αυτόματα το Dynamic Island σε δύο τμήματα όταν υπάρχουν δύο ενεργές Live Activities. Κάθε δραστηριότητα εμφανίζεται σε ελάχιστη κατάσταση αριστερά και δεξιά της κάμερας. Με παρατεταμένο πάτημα σε ένα από τα τμήματα, ανοίγει η εκτεταμένη κατάσταση μόνο αυτής της εφαρμογής.
Ελέγξτε: (1) η εφαρμογή έχει NSSupportsLiveActivities = YES στο Info.plist, (2) τα ActivityAttributes και ContentState υλοποιούν Codable και Hashable, (3) έκδοση iOS 16.1+, (4) η συσκευή υποστηρίζει Dynamic Island. Για προσομοιωτή, χρησιμοποιήστε iPhone 14 Pro ή νεότερο στο Xcode.
Σύνοψη
Θα αναπτύξουμε μια εφαρμογή για κινητά έτοιμη για χρήση
Η IT Sectr δημιουργεί εφαρμογές iOS και Android για νεοφυείς επιχειρήσεις και επιχειρήσεις από το 2017. Θα σας συμβουλεύσουμε και θα προτείνουμε την καλύτερη λύση.
Διαβάστε επίσης