iPadOS là hệ điều hành của Apple dành cho iPad, được tách ra từ iOS vào năm 2019. Phát triển trên iPad xem xét các khả năng độc đáo: đa nhiệm Split View và Stage Manager, đầu vào Apple Pencil độ trễ thấp và Safari dành cho máy tính để bàn.
Điểm chính
iPadOS là hệ điều hành của Apple dành cho iPad, được phát hành lần đầu vào năm 2019 như một nhánh của iOS (phiên bản 13). Trước đó, iPad sử dụng cùng iOS với iPhone. Việc tách iPadOS cho phép Apple giới thiệu các tính năng dành riêng cho màn hình lớn: đa nhiệm, Safari dành cho máy tính để bàn, kéo và thả, và hỗ trợ màn hình ngoài.
iPadOS duy trì khả năng tương thích hoàn toàn với các ứng dụng iOS: bất kỳ ứng dụng iPhone nào cũng chạy trên iPad ở chế độ thu phóng. Tuy nhiên, trải nghiệm người dùng chất lượng đòi hỏi sự thích ứng: sử dụng Size Classes, UISplitViewController và hỗ trợ phím tắt. Theo Apple (WWDC 2025), 80% thời gian trên iPad người dùng dành cho các phiên bản được tối ưu hóa cho máy tính bảng thay vì các phiên bản thu phóng.
iPadOS 13 (2019) giới thiệu Slide Over và Split View. iPadOS 14 (2020) thêm Apple Pencil Scribble và giao diện nhỏ gọn. iPadOS 15 (2021) giới thiệu Quick Note và cải tiến đa nhiệm. iPadOS 16 (2022) mang đến Stage Manager và hỗ trợ màn hình ngoài. iPadOS 17 (2023) thêm widget tương tác và tùy chỉnh màn hình khóa.
| Phiên bản iPadOS | Năm | Cải tiến chính |
|---|---|---|
| iPadOS 13 | 2019 | Slide Over, Split View, Safari máy tính để bàn |
| iPadOS 14 | 2020 | Scribble cho Apple Pencil, cuộc gọi nhỏ gọn |
| iPadOS 15 | 2021 | Quick Note, trình quản lý đa nhiệm cải tiến |
| iPadOS 16 | 2022 | Stage Manager, màn hình ngoài 6K |
| iPadOS 17 | 2023 | Widget tương tác, màn hình khóa |
| iPadOS 18 | 2024 | Máy tính Math Notes, Smart Script |
iPadOS dựa trên cùng nhân XNU và Darwin như iOS, nhưng sử dụng shell UIKit đã được sửa đổi để thích ứng với nhiều cửa sổ và kích thước màn hình tùy ý. Sự khác biệt kiến trúc chính là hỗ trợ UIScene, được giới thiệu trong iOS 13.
Trong iPadOS, mỗi cửa sổ (bao gồm cả trong Split View) là một UISceneSession riêng biệt với vòng đời của riêng nó. Không giống như iPhone, nơi một ứng dụng có một UIWindowScene duy nhất, trên iPad một ứng dụng có thể có nhiều UIScene (nhiều cửa sổ, Slide Over, Stage Manager). SceneDelegate quản lý trạng thái của từng cửa sổ một cách độc lập.
import UIKit
import SwiftUI
/// SceneDelegate hỗ trợ nhiều cửa sổ trên 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 }
// Tạo UISplitViewController cho điều hướng máy tính bảng
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
}
// Thích ứng khi thay đổi kích thước cửa sổ (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 với kiểu .tripleColumn hiển thị ba cột cùng lúc: thanh bên (điều hướng), chính (danh sách) và chi tiết (nội dung). Khi chuyển sang chế độ nhỏ gọn (Split View với ứng dụng khác), UIKit tự động thu gọn các cột thành một ngăn xếp điều hướng. Nhà phát triển không quản lý hành vi này theo cách thủ công — UIKit thích ứng bố cục thông qua traitCollection.
iPadOS cung cấp: hỗ trợ lưu trữ ngoài qua Files (USB-C/Thunderbolt), chế độ đầu cuối Safari với kiểm tra phần tử, phím tắt qua UIKeyCommand, trình quản lý tải xuống hệ thống, kéo và thả giữa các ứng dụng và Picture in Picture với cửa sổ có thể thay đổi kích thước.
Đa nhiệm là một tính năng chính của iPadOS giúp phân biệt cơ bản với iOS. Người dùng có thể làm việc đồng thời với nhiều ứng dụng trên một màn hình. Nhà phát triển phải đảm bảo ứng dụng hoạt động chính xác trong mọi chế độ đa nhiệm.
Split View chia màn hình iPad giữa hai ứng dụng theo tỷ lệ 50/50 hoặc 33/67. Mỗi ứng dụng nhận được UISceneSession riêng với bộ nhớ và vòng đời riêng. Khi chiều rộng màn hình nhỏ hơn 600 điểm, UIKit buộc ứng dụng chuyển sang size class ngang nhỏ gọn. Ứng dụng phải xử lý thay đổi này một cách chính xác.
Slide Over là một cửa sổ nổi trên ứng dụng đang hoạt động (rộng 320 điểm). Ứng dụng trong Slide Over chuyển sang size class ngang nhỏ gọn (.compact). Điều quan trọng là tối ưu hóa giao diện cho màn hình hẹp. Trong Slide Over, ứng dụng có thể được gọi bằng cách vuốt từ cạnh phải hoặc thông qua dock. Người dùng có thể kéo Slide Over vào Split View hoặc đóng nó bằng cách vuốt sang phải.
Stage Manager (iPadOS 16+, M1 trở lên) là một trình quản lý cửa sổ cho phép tạo các cửa sổ chồng lên nhau với kích thước tùy ý. Hỗ trợ tối đa 4 cửa sổ trên màn hình iPad và tối đa 4 trên màn hình ngoài (tổng cộng 8). Các ứng dụng nhận được sự kiện UISceneWillConnectNotification cho mỗi cửa sổ mới. Stage Manager thay đổi quy tắc vòng đời: một cửa sổ trong nền không bị đóng băng mà tiếp tục hoạt động với tài nguyên hạn chế.
| Chế độ | Số cửa sổ | Kích thước cửa sổ | Size Class |
|---|---|---|---|
| Toàn màn hình | 1 | 100% màn hình | Regular |
| Split View 50/50 | 2 | 50% màn hình | Regular (iPad Pro 12.9) hoặc Compact |
| Split View 33/67 | 2 | 33% / 67% | Compact cho 33% |
| Slide Over | 1 + nổi | 320 pt | Compact |
| Stage Manager | 1–4 | Tùy ý | Phụ thuộc vào kích thước |
Apple Pencil là bút stylus chủ động của Apple với hỗ trợ nghiêng, lực nhấn và phát hiện hover (iPad Pro M2+). Độ trễ giữa chuyển động của bút và hiển thị mực là 9–20 ms tùy theo model. PencilKit là framework chính để tích hợp vẽ vào ứng dụng.
PKCanvasView cung cấp bề mặt vẽ sẵn sàng với hỗ trợ mực, bút chì, bút đánh dấu và tẩy. PKToolPicker là bảng chọn công cụ. Nhà phát triển không cần triển khai kết xuất nét vẽ — PencilKit thực hiện việc này bằng tăng tốc phần cứng với shader Metal. Có sẵn tùy chỉnh màu sắc, độ dày và độ mờ của bút.
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)
}
// Lưu bản vẽ vào PKDrawing (định dạng nhị phân)
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 với drawingPolicy .anyInput chấp nhận cả đầu vào từ Apple Pencil và ngón tay. PKToolPicker cung cấp cho người dùng lựa chọn công cụ mà không cần viết giao diện tùy chỉnh. PKDrawing được lưu trữ ở định dạng nhị phân với độ nén cao — một giờ vẽ chiếm khoảng 5–10 MB.
Scribble (iPadOS 14+) cho phép viết tay trong bất kỳ UITextField và UITextView nào. Hệ thống nhận dạng chữ viết tay trên thiết bị bằng Neural Engine. Mô hình ML hoạt động với bảng chữ cái Latin và Cyrillic. Trong iOS 17+, Scribble hỗ trợ tự động sửa lỗi và dự đoán từ tiếp theo. Nhà phát triển không cần thêm mã — Scribble hoạt động tự động với bất kỳ trường nhập nào.
Bắt đầu từ iPadOS 17.4 và Apple Pencil Pro, các nhà phát triển nhận được sự kiện hover khi bút stylus đến gần màn hình (tối đa 12 mm). Sự kiện chứa vị trí, lực và góc phương vị. Ứng dụng: xem trước điểm tiếp xúc của cọ trong ứng dụng vẽ, xem trước công cụ, phản hồi trực quan trước khi chạm.
Giao diện thích ứng là yêu cầu bắt buộc đối với ứng dụng iPad. iPad hoạt động với các kích thước màn hình khác nhau (8.3"–13") và chế độ đa nhiệm. UIKit cung cấp Size Classes (ngang: .regular/.compact, dọc: .regular/.compact) và UISplitViewController để thích ứng tự động.
Size Classes là một sự trừu tượng xác định không gian có sẵn. Trên iPad ở chế độ toàn màn hình, cả hai trục đều là .regular. Trong Split View (50%), class ngang có thể trở thành .compact trên iPad mini hoặc iPad Air. Tất cả các bố cục phổ biến được xây dựng với Auto Layout và UICollectionViewCompositionalLayout đều thích ứng tự động. Việc thích ứng tùy chỉnh được thực hiện bằng cách ghi đè traitCollectionDidChange.
import SwiftUI
/// Bố cục thích ứng cho iPad sử dụng Size Classes
struct AdaptiveContentView: View {
@Environment(\.horizontalSizeClass) private var horizontalSizeClass
@Environment(\.verticalSizeClass) private var verticalSizeClass
var body: some View {
if horizontalSizeClass == .regular && verticalSizeClass == .regular {
// Chế độ máy tính bảng: thanh bên + nội dung
NavigationSplitView {
SidebarView()
} detail: {
ContentGridView()
}
} else {
// Chế độ nhỏ gọn: điều hướng ngăn xếp
NavigationStack {
ContentGridView()
}
}
}
}
/// Ví dụ lưới thích ứng: 3 cột trên iPad, 2 trên 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()
}
}
}Trong ví dụ, NavigationSplitView chỉ được sử dụng khi horizontalSizeClass == .regular (iPad toàn màn hình). NavigationStack được sử dụng ở chế độ nhỏ gọn. Số cột lưới (3 so với 2) cũng thay đổi tùy theo Size Classes. Mọi thứ tự động cập nhật khi chế độ đa nhiệm thay đổi.
UIKit cung cấp UISplitViewController với ba kiểu: .doubleColumn (thanh bên + chi tiết), .tripleColumn (thanh bên + chính + chi tiết) và .single. Trong iPadOS 16+, splitViewController tự động chuyển đổi giữa các kiểu khi size class thay đổi. Nhà phát triển đặt viewControllers cho mỗi cột, UIKit quản lý khả năng hiển thị.
iPadOS SDK bao gồm tất cả các framework iOS cũng như các API chỉ khả dụng trên iPad. Dưới đây là các khả năng chính dành riêng cho iPad.
iPadOS hỗ trợ kéo và thả giữa các ứng dụng và trong một ứng dụng. UIDragInteraction và UIDropInteraction cho phép kéo văn bản, hình ảnh, tệp và đối tượng tùy chỉnh. Kéo và thả hoạt động đồng thời với cảm ứng đa điểm: người dùng có thể kéo nhiều mục bằng các ngón tay khác nhau. Trong SwiftUI, các bổ ngữ .onDrag và .onDrop được sử dụng.
Khi kết nối bàn phím (Magic Keyboard, Smart Keyboard), UIKeyCommand cho phép thêm phím tắt. Trong iPadOS 17+, các phím tắt được hiển thị khi giữ Cmd. Apple khuyến nghị hỗ trợ các tổ hợp tiêu chuẩn: ⌘C (sao chép), ⌘V (dán), ⌘F (tìm kiếm), ⌘N (tài liệu mới).
iPadOS 17+ hỗ trợ màn hình ngoài với độ phân giải gốc lên đến 6K (Pro Display XDR). Ứng dụng có thể hiển thị nội dung trên màn hình ngoài thông qua UIWindowScene với mã định danh phiên riêng biệt. Stage Manager cho phép đặt tối đa 4 cửa sổ trên màn hình ngoài với kích thước có thể thay đổi.
| API | Mục đích | Có trong iOS |
|---|---|---|
| UISplitViewController | Điều hướng nhiều cột | Có |
| PencilKit | Vẽ bằng Apple Pencil | Không |
| UIDragInteraction | Kéo và thả | Có (chỉ trong ứng dụng) |
| UIKeyCommand | Phím tắt | Có (chỉ với bàn phím ngoài) |
| UIScene | Chế độ đa cửa sổ | Có (chỉ iPad) |
| UIPencilInteraction | Chạm đúp Apple Pencil | Không |
| PDFKit | Xem và chú thích PDF | Có |
Phát triển cho iPadOS đòi hỏi một cách tiếp cận đặc biệt về UI/UX, hiệu suất và thử nghiệm. Các lỗi có thể tha thứ trên iPhone trở nên nghiêm trọng trên iPad do màn hình lớn hơn và đa nhiệm.
iPad sử dụng chip dòng M (M1, M2, M4) với bộ nhớ hợp nhất lên đến 16 GB. Mặc dù phần cứng mạnh mẽ, một ứng dụng trong Split View hoặc Slide Over chia sẻ tài nguyên với ứng dụng khác. Áp lực bộ nhớ cao hơn so với iPhone. Sử dụng nén hình ảnh, tải chậm bộ sưu tập và hồ sơ thông qua Instruments Allocations. iPad Pro M4 với 16 GB cho phép chạy các ứng dụng cấp máy tính để bàn (Final Cut Pro, Logic Pro).
Hầu hết người dùng iPad sử dụng bàn phím ngoài. Giao diện phải hoàn toàn có thể điều hướng bằng bàn phím: Tab để điều hướng giữa các trường, Space để kích hoạt phần tử đã chọn, Enter để xác nhận. Thêm hỗ trợ cho Full Keyboard Access — một cài đặt hệ thống cho phép điều khiển bất kỳ phần tử giao diện nào bằng bàn phím.
Trình mô phỏng iPad không tái tạo hoàn toàn hành vi đa nhiệm. Hãy thử nghiệm trên thiết bị thực ở các chế độ khác nhau: Split View với ứng dụng nặng (Safari với 20 tab), Stage Manager với 4 cửa sổ, Slide Over với chuyển đổi ứng dụng nhanh. Kiểm tra kịch bản: người dùng mở ứng dụng từ Slide Over, kéo nó vào Split View, thay đổi kích thước, đóng nó — ứng dụng không được treo.
// Kiểm tra chế độ đa nhiệm hiện tại trên 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 đang hoạt động");
}
if (isSlideOver) {
NSLog(@"Chế độ Slide Over");
} else if (isFullScreen) {
NSLog(@"Chế độ toàn màn hình");
} else {
NSLog(@"Chế độ Split View");
}
}Câu hỏi thường gặp
iPadOS có đa nhiệm mở rộng (Split View, Slide Over, Stage Manager), hỗ trợ Apple Pencil với phát hiện hover, Safari máy tính để bàn với trình quản lý tải xuống, màn hình ngoài với độ phân giải gốc và hệ thống tệp Files với quyền truy cập ổ đĩa ngoài qua USB-C.
Split View được hỗ trợ tự động nếu ứng dụng sử dụng UISplitViewController. Ứng dụng phải xử lý chính xác các thay đổi size class: khi chuyển sang chế độ nhỏ gọn, hãy sử dụng UINavigationController cho ngăn xếp màn hình. Để từ chối rõ ràng Split View, hãy chỉ định UIRequiresFullScreen = YES trong Info.plist.
Sử dụng PencilKit: PKCanvasView cho bề mặt vẽ và PKToolPicker để chọn công cụ. Để xử lý đầu vào bút stylus tùy chỉnh — UIEvent với loại .hover và UIPencilInteraction cho chạm đúp. Độ trễ của Apple Pencil Pro là 9 ms, thế hệ trước — 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). Sử dụng Size Classes và Auto Layout để thích ứng. Màn hình ngoài lên đến 6K qua Thunderbolt. Stage Manager hỗ trợ tối đa 8 cửa sổ (4 trên iPad + 4 trên màn hình ngoài).
iPadOS 17+ hỗ trợ màn hình ngoài qua USB-C/Thunderbolt với độ phân giải gốc lên đến 6K. Ứng dụng có thể hiển thị nội dung trên màn hình ngoài thông qua UIWindowScene riêng biệt với vòng đời của riêng nó. Stage Manager hỗ trợ tối đa 4 cửa sổ trên màn hình ngoài.
Tổng kết
Chúng tôi sẽ phát triển ứng dụng di động chìa khóa trao tay
IT Sectr tạo các ứng dụng iOS và Android cho các công ty khởi nghiệp và doanh nghiệp từ năm 2017. Chúng tôi sẽ tư vấn và đề xuất giải pháp tốt nhất cho bạn.
Đọc thêm