watchOS là hệ điều hành của Apple dành cho Apple Watch, được phát hành lần đầu vào năm 2015 cùng với những chiếc đồng hồ đầu tiên. Phát triển ứng dụng watchOS được thực hiện bằng Swift với SwiftUI và WatchKit. Đặc điểm: màn hình hình chữ nhật nhỏ, tiêu thụ pin hạn chế 0,3 Wh và tích hợp chặt chẽ với iPhone qua Bluetooth. Theo Counterpoint Research, Apple Watch chiếm hơn 30% thị trường đồng hồ thông minh toàn cầu.
Những điểm chính
watchOS là hệ điều hành cho đồng hồ thông minh của Apple, dựa trên nhân Darwin XNU. Được phát hành lần đầu vào ngày 24 tháng 4 năm 2015 cùng với Apple Watch Series 0. Hệ thống được xây dựng trên cùng kiến trúc với iOS, nhưng được tối ưu hóa cho màn hình nhỏ (1,5 đến 1,9 inch), bộ nhớ hạn chế (tối đa 1 GB RAM trên Series 9) và tiêu thụ điện năng tối thiểu.
Theo StatCounter (2026), watchOS chiếm khoảng 55% thị trường hệ điều hành đồng hồ thông minh, vượt qua Wear OS và các hệ thống độc quyền của nhà sản xuất Trung Quốc. Apple phát hành các bản cập nhật watchOS lớn hàng năm, hỗ trợ đồng hồ lên đến 5 năm kể từ khi phát hành.
Một đặc điểm chính của watchOS là sự phụ thuộc vào iPhone. Hầu hết các ứng dụng đều sử dụng Watch Connectivity để đồng bộ dữ liệu. Bắt đầu từ watchOS 6, đồng hồ có thể cài đặt ứng dụng trực tiếp từ App Store, nhưng sự độc lập hoàn toàn khỏi iPhone chỉ được hỗ trợ với watchOS 9.
Phiên bản đầu tiên Watch OS 1.0 không hỗ trợ ứng dụng bên thứ ba — chỉ có ứng dụng Apple cài sẵn. watchOS 2 (2015) đã mở SDK cho nhà phát triển. watchOS 3 (2016) tăng tốc khởi chạy ứng dụng lên 7 lần. watchOS 6 (2019) giới thiệu App Store trên đồng hồ. watchOS 9 (2022) thêm thuốc và theo dõi giấc ngủ được cải thiện. watchOS 10 (2023) trở thành bản cập nhật giao diện lớn nhất kể từ khi phát hành.
| Phiên bản watchOS | Năm | Cải tiến chính |
|---|---|---|
| Watch OS 1 | 2015 | Phiên bản đầu tiên, chỉ ứng dụng Apple gốc |
| watchOS 2 | 2015 | SDK mở, ứng dụng bên thứ ba, Watch Connectivity |
| watchOS 3 | 2016 | Khởi chạy ứng dụng tức thì, Dock, Scribble |
| watchOS 6 | 2019 | App Store trên đồng hồ, Cycle Tracking, ứng dụng Noise |
| watchOS 9 | 2022 | Thuốc, giai đoạn ngủ, bạn đồng hành chạy bộ cải thiện |
| watchOS 10 | 2023 | Smart Stack, Double Tap, mặt đồng hồ mới |
Kiến trúc watchOS bao gồm ba lớp, cách ly phần cứng khỏi ứng dụng người dùng. Không giống như iOS, watchOS sử dụng cách tiếp cận dựa trên thành phần: một ứng dụng bao gồm hai mục tiêu — phần mở rộng (extension) và máy chủ iPhone.
Lớp dưới cùng là nhân XNU đã được sửa đổi với trình điều khiển cho chip S4/S5/S6/S7/S8/S9 của Apple. Apple Watch Series 9 sử dụng S9 SiP với 5,6 tỷ bóng bán dẫn và Neural Engine 4 lõi. Các dịch vụ hệ thống bao gồm Core Bluetooth, Watch Connectivity, HealthKit và Core Motion. Tất cả các tác vụ nền được quản lý thông qua BGTaskScheduler — bộ lập lịch hệ thống tối ưu hóa mức tiêu thụ điện năng.
WatchKit là framework để tạo giao diện ứng dụng watchOS. Nó bao gồm WKInterfaceController, WKInterfaceGroup, WKInterfaceLabel và WKInterfaceButton. Kể từ watchOS 6, Apple khuyến nghị SwiftUI thay vì WatchKit. SwiftUI cung cấp các khả năng tương tự nhưng với cú pháp khai báo và tự động thích ứng với kích thước màn hình: 38 mm (272×340), 42 mm (312×390), 40 mm (324×394), 44 mm (368×448), 45 mm (396×484), 49 mm (410×502 trên Apple Watch Ultra).
watchOS giới hạn hoạt động nền của ứng dụng để tiết kiệm pin. Các chế độ nền có sẵn: Workout (tập luyện), HealthKit (theo dõi sức khỏe), Location (định vị), Audio (trình phát âm thanh) và Complication (dữ liệu trên mặt đồng hồ). Mỗi chế độ yêu cầu một capability riêng trong entitlements. Mức tiêu thụ điện năng điển hình: ứng dụng đang hoạt động — 50-80 mA, chế độ nền — 5-15 mA, chờ — 1-3 mA.
import BackgroundTasks
import WatchKit
/// Lên lịch cập nhật dữ liệu nền trên watchOS
class BackgroundTaskManager: NSObject {
func scheduleBackgroundRefresh() {
let request = BGAppRefreshTaskRequest(identifier: "com.example.refresh")
request.earliestBeginDate = Date(timeIntervalSinceNow: 30 * 60)
try? BGTaskScheduler.shared.submit(request)
}
func handleAppRefresh(task: BGAppRefreshTask) {
task.expirationHandler = { task.setTaskCompleted(success: false) }
DataService.shared.fetchData { result in
switch result {
case .success:
ComplicationController.reloadComplications()
task.setTaskCompleted(success: true)
case .failure:
task.setTaskCompleted(success: false)
}
}
}
}
/// Đăng ký tác vụ nền trong WKExtensionDelegate
class ExtensionDelegate: NSObject, WKExtensionDelegate {
let manager = BackgroundTaskManager()
func handle(_ backgroundTasks: Set<WKBackgroundTask>) {
for task in backgroundTasks {
switch task {
case let refreshTask as BGAppRefreshTask:
manager.handleAppRefresh(task: refreshTask)
default:
task.setTaskCompleted(success: false)
}
}
}
}BGTaskScheduler đảm bảo rằng các tác vụ nền chạy vào thời điểm tối ưu — khi đồng hồ đang sạc và kết nối với iPhone. WKExtensionDelegate xử lý các tác vụ nền đến và cập nhật dữ liệu trên mặt đồng hồ. ComplicationController.reloadComplications cập nhật widget trên mặt đồng hồ đã chọn.
watchOS 10 — bản cập nhật giao diện lớn nhất trong lịch sử nền tảng, được phát hành vào tháng 9 năm 2023. Hệ thống đã chuyển từ điều hướng phân cấp sang điều hướng theo nội dung: màn hình chính trở thành Smart Stack — một ngăn xếp widget thông minh thay thế dock ứng dụng.
Smart Stack là danh sách widget dọc hiển thị bên dưới mặt đồng hồ. Các widget được xếp hạng theo ngữ cảnh: buổi sáng hiển thị thời tiết và lịch, ban ngày — hoạt động và lời nhắc, buổi tối — thiền và chuẩn bị ngủ. Nhà phát triển có thể thêm widget tùy chỉnh thông qua WidgetKit cho watchOS, sử dụng cùng API như cho iOS 17.
Double Tap là cử chỉ chụm ngón trỏ và ngón cái, được nhận diện bởi gia tốc kế và con quay hồi chuyển mà không chạm vào màn hình. Trên Apple Watch Series 9 và Ultra 2, cử chỉ được xử lý ở cấp độ phần cứng thông qua Neural Engine. Nhà phát triển nhận sự kiện qua UIDoubleTapGestureRecognizer hoặc qua bổ từ SwiftUI .onTapGesture(count: 2). Cử chỉ không yêu cầu hiệu chỉnh và hoạt động ở mọi hướng tay.
watchOS 10 đã giới thiệu: SwiftUI Animation hỗ trợ hoạt ảnh Spring và Keyframe, MapKit để hiển thị bản đồ trên đồng hồ, VideoPlayer để phát video ngắn (tối đa 30 giây), VoiceOver cải thiện với cử chỉ và mô hình điều hướng mới NavigationStack thay thế NavigationView.
| API | Mục đích | Có từ |
|---|---|---|
| WidgetKit for watchOS | Widget cho Smart Stack | watchOS 10 |
| UIDoubleTapGesture | Cử chỉ Double Tap | watchOS 10 (S9+) |
| MapKit | Hiển thị bản đồ trên đồng hồ | watchOS 10 |
| NavigationStack | Mô hình điều hướng mới | watchOS 10 |
| SwiftUI Keyframe | Hoạt ảnh từng khung hình | watchOS 10 |
SwiftUI là framework chính để phát triển giao diện watchOS. Apple khuyến nghị SwiftUI cho tất cả các dự án mới bắt đầu từ watchOS 7. SwiftUI cho đồng hồ sử dụng các nguyên tắc tương tự như cho iOS, nhưng với các bổ từ và thành phần dành riêng cho watchOS.
SwiftUI cho watchOS bao gồm: TabView với kiểu trang để vuốt giữa các màn hình, DigitalCrownRotation để xử lý xoay núm vặn, SceneStorage để lưu trạng thái giữa các lần khởi chạy, WKNotificationScene cho thông báo tùy chỉnh và ComplicationDescriptor cho dữ liệu trên mặt đồng hồ.
import SwiftUI
import HealthKit
/// Ứng dụng watchOS theo dõi nhịp tim
@main
struct HeartMonitorApp: App {
var body: some Scene {
WindowGroup {
ContentView()
}
WKNotificationScene(
controller: NotificationController.self,
category: "heartAlert"
)
}
}
struct ContentView: View {
@State private var heartRate: Double = 0
private let healthStore = HKHealthStore()
var body: some View {
TabView {
HeartRateView(rate: heartRate)
.tabItem { Label("Nhịp tim", systemImage: "heart.fill") }
StepsView()
.tabItem { Label("Số bước", systemImage: "figure.walk") }
SettingsView()
.tabItem { Label("Cài đặt", systemImage: "gear") }
}
.tabViewStyle(.page)
.onAppear(perform: setupHealthKit)
}
private func setupHealthKit() {
guard HKHealthStore.isHealthDataAvailable() else { return }
let heartType = HKQuantityType(.heartRate)
healthStore.requestAuthorization(toShare: nil, read: [heartType]) { success, error in
guard success else { return }
startHeartRateQuery()
}
}
private func startHeartRateQuery() {
let heartType = HKQuantityType(.heartRate)
let query = HKObserverQuery(sampleType: heartType, predicate: nil) { _, _, error in
guard error == nil else { return }
fetchLatestHeartRate()
}
healthStore.execute(query)
}
private func fetchLatestHeartRate() {
let heartType = HKQuantityType(.heartRate)
let sort = NSSortDescriptor(key: HKSampleSortIdentifierStartDate, ascending: false)
let query = HKSampleQuery(sampleType: heartType, predicate: nil,
limit: 1, sortDescriptors: [sort]) { _, samples, _ in
guard let sample = samples?.first as? HKQuantitySample else { return }
let rate = sample.quantity.doubleValue(for: HKUnit(from: "count/min"))
DispatchQueue.main.async { heartRate = rate }
}
healthStore.execute(query)
}
}
struct HeartRateView: View {
let rate: Double
var body: some View {
VStack(spacing: 12) {
Image(systemName: "heart.fill")
.foregroundStyle(.red)
.font(.system(size: 48))
.symbolEffect(.pulse)
Text("\(Int(rate))")
.font(.system(.title, design: .rounded))
.contentTransition(.numericText())
.bold()
Text("bpm")
.font(.caption)
.foregroundStyle(.secondary)
}
}
}Ứng dụng HeartMonitorApp minh họa cấu trúc ứng dụng watchOS điển hình trong SwiftUI: TabView với kiểu trang để vuốt giữa các màn hình, tích hợp HealthKit để đọc nhịp tim theo thời gian thực, WKNotificationScene để xử lý thông báo. SymbolEffect với hoạt ảnh xung nhịp sử dụng tăng tốc phần cứng Neural Engine để tạo hoạt ảnh mượt mà mà không tốn CPU.
Digital Crown là bánh xe ở cạnh Apple Watch. SwiftUI cung cấp DigitalCrownRotation để gắn giá trị với vòng xoay núm vặn. Bổ từ chấp nhận một binding, phạm vi và bước. Cử chỉ: tap (chạm), longPress (nhấn giữ), swipe (vuốt) và pan (kéo) — tất cả đều là tiêu chuẩn cho SwiftUI và thích ứng với kích thước màn hình đồng hồ.
WatchKit là framework watchOS gốc sử dụng cách tiếp cận UIKit. Mặc dù Apple khuyến nghị SwiftUI, WatchKit vẫn phù hợp cho các dự án kế thừa và các tác vụ cụ thể: hoạt ảnh phức tạp trên WKInterfaceGroup và tích hợp SiriKit.
Một ứng dụng watchOS bao gồm hai mục tiêu: WatchKit Extension (logic và giao diện) và iOS Companion App (cài đặt và đồng bộ hóa). Bắt đầu từ Xcode 15, có thể tạo ứng dụng độc lập mà không cần bạn đồng hành iOS. Giao diện được mô tả trong Interface.storyboard (WatchKit) hoặc theo chương trình qua SwiftUI.
| Thành phần | WatchKit | SwiftUI |
|---|---|---|
| Màn hình | WKInterfaceController | View |
| Nút | WKInterfaceButton | Button |
| Bảng | WKInterfaceTable | List |
| Nhóm | WKInterfaceGroup | VStack / HStack |
| Hình ảnh | WKInterfaceImage | Image / AsyncImage |
| Nhãn | WKInterfaceLabel | Text |
| Bản đồ | WKInterfaceMap | Map (watchOS 10+) |
| Complication | CLKComplicationDataSource | ComplicationDescriptor |
Complication là một widget hiển thị dữ liệu trên mặt Apple Watch. Nhà phát triển triển khai giao thức CLKComplicationDataSource, cung cấp các mẫu cho các loại mặt đồng hồ khác nhau (circular, rectangular, modular, extraLarge). watchOS 10 hỗ trợ ComplicationDescriptor — API đơn giản hóa cho SwiftUI. Dữ liệu được cập nhật qua tác vụ nền với chu kỳ lên đến 30 phút.
Watch Connectivity là framework để trao đổi dữ liệu giữa Apple Watch và iPhone qua Bluetooth hoặc Wi-Fi. Đây là phương thức giao tiếp duy nhất giữa các thiết bị đã ghép đôi. WCSession là lớp trung tâm quản lý phiên. Ứng dụng iOS và phần mở rộng watchOS phải triển khai WCSessionDelegate.
Watch Connectivity cung cấp bốn phương thức truyền dữ liệu: sendMessage — gửi ngay lập tức có xác nhận (chỉ hoạt động khi cả hai ứng dụng đang hoạt động), transferUserInfo — phân phối nền một từ điển dữ liệu, transferFile — truyền tệp với siêu dữ liệu, updateApplicationContext — đồng bộ hóa trạng thái chia sẻ. Tất cả các phương thức đều đảm bảo phân phối khi kết nối được khôi phục.
import WatchConnectivity
/// Trình quản lý đồng bộ giữa iPhone và Apple Watch
final class ConnectivityManager: NSObject, WCSessionDelegate {
static let shared = ConnectivityManager()
private let session = WCSession.default
override private init() {
super.init()
session.delegate = self
session.activate()
}
// MARK: — Gửi dữ liệu từ iPhone đến đồng hồ
func sendWorkoutData(_ data: [String: Any]) {
guard session.isReachable else {
// Nếu đồng hồ không khả dụng — lưu vào ngữ cảnh
try? session.updateApplicationContext(data)
return
}
session.sendMessage(data, replyHandler: nil) { error in
print("Lỗi gửi: \(error.localizedDescription)")
}
}
// MARK: — Nhận dữ liệu trên đồng hồ
func session(_ session: WCSession,
didReceiveMessage message: [String: Any]) {
DispatchQueue.main.async {
NotificationCenter.default.post(
name: NSNotification.Name("dataReceived"),
object: message
)
}
}
func session(_ session: WCSession,
activationDidCompleteWith activationState: WCSessionActivationState,
error: Error?) {
print("WCSession đã kích hoạt: \(activationState.rawValue)")
}
// Không yêu cầu trên watchOS nhưng bắt buộc cho giao thức
func sessionDidBecomeInactive(_ session: WCSession) {}
func sessionDidDeactivate(_ session: WCSession) {
session.activate()
}
}ConnectivityManager triển khai mẫu singleton để làm việc với WCSession. sendWorkoutData kiểm tra isReachable: nếu đồng hồ đang hoạt động, dữ liệu được gửi ngay lập tức qua sendMessage; nếu không — được lưu vào applicationContext để phân phối hoãn lại. onReceiveMessage ở phía nhận xử lý các tin nhắn đến và thông báo cho ứng dụng qua NotificationCenter.
transferFile cho phép truyền lượng lớn dữ liệu: hình ảnh, tệp âm thanh, kho lưu trữ. Kích thước tệp tối đa là 100 MB. Các tệp được lưu trong thư mục Inbox trên thiết bị nhận. transferUserInfo phù hợp với dữ liệu JSON lên đến 100 KB. Tất cả các phương thức đều hoạt động trong nền: nếu thiết bị không khả dụng, quá trình truyền sẽ được xếp hàng đợi và tự động tiếp tục khi kết nối được khôi phục.
Xuất bản ứng dụng watchOS tuân theo các quy tắc tương tự như iOS: yêu cầu đăng ký Apple Developer Program ($99/năm) và vượt qua kiểm duyệt App Review. Ứng dụng được tải lên App Store Connect như một phần của ứng dụng iOS hoặc như một ứng dụng độc lập.
Ứng dụng watchOS có thể được phân phối theo hai cách: như một phần mở rộng tích hợp của ứng dụng iOS (gói ứng dụng iOS chứa .app watchOS) hoặc như một ứng dụng độc lập (tải xuống và chạy không cần iPhone). Đối với chế độ độc lập, yêu cầu WKRunsIndependently = YES trong Info.plist. Kích thước ứng dụng watchOS bị giới hạn ở 50 MB cho tải xuống qua mạng di động.
Các yêu cầu đặc biệt cho watchOS: ứng dụng phải hoạt động chính xác khi không có iPhone đang hoạt động (nếu được khai báo là độc lập), giao diện phải đọc được mà không cần phóng to, tất cả các yếu tố tương tác phải có kích thước tối thiểu 44 điểm. Các ứng dụng sao chép chức năng có sẵn (ví dụ: máy đo nhịp tim không có giá trị gia tăng) đều bị cấm.
| Yêu cầu | Mô tả |
|---|---|
| Kích thước ứng dụng | Tối đa 50 MB cho tải xuống di động, tối đa 4 GB qua Wi-Fi |
| Chế độ độc lập | WKRunsIndependently = YES trong Info.plist |
| Mục tiêu chạm | Tối thiểu 44 pt cho tất cả các yếu tố tương tác |
| Bảo mật | Dữ liệu HealthKit không thể gửi đến máy chủ mà không có sự đồng ý |
| Hiệu suất | Khởi chạy ứng dụng không quá 5 giây |
Câu hỏi thường gặp
Ngôn ngữ chính là Swift với framework SwiftUI. WatchKit trên UIKit cũng được hỗ trợ, nhưng Apple khuyến nghị SwiftUI cho tất cả các dự án watchOS mới. Objective-C chỉ được sử dụng trong các ứng dụng kế thừa phát hành trước năm 2019. Kể từ watchOS 7, tất cả các ví dụ của Apple đều sử dụng độc quyền SwiftUI.
Bắt đầu từ watchOS 6, Apple Watch có thể cài đặt ứng dụng trực tiếp từ App Store mà không cần iPhone. Tuy nhiên, nhiều chức năng — đồng bộ dữ liệu, thông báo đẩy, định vị — yêu cầu ghép đôi với iPhone. Các ứng dụng hoàn toàn độc lập có thể thực hiện với watchOS 9 và WKRunsIndependently trong cài đặt build.
Thời lượng pin điển hình của Apple Watch Series 9 lên đến 18 giờ ở chế độ hỗn hợp. Khi sử dụng tích cực GPS và máy đo nhịp tim — 5-7 giờ. watchOS 10 tối ưu hóa mức tiêu thụ điện năng thông qua Smart Stack và BGTaskScheduler, giảm hoạt động nền của ứng dụng lên đến 4 lần so với watchOS 9.
Framework Watch Connectivity cung cấp bốn phương thức: sendMessage (truyền ngay lập tức), transferUserInfo (nền), transferFile (tệp lên đến 100 MB) và updateApplicationContext (đồng bộ trạng thái). Tất cả các phương thức đều hoạt động qua Bluetooth hoặc Wi-Fi với hàng đợi tự động khi mất kết nối.
Apple Watch Series 9 và Ultra 2 bao gồm: gia tốc kế, con quay hồi chuyển, máy đo nhịp tim quang học và điện, SpO2 (bão hòa oxy), cảm biến nhiệt độ cổ tay, phong vũ biểu, la bàn, GPS L1+L5 và micrô. Truy cập cảm biến thông qua HealthKit và Core Motion. Dữ liệu nhịp tim và SpO2 yêu cầu sự cho phép rõ ràng từ người dùng.
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