WatchKit — چیست، فریم‌ورک Apple Watch و watchOS

نویسنده: IT Sectr منتشر شده: 2026-06-16 زمان مطالعه: 8 دقیقه

WatchKit — فریم‌ورک اپل برای ایجاد برنامه‌های کاربردی روی Apple Watch است که در سال ۲۰۱۴ همراه با watchOS 1 معرفی شد. مجموعه‌ای از عناصر رابط WKInterface — دکمه‌ها، برچسب‌ها، جدول‌ها، نقشه‌ها — و مکانیسم‌های ناوبری بین صفحه‌ها را فراهم می‌کند. با وجود اینکه توسعه مدرن watchOS به طور فزاینده‌ای به SwiftUI منتقل می‌شود، WatchKit برای پشتیبانی از برنامه‌های موجود و سناریوهایی که نیاز به کنترل کامل بر رابط دارند، مهم باقی می‌ماند. طبق Apple Developer Documentation, 2026، WatchKit همچنان در ۳۵٪ از برنامه‌های کاتالوگ watchOS App Store از جمله برنامه‌های تناسب اندام، ناوبری و ابزارهای دسترسی سریع به داده‌ها استفاده می‌شود.

نکات اصلی

  • WatchKit — فریم‌ورک اپل برای ایجاد برنامه‌های Apple Watch با استفاده از کامپوننت‌های UI WKInterface و ناوبری مبتنی بر WKInterfaceController.
  • WKInterfaceController — کلاس اصلی صفحه برنامه، مشابه UIViewController در iOS، با مدیریت چرخه حیات و سلسله‌مراتب.
  • WCSession — مکانیسم ارتباط بین Apple Watch و iPhone که امکان انتقال داده‌ها، فایل‌ها و متن نوشته را از طریق بلوتوث فراهم می‌کند.
  • WKInterfaceDevice — اطلاعات دستگاه: اندازه صفحه، مدل، نسخه watchOS و قابلیت‌های اجزای سخت‌افزاری.
  • Complications Controller — API برای نمایش داده‌ها روی صفحه ساعت که از طریق CLKComplicationDataSource فعال می‌شود.

WatchKit چیست و چگونه کار می‌کند؟

WatchKit — فریم‌ورک اپل که API برای ایجاد برنامه‌های Apple Watch فراهم می‌کند. از watchOS 2 (۲۰۱۵) به بعد، برنامه‌های WatchKit مستقیماً روی ساعت اجرا می‌شوند، نه روی iPhone، که به آنها امکان پردازش داده‌ها و نمایش رابط بدون اتصال دائمی به تلفن را می‌دهد. قبل از آن در watchOS 1 همه برنامه‌ها روی iPhone اجرا می‌شدند و ساعت فقط یک کنترل‌ریموت نمایش از راه دور بود که تأخیر قابل توجهی در UI ایجاد می‌کرد.

معماری مدرن WatchKit شامل دو جزء است: WatchKit App (Storyboard + منابع روی ساعت) و WatchKit Extension (کد اجرا شده روی ساعت). کاربر هر دو جزء را از طریق App Store هنگام نصب برنامه iOS والد نصب می‌کند. WatchKit یکپارچگی با عملکردهای سیستمی را فراهم می‌کند: اعلان‌ها (از طریق UNUserNotificationCenter)، کامپلیکیشن‌ها (داده‌ها روی صفحه ساعت)، Workout API و HealthKit.

طبق Counterpoint Research (۲۰۲۵)، Apple Watch ۵۲٪ از بازار جهانی ساعت‌های هوشمند را در اختیار دارد و کاربر متوسط ۶–۸ برنامه شخص ثالث را با استفاده از WatchKit یا SwiftUI نصب می‌کند. محبوب‌ترین دسته‌بندی‌ها تناسب اندام (۵۶٪)، سلامت (۲۲٪)، ناوبری (۹٪) و ابزارها (۸٪) هستند.

WatchKit در مقابل SwiftUI برای watchOS

SwiftUI — روش توصیه شده اپل برای ایجاد رابط‌های watchOS از watchOS 6 به بعد. SwiftUI نحو اعلانی و سازگاری خودکار با اندازه‌های صفحه را فراهم می‌کند. با این حال WatchKit برای پروژه‌هایی که قبل از ظهور SwiftUI شروع شده‌اند، برای استفاده از عناصر خاص (WKInterfaceMap, WKInterfaceMovie) و در مواردی که نیاز به پشتیبانی از نسخه‌های watchOS پایین‌تر از ۶ است، همچنان مرتبط باقی می‌ماند.

معیارWatchKitSwiftUI
توصیه اپلLegacyCurrent
حداقل watchOSwatchOS 1watchOS 6
حجم کدبیشترکمتر
یکپارچگی Composeمستقیم از طریق کلاس‌هااز طریق WidgetKit
WKInterfaceMapبلهMap (MapKit)

