WatchKit — فریمورک اپل برای ایجاد برنامههای کاربردی روی Apple Watch است که در سال ۲۰۱۴ همراه با watchOS 1 معرفی شد. مجموعهای از عناصر رابط WKInterface — دکمهها، برچسبها، جدولها، نقشهها — و مکانیسمهای ناوبری بین صفحهها را فراهم میکند. با وجود اینکه توسعه مدرن watchOS به طور فزایندهای به SwiftUI منتقل میشود، WatchKit برای پشتیبانی از برنامههای موجود و سناریوهایی که نیاز به کنترل کامل بر رابط دارند، مهم باقی میماند. طبق Apple Developer Documentation, 2026، WatchKit همچنان در ۳۵٪ از برنامههای کاتالوگ watchOS App Store از جمله برنامههای تناسب اندام، ناوبری و ابزارهای دسترسی سریع به دادهها استفاده میشود.
نکات اصلی
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 نصب میکند. محبوبترین دستهبندیها تناسب اندام (۵۶٪)، سلامت (۲۲٪)، ناوبری (۹٪) و ابزارها (۸٪) هستند.
SwiftUI — روش توصیه شده اپل برای ایجاد رابطهای watchOS از watchOS 6 به بعد. SwiftUI نحو اعلانی و سازگاری خودکار با اندازههای صفحه را فراهم میکند. با این حال WatchKit برای پروژههایی که قبل از ظهور SwiftUI شروع شدهاند، برای استفاده از عناصر خاص (WKInterfaceMap, WKInterfaceMovie) و در مواردی که نیاز به پشتیبانی از نسخههای watchOS پایینتر از ۶ است، همچنان مرتبط باقی میماند.
| معیار | WatchKit | SwiftUI |
|---|---|---|
| توصیه اپل | Legacy | Current |
| حداقل watchOS | watchOS 1 | watchOS 6 |
| حجم کد | بیشتر | کمتر |
| یکپارچگی Compose | مستقیم از طریق کلاسها | از طریق WidgetKit |
| WKInterfaceMap | بله | Map (MapKit) |
WKInterfaceController — کلاس پایه برای مدیریت صفحه در WatchKit. مسئول چرخه حیات است: مقداردهی اولیه (awake(withContext:)), ظاهر شدن (willActivate), ناپدید شدن (didDeactivate) و انتقال متن نوشته بین کنترلرها. هر صفحه برنامه توسط یک زیرکلاس جداگانه WKInterfaceController که از طریق Interface Builder به Storyboard متصل است، نمایش داده میشود. ناوبری میتواند سلسلهمراتبی (push) یا مودال (present) باشد.
WatchKit مجموعهای از عناصر رابط با پیشوند WKInterface فراهم میکند: WKInterfaceLabel (متن), WKInterfaceButton (دکمه), WKInterfaceTable (جدول), WKInterfaceImage (تصویر), WKInterfaceMap (نقشه) و WKInterfaceGroup (ظرف با گوشههای گرد و پسزمینه). همه عناصر به صورت ناهمگام کار میکنند — تغییرات UI در صف قرار میگیرند و توسط سیستم بین چرخههای رندر اعمال میشوند که ۳۰ فریم بر ثانیه پایدار را روی صفحه ساعت تضمین میکند.
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 — کلاس مرکزی برای ارتباط دوطرفه بین Apple Watch و iPhone از طریق بلوتوث یا Wi-Fi. جلسه امکان انتقال دیکشنریهای کوچک داده (updateApplicationContext), ارسال پیام با پاسخ فوری (sendMessage), انتقال فایلها (transferFile) و همگامسازی اشیاء پیچیده (transferUserInfo) را فراهم میکند. WCSession به صورت ناهمگام کار میکند و به طور خودکار کانال ارتباطی بهینه را انتخاب میکند.
برای استفاده از WCSession باید جلسه را روی هر دو دستگاه فعال کنید. برنامه Watch یک WCSession در متد willActivate() ایجاد میکند و برنامه iOS در AppDelegate یا SceneDelegate. پس از فعال شدن جلسه، دستگاهها به طور خودکار متن نوشته را در صورت امکان همگامسازی میکنند. مهم است که WCSessionDelegate برای دریافت دادههای ورودی و پیگیری وضعیت اتصال پردازش شود.
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 — عناصر داده کوچکی هستند که روی صفحه Apple Watch نمایش داده میشوند و دسترسی سریع به اطلاعات را بدون باز کردن برنامه فراهم میکنند. WatchKit CLKComplicationDataSource — پروتکلی که پیادهسازی آن به برنامه اجازه میدهد دادههایی را برای کامپلیکیشنها ارائه دهد. صفحه ساعت خود تصمیم میگیرد که چه موقعیتهایی در دسترس هستند — دایرهای (circular), مستطیلی (rectangular), گوشهای (corner) یا مدولار (modular).
توسعهدهنده میتواند کامپلیکیشنهایی را برای سه اندازه خانواده ارائه دهد: CLKComplicationFamily — circularSmall, extraLarge, graphicCircular, graphicRectangular, graphicCorner, graphicBezel, modularSmall, modularLarge و utilitarianSmall/Large. هر خانواده اندازه و قالب نمایش خاص خود را دارد. برنامه میتواند از چندین خانواده پشتیبانی کند، اما حداقل دو خانواده — گرافیکی و مدولار — توصیه میشود.
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 با افزودن WatchKit App Target در Xcode شروع میشود. Xcode یک Interface.storyboard با کنترلر اولیه ایجاد میکند و آن را به طور خودکار به کلاس InterfaceController متصل میکند. توسعهدهنده عناصر UI را از طریق Interface Builder اضافه میکند و برای تعامل از کد، IBOutlet ایجاد میکند. در زیر — یک مثال کامل از کنترلر با جدول دادههای دریافت شده از iPhone از طریق WCSession.
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 — مجموعهای از کلاسهای WatchKit برای ایجاد برنامههای تناسب اندام که میتوانند تمرینات را در پسزمینه روی Apple Watch اجرا کنند. API دسترسی به سنسورها را فراهم میکند: شتابسنج، ژیروسکوپ، ضربانسنج (از طریق HKHealthStore) و GPS (در مدلهای Watch با GPS). تمرینات از طریق HKWorkoutSession از HealthKit راهاندازی میشوند و دادههای ضربان قلب در زمان واقعی از طریق HKSampleQuery بهروز میشوند.
مزیت کلیدی Workout API امکان کار در پسزمینه است. وقتی تمرین فعال است، watchOS برنامه را هنگام پایین آوردن دست متوقف نمیکند — سنسورها به جمعآوری دادهها ادامه میدهند و برنامه میتواند ضربان قلب، مسافت، سرعت و سایر معیارها را نمایش دهد. پس از اتمام تمرین، دادهها از طریق HealthKit با Health App در iPhone همگامسازی میشوند که یک نمایه تناسب اندام یکپارچه برای کاربر فراهم میکند.
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()
}
}
سوالات متداول
اپل SwiftUI را برای برنامههای جدید watchOS توصیه میکند. WatchKit را فقط برای پشتیبانی از پروژههای legacy یا زمانی که عملکرد خاصی مانند WKInterfaceMap که در SwiftUI در دسترس نیست، استفاده کنید.
WCSession از انتقال با تأخیر از طریق transferUserInfo و transferFile پشتیبانی میکند. دادهها در برقراری اتصال بعدی بین ساعت و تلفن تحویل داده میشوند که تحویل را حتی در صورت قطع موقت ارتباط تضمین میکند.
برنامههای نوشته شده با WatchKit با Apple Watch Series 0 و جدیدتر (watchOS 1+) سازگار هستند. با این حال برخی عملکردها (GPS, ضربانسنج, جزیره دینامیک) فقط در مدلهای خاصی در دسترس هستند.
بله, میتوان SwiftUI و WatchKit را در یک برنامه ترکیب کرد. از WKHostingController برای جاسازی SwiftUI View در WKInterfaceController یا برعکس — WKInterfaceObject را از طریق UIViewRepresentable یکپارچه کنید.
هر دو برنامه (iOS + watchOS) را از Xcode روی دستگاههای متصل اجرا کنید. از کنسول اشکالزدایی برای مشاهده پیامهای WCSessionDelegate استفاده کنید. مطمئن شوید هر دو دستگاه در محدوده بلوتوث (تا ۱۰ متر) هستند.
خلاصه
ما یک اپلیکیشن موبایل به صورت کلید در دست توسعه خواهیم داد
IT Sectr از سال 2017 برنامههای iOS و Android را برای استارتاپها و کسبوکارها ایجاد میکند. ما به شما مشاوره میدهیم و بهترین راهحل را پیشنهاد خواهیم کرد.
همچنین بخوانید