Watch App: چیست، توسعه برای Apple Watch و Wear OS

نویسنده: IT Sectr منتشر شده: 2026-02-15 زمان مطالعه: 9 دقیقه

Watch App — برنامه‌ای برای دستگاه‌های پوشیدنی: Apple Watch با watchOS و ساعت‌های هوشمند Wear OS از گوگل. برخلاف برنامه‌های موبایل، Watch App برای صفحه نمایش کوچک (قطر 1.5–2 اینچ)، جلسات کوتاه تعامل (5–15 ثانیه) و سناریوهای خاص — تناسب اندام، اعلان‌ها، پاسخ‌های سریع، ورودی صوتی بهینه‌سازی شده است. توسعه با SwiftUI برای Apple Watch و با Kotlin و Jetpack Compose for Wear OS برای اندروید انجام می‌شود. مفاهیم کلیدی، معماری، ناوبری و نمونه کدها را برای هر دو پلتفرم بررسی می‌کنیم.

نکات اصلی

  • Watch App — برنامه‌ای برای ساعت‌های هوشمند با جلسات کوتاه (5–15 ثانیه) و صفحه نمایش محدود
  • Apple Watch از watchOS با SwiftUI و WatchKit، ناوبری سلسله‌مراتبی دقیق استفاده می‌کند
  • Wear OS از Kotlin با Jetpack Compose for Wear OS، Material You و ناوبری جانبی استفاده می‌کند
  • استقلال — نسخه‌های LTE ساعت‌ها به برنامه اجازه کار بدون اتصال به گوشی هوشمند را می‌دهند
  • حسگرها — شتاب‌سنج، ژیروسکوپ، ضربان‌سنج، GPS از طریق APIهای بومی در هر دو پلتفرم در دسترس هستند

Watch App چیست

Watch App — برنامه‌ای است که برای کار بر روی دستگاه‌های پوشیدنی طراحی شده: Apple Watch (watchOS) و ساعت‌های هوشمند Wear OS. تفاوت اصلی با برنامه موبایل — فاکتور فرم است. صفحه نمایش ساعت قطری 1.5–2 اینچ دارد (در مقابل 6–7 اینچ گوشی هوشمند)، که مقدار اطلاعات نمایش داده شده همزمان را محدود می‌کند. تعامل با برنامه کوتاه است — کاربر زمان، اعلان، ضربان قلب یا قدم‌ها را در 5–15 ثانیه بررسی می‌کند و سپس دست خود را پایین می‌آورد.

سناریوهای کلیدی Watch App: ردیاب تناسب اندام (قدم‌ها، ضربان قلب، کالری، خواب)، اعلان‌ها (پیام‌ها، تماس‌ها، تقویم)، اقدامات سریع (شروع تایمر، پاسخ صوتی به پیام، کنترل موسیقی)، همراه (کنترل دوربین، کلید ماشین، پرداخت NFC). طبق Counterpoint Research (2026)، بازار جهانی ساعت‌های هوشمند بیش از 150 میلیون دستگاه در سال است که Apple Watch 35%، Wear OS 20% و بقیه — Fitbit، Garmin و دیگران را تشکیل می‌دهند.

محدودیت‌های Watch App: صفحه نمایش کوچک (تا 2 اینچ)، عمر باتری محدود (تا 18–24 ساعت)، عدم وجود صفحه کلید کامل (فقط ورودی صوتی یا دیکته)، محدودیت وظایف پس‌زمینه (watchOS — تا 10 دقیقه، Wear OS — تا 5 دقیقه)، نیاز به همگام‌سازی با تلفن برای اکثر عملکردها. از watchOS 6 (2019) و Wear OS 3 (2022) برنامه‌ها می‌توانند از طریق ماژول LTE بدون جفت شدن با تلفن به صورت مستقل کار کنند.

Apple Watch: watchOS و SwiftUI

watchOS — سیستم عامل اپل برای ساعت‌های هوشمند، مبتنی بر iOS و استفاده از همان فریمورک‌ها (Foundation، UIKit در نسخه تطبیق یافته، SwiftUI). توسعه در Xcode به زبان Swift انجام می‌شود. فریمورک اصلی UI — SwiftUI، که کامپوننت‌های خاص watchOS را فراهم می‌کند: TabView با carousel، NavigationStack، تاج دیجیتال (Digital Crown) از طریق DigitalCrownModifier، منوی فشار طولانی.

