watchOS: أساسيات تطوير Apple Watch باستخدام SwiftUI

المؤلف: IT Sectr نُشر: 2026-02-07 وقت القراءة: 12 دق

watchOS هو نظام تشغيل Apple لساعة Apple Watch، الذي صدر لأول مرة في عام 2015 مع أول ساعات. يتم تطوير تطبيقات watchOS بلغة Swift باستخدام SwiftUI وWatchKit. الميزات: شاشة مستطيلة صغيرة، استهلاك محدود للبطارية يبلغ 0.3 واط·ساعة، وتكامل محكم مع iPhone عبر Bluetooth. وفقًا لـ Counterpoint Research، تستحوذ Apple Watch على أكثر من 30% من سوق الساعات الذكية العالمية.

الخلاصة

  • watchOS — نظام تشغيل لـ Apple Watch يعتمد على نواة XNU مع التركيز على انخفاض استهلاك الطاقة
  • SwiftUI — الإطار الرئيسي لتطوير واجهات تطبيقات watchOS
  • Watch Connectivity — آلية تبادل البيانات بين Apple Watch وiPhone
  • Smart Stack — حزمة أدوات ذكية تم تقديمها في watchOS 10
  • HealthKit — إطار للوصول إلى أجهزة الاستشعار: معدل ضربات القلب، SpO2، درجة الحرارة، مقياس التسارع

ما هو watchOS؟

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.

تاريخ إصدارات watchOS

لم يدعم الإصدار الأول 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 12015الإصدار الأول، تطبيقات Apple الأصلية فقط
watchOS 22015SDK مفتوح، تطبيقات خارجية، Watch Connectivity
watchOS 32016تشغيل فوري للتطبيقات، Dock، Scribble
watchOS 62019App Store على الساعة، Cycle Tracking، تطبيق Noise
watchOS 92022الأدوية، مراحل النوم، رفيق جري محسّن
watchOS 102023Smart Stack، Double Tap، وجوه ساعة جديدة

بنية watchOS

تتكون بنية 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 — طبقة التطبيقات

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 مللي أمبير.

swift
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: Smart Stack وDouble Tap

watchOS 10 — أكبر تحديث للواجهة في تاريخ المنصة، صدر في سبتمبر 2023. انتقل النظام من التنقل الهرمي إلى التنقل الموجه بالمحتوى: أصبحت الشاشة الرئيسية هي Smart Stack — حزمة أدوات ذكية حلت محل رصيف التطبيقات.

Smart Stack

Smart Stack عبارة عن قائمة عمودية من الأدوات تعرض أسفل وجه الساعة. يتم ترتيب الأدوات حسب السياق: صباحًا — الطقس والتقويم، نهارًا — النشاط والتذكيرات، مساءً — التأمل والاستعداد للنوم. يمكن للمطور إضافة أدوات مخصصة عبر WidgetKit لـ watchOS، باستخدام نفس واجهات API المستخدمة في iOS 17.

Double Tap

Double Tap هي إيماءة ضم إصبعي السبابة والإبهام، يتم التعرف عليها بواسطة مقياس التسارع والجيروسكوب دون لمس الشاشة. في Apple Watch Series 9 وUltra 2، تتم معالجة الإيماءة على مستوى الأجهزة عبر Neural Engine. يتلقى المطور الحدث عبر UIDoubleTapGestureRecognizer أو عبر معدّل SwiftUI .onTapGesture(count: 2). لا تتطلب الإيماءة معايرة وتعمل في أي اتجاه لليد.

واجهات API جديدة للمطورين

قدم watchOS 10: SwiftUI Animation مع دعم الرسوم المتحركة Spring وKeyframe، MapKit لعرض الخرائط على الساعة، VideoPlayer لتشغيل مقاطع الفيديو القصيرة (حتى 30 ثانية)، VoiceOver محسّن مع الإيماءات، ونموذج تنقل جديد NavigationStack بدلاً من NavigationView.

APIالغرضمتاح منذ
WidgetKit for watchOSأدوات لـ Smart StackwatchOS 10
UIDoubleTapGestureإيماءة Double TapwatchOS 10 (S9+)
MapKitعرض الخرائط على الساعةwatchOS 10
NavigationStackنموذج تنقل جديدwatchOS 10
SwiftUI Keyframeرسوم متحركة إطار بإطارwatchOS 10

SwiftUI لـ Apple Watch

SwiftUI هو الإطار الرئيسي لتطوير واجهات watchOS. توصي Apple باستخدام SwiftUI لجميع المشاريع الجديدة بدءًا من watchOS 7. يستخدم SwiftUI للساعة نفس مبادئ iOS، ولكن مع معدّلات ومكونات خاصة بـ watchOS.

