Watch App হল পরিধানযোগ্য ডিভাইসের জন্য একটি অ্যাপ্লিকেশন: Apple Watch যা watchOS-এ চলে এবং Google-এর Wear OS-এ স্মার্টওয়াচ। মোবাইল অ্যাপ্লিকেশনের বিপরীতে, Watch App ছোট স্ক্রিন (1.5–2 ইঞ্চি কর্ণ), সংক্ষিপ্ত মিথস্ক্রিয়া সেশন (5–15 সেকেন্ড) এবং নির্দিষ্ট পরিস্থিতির জন্য অপ্টিমাইজ করা হয়েছে — ফিটনেস, বিজ্ঞপ্তি, দ্রুত উত্তর, ভয়েস ইনপুট। উন্নয়ন Apple Watch-এর জন্য SwiftUI এবং Android-এর জন্য Kotlin সহ Jetpack Compose for Wear OS-এ করা হয়। আসুন উভয় প্ল্যাটফর্মের জন্য মূল ধারণা, আর্কিটেকচার, নেভিগেশন এবং কোড উদাহরণ দেখি।
মূল বিষয়
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 মডিউলের মাধ্যমে স্বায়ত্তশাসিতভাবে কাজ করতে পারে।
watchOS হল স্মার্টওয়াচের জন্য Apple-এর অপারেটিং সিস্টেম, যা iOS-এর উপর ভিত্তি করে এবং একই ফ্রেমওয়ার্ক (Foundation, UIKit অভিযোজিত সংস্করণে, SwiftUI) ব্যবহার করে। উন্নয়ন Xcode-এ Swift ব্যবহার করে করা হয়। প্রধান UI ফ্রেমওয়ার্ক হল SwiftUI, যা watchOS-নির্দিষ্ট উপাদান সরবরাহ করে: ক্যারোসেল সহ TabView, NavigationStack, DigitalCrownModifier-এর মাধ্যমে ডিজিটাল ক্রাউন, লং-প্রেস মেনু।
watchOS-এ নেভিগেশন শ্রেণিবদ্ধ দৃষ্টান্তের উপর নির্মিত। প্রধান উপাদান: শ্রেণিবদ্ধ স্ট্যাক (স্বয়ংক্রিয় প্রত্যাবর্তন সহ NavigationStack), মোডাল উপস্থাপনা (sheet), পৃষ্ঠা-ভিত্তিক নেভিগেশন (.tabViewStyle(.page) সহ TabView-এর মাধ্যমে), লং প্রেসে প্রাসঙ্গিক মেনু। ডিজিটাল ক্রাউন সামগ্রী স্ক্রোল এবং মান পরিবর্তনের অনুমতি দেয়। অঙ্গভঙ্গি: ট্যাপ, লং প্রেস, সোয়াইপ, Force Touch (watchOS 7 পর্যন্ত), ডিজিটাল ক্রাউন ঘূর্ণন।
মূল watchOS ফ্রেমওয়ার্ক: HealthKit (স্বাস্থ্য ডেটা অ্যাক্সেস — হৃদস্পন্দন, পদক্ষেপ, ঘুম, ECG), CoreMotion (অ্যাক্সিলেরোমিটার, জাইরোস্কোপ), WatchConnectivity (iPhone-এর সাথে ডেটা বিনিময়), ClockKit (ঘড়ির মুখে কমপ্লিকেশন), BackgroundTasks (10 মিনিট পর্যন্ত ব্যাকগ্রাউন্ড আপডেট), ARKit (Series 9+-এ FaceTime প্রভাব)। Watch App পূর্ণ-বৈশিষ্ট্যযুক্ত (ডকে পৃথক অ্যাপ্লিকেশন) বা একটি এক্সটেনশন (iOS সংস্করণের সাথে একযোগে) হতে পারে।
Wear OS হল স্মার্টওয়াচের জন্য Google-এর প্ল্যাটফর্ম, যা Android-এর উপর ভিত্তি করে। আধুনিক উন্নয়ন Jetpack Compose for Wear OS-এর সাথে Kotlin-এ করা হয় — গোল স্ক্রিনের জন্য অপ্টিমাইজ করা উপাদানের একটি সেট: Scaffold, ScalingLazyColumn, Chip, Button, Card, Stepper। মোবাইল Compose-এর বিপরীতে, Wear OS নিজস্ব মডিফায়ার ব্যবহার করে: উল্লম্ব স্ক্রোলের জন্য scrollable, সোয়াইপের জন্য swipable, ক্রাউন নিয়ন্ত্রণের জন্য RotaryInput।
Wear OS-এ নেভিগেশন সাইড প্যানেল (SwipeToDismiss) এবং কার্ড স্ক্রিন ব্যবহার করে। প্রধান উপাদান: SwipeDismissableNavHost (সোয়াইপ-ব্যাক সহ নেভিগেশন), স্ক্রিন পজিশনিং (তালিকার জন্য ScalingLazyColumn), অনুভূমিক ক্যারোসেল (Carousel), ঘড়ির মুখ (WatchFaceService-এর মাধ্যমে WatchFace)। Google ফিরে যাওয়ার জন্য সাইড সোয়াইপ এবং তালিকার জন্য উল্লম্ব স্ক্রোল ব্যবহার করার পরামর্শ দেয়। ঘড়ির পাওয়ার বাটন সাম্প্রতিক অ্যাপ্লিকেশনগুলির তালিকা খোলে।
Wear OS-এ স্বাস্থ্য এবং সেন্সর: Health Services API (ডেটা প্রদানকারীদের মাধ্যমে পদক্ষেপ, হৃদস্পন্দন, ক্যালোরি, ঘুম, SpO2), SensorManager (অ্যাক্সিলেরোমিটার, জাইরোস্কোপ, ব্যারোমিটার, ম্যাগনেটোমিটার), Location Services (FusedLocationProvider-এর মাধ্যমে GPS)। Wear OS 5+ কার্যকলাপের ধরন স্বয়ংক্রিয় সনাক্তকরণ সহ দৌড়ানো, হাঁটা, সাইকেল চালানো এবং সাঁতার ট্র্যাকিং সমর্থন করে। ডেটা Health Connect-এর মাধ্যমে Google Fit-এর সাথে সিঙ্ক হয়।
SwiftUI এবং HealthKit ব্যবহার করে Apple Watch-এর জন্য হৃদস্পন্দন ট্র্যাকিং অ্যাপ্লিকেশন দেখি।
import SwiftUI
import HealthKit
// হৃদস্পন্দন ডেটা মডেল
struct HeartRateData: Identifiable {
let id = UUID()
let bpm: Double
let date: Date
}
// HealthKit-এর জন্য ViewModel
@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 সর্বশেষ মান পায়। @Observable-এর কারণে currentHeartRate পরিবর্তিত হলে Watch App স্বয়ংক্রিয়ভাবে UI আপডেট করে। HealthKit ডিভাইসে স্থানীয়ভাবে ডেটা প্রক্রিয়া করে — সার্ভার অনুরোধের প্রয়োজন নেই।
Jetpack Compose এবং Health Services API-এর সাথে Kotlin-এ Wear OS-এর জন্য অনুরূপ অ্যাপ্লিকেশন।
// 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-এর মূল উপাদান: স্ট্যান্ডার্ড লেআউটের জন্য TimeText এবং Vignette সহ Scaffold; গোল স্ক্রিন সামঞ্জস্যের জন্য .scrollable() মডিফায়ার; হৃদস্পন্দন সেন্সর অ্যাক্সেসের জন্য HealthService (Horologist)। Jetpack Compose for Wear OS স্বয়ংক্রিয়ভাবে গোল এবং বর্গাকার স্ক্রিনের জন্য ইন্টারফেস অভিযোজিত করে — ডেভেলপারকে ম্যানুয়ালি বিভিন্ন ফর্ম ফ্যাক্টর পরিচালনা করতে হয় না।
প্রায়শই জিজ্ঞাসিত প্রশ্ন
Watch App-এর সীমিত স্ক্রিন (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-ও ঘড়িতে Google Play-এর মাধ্যমে স্বতন্ত্র অপারেশন সহ LTE সংস্করণ সমর্থন করে।
প্রধান সীমাবদ্ধতা: স্ক্রিনের আকার (2 ইঞ্চি পর্যন্ত), সীমিত ব্যাটারি জীবন (18 ঘন্টা পর্যন্ত), কোন পূর্ণ ব্রাউজার বা কীবোর্ড নেই, ব্যাকগ্রাউন্ড কাজের সীমা (watchOS — 10 মিনিট পর্যন্ত, Wear OS — 5 মিনিট পর্যন্ত)।
Apple Watch-এ হৃদস্পন্দন, পদক্ষেপ, ঘুমের জন্য HealthKit (HKHealthStore, HKSampleQuery) এবং অ্যাক্সিলেরোমিটারের জন্য CoreMotion ব্যবহার করা হয়। Wear OS-এ — স্বাস্থ্য মেট্রিকের জন্য Health Services API (Horologist-এর মাধ্যমে) এবং সেন্সরের কাঁচা ডেটার জন্য SensorManager ব্যবহার করা হয়।
সারসংক্ষেপ
আমরা একটি মোবাইল অ্যাপ্লিকেশন টার্নকি তৈরি করব
IT Sectr 2017 সাল থেকে স্টার্টআপ এবং ব্যবসার জন্য iOS এবং Android অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।
আরও পড়ুন