WatchKit هو إطار من Apple لإنشاء التطبيقات على Apple Watch، تم الإعلان عنه في 2014 مع watchOS 1. يوفر مجموعة من عناصر واجهة WKInterface — الأزرار، التسميات، الجداول، الخرائط — وآليات التنقل بين الشاشات. على الرغم من أن التطوير الحديث لـ watchOS ينتقل بشكل متزايد إلى SwiftUI، إلا أن WatchKit يظل مهماً لدعم التطبيقات الحالية والسيناريوهات التي تتطلب تحكماً كاملاً في الواجهة. وفقاً لـ Apple Developer Documentation, 2026، لا يزال WatchKit يُستخدم في 35% من تطبيقات كتالوج watchOS App Store، بما في ذلك تطبيقات اللياقة البدنية والملاحة والأدوات المساعدة للوصول السريع إلى البيانات.
الخلاصة
WatchKit هو إطار من Apple يوفر API لإنشاء التطبيقات على Apple Watch. بدءاً من watchOS 2 (2015)، تعمل تطبيقات WatchKit مباشرة على الساعة وليس على iPhone، مما يسمح لها بمعالجة البيانات وعرض الواجهة دون اتصال دائم بالهاتف. قبل ذلك، في watchOS 1، كانت جميع التطبيقات تعمل على iPhone وكانت الساعة مجرد شاشة عرض عن بُعد، مما تسبب في تأخيرات كبيرة في واجهة المستخدم.
الهندسة المعمارية الحديثة لـ WatchKit تتضمن مكونين: WatchKit App (Storyboard + الموارد على الساعة) و WatchKit Extension (الكود الذي يعمل على الساعة). يقوم المستخدم بتثبيت كلا المكونين عبر App Store عند تثبيت تطبيق iOS الرئيسي. يتكامل WatchKit مع وظائف النظام: الإشعارات (عبر UNUserNotificationCenter)، والتعقيدات (البيانات على وجه الساعة)، و Workout API، و HealthKit.
وفقاً لـ Counterpoint Research (2025)، تستحوذ Apple Watch على 52% من سوق الساعات الذكية العالمية، ويقوم المستخدم العادي بتثبيت 6–8 تطبيقات تابعة لجهات خارجية تستخدم WatchKit أو SwiftUI. الفئات الأكثر شعبية هي اللياقة البدنية (56%)، الصحة (22%)، الملاحة (9%) والأدوات المساعدة (8%).
SwiftUI هي الطريقة الموصى بها من Apple لإنشاء واجهات watchOS بدءاً من watchOS 6. يوفر SwiftUI بناء جملة تصريحياً وتكيفاً تلقائياً مع أحجام الشاشة. ومع ذلك، يظل WatchKit مهماً للمشاريع التي بدأت قبل ظهور SwiftUI، ولاستخدام عناصر محددة (WKInterfaceMap، WKInterfaceMovie)، وفي الحالات التي يتطلب فيها دعم إصدارات watchOS الأقدم من 6.
| المعيار | WatchKit | SwiftUI |
|---|---|---|
| توصية Apple | قديم | حالي |
| الحد الأدنى watchOS | watchOS 1 | watchOS 6 |
| حجم الكود | أكثر | أقل |
| تكامل التعقيدات | مباشر عبر الفئات | عبر WidgetKit |
| WKInterfaceMap | نعم | Map (MapKit) |
WKInterfaceController هو الفئة الأساسية لإدارة الشاشات في WatchKit. يدير دورة الحياة: التهيئة (awake(withContext:))، الظهور (willActivate)، الاختفاء (didDeactivate) ونقل السياق بين المتحكمات. كل شاشة تطبيق يتم تمثيلها بفئة فرعية منفصلة من WKInterfaceController متصلة بـ Storyboard عبر Interface Builder. يمكن أن يكون التنقل هرمياً (push) أو مشروطاً (present).
يوفر WatchKit مجموعة من عناصر الواجهة بالبادئة WKInterface: WKInterfaceLabel (نص)، WKInterfaceButton (زر)، WKInterfaceTable (جدول)، WKInterfaceImage (صورة)، WKInterfaceMap (خريطة) و WKInterfaceGroup (حاوية بزوايا مدورة وخلفية). جميع العناصر تعمل بشكل غير متزامن — يتم وضع تغييرات واجهة المستخدم في قائمة انتظار ويطبقها النظام بين دورات العرض، مما يضمن 30 إطاراً في الثانية مستقراً على شاشة الساعة.
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 عبر Bluetooth أو 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 — بروتوكول يتيح تنفيذه للتطبيق توفير البيانات للتعقيدات. يقرر وجه الساعة نفسه المواضع المتاحة — دائرية، مستطيلة، زاوية أو معيارية.
يمكن للمطور تقديم تعقيدات لثلاث عائلات حجم: 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. يضيف المطور عناصر واجهة المستخدم عبر Interface Builder وينشئ IBOutlets للتفاعل من الكود. فيما يلي مثال كامل لمتحكم مع جدول بيانات تم استلامه من 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) ونظام تحديد المواقع (في طرازات Watch المزودة بـ GPS). يتم بدء التمارين عبر HKWorkoutSession من HealthKit، ويتم تحديث بيانات معدل ضربات القلب في الوقت الفعلي عبر HKSampleQuery.
الميزة الرئيسية لـ Workout API هي العمل في الخلفية. عندما يكون التمرين نشطاً، لا يوقف watchOS التطبيق عند خفض المعصم — تستمر أجهزة الاستشعار في جمع البيانات، ويمكن للتطبيق عرض معدل ضربات القلب والمسافة والوتيرة والمقاييس الأخرى. بعد انتهاء التمرين، تتم مزامنة البيانات مع تطبيق الصحة على iPhone عبر HealthKit، مما يوفر ملف لياقة بدنية موحداً للمستخدم.
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()
}
}
الأسئلة الشائعة
توصي Apple باستخدام SwiftUI لتطبيقات watchOS الجديدة. استخدم WatchKit فقط لدعم المشاريع القديمة أو إذا كنت بحاجة إلى وظائف محددة مثل WKInterfaceMap غير المتوفرة في SwiftUI.
WCSession يدعم النقل المؤجل عبر transferUserInfo و transferFile. سيتم تسليم البيانات في المرة التالية التي يتم فيها إنشاء اتصال بين الساعة والهاتف، مما يضمن التسليم حتى مع فقدان الاتصال المؤقت.
التطبيقات المكتوبة بـ WatchKit متوافقة مع Apple Watch Series 0 والإصدارات الأحدث (watchOS 1+). ومع ذلك، بعض الميزات (GPS، مراقب معدل ضربات القلب، Dynamic Island) متوفرة فقط في موديلات محددة.
نعم، يمكنك الجمع بين SwiftUI و WatchKit في تطبيق واحد. استخدم WKHostingController لتضمين مشاهد SwiftUI في WKInterfaceController، أو قم بدمج WKInterfaceObjects عبر UIViewRepresentable.
قم بتشغيل كلا التطبيقين (iOS + watchOS) من Xcode على الأجهزة المتصلة. استخدم وحدة تحكم التصحيح لمراقبة رسائل WCSessionDelegate. تأكد من أن كلا الجهازين ضمن نطاق Bluetooth (حتى 10 أمتار).
الملخص
سنقوم بتطوير تطبيق جوال جاهز
تقدم IT Sectr تطبيقات iOS وAndroid للشركات الناشئة والشركات منذ عام 2017. سوف نقدم لك النصح ونقترح أفضل حل.