مكونات SwiftUI الخاصة بـ watchOS

يتضمن SwiftUI لـ watchOS: TabView بنمط الصفحة للتمرير بين الشاشات، DigitalCrownRotation لمعالجة دوران التاج، SceneStorage للحفاظ على الحالة بين عمليات التشغيل، WKNotificationScene للإشعارات المخصصة، وComplicationDescriptor لبيانات وجه الساعة.

swift
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 والإيماءات

Digital Crown هي العجلة الجانبية لساعة Apple Watch. يوفر SwiftUI DigitalCrownRotation لربط قيمة بدوران التاج. يقبل المعدّل binding ونطاقًا وخطوة. الإيماءات: tap (النقر)، longPress (الضغط المطول)، swipe (التمرير)، وpan (السحب) — جميعها قياسية في SwiftUI ومكيفة مع حجم شاشة الساعة.

WatchKit ومكونات تطبيق watchOS

WatchKit هو إطار watchOS الأصلي الذي يستخدم نهج UIKit. على الرغم من أن Apple توصي بـ SwiftUI، إلا أن WatchKit لا يزال مناسبًا للمشاريع القديمة والمهام المحددة: الرسوم المتحركة المعقدة على WKInterfaceGroup والتكامل مع SiriKit.

بنية تطبيق watchOS

يتكون تطبيق watchOS من هدفين: WatchKit Extension (المنطق والواجهة) وiOS Companion App (الإعدادات والمزامنة). بدءًا من Xcode 15، أصبح من الممكن إنشاء تطبيق مستقل بدون رفيق iOS. يتم وصف الواجهة في Interface.storyboard (WatchKit) أو برمجيًا عبر SwiftUI.

المكونWatchKitSwiftUI
الشاشةWKInterfaceControllerView
الزرWKInterfaceButtonButton
الجدولWKInterfaceTableList
المجموعةWKInterfaceGroupVStack / HStack
الصورةWKInterfaceImageImage / AsyncImage
التسميةWKInterfaceLabelText
الخريطةWKInterfaceMapMap (watchOS 10+)
التعقيدCLKComplicationDataSourceComplicationDescriptor

التعقيدات — بيانات على وجه الساعة

التعقيد (Complication) هو أداة تعرض بيانات على وجه ساعة Apple Watch. ينفذ المطور بروتوكول CLKComplicationDataSource، ويوفر قوالب لأنواع مختلفة من وجوه الساعة (circular، rectangular، modular، extraLarge). يدعم watchOS 10 ComplicationDescriptor — واجهة API مبسطة لـ SwiftUI. يتم تحديث البيانات عبر المهام الخلفية بفترة تصل إلى 30 دقيقة.

التكامل مع iPhone عبر Watch Connectivity

Watch Connectivity هو إطار لتبادل البيانات بين Apple Watch وiPhone عبر Bluetooth أو Wi-Fi. وهي طريقة الاتصال الوحيدة بين الأجهزة المقترنة. WCSession هي الفئة المركزية التي تدير الجلسة. يجب أن ينفذ تطبيق iOS وامتداد watchOS بروتوكول WCSessionDelegate.

طرق نقل البيانات

يوفر Watch Connectivity أربع طرق لنقل البيانات: sendMessage — إرسال فوري مع تأكيد (يعمل فقط عندما يكون كلا التطبيقين نشطين)، transferUserInfo — توصيل خلفي لقاموس بيانات، transferFile — نقل الملفات مع بيانات وصفية، updateApplicationContext — مزامنة الحالة المشتركة. تضمن جميع الطرق التسليم عند استعادة الاتصال.

swift
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

نشر تطبيق watchOS يتبع نفس قواعد iOS: يتطلب اشتراك Apple Developer Program (99 دولارًا/السنة) واجتياز مراجعة App Review. يتم تحميل التطبيق إلى App Store Connect كجزء من تطبيق iOS أو كتطبيق مستقل.

البناء والتوزيع

يمكن توزيع تطبيق watchOS بطريقتين: كامتداد مدمج لتطبيق iOS (حزمة تطبيق iOS تحتوي على .app لـ watchOS) أو كتطبيق مستقل (يتم تحميله ويعمل بدون iPhone). للوضع المستقل، يلزم WKRunsIndependently = YES في Info.plist. حجم تطبيق watchOS محدود بـ 50 ميجابايت للتحميل عبر الشبكة الخلوية.

متطلبات App Review

متطلبات خاصة لـ watchOS: يجب أن يعمل التطبيق بشكل صحيح بدون iPhone نشط (إذا تم الإعلان عنه كمستقل)، يجب أن تكون الواجهة قابلة للقراءة دون تكبير، جميع العناصر التفاعلية يجب أن لا تقل عن 44 نقطة في الحجم. التطبيقات التي تكرر وظائف النظام المدمجة (مثل مراقب معدل ضربات القلب دون قيمة مضافة) محظورة.

