Dynamic Island — iPhone 14 Pro va barcha iPhone 15/16 larning yuqori qismidagi interaktiv maydon bo'lib, bildirishnomalar, fon faoliyatlari va tizim ko'rsatkichlarini yagona dinamik zonada birlashtiradi. An'anaviy kesikdan (notch) farqli o'laroq, Dynamic Island joriy kontekstga qarab shakli va hajmini o'zgartiradi. Apple ma'lumotlariga ko'ra (WWDC 2024), foydalanuvchilar Dynamic Island bilan o'rtacha kuniga 12 marta — teginish, uzoq bosish va ActivityKit bilan Live Activities orqali o'zaro aloqada bo'lishadi. iOS-dagi animatsiyalar haqida batafsil Corner Radius maqolasida o'qing.
Asosiy ma'lumotlar
Dynamic Island — Apple-ning dasturiy-apparat yechimiga asoslangan interaktiv maydon bo'lib, 2022 yil sentyabrda iPhone 14 Pro bilan birga taqdim etilgan. Jismoniy jihatdan bu tabletka shaklidagi kesik bo'lib, OLED piksellari bilan o'ralgan va dinamik ravishda rang va shaklini o'zgartiradi. Apple kamera va Face ID uchun apparat bo'linmasi atrofidagi qora maydonlarning dasturiy renderi kombinatsiyasidan foydalanib, «tirik» orol illyuziyasini yaratadi.
Dynamic Island-ning asosiy maqsadi tizim bildirishnomalari va faol tarkib o'rtasidagi bo'shliqni bartaraf etishdir. Bildirishnomalar ekran markazida (Android-dagi kabi) yoki yuqorida banner shaklida (eski iOS-lardagi kabi) paydo bo'lishi o'rniga, Dynamic Island ularni to'g'ridan-to'g'ri apparat zonasiga birlashtiradi. Bu diqqatni chalg'itishni kamaytiradi va yagona makon hissini yaratadi.
Apple ma'lumotlariga ko'ra (iOS 17 Adoption Statistics, 2024), Dynamic Island faol iPhone-larning 38% da mavjud. iPhone 15 (2023) dan boshlab, barcha model seriyalari Dynamic Island ni oldi, shu jumladan asosiy modellar. iOS 18 da Apple Live Activities API ni kengaytirib, to'g'ridan-to'g'ri Dynamic Island-da orqaga hisoblash taymerlari va sport natijalarini qo'llab-quvvatlashni qo'shdi.
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 da mavjud. iPad da Dynamic Island yo'q. Dynamic Island uchun ishlab chiqish Xcode 14.1+ va iOS 16.1+ talab qiladi.
Dynamic Island uchta ko'rsatish holatini qo'llab-quvvatlaydi: ixcham (compact), minimal (minimal) va kengaytirilgan (expanded). Holatlar o'rtasidagi o'tish UIKit-animatsiyalari va Core Animation yordamida animatsiya qilinadi. Tizim o'zi faoliyatlarning ustuvorligini boshqaradi: agar bir nechta ilovalar bir vaqtning o'zida tarkibni ko'rsatishga harakat qilsa, iOS so'nggi faoliyatning boshlanish vaqtiga asoslangan navbatdan foydalanadi.
| Holat | Hajm | Tarkib | Misol |
|---|---|---|---|
| Compact | 49×18 pt | Ilova belgisi + tizim belgisi | Taymer, musiqa, qo'ng'iroq |
| Minimal | 66×18 pt gacha | Belgi + qisqa matn | Navigatsiya yo'nalishlari, qadamlar |
| Expanded | 364×160 pt gacha | Tarkibli to'liq vidjet | Sport natijasi, taksi holati |
Ixcham holat — bitta fon vazifasi faol bo'lganda Dynamic Island-ning standart ko'rinishi. Chapda ilova belgisi va o'ngda tizim belgisi bo'lgan yumaloqlangan tabletka sifatida ko'rsatiladi. Barcha Live Activities standart ravishda ixcham holatda boshlanadi.
Minimal holat ikki yoki undan ortiq vazifalar bir vaqtning o'zida faol bo'lganda yuzaga keladi. Dynamic Island kameraning chap va o'ng tomonida ikkita alohida elementga «bo'linadi». Minimal holat ikkita mustaqil ma'lumot manbasini ko'rsatishga imkon beradi, masalan taksi kelish vaqti va joriy trek.
Kengaytirilgan holat Dynamic Island-da uzoq bosish bilan faollashadi. Bu rejimda sozlanishi tarkibli to'liq vidjet ko'rsatiladi: sarlavhalar, tavsiflar, borish chiziqlari, tugmalar. Kengaytirilgan holat aylantirish va interaktiv elementlarni qo'llab-quvvatlaydi.
ActivityKit — iOS 16.1 da taqdim etilgan Swift framework bo'lib, ilovalarga Dynamic Island va Lock Screen da Live Activities nashr qilish imkonini beradi. ActivityKit ActivityView va ActivityAttributes ga asoslangan arxitekturadan foydalanadi: birinchisi tarkib turini, ikkinchisi o'zgaruvchi ma'lumotlarni belgilaydi. Framework WidgetKit bilan bog'liq holda ishlaydi, lekin vidjetlardan farqli o'laroq, Live Activities ilovani ochmasdan real vaqtda yangilanishi mumkin.
import ActivityKit
import SwiftUI
// Faoliyat atributlarini aniqlaymiz
struct DeliveryAttributes: ActivityAttributes {
public struct ContentState: Codable, Hashable {
var driverName: String
var distanceToArrival: Double
var estimatedMinutes: Int
}
var orderNumber: String
}
// Live Activity ni ishga tushiramiz
func startDeliveryActivity() {
let initialState = DeliveryAttributes.ContentState(
driverName: "Aleksey",
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 Dynamic Island uchun SwiftUI tarkibini render qiladigan ActivityView orqali yangilanadi. Tizim o'zi Dynamic Island hajmi va faoliyatlar soniga qarab qaysi shablondan foydalanishni aniqlaydi (ixcham, minimal yoki kengaytirilgan). Tarkibni yangilash uchun activity.update(using: contentState) ni chaqiring. Tugatish uchun — activity.end(dismissalPolicy: .immediate).
ActivityKit push yangilanishlarini APNs (Apple Push Notification Service) orqali qo'llab-quvvatlaydi. Live Activity boshlaganda pushToken so'rashingiz va qurilmada ilovani ishga tushirmasdan serverdan yangilanishlar yuborishingiz mumkin. Push yangilanishlari activity.pushToken va Live Activity ni masofadan boshlash uchun Activity.pushToStartToken orqali ishlaydi.
// Live Activity ni Push orqali yangilash
func updateActivity(activity: Activity<DeliveryAttributes>) {
let updatedState = DeliveryAttributes.ContentState(
driverName: "Aleksey",
distanceToArrival: 1.2,
estimatedMinutes: 4
)
let alertConfiguration = AlertConfiguration(
title: "Kuryer yaqin",
body: "Aleksey 4 daqiqada keladi",
sound: .default
)
await activity.update(
using: updatedState,
alertConfiguration: alertConfiguration
)
}
AlertConfiguration — qo'shimcha parametr bo'lib, muhim yangilanishlarda (masalan, "Kuryer keldi") Dynamic Island ustida bildirishnomani ko'rsatadi. AlertConfiguration bo'lmasa, tarkib ovozsiz yangilanadi, bu borish chiziqlari va taymerlar uchun mos keladi.
Notch (kesik) — old kamera, Face ID sensori va dinamikni o'z ichiga olgan iPhone X–13 apparat zonasi. Notch statik: uning hajmi va shakli o'zgarmaydi, bildirishnomalar esa uning ostida standart bannerlar shaklida ko'rsatiladi. Dynamic Island, aksincha, kesik atrofidagi piksellardan tarkibni ko'rsatish uchun foydalanadi, apparat elementini interfeysning bir qismiga aylantiradi.
| Mezon | Dynamic Island | Notch |
|---|---|---|
| Interaktivlik | Bosish, uzoq bosish, surishni qo'llab-quvvatlaydi | Interaktiv emas |
| Tarkib moslashuvi | Kontekstga qarab shaklni o'zgartiradi | Statik, tarkib kesik ostida |
| Live Activities | ActivityKit orqali o'rnatilgan qo'llab-quvvatlash | Yo'q — faqat oddiy bildirishnomalar |
| Ko'p vazifalilik | Ikki bir vaqtli faoliyat (chap va o'ng) | Faqat bitta faoliyat |
| Mavjudlik | iOS 16.1+, iPhone 14 Pro va yangilari | iOS 11+, iPhone X–13 |
Apple Human Interface Guidelines (2025) ga ko'ra, Dynamic Island reklama yoki statik tarkibni doimiy ko'rsatish uchun ishlatilmasligi kerak. Live Activities faqat aniq hayot sikliga ega fon vazifalari uchun mo'ljallangan: taymerlar, yetkazib berish, sport, musiqa, navigatsiya. Ushbu qoidalarni buzish ilovaning App Store Review da rad etilishiga olib keladi.
Dynamic Island qat'iy hayot sikliga ega: faoliyat Activity.request() orqali so'rov bilan boshlanadi, faol/to'xtatilgan/yangilangan holatlardan o'tadi va activity.end() chaqiruvi bilan tugaydi. Tizim xotira yetishmasligida (masalan, kamera ishga tushirilganda) faoliyatni majburiy tugatishi mumkin. Bu holda ilova ActivityActivityState.finished orqali bildirishnoma oladi.
Imo-ishoralar Dynamic Island ActivityView ichidagi SwiftUI tarkibi tomonidan qayta ishlanadi. Standart imo-ishoralar: ixcham holatga bosish ilovani ochadi, uzoq bosish kengaytirilgan holatni ochadi, pastga surish kengaytirilgan holatni yopadi. Maxsus imo-ishoralar SwiftUI modifikatorlari (onTapGesture, onLongPressGesture) orqali faoliyat ko'rinishi ichida qo'shiladi.
Tizim Live Activity ni tugatganda (yoki foydalanuvchi surish bilan o'chirganda), ilova resurslarni bo'shatish uchun finished holatini qayta ishlashi kerak. Activity.activityStateUpdates ga obuna bo'lish va faoliyat tugagandan so'ng lokal havolalarni o'chirish tavsiya etiladi.
import ActivityKit
func observeActivityState(activity: Activity<DeliveryAttributes>) {
Task {
for await state in activity.activityStateUpdates {
switch state {
case .active:
print("Activity Dynamic Island da faol")
case .dismissed:
print("Activity foydalanuvchi tomonidan yashirilgan")
await activity.end(dismissalPolicy: .immediate)
case .finished:
print("Activity tizim tomonidan tugatilgan")
cleanupResources()
@unknown default:
break
}
}
}
}
Apple tavsiyasi (WWDC 2024, Session 10146): foydalanuvchi diqqatini talab qilmaydigan statuslarni ko'rsatish uchun Dynamic Island dan foydalanmang. Har bir Live Activity aniq boshlash va tugatish triggeriga ega bo'lishi kerak. UI siz fon yangilanishlari uchun Live Activities emas, Background Tasks dan foydalaning.
Ko'p beriladigan savollar
Dynamic Island iPhone 14 Pro, 14 Pro Max va barcha iPhone 15 va iPhone 16 modellarida (asosiy versiyalar bilan birga) mavjud. Ishlab chiqish uchun iOS 16.1+ va Xcode 14.1 talab qilinadi. Eski modellarda (iPhone X–13) Live Activities ni qo'llab-quvvatlamaydigan statik notch kesik ishlatiladi.
Dynamic Island bildirishnomani ekranning apparat zonasiga birlashtiradi, tarkibni to'smasdan. Oddiy bildirishnoma yuqorida banner shaklida paydo bo'ladi va bir necha soniyadan so'ng yo'qoladi. Dynamic Island dagi Live Activities soatlab faol qolishi va real vaqtda yangilanishi mumkin (yetkazib berish holati, taymer, musiqa).
APNs orqali push yangilanishlaridan foydalaning. Live Activity boshlaganda activity.pushToken ni chaqiring va tokenni serveringizga yuboring. Server APNs orqali yangi ContentState bilan update so'rovini yuboradi. Muqobil — xuddi shu ilovadan activity.update(using:) orqali lokal yangilanish.
iOS ikkita faol Live Activity mavjud bo'lganda Dynamic Island ni avtomatik ravishda ikkita segmentga ajratadi. Har bir faoliyat kameraning chap va o'ng tomonida minimal holatda ko'rsatiladi. Segmentlardan biriga uzoq bosganda faqat shu ilovaning kengaytirilgan holati ochiladi.
Tekshiring: (1) ilovada Info.plist da NSSupportsLiveActivities = YES bor, (2) ActivityAttributes va ContentState Codable va Hashable ni implementatsiya qiladi, (3) iOS versiyasi 16.1+, (4) qurilma Dynamic Island ni qo'llab-quvvatlaydi. Simulyator uchun Xcode da iPhone 14 Pro yoki undan yangisini ishlating.
Xulosa
Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz
IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.