ناوبری در watchOS بر اساس پارادایم سلسله‌مراتبی ساخته شده است. عناصر اصلی: پشته سلسله‌مراتبی (NavigationStack با بازگشت خودکار)، ارائه‌های مودال (sheet)، ناوبری صفحه‌ای (page-based از طریق TabView با .tabViewStyle(.page))، منوهای زمینه‌ای هنگام فشار طولانی. Digital Crown امکان اسکرول محتوا و تغییر مقادیر را فراهم می‌کند. ژست‌ها: ضربه، فشار طولانی، کشیدن، Force Touch (تا watchOS 7)، چرخش Digital Crown.

فریمورک‌های کلیدی watchOS: HealthKit (دسترسی به داده‌های سلامت — ضربان قلب، قدم‌ها، خواب، نوار قلب)، CoreMotion (شتاب‌سنج، ژیروسکوپ)، WatchConnectivity (تبادل داده با iPhone)، ClockKit (کامپلیکیشن‌های صفحه ساعت)، BackgroundTasks (به‌روزرسانی‌های پس‌زمینه تا 10 دقیقه)، ARKit (FaceTime با افکت‌ها در Series 9+). Watch App می‌تواند کامل (برنامه جداگانه در داک) یا افزونه (همزمان با نسخه iOS) باشد.

Wear OS: Kotlin و Compose

Wear OS — پلتفرم گوگل برای ساعت‌های هوشمند، مبتنی بر اندروید. توسعه مدرن به زبان Kotlin با Jetpack Compose for Wear OS انجام می‌شود — مجموعه کامپوننت‌های بهینه‌سازی شده برای صفحه‌های گرد: Scaffold، ScalingLazyColumn، Chip، Button، Card، Stepper. برخلاف Compose موبایل، Wear OS از اصلاح‌کننده‌های خود استفاده می‌کند: scrollable برای اسکرول عمودی، swipable برای کشیدن، RotaryInput برای کنترل چرخ‌دنده.

ناوبری در Wear OS از پنل جانبی (SwipeToDismiss) و صفحه‌های کارتی استفاده می‌کند. عناصر اصلی: SwipeDismissableNavHost (ناوبری با بازگشت با کشیدن)، موقعیت‌یابی صفحه‌ها (ScalingLazyColumn برای لیست‌ها)، carousel افقی (Carousel)، صفحه ساعت (WatchFace از طریق WatchFaceService). گوگل استفاده از کشیدن جانبی برای بازگشت و اسکرول عمودی برای لیست‌ها را توصیه می‌کند. دکمه پاور روی ساعت لیست آخرین برنامه‌ها را باز می‌کند.

سلامت و حسگرها در Wear OS: Health Services API (قدم‌ها، ضربان قلب، کالری، خواب، SpO2 از طریق ارائه‌دهندگان داده)، SensorManager (شتاب‌سنج، ژیروسکوپ، فشارسنج، مغناطیس‌سنج)، Location Services (GPS از طریق FusedLocationProvider). Wear OS 5+ ردیابی دویدن، پیاده‌روی، دوچرخه‌سواری و شنا را با تشخیص خودکار نوع فعالیت پشتیبانی می‌کند. داده‌ها از طریق Health Connect با Google Fit همگام‌سازی می‌شوند.

نمونه کد: Swift برای Apple Watch

برنامه ردیابی ضربان قلب در Apple Watch با استفاده از SwiftUI و HealthKit را بررسی می‌کنیم.

swift
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("BPM")
                .font(.caption)
                .foregroundColor(.secondary)
        }
        .padding()
        .onAppear(perform: viewModel.requestAuthorization)
    }
}

نکات کلیدی: HKHealthStore دسترسی به داده‌های HealthKit را درخواست می‌کند؛ HKObserverQuery از تغییرات ضربان قلب در زمان واقعی مطلع می‌کند؛ HKSampleQuery آخرین مقدار را دریافت می‌کند. Watch App به لطف @Observable هنگام تغییر currentHeartRate UI را به طور خودکار به‌روز می‌کند. HealthKit داده‌ها را به صورت محلی روی دستگاه پردازش می‌کند — درخواست به سرور لازم نیست.

نمونه کد: Kotlin برای Wear OS

