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)はインタラクティブウィジェットとロック画面のカスタマイズを追加。
| iPadOSバージョン | 年 | 主要な革新 |
|---|---|---|
| iPadOS 13 | 2019 | Slide Over、Split View、デスクトップSafari |
| iPadOS 14 | 2020 | Apple PencilのScribble、コンパクトな通話UI |
| iPadOS 15 | 2021 | Quick Note、改善されたマルチタスク管理 |
| iPadOS 16 | 2022 | Stage Manager、外部6Kモニター |
| iPadOS 17 | 2023 | インタラクティブウィジェット、ロック画面 |
| iPadOS 18 | 2024 | 計算機Math Notes、Smart Script |
iPadOSはiOSと同じXNUカーネルとDarwinに基づいていますが、複数のウィンドウと任意の画面サイズに適応するように修正されたUIKitシェルを使用しています。主要なアーキテクチャ上の違いは、iOS 13で導入されたUISceneのサポートです。
iPadOSでは、各ウィンドウ(Split Viewのウィンドウを含む)は独自のライフサイクルを持つ独立したUISceneSessionです。1つのアプリが1つのUIWindowSceneを持つiPhoneとは異なり、iPadでは1つのアプリが複数の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は、サイドバー(ナビゲーション)、プライマリ(リスト)、ディテール(コンテンツ)の3つのカラムを同時に表示します。コンパクトモード(別のアプリとのSplit View)に移行するとき、UIKitは自動的にカラムをナビゲーションスタックに折りたたみます。開発者はこの動作を手動で管理しません。UIKitはtraitCollectionを通じてレイアウトを適応させます。
iPadOSが提供するもの:Files(USB-C/Thunderbolt)による外部ストレージサポート、要素検査付きSafariターミナルモード、UIKeyCommandによるキーボードショートカット、システムダウンロードマネージャー、アプリ間のドラッグ&ドロップ、サイズ変更可能なピクチャインピクチャ。
マルチタスクはiPadOSの主要な機能であり、iOSと根本的に異なる点です。ユーザーは1つの画面で複数のアプリを同時に操作できます。開発者は、アプリがどのマルチタスクモードでも正しく動作することを保証する必要があります。
Split ViewはiPadの画面を2つのアプリ間で50/50または33/67の比率で分割します。各アプリは独自のメモリとライフサイクルを持つ独自のUISceneSessionを取得します。画面幅が600ポイント未満の場合、UIKitは強制的にアプリをコンパクトな横方向サイズクラスに切り替えます。アプリはこの変更に正しく対応する必要があります。
Slide Overはアクティブなアプリの上に浮かぶウィンドウ(幅320ポイント)です。Slide Overのアプリはコンパクトな横方向サイズクラス(.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は3つのスタイルでUISplitViewControllerを提供します:.doubleColumn(サイドバー+詳細)、.tripleColumn(サイドバー+プライマリ+詳細)、.single。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アプリケーションを開発しています。私たちがご相談に乗り、最適なソリューションをご提案します。