Адаптація мобільної програми під нові можливості ОС
Кожний вересень Apple випускає нову iOS — і щорічно частина програм виглядає застарілою рядом з оновленими системними програмами. Dynamic Island, Live Activities, інтерактивні віджети, Stage Manager на iPad, Lock Screen widgets — користувачі помічають, коли ваша програма не використовує те, що платформа пропонує безплатно.
iOS 16: Lock Screen Widgets та Live Activities
Lock Screen Widgets — віджети прямо на екрані блокування. Технічно це WidgetKit з новим сімейством .accessoryCircular, .accessoryRectangular, .accessoryInline. Існуючий Home Screen віджет не працює на Lock Screen без явної підтримки цих сімейств.
struct LockScreenWidgetView: View {
@Environment(\.widgetFamily) var family
var body: some View {
switch family {
case .accessoryCircular:
Gauge(value: progress, in: 0...1) {
Image(systemName: "star")
}
.gaugeStyle(.accessoryCircular)
case .accessoryRectangular:
VStack(alignment: .leading) {
Text(title).font(.headline)
Text(subtitle).font(.caption)
}
default:
EmptyView()
}
}
}
Кольорова схема Lock Screen віджета — .widgetAccentable() для елементів, які підхоплюють користувацький акцентний колір екрана блокування. Без цього модифікатора віджет виглядає «мертвим».
Live Activities (ActivityKit) — динамічні плашки на Lock Screen і в Dynamic Island. Оновлюються push-сповіщеннями (ActivityKit pushes) або безпосередньо з програми. Типичний сценарій: доставка, таксі, спортивний матч.
// Запуск Activity
let attributes = DeliveryAttributes(orderId: "12345")
let state = DeliveryAttributes.ContentState(status: .preparing, eta: Date().addingTimeInterval(1800))
let activity = try Activity.request(
attributes: attributes,
content: .init(state: state, staleDate: nil),
pushType: .token
)
Ключовий момент — pushType: .token. Сервер отримує push token цієї активності і може оновлювати її через APNs без пробудження основної програми. Реалізація серверної частини — обов'язкова частина завдання.
iOS 17: Interactive Widgets та TipKit
Interactive Widgets — віджети з кнопками та Toggle. До iOS 17 tap на віджеті тільки відкривав програму. Тепер Button та Toggle у WidgetKit виконують AppIntent прямо з віджета:
struct QuickActionWidget: Widget {
var body: some WidgetConfiguration {
StaticConfiguration(kind: "QuickAction", provider: Provider()) { entry in
QuickActionWidgetView(entry: entry)
.containerBackground(.fill.tertiary, for: .widget)
}
}
}
struct QuickActionWidgetView: View {
var entry: Entry
var body: some View {
Button(intent: ToggleTaskIntent(taskId: entry.taskId)) {
Image(systemName: entry.isCompleted ? "checkmark.circle.fill" : "circle")
}
}
}
containerBackground — нова вимога iOS 17: віджети повинні задавати фон через цей модифікатор, інакше Xcode видає попередження, а на iOS 17 віджет може виглядати невірно.
TipKit — нативний фреймворк для навчаючих підказок:
struct NewFeatureTip: Tip {
var title: Text { Text("Спробуйте голосовий введення") }
var message: Text? { Text("Натисніть на мікрофон для швидкого додавання завдання") }
var image: Image? { Image(systemName: "mic.fill") }
var rules: [Rule] {
#Rule(Self.$hasUsedSearch) { $0.donations.count < 3 }
}
}
TipKit відслідковує правила показу, зберігає стан (показана/закрита/виконано дія) і синхронізує між пристроями через iCloud. Не потрібно писати власний трекинг показів.
iPadOS: Stage Manager та Multitasking
Адаптація під Stage Manager (iPadOS 16+) — це в першу чергу підтримка довільних розмірів вікна. Програма повинна коректно працювати при будь-якому співвідношенні сторін, не тільки при фіксованих iPad-розмірах.
// Перевірка підтримки множественных вікон
UIApplication.shared.supportsMultipleScenes // true на iPad з Stage Manager
UIWindowScene.sizeRestrictions дозволяє задати мінімальний та максимальний розмір вікна для Stage Manager:
windowScene.sizeRestrictions?.minimumSize = CGSize(width: 400, height: 300)
windowScene.sizeRestrictions?.maximumSize = CGSize(width: 1200, height: 900)
AutoLayout з правильними constraint priorities та UIContentSizeCategoryAdjusting для шрифтів — обов'язкові. Жорстко прописані розміри в коді (frame = CGRect(x: 0, y: 0, width: 375, height: 812)) — це гарантовані проблеми на Stage Manager.
Процес адаптації
Аудит: список нових фіч конкретної iOS-версії, аналіз які застосовні до продукта та дають реальну цінність користувачу.
Приоритизація: не кожна новинка потрібна вашій програмі. Live Activities мають смисл для реального-часу відслідковування; Lock Screen Widgets — для швидкого доступу до часто використовуваних даних. Внедрювання заради галочки — не наш підхід.
Розробка з @available(iOS 16, *) — старі iOS повинні продовжувати працювати.
Тестування на конкретних версіях iOS, не тільки на останній.
Ориентири по срокам
| Фіча | Срок |
|---|---|
| Lock Screen Widgets (розширення існуючого) | 1–2 дні |
| Live Activities + серверна інтеграція | 3–5 днів |
| Interactive Widgets (iOS 17) | 1–2 дні |
| Stage Manager адаптація для iPad | 2–3 дні |
| Комплексна адаптація під нову iOS | 3–5 днів |







