WatchKit — nó là gì, framework Apple Watch và watchOS

Tác giả: IT Sectr Đã đăng: 2026-06-16 Thời gian đọc: 8 phút

WatchKit là một framework của Apple để tạo ứng dụng trên Apple Watch, được công bố vào năm 2014 cùng với watchOS 1. Nó cung cấp một bộ các phần tử giao diện WKInterface — nút, nhãn, bảng, bản đồ — và các cơ chế điều hướng giữa các màn hình. Mặc dù phát triển watchOS hiện đại ngày càng chuyển sang SwiftUI, WatchKit vẫn quan trọng để hỗ trợ các ứng dụng hiện có và các kịch bản yêu cầu kiểm soát hoàn toàn giao diện. Theo Apple Developer Documentation, 2026, WatchKit vẫn được sử dụng trong 35% ứng dụng trong danh mục watchOS App Store, bao gồm các ứng dụng thể dục, điều hướng và tiện ích truy cập dữ liệu nhanh.

Những điểm chính

  • WatchKit là một framework của Apple để tạo ứng dụng trên Apple Watch, sử dụng các thành phần giao diện WKInterface và điều hướng dựa trên WKInterfaceController.
  • WKInterfaceController là lớp màn hình chính của ứng dụng, tương tự như UIViewController trên iOS, với quản lý vòng đời và hệ thống phân cấp.
  • WCSession là cơ chế giao tiếp giữa Apple Watch và iPhone, cho phép truyền dữ liệu, tệp và ngữ cảnh qua Bluetooth.
  • WKInterfaceDevice cung cấp thông tin thiết bị: kích thước màn hình, model, phiên bản watchOS và khả năng của các thành phần phần cứng.
  • Complications Controller là API để hiển thị dữ liệu trên mặt đồng hồ, được kích hoạt qua CLKComplicationDataSource.

WatchKit là gì và nó hoạt động như thế nào?

WatchKit là một framework của Apple cung cấp API để tạo ứng dụng trên Apple Watch. Bắt đầu từ watchOS 2 (2015), các ứng dụng WatchKit chạy trực tiếp trên đồng hồ thay vì trên iPhone, cho phép chúng xử lý dữ liệu và hiển thị giao diện mà không cần kết nối liên tục với điện thoại. Trước đó, trong watchOS 1, tất cả ứng dụng đều chạy trên iPhone và đồng hồ chỉ là màn hình điều khiển từ xa, gây ra độ trễ đáng kể trong giao diện.

Kiến trúc WatchKit hiện đại bao gồm hai thành phần: WatchKit App (Storyboard + tài nguyên trên đồng hồ) và WatchKit Extension (mã chạy trên đồng hồ). Người dùng cài đặt cả hai thành phần qua App Store khi cài đặt ứng dụng iOS chính. WatchKit tích hợp với các chức năng hệ thống: thông báo (qua UNUserNotificationCenter), complications (dữ liệu trên mặt đồng hồ), Workout API và HealthKit.

Theo Counterpoint Research (2025), Apple Watch chiếm 52% thị trường đồng hồ thông minh toàn cầu và người dùng trung bình cài đặt 6–8 ứng dụng của bên thứ ba sử dụng WatchKit hoặc SwiftUI. Các danh mục phổ biến nhất là thể dục (56%), sức khỏe (22%), điều hướng (9%) và tiện ích (8%).

WatchKit vs SwiftUI cho watchOS

SwiftUI là cách Apple khuyến nghị để tạo giao diện cho watchOS bắt đầu từ watchOS 6. SwiftUI cung cấp cú pháp khai báo và tự động thích ứng với kích thước màn hình. Tuy nhiên, WatchKit vẫn phù hợp cho các dự án bắt đầu trước khi SwiftUI ra đời, để sử dụng các phần tử cụ thể (WKInterfaceMap, WKInterfaceMovie) và trong trường hợp cần hỗ trợ các phiên bản watchOS dưới 6.

