watchOS هو نظام تشغيل Apple لساعة Apple Watch، الذي صدر لأول مرة في عام 2015 مع أول ساعات. يتم تطوير تطبيقات watchOS بلغة Swift باستخدام SwiftUI وWatchKit. الميزات: شاشة مستطيلة صغيرة، استهلاك محدود للبطارية يبلغ 0.3 واط·ساعة، وتكامل محكم مع iPhone عبر Bluetooth. وفقًا لـ Counterpoint Research، تستحوذ Apple Watch على أكثر من 30% من سوق الساعات الذكية العالمية.
الخلاصة
watchOS هو نظام تشغيل للساعات الذكية من Apple، يعتمد على نواة XNU من Darwin. صدر لأول مرة في 24 أبريل 2015 مع Apple Watch Series 0. تم بناء النظام على نفس بنية iOS، لكنه محسّن لشاشة صغيرة (من 1.5 إلى 1.9 بوصة)، وذاكرة محدودة (حتى 1 جيجابايت رام في Series 9)، واستهلاك طاقة ضئيل.
وفقًا لـ StatCounter (2026)، يحتل watchOS حوالي 55% من سوق أنظمة تشغيل الساعات الذكية، متقدمًا على Wear OS والأنظمة المملوكة للمصنعين الصينيين. تصدر Apple تحديثات رئيسية لـ watchOS سنويًا، مع دعم الساعات لمدة تصل إلى 5 سنوات من الإصدار.
الميزة الرئيسية لـ watchOS هي اعتماده على iPhone. تستخدم معظم التطبيقات Watch Connectivity لمزامنة البيانات. بدءًا من watchOS 6، يمكن للساعات تثبيت التطبيقات مباشرة من App Store، لكن الاستقلال التام عن iPhone مدعوم فقط مع watchOS 9.
لم يدعم الإصدار الأول Watch OS 1.0 التطبيقات الخارجية — فقط تطبيقات Apple المثبتة مسبقًا. فتح watchOS 2 (2015) SDK للمطورين. سرّع watchOS 3 (2016) تشغيل التطبيقات 7 مرات. قدم watchOS 6 (2019) App Store على الساعة. أضاف watchOS 9 (2022) الأدوية وتحسين تتبع النوم. أصبح watchOS 10 (2023) أكبر تحديث للواجهة منذ الإصدار.
| إصدار watchOS | السنة | الابتكار الرئيسي |
|---|---|---|
| Watch OS 1 | 2015 | الإصدار الأول، تطبيقات Apple الأصلية فقط |
| watchOS 2 | 2015 | SDK مفتوح، تطبيقات خارجية، Watch Connectivity |
| watchOS 3 | 2016 | تشغيل فوري للتطبيقات، Dock، Scribble |
| watchOS 6 | 2019 | App Store على الساعة، Cycle Tracking، تطبيق Noise |
| watchOS 9 | 2022 | الأدوية، مراحل النوم، رفيق جري محسّن |
| watchOS 10 | 2023 | Smart Stack، Double Tap، وجوه ساعة جديدة |
تتكون بنية watchOS من ثلاث طبقات، تعزل الأجهزة عن تطبيقات المستخدم. على عكس iOS، يستخدم watchOS نهجًا قائمًا على المكونات: يتكون التطبيق من هدفين — امتداد ومضيف على iPhone.
الطبقة السفلية هي نواة XNU معدلة مع برامج تشغيل لرقائق S4/S5/S6/S7/S8/S9 من Apple. يستخدم Apple Watch Series 9 معالج S9 SiP مع 5.6 مليار ترانزستور وNeural Engine رباعي النواة. تشمل خدمات النظام Core Bluetooth وWatch Connectivity وHealthKit وCore Motion. تتم إدارة جميع المهام الخلفية عبر BGTaskScheduler — مجدول نظام يعمل على تحسين استهلاك الطاقة.
WatchKit هو إطار لإنشاء واجهات تطبيقات watchOS. يتضمن WKInterfaceController وWKInterfaceGroup وWKInterfaceLabel وWKInterfaceButton. منذ watchOS 6، توصي Apple باستخدام SwiftUI بدلاً من WatchKit. يوفر SwiftUI نفس الإمكانيات ولكن ببناء جملة تصريحي وتكيف تلقائي مع حجم الشاشة: 38 مم (272×340)، 42 مم (312×390)، 40 مم (324×394)، 44 مم (368×448)، 45 مم (396×484)، 49 مم (410×502 في Apple Watch Ultra).
يحد watchOS من النشاط الخلفي للتطبيقات لتوفير البطارية. الأوضاع الخلفية المتاحة: Workout (التمارين)، HealthKit (مراقبة الصحة)، Location (تحديد الموقع الجغرافي)، Audio (مشغل الصوت)، وComplication (بيانات على وجه الساعة). يتطلب كل وضع capability منفصلة في entitlements. استهلاك الطاقة النموذجي: تطبيق نشط — 50-80 مللي أمبير، وضع خلفي — 5-15 مللي أمبير، وضع الاستعداد — 1-3 مللي أمبير.
import BackgroundTasks
import WatchKit
/// جدولة تحديثات البيانات الخلفية على 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)
}
}
}
}
/// تسجيل مهمة خلفية في 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 تنفيذ المهام الخلفية في الأوقات المثلى — عندما تكون الساعة قيد الشحن ومتصلة بـ iPhone. يعالج WKExtensionDelegate المهام الخلفية الواردة ويحدث البيانات على وجه الساعة. يقوم ComplicationController.reloadComplications بتحديث الأدوات على وجه الساعة المحدد.
watchOS 10 — أكبر تحديث للواجهة في تاريخ المنصة، صدر في سبتمبر 2023. انتقل النظام من التنقل الهرمي إلى التنقل الموجه بالمحتوى: أصبحت الشاشة الرئيسية هي Smart Stack — حزمة أدوات ذكية حلت محل رصيف التطبيقات.
Smart Stack عبارة عن قائمة عمودية من الأدوات تعرض أسفل وجه الساعة. يتم ترتيب الأدوات حسب السياق: صباحًا — الطقس والتقويم، نهارًا — النشاط والتذكيرات، مساءً — التأمل والاستعداد للنوم. يمكن للمطور إضافة أدوات مخصصة عبر WidgetKit لـ watchOS، باستخدام نفس واجهات API المستخدمة في iOS 17.
Double Tap هي إيماءة ضم إصبعي السبابة والإبهام، يتم التعرف عليها بواسطة مقياس التسارع والجيروسكوب دون لمس الشاشة. في Apple Watch Series 9 وUltra 2، تتم معالجة الإيماءة على مستوى الأجهزة عبر Neural Engine. يتلقى المطور الحدث عبر UIDoubleTapGestureRecognizer أو عبر معدّل SwiftUI .onTapGesture(count: 2). لا تتطلب الإيماءة معايرة وتعمل في أي اتجاه لليد.
قدم watchOS 10: SwiftUI Animation مع دعم الرسوم المتحركة Spring وKeyframe، MapKit لعرض الخرائط على الساعة، VideoPlayer لتشغيل مقاطع الفيديو القصيرة (حتى 30 ثانية)، VoiceOver محسّن مع الإيماءات، ونموذج تنقل جديد NavigationStack بدلاً من NavigationView.
| API | الغرض | متاح منذ |
|---|---|---|
| WidgetKit for watchOS | أدوات لـ Smart Stack | watchOS 10 |
| UIDoubleTapGesture | إيماءة Double Tap | watchOS 10 (S9+) |
| MapKit | عرض الخرائط على الساعة | watchOS 10 |
| NavigationStack | نموذج تنقل جديد | watchOS 10 |
| SwiftUI Keyframe | رسوم متحركة إطار بإطار | watchOS 10 |
SwiftUI هو الإطار الرئيسي لتطوير واجهات watchOS. توصي Apple باستخدام SwiftUI لجميع المشاريع الجديدة بدءًا من watchOS 7. يستخدم SwiftUI للساعة نفس مبادئ iOS، ولكن مع معدّلات ومكونات خاصة بـ watchOS.
يتضمن SwiftUI لـ watchOS: TabView بنمط الصفحة للتمرير بين الشاشات، DigitalCrownRotation لمعالجة دوران التاج، SceneStorage للحفاظ على الحالة بين عمليات التشغيل، WKNotificationScene للإشعارات المخصصة، وComplicationDescriptor لبيانات وجه الساعة.
import SwiftUI
import HealthKit
/// تطبيق watchOS لمراقبة معدل ضربات القلب
@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("معدل ضربات القلب", systemImage: "heart.fill") }
StepsView()
.tabItem { Label("الخطوات", systemImage: "figure.walk") }
SettingsView()
.tabItem { Label("الإعدادات", 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("نبضة/دقيقة")
.font(.caption)
.foregroundStyle(.secondary)
}
}
}تطبيق HeartMonitorApp يوضح بنية نموذجية لتطبيق watchOS في SwiftUI: TabView بنمط الصفحة للتمرير بين الشاشات، تكامل مع HealthKit لقراءة معدل ضربات القلب في الوقت الفعلي، WKNotificationScene لمعالجة الإشعارات. يستخدم SymbolEffect مع رسوم متحركة نبضية تسريع Neural Engine للأجهزة لحركة سلسة دون استهلاك CPU.
Digital Crown هي العجلة الجانبية لساعة Apple Watch. يوفر SwiftUI DigitalCrownRotation لربط قيمة بدوران التاج. يقبل المعدّل binding ونطاقًا وخطوة. الإيماءات: tap (النقر)، longPress (الضغط المطول)، swipe (التمرير)، وpan (السحب) — جميعها قياسية في SwiftUI ومكيفة مع حجم شاشة الساعة.
WatchKit هو إطار watchOS الأصلي الذي يستخدم نهج UIKit. على الرغم من أن Apple توصي بـ SwiftUI، إلا أن WatchKit لا يزال مناسبًا للمشاريع القديمة والمهام المحددة: الرسوم المتحركة المعقدة على WKInterfaceGroup والتكامل مع SiriKit.
يتكون تطبيق watchOS من هدفين: WatchKit Extension (المنطق والواجهة) وiOS Companion App (الإعدادات والمزامنة). بدءًا من Xcode 15، أصبح من الممكن إنشاء تطبيق مستقل بدون رفيق iOS. يتم وصف الواجهة في Interface.storyboard (WatchKit) أو برمجيًا عبر SwiftUI.
| المكون | WatchKit | SwiftUI |
|---|---|---|
| الشاشة | WKInterfaceController | View |
| الزر | WKInterfaceButton | Button |
| الجدول | WKInterfaceTable | List |
| المجموعة | WKInterfaceGroup | VStack / HStack |
| الصورة | WKInterfaceImage | Image / AsyncImage |
| التسمية | WKInterfaceLabel | Text |
| الخريطة | WKInterfaceMap | Map (watchOS 10+) |
| التعقيد | CLKComplicationDataSource | ComplicationDescriptor |
التعقيد (Complication) هو أداة تعرض بيانات على وجه ساعة Apple Watch. ينفذ المطور بروتوكول CLKComplicationDataSource، ويوفر قوالب لأنواع مختلفة من وجوه الساعة (circular، rectangular، modular، extraLarge). يدعم watchOS 10 ComplicationDescriptor — واجهة API مبسطة لـ SwiftUI. يتم تحديث البيانات عبر المهام الخلفية بفترة تصل إلى 30 دقيقة.
Watch Connectivity هو إطار لتبادل البيانات بين Apple Watch وiPhone عبر Bluetooth أو Wi-Fi. وهي طريقة الاتصال الوحيدة بين الأجهزة المقترنة. WCSession هي الفئة المركزية التي تدير الجلسة. يجب أن ينفذ تطبيق iOS وامتداد watchOS بروتوكول WCSessionDelegate.
يوفر Watch Connectivity أربع طرق لنقل البيانات: sendMessage — إرسال فوري مع تأكيد (يعمل فقط عندما يكون كلا التطبيقين نشطين)، transferUserInfo — توصيل خلفي لقاموس بيانات، transferFile — نقل الملفات مع بيانات وصفية، updateApplicationContext — مزامنة الحالة المشتركة. تضمن جميع الطرق التسليم عند استعادة الاتصال.
import WatchConnectivity
/// مدير المزامنة بين iPhone و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: — إرسال البيانات من iPhone إلى الساعة
func sendWorkoutData(_ data: [String: Any]) {
guard session.isReachable else {
// إذا كانت الساعة غير متاحة — حفظ في السياق
try? session.updateApplicationContext(data)
return
}
session.sendMessage(data, replyHandler: nil) { error in
print("خطأ في الإرسال: \(error.localizedDescription)")
}
}
// MARK: — استقبال البيانات على الساعة
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: \(activationState.rawValue)")
}
// غير مطلوب على watchOS لكنه إلزامي للبروتوكول
func sessionDidBecomeInactive(_ session: WCSession) {}
func sessionDidDeactivate(_ session: WCSession) {
session.activate()
}
}يقوم ConnectivityManager بتنفيذ نمط المفرد (singleton) للعمل مع WCSession. يتحقق sendWorkoutData من isReachable: إذا كانت الساعة نشطة، يتم إرسال البيانات فورًا عبر sendMessage؛ إذا لم تكن كذلك — يتم حفظها في applicationContext للتسليم المؤجل. يقوم onReceiveMessage على جانب المستقبل بمعالجة الرسائل الواردة وإخطار التطبيق عبر NotificationCenter.
يسمح transferFile بنقل كميات كبيرة من البيانات: الصور، ملفات الصوت، الأرشيفات. الحد الأقصى لحجم الملف هو 100 ميجابايت. يتم حفظ الملفات في دليل Inbox على الجهاز المستقبل. transferUserInfo مناسب لبيانات JSON حتى 100 كيلوبايت. تعمل جميع الطرق في الخلفية: إذا كان الجهاز غير متاح، يتم وضع النقل في قائمة الانتظار واستئنافه تلقائيًا عند استعادة الاتصال.
نشر تطبيق watchOS يتبع نفس قواعد iOS: يتطلب اشتراك Apple Developer Program (99 دولارًا/السنة) واجتياز مراجعة App Review. يتم تحميل التطبيق إلى App Store Connect كجزء من تطبيق iOS أو كتطبيق مستقل.
يمكن توزيع تطبيق watchOS بطريقتين: كامتداد مدمج لتطبيق iOS (حزمة تطبيق iOS تحتوي على .app لـ watchOS) أو كتطبيق مستقل (يتم تحميله ويعمل بدون iPhone). للوضع المستقل، يلزم WKRunsIndependently = YES في Info.plist. حجم تطبيق watchOS محدود بـ 50 ميجابايت للتحميل عبر الشبكة الخلوية.
متطلبات خاصة لـ watchOS: يجب أن يعمل التطبيق بشكل صحيح بدون iPhone نشط (إذا تم الإعلان عنه كمستقل)، يجب أن تكون الواجهة قابلة للقراءة دون تكبير، جميع العناصر التفاعلية يجب أن لا تقل عن 44 نقطة في الحجم. التطبيقات التي تكرر وظائف النظام المدمجة (مثل مراقب معدل ضربات القلب دون قيمة مضافة) محظورة.
| المتطلب | الوصف |
|---|---|
| حجم التطبيق | حتى 50 ميجابايت للتحميل الخلوي، حتى 4 جيجابايت عبر Wi-Fi |
| الوضع المستقل | WKRunsIndependently = YES في Info.plist |
| أهداف اللمس | 44 نقطة على الأقل لجميع العناصر التفاعلية |
| الأمان | لا يمكن إرسال بيانات HealthKit إلى الخادم دون موافقة |
| الأداء | تشغيل التطبيق لا يتجاوز 5 ثوانٍ |
الأسئلة الشائعة
اللغة الرئيسية هي Swift مع إطار SwiftUI. WatchKit على UIKit مدعوم أيضًا، لكن Apple توصي باستخدام SwiftUI لجميع المشاريع الجديدة في watchOS. يُستخدم Objective-C فقط في التطبيقات القديمة التي صدرت قبل عام 2019. منذ watchOS 7، تستخدم جميع أمثلة Apple SwiftUI حصريًا.
بدءًا من watchOS 6، يمكن لـ Apple Watch تثبيت التطبيقات مباشرة من App Store بدون iPhone. ومع ذلك، تتطلب العديد من الوظائف — مزامنة البيانات، الإشعارات الفورية، تحديد الموقع الجغرافي — الاقتران بـ iPhone. التطبيقات المستقلة تمامًا ممكنة مع watchOS 9 وWKRunsIndependently في إعدادات البناء.
عمر البطارية النموذجي لـ Apple Watch Series 9 يصل إلى 18 ساعة في الوضع المختلط. مع الاستخدام النشط لنظام تحديد المواقع ومراقب معدل ضربات القلب — 5-7 ساعات. يعمل watchOS 10 على تحسين استهلاك الطاقة عبر Smart Stack وBGTaskScheduler، مما يقلل النشاط الخلفي للتطبيقات حتى 4 مرات مقارنة بـ watchOS 9.
إطار Watch Connectivity يوفر أربع طرق: sendMessage (نقل فوري)، transferUserInfo (خلفي)، transferFile (ملفات حتى 100 ميجابايت)، وupdateApplicationContext (مزامنة الحالة). تعمل جميع الطرق عبر Bluetooth أو Wi-Fi مع وضع تلقائي في قائمة الانتظار عند فقدان الاتصال.
Apple Watch Series 9 وUltra 2 تشمل: مقياس تسارع، جيروسكوب، مراقب معدل ضربات القلب بصري وكهربائي، SpO2 (تشبع الأكسجين)، مستشعر درجة حرارة المعصم، بارومتر، بوصلة، GPS L1+L5، وميكروفون. الوصول إلى أجهزة الاستشعار عبر HealthKit وCore Motion. تتطلب بيانات معدل ضربات القلب وSpO2 إذنًا صريحًا من المستخدم.
الملخص
سنقوم بتطوير تطبيق جوال جاهز
تقدم IT Sectr تطبيقات iOS وAndroid للشركات الناشئة والشركات منذ عام 2017. سوف نقدم لك النصح ونقترح أفضل حل.