iPadOS — операционната система на Apple за iPad, отделена от iOS през 2019 г. Разработката за iPad отчита уникалните възможности: многозадачност Split View и Stage Manager, въвеждане с Apple Pencil с ниско закъснение и десктоп Safari.
Основни
iPadOS — операционната система на Apple за iPad, пусната за първи път през 2019 г. като отклоние на iOS (версия 13). Преди това iPad използваше същия iOS като iPhone. Отделянето на iPadOS позволи на Apple да внедри функции, специфични за голям екран: многозадачност, десктоп Safari, Drag & Drop и поддръжка на външни монитори.
iPadOS запазва пълна съвместимост с iOS приложения: всяко iPhone приложение се стартира на iPad в режим на мащабиране. За качествено потребителско изживяване обаче е необходимо адаптиране: използване на Size Classes, UISplitViewController и поддръжка на клавишни комбинации. Според Apple (WWDC 2025), 80% от времето на iPad потребителите прекарват в таблетни версии, а не в мащабирани версии.
iPadOS 13 (2019) донесе Slide Over и Split View. iPadOS 14 (2020) добави Apple Pencil Scribble и компактен UI. iPadOS 15 (2021) въведе Quick Note и подобрения в многозадачността. iPadOS 16 (2022) представи Stage Manager и поддръжка на външни монитори. iPadOS 17 (2023) добави интерактивни джаджи и персонализиране на Lock Screen.
| Версия на iPadOS | Година | Ключово нововъведение |
|---|---|---|
| iPadOS 13 | 2019 | Slide Over, Split View, десктоп Safari |
| iPadOS 14 | 2020 | Scribble за Apple Pencil, компактни разговори |
| iPadOS 15 | 2021 | Quick Note, подобрен мениджър за многозадачност |
| iPadOS 16 | 2022 | Stage Manager, външен монитор 6K |
| iPadOS 17 | 2023 | Интерактивни джаджи, Lock Screen |
| iPadOS 18 | 2024 | Калкулатор Math Notes, Smart Script |
iPadOS се базира на същото XNU ядро и Darwin като iOS, но използва модифицирана обвивка на UIKit, адаптирана за работа с множество прозорци и произволни размери на екрана. Ключовата архитектурна разлика — поддръжка на UIScene, представена в iOS 13.
В iPadOS всеки прозорец (включително в Split View) е отделна UISceneSession със собствен жизнен цикъл. За разлика от iPhone, където едно приложение има един UIWindowScene, на iPad едно приложение може да има множество UIScene (множество прозорци, Slide Over, Stage Manager). SceneDelegate управлява състоянието на всеки прозорец независимо.
import UIKit
import SwiftUI
/// SceneDelegate за поддръжка на множество прозорци на iPadOS
class SceneDelegate: UIResponder, UIWindowSceneDelegate {
var window: UIWindow?
var splitVC: UISplitViewController?
func scene(_ scene: UIScene,
willConnectTo session: UISceneSession,
options connectionOptions: UIScene.ConnectionOptions) {
guard let windowScene = (scene as? UIWindowScene) else { return }
// Създаваме UISplitViewController за таблетна навигация
let splitVC = UISplitViewController(style: .tripleColumn)
splitVC.primaryBackgroundStyle = .sidebar
let sidebar = SidebarViewController()
let primary = PrimaryViewController()
let detail = DetailViewController()
splitVC.viewControllers = [sidebar, primary, detail]
let window = UIWindow(windowScene: windowScene)
window.rootViewController = splitVC
window.makeKeyAndVisible()
self.window = window
}
// Адаптиране при промяна на размера на прозореца (Split View)
func windowScene(_ windowScene: UIWindowScene,
didUpdate previousCoordinateSpace: UICoordinateSpace,
interfaceOrientation previousOrientation: UIInterfaceOrientation) {
let isMultitasking = windowScene.traitCollection.horizontalSizeClass == .compact
print("iPadOS multitasking mode: \(isMultitasking ? "compact" : "regular")")
}
}UISplitViewController с .tripleColumn стил показва три колони едновременно: sidebar (навигация), primary (списък) и detail (съдържание). При преход в компактен режим (Split View с друго приложение), UIKit автоматично сгъва колоните в навигационен стек. Разработчикът не управлява това поведение ръчно — UIKit адаптира оформлението чрез traitCollection.
В iPadOS са налични: поддръжка на външни устройства чрез Files (USB-C/Thunderbolt), терминален режим на Safari с проверка на елементи, клавишни комбинации чрез UIKeyCommand, системен мениджър за изтегляния, Drag & Drop между приложения и Picture in Picture с променлив размер на прозореца.
Многозадачността — ключова характеристика на iPadOS, която го отличава фундаментално от iOS. Потребителят може да работи едновременно с няколко приложения на един екран. Разработчикът трябва да гарантира, че приложението работи коректно във всеки режим на многозадачност.
Split View разделя екрана на iPad между две приложения в съотношение 50/50 или 33/67. Всяко приложение получава своя собствена UISceneSession със собствена памет и жизнен цикъл. При ширина на екрана под 600 точки, UIKit принудително превключва приложението в компактен хоризонтален size class. Приложението трябва да обработва правилно тази промяна.
Slide Over — плаващ прозорец над активното приложение (ширина 320 точки). Приложението в Slide Over преминава в компактен хоризонтален size class (.compact). Важно е да оптимизирате UI за тесен екран. В Slide Over приложението може да бъде извикано чрез плъзгане от десния ръб или чрез дока. Потребителят може да премести Slide Over в Split View или да го затвори чрез плъзгане надясно.
Stage Manager (iPadOS 16+, M1 и по-нови) — мениджър на прозорци, който позволява създаване на припокриващи се прозорци с произволни размери. Поддържа до 4 прозореца на екрана на iPad и до 4 на външен монитор (общо 8). Приложенията получават събитие UISceneWillConnectNotification за всеки нов прозорец. Stage Manager променя правилата на жизнения цикъл: прозорецът на заден план не се замразява, а продължава да работи с ограничени ресурси.
| Режим | Брой прозорци | Размер на прозореца | Size Class |
|---|---|---|---|
| Цял екран | 1 | 100% екран | Regular |
| Split View 50/50 | 2 | 50% екран | Regular (iPad Pro 12.9) или Compact |
| Split View 33/67 | 2 | 33% / 67% | Compact за 33% |
| Slide Over | 1 + плаващ | 320 pt | Compact |
| Stage Manager | 1–4 | Произволен | Зависи от размера |
Apple Pencil — активен стилус на Apple с поддръжка на наклон, натиск и hover откриване (iPad Pro M2+). Закъснението между движението на писалката и показването на мастилото е 9–20 ms в зависимост от модела. PencilKit — основният фреймуърк за интегриране на рисуване в приложение.
PKCanvasView предоставя готова повърхност за рисуване с поддръжка на мастило, молив, маркер и гума. PKToolPicker — панел за избор на инструменти. Разработчикът не трябва да имплементира рендиране на щрихи — PencilKit го прави хардуерно с Metal шейдъри. Налични са настройки на цвят, дебелина и прозрачност на писалката.
import PencilKit
import UIKit
class DrawingViewController: UIViewController {
private lazy var canvasView: PKCanvasView = {
let canvas = PKCanvasView()
canvas.tool = PKInkingTool(.pen, color: .black, width: 5)
canvas.delegate = self
canvas.drawingPolicy = .anyInput
canvas.backgroundColor = .white
return canvas
}()
private lazy var toolPicker: PKToolPicker = {
let picker = PKToolPicker()
picker.addObserver(canvasView)
picker.setVisible(true, forFirstResponder: canvasView)
return picker
}()
override func viewDidLoad() {
super.viewDidLoad()
view.addSubview(canvasView)
canvasView.frame = view.bounds
canvasView.becomeFirstResponder()
toolPicker.addObserver(canvasView)
}
// Запазване на рисунка в PKDrawing (двоичен формат)
func saveDrawing() {
let drawingData = canvasView.drawing.dataRepresentation()
let url = FileManager.default.urls(
for: .documentDirectory, in: .userDomainMask
)[0].appendingPathComponent("drawing.drawing")
try? drawingData.write(to: url)
}
}
extension DrawingViewController: PKCanvasViewDelegate {
func canvasViewDrawingDidChange(_ canvasView: PKCanvasView) {
print("Canvas changed: \(canvasView.drawing.strokes.count) strokes")
}
}PKCanvasView с drawingPolicy .anyInput приема както Apple Pencil, така и пръст. PKToolPicker дава на потребителя избор на инструменти без необходимост от писане на собствен UI. PKDrawing се съхранява в двоичен формат с висока степен на компресия — един час рисуване заема около 5–10 MB.
Scribble (iPadOS 14+) позволява ръкописно въвеждане във всяко UITextField и UITextView. Системата разпознава ръкописен текст на устройството, използвайки Neural Engine. ML моделът работи с латиница и кирилица. В iOS 17+ Scribble поддържа автоматична корекция и предсказване на следващата дума. Разработчикът не трябва да добавя код — Scribble работи автоматично при наличие на поле за въвеждане.
От iPadOS 17.4 и Apple Pencil Pro, разработчиците получават hover събития при приближаване на писалката до екрана (до 12 mm). Събитието съдържа позиция, сила на натиск и азимут. Приложение: преглед на точката на допир на четката в приложения за рисуване, преглед на инструмент, визуална обратна връзка преди допир.
Адаптивен интерфейс — задължително изискване за iPad приложения. iPad работи в различни размери на екрана (8.3″–13″) и режими на многозадачност. UIKit предоставя Size Classes (horizontal: .regular/.compact, vertical: .regular/.compact) и UISplitViewController за автоматично адаптиране.
Size Classes — абстракция, която определя наличното пространство. На iPad в режим на цял екран и двете оси са .regular. В Split View (50%) хоризонталният клас може да стане .compact на iPad mini или iPad Air. Всички популярни оформления, изградени на Auto Layout и UICollectionViewCompositionalLayout, се адаптират автоматично. Персонализираното адаптиране се извършва чрез заместване на traitCollectionDidChange.
import SwiftUI
/// Адаптивно оформление за iPad с използване на Size Classes
struct AdaptiveContentView: View {
@Environment(\.horizontalSizeClass) private var horizontalSizeClass
@Environment(\.verticalSizeClass) private var verticalSizeClass
var body: some View {
if horizontalSizeClass == .regular && verticalSizeClass == .regular {
// Таблетен режим: sidebar + content
NavigationSplitView {
SidebarView()
} detail: {
ContentGridView()
}
} else {
// Компактен режим: стекова навигация
NavigationStack {
ContentGridView()
}
}
}
}
/// Пример за адаптивна мрежа: 3 колони на iPad, 2 на iPhone
struct ContentGridView: View {
@Environment(\.horizontalSizeClass) private var horizontalSizeClass
private var columns: [GridItem] {
let count = horizontalSizeClass == .regular ? 3 : 2
return Array(repeating: GridItem(.flexible(), spacing: 16), count: count)
}
var body: some View {
ScrollView {
LazyVGrid(columns: columns, spacing: 16) {
ForEach(items) { item in
ItemCard(item: item)
}
}
.padding()
}
}
}В примера NavigationSplitView се използва само когато horizontalSizeClass == .regular (iPad цял екран). NavigationStack се прилага в компактен режим. Броят на колоните на мрежата (3 vs 2) също се променя в зависимост от Size Classes. Всичко се обновява автоматично при промяна на режима на многозадачност.
UIKit предоставя UISplitViewController с три стила: .doubleColumn (sidebar + detail), .tripleColumn (sidebar + primary + detail) и .single. В iPadOS 16+ splitViewController автоматично превключва между стиловете при промяна на size class. Разработчикът задава viewControllers за всяка колона, UIKit управлява видимостта.
iPadOS SDK включва всички iOS фреймуърци, както и API, достъпни само на iPad. По-долу са представени ключовите възможности, специфични за iPad.
iPadOS поддържа Drag & Drop между приложения и в рамките на приложение. UIDragInteraction и UIDropInteraction позволяват влачене на текст, изображения, файлове и персонализирани обекти. Drag & Drop работи едновременно с Multi-Touch: потребителят може да влачи няколко елемента с различни пръсти. В SwiftUI се използват модификаторите .onDrag и .onDrop.
При свързване на клавиатура (Magic Keyboard, Smart Keyboard) UIKeyCommand позволява добавяне на клавишни комбинации. В iPadOS 17+ клавишните комбинации се показват при продължително натискане на Cmd. Apple препоръчва поддръжка на стандартни комбинации: ⌘C (копирай), ⌘V (постави), ⌘F (търсене), ⌘N (нов документ).
iPadOS 17+ поддържа външни монитори с родна разделителна способност до 6K (Pro Display XDR). Приложението може да показва съдържание на външния екран чрез UIWindowScene с отделен идентификатор на сесия. Stage Manager позволява поставяне на до 4 прозореца с променлив размер на външния монитор.
| API | Предназначение | Налично в iOS |
|---|---|---|
| UISplitViewController | Навигация с множество колони | Да |
| PencilKit | Рисуване с Apple Pencil | Не |
| UIDragInteraction | Drag & Drop | Да (само в приложение) |
| UIKeyCommand | Клавишни комбинации | Да (само с външна клавиатура) |
| UIScene | Режим на множество прозорци | Да (само iPad) |
| UIPencilInteraction | Двойно докосване Apple Pencil | Не |
| PDFKit | Преглед и анотиране на PDF | Да |
Разработката за iPadOS изисква специален подход към UI/UX, производителност и тестване. Грешки, простими на iPhone, стават критични на iPad поради по-големия екран и многозадачността.
iPad използва чипове от серия M (M1, M2, M4) с унифицирана памет до 16 GB. Въпреки мощния хардуер, приложението в Split View или Slide Over споделя ресурси с друго приложение. Натискът върху паметта е по-висок отколкото на iPhone. Използвайте компресия на изображения, мързеливо зареждане на колекции и профилиране чрез Instruments Allocations. iPad Pro M4 с 16 GB позволява стартиране на приложения на десктоп ниво (Final Cut Pro, Logic Pro).
Повечето потребители на iPad използват външна клавиатура. Интерфейсът трябва да бъде напълно управляем от клавиатурата: Tab за навигация между полета, Space за активиране на избран елемент, Enter за потвърждение. Добавете поддръжка за Full Keyboard Access — системна настройка, позволяваща управление на всеки UI елемент от клавиатурата.
Симулаторът на iPad не възпроизвежда напълно поведението на многозадачността. Тествайте на реално устройство в различни режими: Split View с тежко приложение (Safari с 20 раздела), Stage Manager с 4 прозореца, Slide Over с бърза смяна на приложения. Проверете сценария: потребителят отваря приложение от Slide Over, влачи го в Split View, променя размера, затваря — приложението не трябва да се срива.
// Проверка на текущия режим на многозадачност на iPadOS
- (void)checkMultitaskingMode:(UIWindowScene *)scene {
if (scene.traitCollection.userInterfaceIdiom != UIUserInterfaceIdiomPad) {
return;
}
BOOL isFullScreen = (scene.traitCollection.horizontalSizeClass == UIUserInterfaceSizeClassRegular &&
scene.traitCollection.verticalSizeClass == UIUserInterfaceSizeClassRegular);
BOOL isSlideOver = (CGRectGetWidth(scene.coordinateSpace.bounds) == 320.0);
if (scene.windows.first?.windowScene?.activationConditions.canBecomeFocused == YES) {
NSLog(@"Stage Manager е активен");
}
if (isSlideOver) {
NSLog(@"Slide Over режим");
} else if (isFullScreen) {
NSLog(@"Режим на цял екран");
} else {
NSLog(@"Split View режим");
}
}Често задавани въпроси
iPadOS има разширена многозадачност (Split View, Slide Over, Stage Manager), поддръжка на Apple Pencil с hover откриване, десктоп Safari с мениджър за изтегляния, външни монитори с родна разделителна способност и файлова система Files с достъп до външни устройства чрез USB-C.
Split View се поддържа автоматично, ако приложението използва UISplitViewController. Приложението трябва правилно да обработва промените на size class: при преход в компактен режим използвайте UINavigationController за стека от екрани. За изричен отказ от Split View задайте UIRequiresFullScreen = YES в Info.plist.
Използвайте PencilKit: PKCanvasView за повърхност за рисуване и PKToolPicker за избор на инструменти. За персонализирана обработка на допири на писалката — UIEvent с тип .hover и UIPencilInteraction за двойно докосване. Закъснение на Apple Pencil Pro — 9 ms, предишно поколение — 20 ms.
iPad mini 8,3″ (2266×1488), iPad Air 10,9″ (2360×1640), iPad Pro 11″ (2388×1668), iPad Pro 13″ M4 (2752×2064). Използвайте Size Classes и Auto Layout за адаптиране. Външни монитори до 6K чрез Thunderbolt. Stage Manager поддържа до 8 прозореца (4 на iPad + 4 на външен монитор).
iPadOS 17+ поддържа външни монитори чрез USB-C/Thunderbolt с родна разделителна способност до 6K. Приложението може да показва съдържание на външен монитор чрез отделен UIWindowScene със собствен жизнен цикъл. Stage Manager поддържа до 4 прозореца на външен монитор.
Обобщение
Ще разработим мобилно приложение под ключ
IT Sectr създава iOS и Android приложения за стартъпи и бизнеси от 2017 г. Ще ви консултираме и ще предложим най-доброто решение.
Прочетете също