Watch App — εφαρμογή για φορητές συσκευές: Apple Watch με watchOS και έξυπνα ρολόγια Wear OS από την Google. Σε αντίθεση με τις εφαρμογές κινητών, το Watch App είναι βελτιστοποιημένο για μικρή οθόνη (διαγώνιος 1.5–2 ίντσες), σύντομες συνεδρίες αλληλεπίδρασης (5–15 δευτερόλεπτα) και συγκεκριμένα σενάρια — γυμναστική, ειδοποιήσεις, γρήγορες απαντήσεις, φωνητική είσοδο. Η ανάπτυξη γίνεται σε SwiftUI για Apple Watch και σε Kotlin με Jetpack Compose for Wear OS για Android. Θα εξετάσουμε βασικές έννοιες, αρχιτεκτονική, πλοήγηση και παραδείγματα κώδικα και για τις δύο πλατφόρμες.
Κύρια σημεία
Watch App — είναι μια εφαρμογή σχεδιασμένη για λειτουργία σε φορητές συσκευές: Apple Watch (watchOS) και έξυπνα ρολόγια Wear OS. Η κύρια διαφορά από την εφαρμογή κινητού — ο παράγοντας μορφής. Η οθόνη του ρολογιού έχει διαγώνιο 1.5–2 ίντσες (σε σύγκριση με 6–7 ίντσες του smartphone), γεγονός που περιορίζει την ποσότητα των ταυτόχρονα εμφανιζόμενων πληροφοριών. Η αλληλεπίδραση με την εφαρμογή είναι σύντομη — ο χρήστης ελέγχει την ώρα, την ειδοποίηση, τον παλμό ή τα βήματα σε 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 και χρησιμοποιώντας τα ίδια framework (Foundation, UIKit σε προσαρμοσμένη έκδοση, SwiftUI). Η ανάπτυξη γίνεται στο Xcode σε Swift. Το κύριο framework UI — SwiftUI, το οποίο παρέχει εξαρτήματα ειδικά για watchOS: TabView με καρουζέλ, NavigationStack, ψηφιακή κορώνα (Digital Crown) μέσω DigitalCrownModifier, μενού παρατεταμένου πατήματος.
Πλοήγηση στο watchOS βασίζεται στο ιεραρχικό παράδειγμα. Κύρια στοιχεία: ιεραρχική στοίβα (NavigationStack με αυτόματη επιστροφή), modal παρουσιάσεις (sheet), πλοήγηση βάσει σελίδων (page-based μέσω TabView με .tabViewStyle(.page)), μενού περιβάλλοντος σε παρατεταμένο πάτημα. Το Digital Crown επιτρέπει την κύλιση περιεχομένου και την αλλαγή τιμών. Χειρονομίες: αφή, παρατεταμένο πάτημα, σύρσιμο, Force Touch (έως watchOS 7), περιστροφή Digital Crown.
Βασικά framework watchOS: HealthKit (πρόσβαση σε δεδομένα υγείας — παλμός, βήματα, ύπνος, ΗΚΓ), CoreMotion (επιταχυνσιόμετρο, γυροσκόπιο), WatchConnectivity (ανταλλαγή δεδομένων με iPhone), ClockKit (επιπλοκές στην όψη ρολογιού), BackgroundTasks (ενημερώσεις παρασκηνίου έως 10 λεπτά), ARKit (FaceTime με εφέ σε Series 9+). Το Watch App μπορεί να είναι πλήρες (ξεχωριστή εφαρμογή στο dock) ή επέκταση (ταυτόχρονα με την έκδοση iOS).
Wear OS — η πλατφόρμα της Google για έξυπνα ρολόγια, βασισμένη στο Android. Η σύγχρονη ανάπτυξη γίνεται σε Kotlin με Jetpack Compose for Wear OS — ένα σύνολο εξαρτημάτων βελτιστοποιημένων για στρογγυλές οθόνες: Scaffold, ScalingLazyColumn, Chip, Button, Card, Stepper. Σε αντίθεση με το mobile 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("BPM")
.font(.caption)
.foregroundColor(.secondary)
}
.padding()
.onAppear(perform: viewModel.requestAuthorization)
}
}
Βασικά σημεία: Το HKHealthStore ζητά πρόσβαση σε δεδομένα HealthKit; Το HKObserverQuery ειδοποιεί για αλλαγές παλμού σε πραγματικό χρόνο; Το HKSampleQuery λαμβάνει την τελευταία τιμή. Το Watch App ενημερώνει αυτόματα το UI όταν αλλάζει το 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 — 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 έχει περιορισμένη οθόνη (διαγώνιος 1.5–2 ίντσες), λειτουργεί με μπαταρία μικρής χωρητικότητας και χρησιμοποιεί έλεγχο χειρονομιών. Η αλληλεπίδραση είναι σύντομη — 5–15 δευτερόλεπτα, η εφαρμογή πρέπει να είναι όσο το δυνατόν πιο συνοπτική και να εμφανίζει 1–2 βασικούς δείκτες.
Για Apple Watch — Swift με τα framework 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. Θα σας συμβουλεύσουμε και θα προτείνουμε την καλύτερη λύση.
Διαβάστε επίσης