المتطلبالوصف
حجم التطبيقحتى 50 ميجابايت للتحميل الخلوي، حتى 4 جيجابايت عبر Wi-Fi
الوضع المستقلWKRunsIndependently = YES في Info.plist
أهداف اللمس44 نقطة على الأقل لجميع العناصر التفاعلية
الأمانلا يمكن إرسال بيانات HealthKit إلى الخادم دون موافقة
الأداءتشغيل التطبيق لا يتجاوز 5 ثوانٍ

الأسئلة الشائعة

ما اللغات المستخدمة في تطوير watchOS؟

اللغة الرئيسية هي Swift مع إطار SwiftUI. WatchKit على UIKit مدعوم أيضًا، لكن Apple توصي باستخدام SwiftUI لجميع المشاريع الجديدة في watchOS. يُستخدم Objective-C فقط في التطبيقات القديمة التي صدرت قبل عام 2019. منذ watchOS 7، تستخدم جميع أمثلة Apple SwiftUI حصريًا.

هل أحتاج إلى iPhone لتشغيل تطبيق watchOS؟

بدءًا من watchOS 6، يمكن لـ Apple Watch تثبيت التطبيقات مباشرة من App Store بدون iPhone. ومع ذلك، تتطلب العديد من الوظائف — مزامنة البيانات، الإشعارات الفورية، تحديد الموقع الجغرافي — الاقتران بـ iPhone. التطبيقات المستقلة تمامًا ممكنة مع watchOS 9 وWKRunsIndependently في إعدادات البناء.

ما عمر بطارية Apple Watch مع تطبيق نشط؟

عمر البطارية النموذجي لـ Apple Watch Series 9 يصل إلى 18 ساعة في الوضع المختلط. مع الاستخدام النشط لنظام تحديد المواقع ومراقب معدل ضربات القلب — 5-7 ساعات. يعمل watchOS 10 على تحسين استهلاك الطاقة عبر Smart Stack وBGTaskScheduler، مما يقلل النشاط الخلفي للتطبيقات حتى 4 مرات مقارنة بـ watchOS 9.

كيف أنقل البيانات بين iPhone وApple Watch؟

إطار Watch Connectivity يوفر أربع طرق: sendMessage (نقل فوري)، transferUserInfo (خلفي)، transferFile (ملفات حتى 100 ميجابايت)، وupdateApplicationContext (مزامنة الحالة). تعمل جميع الطرق عبر Bluetooth أو Wi-Fi مع وضع تلقائي في قائمة الانتظار عند فقدان الاتصال.

ما أجهزة الاستشعار المتاحة في Apple Watch؟

Apple Watch Series 9 وUltra 2 تشمل: مقياس تسارع، جيروسكوب، مراقب معدل ضربات القلب بصري وكهربائي، SpO2 (تشبع الأكسجين)، مستشعر درجة حرارة المعصم، بارومتر، بوصلة، GPS L1+L5، وميكروفون. الوصول إلى أجهزة الاستشعار عبر HealthKit وCore Motion. تتطلب بيانات معدل ضربات القلب وSpO2 إذنًا صريحًا من المستخدم.

الملخص

  • watchOS — نظام تشغيل Apple للساعات الذكية على نواة XNU، مع التركيز على كفاءة الطاقة والتكامل مع iPhone
  • SwiftUI — الإطار الرئيسي لـ watchOS، يوفر تخطيطًا تصريحيًا وتكيفًا تلقائيًا مع حجم الشاشة
  • watchOS 10 قدم Smart Stack وDouble Tap (S9+) وNavigationStack وWidgetKit للأدوات
  • Watch Connectivity — قناة الاتصال الوحيدة مع iPhone عبر Bluetooth/Wi-Fi بأربعة أوضاع نقل
  • HealthKit يوفر الوصول إلى مستشعرات Apple Watch: معدل ضربات القلب، SpO2، درجة الحرارة، مقياس التسارع، GPS
  • التعقيدات — أدوات على وجه الساعة يتم تنفيذها عبر CLKComplicationDataSource أو SwiftUI
  • النشر يتطلب Apple Developer Program، حجم حتى 50 ميجابايت (خلوي) ومراقبة أداء صارمة

سنقوم بتطوير تطبيق جوال جاهز

تقدم IT Sectr تطبيقات iOS وAndroid للشركات الناشئة والشركات منذ عام 2017. سوف نقدم لك النصح ونقترح أفضل حل.

مناقشة المشروع

اقرأ أيضًا