رابط WatchKit: WKInterfaceController و عناصر

WKInterfaceController — کلاس پایه برای مدیریت صفحه در WatchKit. مسئول چرخه حیات است: مقداردهی اولیه (awake(withContext:)), ظاهر شدن (willActivate), ناپدید شدن (didDeactivate) و انتقال متن نوشته بین کنترلرها. هر صفحه برنامه توسط یک زیرکلاس جداگانه WKInterfaceController که از طریق Interface Builder به Storyboard متصل است، نمایش داده می‌شود. ناوبری می‌تواند سلسله‌مراتبی (push) یا مودال (present) باشد.

WatchKit مجموعه‌ای از عناصر رابط با پیشوند WKInterface فراهم می‌کند: WKInterfaceLabel (متن), WKInterfaceButton (دکمه), WKInterfaceTable (جدول), WKInterfaceImage (تصویر), WKInterfaceMap (نقشه) و WKInterfaceGroup (ظرف با گوشه‌های گرد و پس‌زمینه). همه عناصر به صورت ناهمگام کار می‌کنند — تغییرات UI در صف قرار می‌گیرند و توسط سیستم بین چرخه‌های رندر اعمال می‌شوند که ۳۰ فریم بر ثانیه پایدار را روی صفحه ساعت تضمین می‌کند.

WKInterfaceController پایه

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("سلام، Watch!")
    }
    
    override func willActivate() {
        super.willActivate()
        actionButton.setTitle("شروع")
    }
    
    @IBAction func didTapButton() {
        pushController(withName: "DetailController", context: nil)
    }
}

WCSession: ارتباط بین Watch و iPhone

WCSession — کلاس مرکزی برای ارتباط دوطرفه بین Apple Watch و iPhone از طریق بلوتوث یا Wi-Fi. جلسه امکان انتقال دیکشنری‌های کوچک داده (updateApplicationContext), ارسال پیام با پاسخ فوری (sendMessage), انتقال فایل‌ها (transferFile) و همگام‌سازی اشیاء پیچیده (transferUserInfo) را فراهم می‌کند. WCSession به صورت ناهمگام کار می‌کند و به طور خودکار کانال ارتباطی بهینه را انتخاب می‌کند.

برای استفاده از WCSession باید جلسه را روی هر دو دستگاه فعال کنید. برنامه Watch یک WCSession در متد willActivate() ایجاد می‌کند و برنامه iOS در AppDelegate یا SceneDelegate. پس از فعال شدن جلسه، دستگاه‌ها به طور خودکار متن نوشته را در صورت امکان همگام‌سازی می‌کنند. مهم است که WCSessionDelegate برای دریافت داده‌های ورودی و پیگیری وضعیت اتصال پردازش شود.

مثال WCSession در سمت 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: داده‌ها روی صفحه ساعت

Complications — عناصر داده کوچکی هستند که روی صفحه Apple Watch نمایش داده می‌شوند و دسترسی سریع به اطلاعات را بدون باز کردن برنامه فراهم می‌کنند. WatchKit CLKComplicationDataSource — پروتکلی که پیاده‌سازی آن به برنامه اجازه می‌دهد داده‌هایی را برای کامپلیکیشن‌ها ارائه دهد. صفحه ساعت خود تصمیم می‌گیرد که چه موقعیت‌هایی در دسترس هستند — دایره‌ای (circular), مستطیلی (rectangular), گوشه‌ای (corner) یا مدولار (modular).

توسعه‌دهنده می‌تواند کامپلیکیشن‌هایی را برای سه اندازه خانواده ارائه دهد: CLKComplicationFamily — circularSmall, extraLarge, graphicCircular, graphicRectangular, graphicCorner, graphicBezel, modularSmall, modularLarge و utilitarianSmall/Large. هر خانواده اندازه و قالب نمایش خاص خود را دارد. برنامه می‌تواند از چندین خانواده پشتیبانی کند، اما حداقل دو خانواده — گرافیکی و مدولار — توصیه می‌شود.

مثال 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)
    }
}

مثال برنامه WatchKit در Swift

ایجاد برنامه WatchKit با افزودن WatchKit App Target در Xcode شروع می‌شود. Xcode یک Interface.storyboard با کنترلر اولیه ایجاد می‌کند و آن را به طور خودکار به کلاس InterfaceController متصل می‌کند. توسعه‌دهنده عناصر UI را از طریق Interface Builder اضافه می‌کند و برای تعامل از کد، IBOutlet ایجاد می‌کند. در زیر — یک مثال کامل از کنترلر با جدول داده‌های دریافت شده از iPhone از طریق 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 برای برنامه‌های تناسب اندام