Tiêu chíWatchKitSwiftUI
Khuyến nghị của AppleKế thừaHiện tại
watchOS tối thiểuwatchOS 1watchOS 6
Khối lượng mãNhiều hơnÍt hơn
Tích hợp ComplicationsTrực tiếp qua lớpQua WidgetKit
WKInterfaceMapBản đồ (MapKit)

Giao diện WatchKit: WKInterfaceController và các phần tử

WKInterfaceController là lớp cơ sở để quản lý màn hình trong WatchKit. Nó xử lý vòng đời: khởi tạo (awake(withContext:)), xuất hiện (willActivate), biến mất (didDeactivate) và truyền ngữ cảnh giữa các bộ điều khiển. Mỗi màn hình ứng dụng được đại diện bởi một lớp con WKInterfaceController riêng biệt được kết nối với Storyboard qua Interface Builder. Điều hướng có thể theo hệ thống phân cấp (push) hoặc phương thức (present).

WatchKit cung cấp một bộ các phần tử giao diện với tiền tố WKInterface: WKInterfaceLabel (văn bản), WKInterfaceButton (nút), WKInterfaceTable (bảng), WKInterfaceImage (hình ảnh), WKInterfaceMap (bản đồ) và WKInterfaceGroup (vùng chứa có góc bo tròn và nền). Tất cả các phần tử hoạt động không đồng bộ — các thay đổi giao diện được xếp hàng đợi và hệ thống áp dụng giữa các chu kỳ kết xuất, đảm bảo 30 FPS ổn định trên màn hình đồng hồ.

WKInterfaceController cơ bản

swift
class MainInterfaceController: WKInterfaceController {
    @IBOutlet weak var titleLabel: WKInterfaceLabel!
    @IBOutlet weak var actionButton: WKInterfaceButton!
    
    override func awake(with context: Any?) {
        super.awake(with: context)
        titleLabel.setText("Xin chào, Watch!")
    }
    
    override func willActivate() {
        super.willActivate()
        actionButton.setTitle("Bắt đầu")
    }
    
    @IBAction func didTapButton() {
        pushController(withName: "DetailController", context: nil)
    }
}

WCSession: giao tiếp giữa Watch và iPhone

WCSession là lớp trung tâm cho giao tiếp hai chiều giữa Apple Watch và iPhone qua Bluetooth hoặc Wi-Fi. Phiên cho phép truyền các từ điển dữ liệu nhỏ (updateApplicationContext), gửi tin nhắn với phản hồi ngay lập tức (sendMessage), truyền tệp (transferFile) và đồng bộ hóa các đối tượng phức tạp (transferUserInfo). WCSession hoạt động không đồng bộ và tự động chọn kênh giao tiếp tối ưu.

Để sử dụng WCSession, bạn cần kích hoạt phiên trên cả hai thiết bị. Ứng dụng Watch tạo WCSession trong phương thức willActivate(), trong khi ứng dụng iOS thực hiện điều này trong AppDelegate hoặc SceneDelegate. Sau khi kích hoạt, các thiết bị tự động đồng bộ hóa ngữ cảnh khi có thể. Điều quan trọng là xử lý WCSessionDelegate để nhận dữ liệu đến và theo dõi trạng thái kết nối.

Ví dụ WCSession ở phía Watch

swift
class SessionManager: NSObject, WCSessionDelegate {
    private let session = WCSession.default
    
    func activate() {
        session.delegate = self
        session.activate()
    }
    
    func sendDataToPhone(key: String, value: Any) {
        guard session.isReachable else { return }
        session.sendMessage([key: value],
            replyHandler: { response in
                print("Response: \(response)")
            },
            errorHandler: { error in
                print("Error: \(error.localizedDescription)")
            }
        )
    }
    
