iPadOS는 2019년 iOS에서 분리된 Apple의 iPad용 운영 체제입니다. iPad 개발은 Split View 및 Stage Manager 멀티태스킹, 저지연 Apple Pencil 입력, 데스크톱 Safari와 같은 고유한 기능을 고려합니다.
핵심 포인트
iPadOS는 2019년 iOS(버전 13)의 포크로 처음 출시된 Apple의 iPad용 운영 체제입니다. 그 이전에는 iPad가 iPhone과 동일한 iOS를 사용했습니다. iPadOS의 분리를 통해 Apple은 대형 화면에 특화된 기능(멀티태스킹, 데스크톱 Safari, 드래그 앤 드롭, 외부 모니터 지원)을 도입할 수 있었습니다.
iPadOS는 iOS 앱과 완벽한 호환성을 유지합니다. 모든 iPhone 앱은 iPad에서 스케일링 모드로 실행됩니다. 그러나 양질의 사용자 경험을 위해서는 적응이 필요합니다. Size Classes, UISplitViewController 및 키보드 단축키 지원을 사용합니다. Apple(WWDC 2025)에 따르면, iPad 사용 시간의 80%는 스케일링된 버전이 아닌 태블릿 최적화 버전에서 보내집니다.
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 | Apple Pencil용 Scribble, 컴팩트 통화 |
| iPadOS 15 | 2021 | Quick Note, 개선된 멀티태스킹 관리자 |
| iPadOS 16 | 2022 | Stage Manager, 외부 6K 모니터 |
| iPadOS 17 | 2023 | 인터랙티브 위젯, Lock Screen |
| iPadOS 18 | 2024 | 계산기 Math Notes, Smart Script |
iPadOS는 iOS와 동일한 XNU 커널 및 Darwin을 기반으로 하지만, 여러 창과 임의의 화면 크기에 맞게 수정된 UIKit 셸을 사용합니다. 주요 아키텍처 차이점은 iOS 13에서 도입된 UIScene 지원입니다.
iPadOS에서 각 창(Split View의 창 포함)은 고유한 수명 주기를 가진 별도의 UISceneSession입니다. 하나의 앱이 하나의 UIWindowScene을 갖는 iPhone과 달리, iPad에서는 하나의 앱이 여러 UIScene(여러 창, Slide Over, Stage Manager)을 가질 수 있습니다. SceneDelegate는 각 창의 상태를 독립적으로 관리합니다.
import UIKit
import SwiftUI
/// iPadOS에서 여러 창 지원을 위한 SceneDelegate
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")")
}
}.tripleColumn 스타일의 UISplitViewController는 사이드바(탐색), 기본(목록), 세부 정보(콘텐츠)의 세 개의 열을 동시에 표시합니다. 컴팩트 모드(다른 앱과 Split View)로 전환할 때 UIKit은 자동으로 열을 탐색 스택으로 축소합니다. 개발자는 이 동작을 수동으로 관리하지 않습니다. UIKit은 traitCollection을 통해 레이아웃을 적응시킵니다.
iPadOS 제공 기능: Files(USB-C/Thunderbolt)를 통한 외부 저장소 지원, 요소 검사가 포함된 Safari 터미널 모드, UIKeyCommand를 통한 키보드 단축키, 시스템 다운로드 관리자, 앱 간 드래그 앤 드롭, 크기 조정 가능한 창의 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 이상)는 임의의 크기로 겹치는 창을 만들 수 있는 창 관리자입니다. iPad 화면에서 최대 4개, 외부 모니터에서 최대 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% | 33%의 경우 Compact |
| Slide Over | 1 + 플로팅 | 320 pt | Compact |
| Stage Manager | 1–4 | 임의 | 크기에 따라 다름 |
Apple Pencil은 기울기, 압력 및 호버 감지(iPad Pro M2+)를 지원하는 Apple의 능동형 스타일러스입니다. 펜 움직임과 잉크 표시 사이의 지연 시간은 모델에 따라 9–20ms입니다. 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")
}
}drawingPolicy .anyInput의 PKCanvasView는 Apple Pencil과 손가락 입력을 모두 허용합니다. PKToolPicker는 사용자 지정 UI를 작성하지 않고도 도구 선택을 제공합니다. PKDrawing은 높은 압축률의 바이너리 형식으로 저장됩니다. 1시간 드로잉은 약 5–10MB를 차지합니다.
Scribble(iPadOS 14+)은 모든 UITextField 및 UITextView에 필기 입력을 허용합니다. 시스템은 Neural Engine을 사용하여 기기에서 필기를 인식합니다. ML 모델은 라틴 문자와 키릴 문자를 지원합니다. iOS 17+에서 Scribble은 자동 수정 및 다음 단어 예측을 지원합니다. 개발자는 코드를 추가할 필요가 없습니다. Scribble은 입력 필드가 있으면 자동으로 작동합니다.
iPadOS 17.4 및 Apple Pencil Pro부터 개발자는 스타일러스가 화면에 가까워지면(최대 12mm) 호버 이벤트를 받을 수 있습니다. 이벤트에는 위치, 힘 및 방위각이 포함됩니다. 용도: 드로잉 앱의 브러시 접촉점 미리보기, 도구 미리보기, 터치 전 시각적 피드백.
적응형 인터페이스는 iPad 앱의 필수 요구 사항입니다. iPad는 다양한 화면 크기(8.3"–13")와 멀티태스킹 모드에서 작동합니다. UIKit은 자동 적응을 위해 Size Classes(가로: .regular/.compact, 세로: .regular/.compact)와 UISplitViewController를 제공합니다.
Size Classes는 사용 가능한 공간을 정의하는 추상화입니다. 전체 화면 모드의 iPad에서는 두 축이 모두 .regular입니다. Split View(50%)에서는 iPad mini 또는 iPad Air에서 가로 클래스가 .compact가 될 수 있습니다. Auto Layout 및 UICollectionViewCompositionalLayout으로 구축된 모든 인기 레이아웃은 자동으로 적응됩니다. 사용자 지정 적응은 traitCollectionDidChange를 재정의하여 수행됩니다.
import SwiftUI
/// Size Classes를 사용한 iPad용 적응형 레이아웃
struct AdaptiveContentView: View {
@Environment(\.horizontalSizeClass) private var horizontalSizeClass
@Environment(\.verticalSizeClass) private var verticalSizeClass
var body: some View {
if horizontalSizeClass == .regular && verticalSizeClass == .regular {
// 태블릿 모드: 사이드바 + 콘텐츠
NavigationSplitView {
SidebarView()
} detail: {
ContentGridView()
}
} else {
// 컴팩트 모드: 스택 탐색
NavigationStack {
ContentGridView()
}
}
}
}
/// 적응형 그리드 예: iPad에서 3열, iPhone에서 2열
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 대 2)도 Size Classes에 따라 변경됩니다. 멀티태스킹 모드가 변경되면 모든 것이 자동으로 업데이트됩니다.
UIKit은 .doubleColumn(사이드바 + 세부 정보), .tripleColumn(사이드바 + 기본 + 세부 정보), .single의 세 가지 스타일로 UISplitViewController를 제공합니다. iPadOS 16+에서 size class가 변경되면 splitViewController가 자동으로 스타일 간에 전환됩니다. 개발자는 각 열에 viewControllers를 설정하고 UIKit이 가시성을 관리합니다.
iPadOS SDK에는 모든 iOS 프레임워크와 iPad에서만 사용할 수 있는 API가 포함되어 있습니다. 아래는 주요 iPad별 기능입니다.
iPadOS는 앱 간 및 앱 내 드래그 앤 드롭을 지원합니다. UIDragInteraction 및 UIDropInteraction은 텍스트, 이미지, 파일 및 사용자 지정 개체를 끌 수 있도록 합니다. 드래그 앤 드롭은 멀티터치와 동시에 작동합니다. 사용자는 다른 손가락으로 여러 항목을 끌 수 있습니다. 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 | 드래그 앤 드롭 | 예(앱 내에서만) |
| UIKeyCommand | 키보드 단축키 | 예(외부 키보드만) |
| UIScene | 다중 창 모드 | 예(iPad만) |
| UIPencilInteraction | Apple Pencil 더블 탭 | 아니오 |
| PDFKit | PDF 보기 및 주석 | 예 |
iPadOS 개발은 UI/UX, 성능 및 테스트에 특별한 접근 방식이 필요합니다. iPhone에서는 용서되는 오류도 더 큰 화면과 멀티태스킹으로 인해 iPad에서는 심각해집니다.
iPad는 최대 16GB 통합 메모리를 갖춘 M 시리즈 칩(M1, M2, M4)을 사용합니다. 강력한 하드웨어에도 불구하고 Split View 또는 Slide Over의 앱은 다른 앱과 리소스를 공유합니다. 메모리 압력은 iPhone보다 높습니다. 이미지 압축, 컬렉션의 지연 로딩 및 Instruments Allocations를 통한 프로파일링을 사용하세요. 16GB iPad Pro M4는 데스크톱급 앱(Final Cut Pro, Logic Pro)을 실행할 수 있습니다.
대부분의 iPad 사용자는 외부 키보드를 사용합니다. 인터페이스는 완전히 키보드로 탐색 가능해야 합니다: 필드 이동에 Tab, 선택한 요소 활성화에 Space, 확인에 Enter. Full Keyboard Access 지원을 추가하세요. 키보드로 모든 UI 요소를 제어할 수 있는 시스템 설정입니다.
iPad 시뮬레이터는 멀티태스킹 동작을 완전히 재현하지 못합니다. 다양한 모드에서 실제 기기로 테스트하세요: 무거운 앱(20개 탭의 Safari)과 Split View, 4개 창의 Stage Manager, 빠른 앱 전환의 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 지원, 다운로드 관리자가 있는 데스크톱 Safari, 기본 해상도의 외부 모니터, USB-C를 통한 외장 드라이브 액세스가 가능한 Files 파일 시스템을 갖추고 있습니다.
앱이 UISplitViewController를 사용하는 경우 Split View가 자동으로 지원됩니다. 앱은 size class 변경을 올바르게 처리해야 합니다. 컴팩트 모드로 전환할 때 화면 스택에 UINavigationController를 사용하세요. Split View를 명시적으로 거부하려면 Info.plist에서 UIRequiresFullScreen = YES를 지정하세요.
PencilKit을 사용하세요: 드로잉 표면에는 PKCanvasView, 도구 선택에는 PKToolPicker. 사용자 지정 스타일러스 입력 처리를 위해 — .hover 유형의 UIEvent와 더블 탭용 UIPencilInteraction. Apple Pencil Pro의 지연 시간은 9ms, 이전 세대는 20ms입니다.
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을 사용하세요. Thunderbolt를 통해 최대 6K 외부 모니터. Stage Manager는 최대 8개 창(iPad에서 4개 + 외부 모니터에서 4개)을 지원합니다.
iPadOS 17+는 USB-C/Thunderbolt를 통해 최대 6K 기본 해상도의 외부 모니터를 지원합니다. 앱은 자체 수명 주기를 가진 별도의 UIWindowScene을 통해 외부 모니터에 콘텐츠를 표시할 수 있습니다. Stage Manager는 외부 모니터에서 최대 4개의 창을 지원합니다.
요약
턴키 방식의 모바일 애플리케이션을 개발해 드립니다
IT Sectr는 2017년부터 스타트업과 기업을 위한 iOS 및 Android 애플리케이션을 만듭니다. 저희가 상담해 드리고 최적의 솔루션을 제안하겠습니다.