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 и поддержка клавиатурных shortcut'ов. По данным Apple (WWDC 2025), 80% времени на iPad пользователи проводят в планшетных, а не масштабированных версиях приложений.
iPadOS 13 (2019) принёс Slide Over и Split View. iPadOS 14 (2020) добавил Apple Pencil Scribble и компактный UI. iPadOS 15 (2021) ввёл Quick Note и улучшения multitasking. 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, улучшенный multitasking менеджер |
| 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 с инспекцией элементов, клавиатурные shortcut'ы через UIKeyCommand, системный менеджер загрузок, Drag & Drop между приложениями и Picture in Picture с изменяемым размером окна.
Multitasking — ключевая особенность 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 мс в зависимости от модели. PencilKit — основной фреймворк для интеграции рисования в приложение.
PKCanvasView предоставляет готовую поверхность для рисования с поддержкой туши, карандаша, маркера и ластика. PKToolPicker — панель выбора инструментов. Разработчику не нужно реализовывать рендеринг штрихов — PencilKit делает это аппаратно с метал-шейдерами. Доступны настройка цвета, толщины и прозрачности пера.
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 МБ.
Scribble (iPadOS 14+) позволяет писать от руки в любом UITextField и UITextView. Система распознаёт рукописный ввод на устройстве с использованием Neural Engine. ML-модель работает с латиницей и кириллицей. В iOS 17+ Scribble поддерживает автозамену и предсказание следующего слова. Разработчику не нужно добавлять код — Scribble работает автоматически при наличии поля ввода.
С iPadOS 17.4 и Apple Pencil Pro разработчики получают hover-события при приближении стилуса к экрану (до 12 мм). Событие содержит позицию, силу нажатия и азимут. Применение: предварительный просмотр точки касания кисти в рисовалках, превью инструмента, визуальная обратная связь до касания.
Адаптивный интерфейс — обязательное требование для 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
/// Адаптивный layout для 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+ клавиатурные shortcut'ы отображаются при долгом нажатии 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 | Клавиатурные shortcut'ы | Да (только с внешней клавиатурой) |
| UIScene | Мультиоконный режим | Да (только iPad) |
| UIPencilInteraction | Двойной тап Apple Pencil | Нет |
| PDFKit | Просмотр и аннотирование PDF | Да |
Разработка под iPadOS требует особого подхода к UI/UX, производительности и тестированию. Ошибки, простительные на iPhone, становятся критическими на iPad из-за большего экрана и многозадачности.
iPad использует M-серию чипов (M1, M2, M4) с унифицированной памятью до 16 ГБ. Несмотря на мощное железо, приложение в Split View или Slide Overs делит ресурсы с другим приложением. Memory pressure выше, чем на iPhone. Используйте сжатие изображений, lazy loading коллекций и профилирование через Instruments Allocations. iPad Pro M4 с 16 ГБ позволяет запускать приложения уровня десктопа (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 мс, предпоследнего поколения — 20 мс.
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 года. Мы проконсультируем вас и предложим наилучшее решение.