    func session(_ session: WCSession,
               didReceiveMessage message: [String: Any],
               replyHandler: @escaping ([String: Any]) -> Void) {
        handleIncomingData(message)
        replyHandler(["status": "ok"])
    }
}

Complications: dữ liệu trên mặt đồng hồ

Complications là các phần tử dữ liệu nhỏ hiển thị trên mặt Apple Watch, cung cấp truy cập nhanh đến thông tin mà không cần mở ứng dụng. WatchKit cung cấp CLKComplicationDataSource — một giao thức mà việc triển khai cho phép ứng dụng cung cấp dữ liệu cho complications. Mặt đồng hồ tự quyết định vị trí nào có sẵn — hình tròn, hình chữ nhật, góc hoặc mô-đun.

Nhà phát triển có thể cung cấp complications cho ba họ kích thước: CLKComplicationFamily — circularSmall, extraLarge, graphicCircular, graphicRectangular, graphicCorner, graphicBezel, modularSmall, modularLarge và utilitarianSmall/Large. Mỗi họ có kích thước và định dạng hiển thị riêng. Một ứng dụng có thể hỗ trợ nhiều họ, nhưng tối thiểu hai họ — đồ họa và mô-đun — được khuyến nghị.

Ví dụ CLKComplicationDataSource

swift
class ComplicationController: NSObject, CLKComplicationDataSource {
    func getCurrentTimelineEntry(
        for complication: CLKComplication,
        withHandler handler: @escaping (CLKComplicationTimelineEntry?) -> Void
    ) {
        let template = CLKComplicationTemplateModularSmallSimpleText()
        template.textProvider = CLKSimpleTextProvider(text: "96%")
        let entry = CLKComplicationTimelineEntry(
            date: Date(),
            complicationTemplate: template
        )
        handler(entry)
    }
}

Ví dụ ứng dụng WatchKit bằng Swift

Tạo một ứng dụng WatchKit bắt đầu bằng cách thêm WatchKit App Target trong Xcode. Xcode tạo Interface.storyboard với bộ điều khiển ban đầu và tự động liên kết nó với lớp InterfaceController. Nhà phát triển thêm các phần tử giao diện qua Interface Builder và tạo IBOutlets để tương tác từ mã. Dưới đây là ví dụ hoàn chỉnh về bộ điều khiển với bảng dữ liệu nhận được từ iPhone qua WCSession.

swift
class ItemRowController: NSObject {
    @IBOutlet weak var itemLabel: WKInterfaceLabel!
    
    func configure(with text: String) {
        itemLabel.setText(text)
    }
}

class ListController: WKInterfaceController {
    @IBOutlet weak var itemsTable: WKInterfaceTable!
    private var items: [String] = []
    
    override func awake(with context: Any?) {
        super.awake(with: context)
        items = context as? [String] ?? []
        
        itemsTable.setNumberOfRows(items.count,
            withRowType: "ItemRow")
        for i in 0..if let row = itemsTable
                .rowController(at: i) as? ItemRowController {
                row.configure(with: items[i])
            }
        }
    }
}

Workout API cho ứng dụng thể dục

Workout API là một tập hợp các lớp WatchKit để tạo ứng dụng thể dục có thể chạy bài tập trên Apple Watch trong nền. API cung cấp quyền truy cập vào các cảm biến: gia tốc kế, con quay hồi chuyển, máy đo nhịp tim (qua HKHealthStore) và GPS (trên các mẫu Watch có GPS). Các bài tập được bắt đầu qua HKWorkoutSession từ HealthKit và dữ liệu nhịp tim được cập nhật theo thời gian thực qua HKSampleQuery.

Lợi thế chính của Workout API là hoạt động nền. Khi bài tập đang hoạt động, watchOS không tạm dừng ứng dụng khi người dùng hạ cổ tay — các cảm biến tiếp tục thu thập dữ liệu và ứng dụng có thể hiển thị nhịp tim, khoảng cách, tốc độ và các chỉ số khác. Sau khi kết thúc bài tập, dữ liệu được đồng bộ hóa với ứng dụng Sức khỏe trên iPhone qua HealthKit, cung cấp hồ sơ thể dục thống nhất cho người dùng.