Workout API — مجموعه‌ای از کلاس‌های WatchKit برای ایجاد برنامه‌های تناسب اندام که می‌توانند تمرینات را در پس‌زمینه روی Apple Watch اجرا کنند. API دسترسی به سنسورها را فراهم می‌کند: شتاب‌سنج، ژیروسکوپ، ضربان‌سنج (از طریق HKHealthStore) و GPS (در مدل‌های Watch با GPS). تمرینات از طریق HKWorkoutSession از HealthKit راه‌اندازی می‌شوند و داده‌های ضربان قلب در زمان واقعی از طریق HKSampleQuery به‌روز می‌شوند.

مزیت کلیدی Workout API امکان کار در پس‌زمینه است. وقتی تمرین فعال است، watchOS برنامه را هنگام پایین آوردن دست متوقف نمی‌کند — سنسورها به جمع‌آوری داده‌ها ادامه می‌دهند و برنامه می‌تواند ضربان قلب، مسافت، سرعت و سایر معیارها را نمایش دهد. پس از اتمام تمرین، داده‌ها از طریق HealthKit با Health App در iPhone همگام‌سازی می‌شوند که یک نمایه تناسب اندام یکپارچه برای کاربر فراهم می‌کند.

شروع تمرین با سنسورها

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()
    }
}

سوالات متداول

آیا استفاده از WatchKit در پروژه جدید ارزش دارد؟

اپل SwiftUI را برای برنامه‌های جدید watchOS توصیه می‌کند. WatchKit را فقط برای پشتیبانی از پروژه‌های legacy یا زمانی که عملکرد خاصی مانند WKInterfaceMap که در SwiftUI در دسترس نیست، استفاده کنید.

چگونه داده‌ها را از Watch به iPhone بدون اتصال منتقل کنیم؟

WCSession از انتقال با تأخیر از طریق transferUserInfo و transferFile پشتیبانی می‌کند. داده‌ها در برقراری اتصال بعدی بین ساعت و تلفن تحویل داده می‌شوند که تحویل را حتی در صورت قطع موقت ارتباط تضمین می‌کند.

آیا برنامه‌های WatchKit روی همه مدل‌های Apple Watch کار می‌کنند؟

برنامه‌های نوشته شده با WatchKit با Apple Watch Series 0 و جدیدتر (watchOS 1+) سازگار هستند. با این حال برخی عملکردها (GPS, ضربان‌سنج, جزیره دینامیک) فقط در مدل‌های خاصی در دسترس هستند.

آیا می‌توان از SwiftUI و WatchKit در یک برنامه استفاده کرد؟

بله, می‌توان SwiftUI و WatchKit را در یک برنامه ترکیب کرد. از WKHostingController برای جاسازی SwiftUI View در WKInterfaceController یا برعکس — WKInterfaceObject را از طریق UIViewRepresentable یکپارچه کنید.

چگونه WCSession را روی دستگاه‌های واقعی اشکال‌زدایی کنیم؟

هر دو برنامه (iOS + watchOS) را از Xcode روی دستگاه‌های متصل اجرا کنید. از کنسول اشکال‌زدایی برای مشاهده پیام‌های WCSessionDelegate استفاده کنید. مطمئن شوید هر دو دستگاه در محدوده بلوتوث (تا ۱۰ متر) هستند.

خلاصه

  • WatchKit — فریم‌ورک اپل برای ایجاد برنامه‌های Apple Watch با استفاده از کامپوننت‌های UI WKInterface و کنترلرهای WKInterfaceController.
  • WCSession — مکانیسم مرکزی ارتباط دوطرفه بین Watch و iPhone از طریق Bluetooth/Wi-Fi با پشتیبانی از پیام‌ها، فایل‌ها و متن نوشته.
  • Complications — داده‌ها روی صفحه Apple Watch از طریق CLKComplicationDataSource با پشتیبانی از ۹ خانواده نمایش.
  • Workout API — مجموعه کلاس‌ها برای برنامه‌های تناسب اندام با جمع‌آوری داده‌های ضربان قلب، GPS و شتاب‌سنج در پس‌زمینه از طریق HKWorkoutSession.
  • SwiftUI — رویکرد توصیه شده اپل برای پروژه‌های جدید، اما WatchKit برای برنامه‌های legacy و عملکرد خاص مرتبط باقی می‌ماند.
  • ترکیب WatchKit و SwiftUI در یک برنامه از طریق WKHostingController و UIViewRepresentable امکان‌پذیر است.

ما یک اپلیکیشن موبایل به صورت کلید در دست توسعه خواهیم داد

IT Sectr از سال 2017 برنامه‌های iOS و Android را برای استارتاپ‌ها و کسب‌وکارها ایجاد می‌کند. ما به شما مشاوره می‌دهیم و بهترین راه‌حل را پیشنهاد خواهیم کرد.

بحث درباره پروژه

همچنین بخوانید