تطبيق الساعة هو تطبيق للأجهزة القابلة للارتداء: Apple Watch بنظام watchOS والساعات الذكية بنظام Wear OS من Google. على عكس التطبيقات المحمولة، تم تحسين تطبيق الساعة للشاشات الصغيرة (قطر 1.5–2 بوصة)، وجلسات التفاعل القصيرة (5–15 ثانية) والسيناريوهات المحددة — اللياقة البدنية، الإشعارات، الردود السريعة، الإدخال الصوتي. يتم التطوير باستخدام SwiftUI لـ Apple Watch وKotlin مع Jetpack Compose for Wear OS لنظام Android. دعنا نستعرض المفاهيم الرئيسية، والهندسة المعمارية، والتنقل وأمثلة التعليمات البرمجية لكلا النظامين.
أهم النقاط
تطبيق الساعة هو تطبيق مصمم للعمل على الأجهزة القابلة للارتداء: Apple Watch (watchOS) والساعات الذكية بنظام Wear OS. الفرق الرئيسي عن التطبيق المحمول هو عامل الشكل. شاشة الساعة بقطر 1.5–2 بوصة (مقابل 6–7 بوصات للهاتف الذكي)، مما يحد من كمية المعلومات المعروضة في وقت واحد. التفاعل مع التطبيق قصير — يتحقق المستخدم من الوقت أو الإشعار أو النبض أو الخطوات في 5–15 ثانية، ثم يخفض يده.
السيناريوهات الرئيسية لتطبيق الساعة: تتبع اللياقة البدنية (الخطوات، النبض، السعرات الحرارية، النوم)، الإشعارات (الرسائل، المكالمات، التقويم)، الإجراءات السريعة (بدء المؤقت، الرد على رسالة صوتياً، التحكم في الموسيقى)، الرفيق (جهاز تحكم عن بعد للكاميرا، مفاتيح السيارة، الدفع عبر NFC). وفقاً لـ Counterpoint Research (2026)، يتجاوز السوق العالمي للساعات الذكية 150 مليون جهاز سنوياً، منها Apple Watch تستحوذ على 35%، وWear OS 20%، والباقي Fitbit وGarmin وغيرها.
قيود تطبيق الساعة: شاشة صغيرة (حتى 2 بوصة)، عمر بطارية محدود (حتى 18–24 ساعة)، عدم وجود لوحة مفاتيح كاملة (فقط الإدخال الصوتي أو الإملاء)، حد المهام في الخلفية (watchOS — حتى 10 دقائق، Wear OS — حتى 5 دقائق)، الحاجة إلى المزامنة مع الهاتف لمعظم الوظائف. بدءاً من watchOS 6 (2019) وWear OS 3 (2022)، يمكن للتطبيقات العمل بشكل مستقل عبر وحدة LTE دون الاقتران بهاتف.
watchOS هو نظام تشغيل Apple للساعات الذكية، المبني على iOS ويستخدم نفس الأطر (Foundation، UIKit في نسخة معدلة، SwiftUI). يتم التطوير في Xcode باستخدام Swift. إطار واجهة المستخدم الرئيسي هو SwiftUI، الذي يوفر مكونات خاصة بـ watchOS: TabView مع عرض دوار، NavigationStack، التاج الرقمي (Digital Crown) عبر DigitalCrownModifier، قائمة الضغط المطول.
التنقل في watchOS مبني على النموذج الهرمي. العناصر الرئيسية: المكدس الهرمي (NavigationStack مع العودة التلقائية)، العروض المشروطة (sheet)، التنقل القائم على الصفحات (عبر TabView مع .tabViewStyle(.page))، القوائم السياقية عند الضغط المطول. يتيح التاج الرقمي تمرير المحتوى وتغيير القيم. الإيماءات: النقر، الضغط المطول، السحب، Force Touch (حتى watchOS 7)، تدوير التاج الرقمي.
أطر watchOS الرئيسية: HealthKit (الوصول إلى البيانات الصحية — النبض، الخطوات، النوم، ECG)، CoreMotion (مقياس التسارع، الجيروسكوب)، WatchConnectivity (تبادل البيانات مع iPhone)، ClockKit (التعقيدات على وجه الساعة)، BackgroundTasks (التحديثات في الخلفية حتى 10 دقائق)، ARKit (تأثيرات FaceTime على Series 9+). يمكن أن يكون تطبيق الساعة كاملاً (تطبيق منفصل في الإرساء) أو امتداداً (متزامناً مع إصدار iOS).
Wear OS هو نظام Google الأساسي للساعات الذكية، المبني على Android. يتم التطوير الحديث باستخدام Kotlin مع Jetpack Compose for Wear OS — مجموعة من المكونات المحسّنة للشاشات الدائرية: Scaffold، ScalingLazyColumn، Chip، Button، Card، Stepper. على عكس Compose للأجهزة المحمولة، يستخدم Wear OS معدّلاته الخاصة: scrollable للتمرير الرأسي، swipable للسحب، RotaryInput للتحكم بالتاج.
التنقل في Wear OS يستخدم لوحة جانبية (SwipeToDismiss) وشاشات بطاقات. العناصر الرئيسية: SwipeDismissableNavHost (التنقل مع السحب للخلف)، وضع الشاشات (ScalingLazyColumn للقوائم)، العرض الدوار الأفقي (Carousel)، وجه الساعة (WatchFace عبر WatchFaceService). توصي Google باستخدام السحب الجانبي للعودة والتمرير الرأسي للقوائم. زر الطاقة في الساعة يفتح قائمة التطبيقات الأخيرة.
الصحة وأجهزة الاستشعار في Wear OS: Health Services API (الخطوات، النبض، السعرات الحرارية، النوم، SpO2 عبر مزودي البيانات)، SensorManager (مقياس التسارع، الجيروسكوب، البارومتر، مقياس المغناطيسية)، Location Services (GPS عبر FusedLocationProvider). يدعم Wear OS 5+ تتبع الجري والمشي وركوب الدراجات والسباحة مع الكشف التلقائي عن نوع النشاط. تتم مزامنة البيانات مع Google Fit عبر Health Connect.
دعنا نستعرض تطبيق تتبع النبض لـ Apple Watch باستخدام SwiftUI وHealthKit.
import SwiftUI
import HealthKit
// نموذج بيانات النبض
struct HeartRateData: Identifiable {
let id = UUID()
let bpm: Double
let date: Date
}
// ViewModel لـ HealthKit
@Observable
final class HealthViewModel {
private let healthStore = HKHealthStore()
var currentHeartRate: Double = 0
var isAuthorized: Bool = false
func requestAuthorization() {
guard let heartRateType = HKQuantityType.quantityType(forIdentifier: .heartRate)
else { return }
let types = Set([heartRateType])
healthStore.requestAuthorization(toShare: nil, read: types) { success, _ in
Task { @MainActor in
self.isAuthorized = success
if success { self.startHeartRateQuery() }
}
}
}
func startHeartRateQuery() {
guard let heartRateType = HKQuantityType.quantityType(forIdentifier: .heartRate)
else { return }
let query = HKObserverQuery(
sampleType: heartRateType, predicate: nil
) { [weak self] _, _, _ in
self?.fetchLatestHeartRate()
}
healthStore.execute(query)
}
private func fetchLatestHeartRate() {
guard let heartRateType = HKQuantityType.quantityType(forIdentifier: .heartRate)
else { return }
let sort = NSSortDescriptor(key: HKSampleSortIdentifierStartDate, ascending: false)
let query = HKSampleQuery(
sampleType: heartRateType, predicate: nil,
limit: 1, sortDescriptors: [sort]
) { _, samples, _ in
guard let sample = samples?.first as? HKQuantitySample else { return }
let bpm = sample.quantity.doubleValue(for: HKUnit.count().unitDivided(by: .minute()))
Task { @MainActor in
self.currentHeartRate = bpm
}
}
healthStore.execute(query)
}
}
// الشاشة الرئيسية
struct HeartRateView: View {
@State private var viewModel = HealthViewModel()
var body: some View {
VStack {
Image(systemName: "heart.fill")
.foregroundColor(.red)
.font(.largeTitle)
Text("\(Int(viewModel.currentHeartRate))")
.font(.system(size: 60, weight: .bold, design: .rounded))
.foregroundColor(.red)
Text("نبضة/دقيقة")
.font(.caption)
.foregroundColor(.secondary)
}
.padding()
.onAppear(perform: viewModel.requestAuthorization)
}
}
النقاط الرئيسية: HKHealthStore يطلب الوصول إلى بيانات HealthKit؛ HKObserverQuery يخطر بتغيرات النبض في الوقت الفعلي؛ HKSampleQuery يحصل على أحدث قيمة. تطبيق الساعة يحدث واجهة المستخدم تلقائياً عندما يتغير currentHeartRate بفضل @Observable. يعالج HealthKit البيانات محلياً على الجهاز — لا حاجة لطلبات الخادم.
تطبيق مشابه لـ Wear OS بلغة Kotlin مع Jetpack Compose وHealth Services API.
// MainActivity.kt
import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.foundation.layout.*
import androidx.wear.compose.material.*
import androidx.wear.compose.foundation.arc.BasicArcParams
import com.google.android.horologist.health.HealthService
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
WearAppTheme {
HeartRateScreen()
}
}
}
}
@Composable
fun HeartRateScreen() {
var heartRate by remember { mutableIntStateOf(0) }
var isConnected by remember { mutableStateOf(false) }
LaunchedEffect(Unit) {
// HealthService — واجهة برمجة تطبيقات للوصول إلى أجهزة الاستشعار
val healthService = HealthService()
healthService.connect().onSuccess {
isConnected = true
}
}
Scaffold(
timeText = { TimeText() },
vignette = { Vignette(vignettePosition = VignettePosition.TopAndBottom) }
) {
Column(
modifier = Modifier
.fillMaxSize()
.scrollable(state = ScrollState),
horizontalAlignment = Alignment.CenterHorizontally,
verticalArrangement = Arrangement.Center
) {
Icon(
imageVector = Icons.Filled.Favorite,
contentDescription = "معدل ضربات القلب",
modifier = Modifier.size(40.dp),
tint = MaterialTheme.colors.error
)
Text(
text = heartRate.toString(),
style = MaterialTheme.typography.display1
)
Text(
text = "نبضة/دقيقة",
style = MaterialTheme.typography.caption2
)
}
}
}
المكونات الرئيسية لـ Wear OS: Scaffold مع TimeText وVignette لتخطيط قياسي؛ معدّل .scrollable() للتوافق مع الشاشات الدائرية؛ HealthService (Horologist) للوصول إلى مستشعر النبض. Jetpack Compose for Wear OS يكيّف الواجهة تلقائياً للشاشات الدائرية والمربعة — لا يحتاج المطور إلى معالجة عوامل الشكل المختلفة يدوياً.
الأسئلة الشائعة
تطبيق الساعة له شاشة محدودة (قطر 1.5–2 بوصة)، يعمل ببطارية صغيرة السعة ويستخدم التحكم بالإيماءات. التفاعل قصير — 5–15 ثانية، يجب أن يكون التطبيق موجزاً قدر الإمكان ويعرض 1–2 مؤشر رئيسي.
لـ Apple Watch — Swift مع أطر SwiftUI وWatchKit. لـ Wear OS — Kotlin مع Jetpack Compose for Wear OS. كلا النظامين يدعمان النهج التصريحي لبناء الواجهات.
نعم، بدءاً من Apple Watch Series 3 مع LTE وwatchOS 6+، يمكن للتطبيق العمل بشكل مستقل عبر App Store على الساعة. يدعم Wear OS أيضاً إصدارات LTE مع التشغيل المستقل عبر Google Play على الساعة.
القيود الرئيسية: حجم الشاشة (حتى 2 بوصة)، عمر البطارية المحدود (حتى 18 ساعة)، عدم وجود متصفح أو لوحة مفاتيح كاملة، حد المهام في الخلفية (watchOS — حتى 10 دقائق، Wear OS — حتى 5 دقائق).
على Apple Watch يُستخدم HealthKit (HKHealthStore، HKSampleQuery) للنبض والخطوات والنوم وCoreMotion لمقياس التسارع. على Wear OS — Health Services API (عبر Horologist) لمقاييس الصحة وSensorManager للبيانات الخام من أجهزة الاستشعار.
ملخص
سنقوم بتطوير تطبيق جوال جاهز
تقدم IT Sectr تطبيقات iOS وAndroid للشركات الناشئة والشركات منذ عام 2017. سوف نقدم لك النصح ونقترح أفضل حل.