Bắt đầu bài tập với cảm biến

swift
class WorkoutManager: NSObject {
    private let healthStore = HKHealthStore()
    private var session: HKWorkoutSession!
    
    func startWorkout(activityType: HKWorkoutActivityType) {
        let config = HKWorkoutConfiguration()
        config.activityType = activityType
        config.locationType = .outdoor
        
        session = try! HKWorkoutSession(
            healthStore: healthStore,
            configuration: config
        )
        session.startActivity(with: Date())
    }
    
    func stopWorkout() {
        session.stopActivity(with: Date())
        session.end()
    }
}

Câu hỏi thường gặp

Tôi có nên sử dụng WatchKit trong dự án mới không?

Apple khuyến nghị SwiftUI cho các ứng dụng watchOS mới. Chỉ sử dụng WatchKit để hỗ trợ các dự án kế thừa hoặc nếu bạn cần chức năng cụ thể như WKInterfaceMap không có trong SwiftUI.

Làm thế nào để truyền dữ liệu từ Watch sang iPhone khi không có kết nối?

WCSession hỗ trợ truyền hoãn lại qua transferUserInfo và transferFile. Dữ liệu sẽ được gửi vào lần tiếp theo khi kết nối được thiết lập giữa đồng hồ và điện thoại, đảm bảo gửi ngay cả khi mất kết nối tạm thời.

Ứng dụng WatchKit có hoạt động trên tất cả các model Apple Watch không?

Các ứng dụng viết bằng WatchKit tương thích với Apple Watch Series 0 trở lên (watchOS 1+). Tuy nhiên, một số tính năng (GPS, máy đo nhịp tim, Dynamic Island) chỉ khả dụng trên các model cụ thể.

Tôi có thể sử dụng SwiftUI và WatchKit trong cùng một ứng dụng không?

, bạn có thể kết hợp SwiftUI và WatchKit trong một ứng dụng. Sử dụng WKHostingController để nhúng chế độ xem SwiftUI vào WKInterfaceController hoặc tích hợp WKInterfaceObjects qua UIViewRepresentable.

Làm thế nào để gỡ lỗi WCSession trên thiết bị thật?

Chạy cả hai ứng dụng (iOS + watchOS) từ Xcode trên các thiết bị đã kết nối. Sử dụng bảng điều khiển gỡ lỗi để theo dõi các thông báo WCSessionDelegate. Đảm bảo cả hai thiết bị nằm trong phạm vi Bluetooth (tối đa 10 mét).

Tóm tắt

  • WatchKit là framework của Apple để tạo ứng dụng trên Apple Watch, sử dụng các thành phần giao diện WKInterface và bộ điều khiển WKInterfaceController.
  • WCSession là cơ chế trung tâm cho giao tiếp hai chiều giữa Watch và iPhone qua Bluetooth/Wi-Fi với hỗ trợ tin nhắn, tệp và ngữ cảnh.
  • Complications là dữ liệu trên mặt Apple Watch qua CLKComplicationDataSource với hỗ trợ 9 họ hiển thị.
  • Workout API là tập hợp các lớp cho ứng dụng thể dục với thu thập nền dữ liệu nhịp tim, GPS và gia tốc kế qua HKWorkoutSession.
  • SwiftUI là cách tiếp cận được Apple khuyến nghị cho các dự án mới, nhưng WatchKit vẫn phù hợp cho các ứng dụng kế thừa và chức năng cụ thể.
  • Kết hợp WatchKit và SwiftUI trong một ứng dụng có thể thực hiện qua WKHostingController và UIViewRepresentable.

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.

Thảo luận dự án

Đọc thêm