برنامه مشابه برای Wear OS به زبان Kotlin با Jetpack Compose و Health Services API.

kotlin
// 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 — API برای دسترسی به حسگرها
        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 = "BPM",
                style = MaterialTheme.typography.caption2
            )
        }
    }
}

کامپوننت‌های کلیدی Wear OS: Scaffold با TimeText و Vignette برای طرح معمول؛ اصلاح‌کننده .scrollable() برای سازگاری با صفحه گرد؛ HealthService (Horologist) برای دسترسی به حسگرهای ضربان قلب. Jetpack Compose for Wear OS به طور خودکار رابط را با صفحه‌های گرد و مربع تطبیق می‌دهد — توسعه‌دهنده نیازی به مدیریت دستی فاکتورهای فرم مختلف ندارد.

سوالات متداول

Watch App چه تفاوتی با برنامه موبایل دارد؟

Watch App صفحه نمایش محدود (قطر 1.5–2 اینچ) دارد، از باتری با ظرفیت کم کار می‌کند و از کنترل ژست استفاده می‌کند. تعامل کوتاه است — 5–15 ثانیه، برنامه باید حداکثر مختصر باشد و 1–2 شاخص کلیدی را نمایش دهد.

چه زبان‌هایی برای Watch App استفاده می‌شود؟

برای Apple Watch — Swift با فریمورک‌های SwiftUI و WatchKit. برای Wear OS — Kotlin با Jetpack Compose for Wear OS. هر دو پلتفرم از رویکرد اعلانی برای ساخت رابط‌ها پشتیبانی می‌کنند.

آیا Watch App می‌تواند بدون iPhone کار کند؟

بله، از Apple Watch Series 3 با LTE و watchOS 6+ برنامه می‌تواند به طور مستقل از طریق App Store روی ساعت کار کند. Wear OS نیز نسخه‌های LTE با کار مستقل از طریق Google Play روی ساعت را پشتیبانی می‌کند.

Watch App چه محدودیت‌هایی دارد؟

محدودیت‌های اصلی: اندازه صفحه نمایش (تا 2 اینچ)، عمر باتری محدود (تا 18 ساعت)، عدم وجود مرورگر و صفحه کلید کامل، محدودیت وظایف پس‌زمینه (watchOS — تا 10 دقیقه، Wear OS — تا 5 دقیقه).

چگونه به حسگرهای ساعت دسترسی پیدا کنیم؟

در Apple Watch از HealthKit (HKHealthStore, HKSampleQuery) برای ضربان قلب، قدم‌ها، خواب و CoreMotion برای شتاب‌سنج استفاده می‌شود. در Wear OS — Health Services API (از طریق Horologist) برای معیارهای سلامت و SensorManager برای داده‌های خام حسگرها.

جمع‌بندی

  • Watch App — برنامه ساعت‌های هوشمند با جلسات 5–15 ثانیه و صفحه نمایش محدود تا 2 اینچ
  • Apple Watch از watchOS با SwiftUI، NavigationStack، Digital Crown و HealthKit برای دسترسی به حسگرها استفاده می‌کند
  • Wear OS از Kotlin با Jetpack Compose for Wear OS، Scaffold، ScalingLazyColumn و Health Services API استفاده می‌کند
  • استقلال — ماژول LTE به برنامه اجازه کار بدون اتصال به گوشی هوشمند در هر دو پلتفرم را می‌دهد
  • HealthKit در watchOS و Health Services در Wear OS دسترسی به ضربان قلب، قدم‌ها، خواب و SpO2 را فراهم می‌کنند
  • محدودیت‌ها — صفحه نمایش کوچک، باتری 18–24 ساعت، محدودیت وظایف پس‌زمینه، عدم وجود صفحه کلید
  • سناریوهای اصلی — ردیاب تناسب اندام، اعلان‌ها، پاسخ‌های سریع، کنترل از راه دور، پرداخت NFC

ما یک اپلیکیشن موبایل به صورت کلید در دست توسعه خواهیم داد

IT Sectr از سال 2017 برنامه‌های iOS و Android را برای استارتاپ‌ها و کسب‌وکارها ایجاد می‌کند. ما به شما مشاوره می‌دهیم و بهترین راه‌حل را پیشنهاد خواهیم کرد.

بحث درباره پروژه

همچنین بخوانید