watchOS — оперативни систем компаније Apple за Apple Watch, први пут објављен 2015. године заједно са првим сатовима. Развој апликација за watchOS се обавља у Swift-у коришћењем SwiftUI и WatchKit-а. Карактеристике: мали правоугаони екран, ограничена потрошња енергије из батерије од 0,3 Wh и блиска интеграција са iPhone-ом преко Bluetooth-а. Према подацима Counterpoint Research, Apple Watch заузима преко 30% светског тржишта паметних сатова.
Главно
watchOS — оперативни систем за Apple паметне сатове, заснован на XNU Darwin језгру. Први пут објављен 24. априла 2015. године заједно са Apple Watch Series 0. Систем је изграђен на истој архитектури као iOS, али оптимизован за мали дисплеј (од 1,5 до 1,9 инча), ограничену меморију (до 1 GB RAM-а у Series 9) и минималну потрошњу енергије.
Према подацима StatCounter-а (2026), watchOS заузима око 55% тржишта оперативних система за паметне сатове, испред Wear OS-а и пропријетарних система кинеских произвођача. Apple објављује главна ажурирања watchOS-а годишње, подржавајући сатове до 5 година од тренутка објављивања.
Кључна карактеристика watchOS-а — зависност од iPhone-а. Већина апликација користи Watch Connectivity за синхронизацију података. Почевши од watchOS 6, сатови могу да инсталирају апликације директно из App Store-а, али потпуна аутономност без iPhone-а се подржава тек од watchOS 9.
Прва верзија 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 1 | 2015 | Прва верзија, само изворне Apple апликације |
| watchOS 2 | 2015 | Отворени SDK, апликације трећих страна, Watch Connectivity |
| watchOS 3 | 2016 | Тренутно покретање апликација, Dock, Scribble |
| watchOS 6 | 2019 | App Store на сату, Cycle Tracking, Noise апликација |
| watchOS 9 | 2022 | Лекови, фазе спавања, побољшани пратилац за трчање |
| watchOS 10 | 2023 | Smart Stack, Double Tap, нови бројчаници |
Архитектура watchOS-а се састоји од три нивоа који изолују хардвер од корисничких апликација. За разлику од iOS-а, watchOS користи компонентни приступ: апликација се састоји од два циља — екстензије (extension) и хоста на iPhone-у.
Доњи ниво — модификовано XNU језгро са драјверима за S4/S5/S6/S7/S8/S9 Apple чипове. У Apple Watch Series 9 се користи S9 SiP са 5,6 милијарди транзистора и 4-језгарним Neural Engine-ом. Системске услуге укључују Core Bluetooth, Watch Connectivity, HealthKit и Core Motion. Сви позадински задаци се управљају преко BGTaskScheduler-а — системског планирача који оптимизује потрошњу енергије.
WatchKit — фрејмворк за креирање интерфејса watchOS апликација. Укључује WKInterfaceController, WKInterfaceGroup, WKInterfaceLabel и WKInterfaceButton. Од watchOS 6, Apple препоручује SwiftUI уместо WatchKit-а. SwiftUI пружа исте могућности, али са декларативном синтаксом и аутоматском адаптацијом на величину екрана: 38 mm (272×340), 42 mm (312×390), 40 mm (324×394), 44 mm (368×448), 45 mm (396×484), 49 mm (410×502 у Apple Watch Ultra).
watchOS ограничава позадински рад апликација ради уштеде батерије. Доступни позадински режими: Workout (тренинзи), HealthKit (праћење здравља), Location (геолокација), Audio (аудио плејер) и Complication (подаци на бројчанику). Сваки режим захтева посебну capability у entitlements-има. Типична потрошња енергије: активна апликација — 50-80 mA, позадински режим — 5-15 mA, Standby — 1-3 mA.
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 — највеће ажурирање интерфејса у историји платформе, објављено у септембру 2023. године. Систем је прешао са хијерархијске навигације на садржајно-оријентисану: главни екран је постао Smart Stack — интелигентни стек виџета који је заменио док апликација.
Smart Stack — вертикална листа виџета која се приказује испод бројчаника. Виџети се рангирају по контексту: ујутру се приказује време и календар, током дана — активност и подсетници, увече — медитација и припрема за спавање. Програмер може да додаје прилагођене виџете преко WidgetKit-а за watchOS, користећи исте API-је као за iOS 17.
Double Tap — гест спајања кажипрста и палца, који препознају акцелерометар и жироскоп без додиривања екрана. У Apple Watch Series 9 и Ultra 2, гест се извршава на хардверском нивоу преко Neural Engine-а. Програмер добија догађај преко UIDoubleTapGestureRecognizer-а или преко SwiftUI модификатора .onTapGesture(count: 2). Гест не захтева калибрацију и ради у било којој оријентацији руке.
watchOS 10 је представила: SwiftUI Animation са подршком за Spring и Keyframe анимације, MapKit за приказ мапа на сату, VideoPlayer за репродукцију кратких видеа (до 30 секунди), побољшани VoiceOver са гестовима и нову навигациону парадигму NavigationStack уместо NavigationView-а.
| API | Намена | Доступан од |
|---|---|---|
| WidgetKit for watchOS | Виџети за Smart Stack | watchOS 10 |
| UIDoubleTapGesture | Double Tap гест | watchOS 10 (S9+) |
| MapKit | Приказ мапа на сату | watchOS 10 |
| NavigationStack | Нова навигациона парадигма | watchOS 10 |
| SwiftUI Keyframe | Кадарска анимација | watchOS 10 |
SwiftUI — главни фрејмворк за развој интерфејса на watchOS-у. Apple препоручује SwiftUI за све нове пројекте од watchOS 7. SwiftUI за сатове користи исте принципе као за iOS, али са watchOS-специфичним модификаторима и компонентама.
SwiftUI за watchOS укључује: TabView са page-стилом за свајп између екрана, DigitalCrownRotation за обраду окретања крунице, SceneStorage за чување стања између покретања, WKNotificationScene за прилагођена обавештења и ComplicationDescriptor за податке на бројчанику.
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 са page-стилом за свајп између екрана, интеграцију са HealthKit-ом за читање пулса у реалном времену, WKNotificationScene за обраду обавештења. SymbolEffect са pulse-анимацијом користи хардверско убрзање Neural Engine-а за глатку анимацију без оптерећења CPU-а.
Digital Crown — круница на бочном панелу Apple Watch-а. SwiftUI пружа DigitalCrownRotation за повезивање вредности са окретањем крунице. Модификатор прима binding, опсег и корак. Гестови: tap (додир), longPress (дуги притисак), swipe (превлачење) и pan (превлачење) — сви стандардни за SwiftUI и прилагођени величини екрана сата.
WatchKit — оригинални фрејмворк за watchOS који користи UIKit приступ. Иако Apple препоручује SwiftUI, WatchKit остаје актуелан за старе пројекте и специфичне задатке: сложене анимације на WKInterfaceGroup-у и интеграцију са SiriKit-ом.
Апликација за watchOS се састоји од два циља: WatchKit Extension (логика и интерфејс) и iOS Companion App (подешавања и синхронизација). Од Xcode 15, могуће је креирање standalone апликације без iOS пратиоца. Интерфејс се описује у Interface.storyboard (WatchKit) или програмски кроз SwiftUI.
| Компонента | WatchKit | SwiftUI |
|---|---|---|
| Екран | WKInterfaceController | View |
| Дугме | WKInterfaceButton | Button |
| Табела | WKInterfaceTable | List |
| Група | WKInterfaceGroup | VStack / HStack |
| Слика | WKInterfaceImage | Image / AsyncImage |
| Натпис | WKInterfaceLabel | Text |
| Мапа | WKInterfaceMap | Map (watchOS 10+) |
| Бројчаник | CLKComplicationDataSource | ComplicationDescriptor |
Complication — виџет који приказује податке на бројчанику Apple Watch-а. Програмер имплементира протокол CLKComplicationDataSource, обезбеђујући шаблоне за различите типове бројчаника (circular, rectangular, modular, extraLarge). watchOS 10 подржава ComplicationDescriptor — поједностављени API за SwiftUI. Подаци се ажурирају кроз Background Tasks са периодом до 30 минута.
Watch Connectivity — фрејмворк за размену података између Apple Watch-а и iPhone-а преко Bluetooth-а или Wi-Fi-ја. Једини начин комуникације између упарених уређаја. WCSession — централна класа која управља сесијом. iOS апликација и watchOS екстензија морају да имплементирају WCSessionDelegate.
Watch Connectivity пружа четири методе преноса података: sendMessage — тренутно слање са потврдом (ради само када су обе апликације активне), transferUserInfo — позадинска достава речника података, transferFile — пренос датотека са метаподацима, updateApplicationContext — синхронизација заједничког стања. Све методе гарантују доставу при поновном успостављању везе.
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("Send error: \(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 activated: \(activationState.rawValue)")
}
// Није потребно на watchOS-у, али обавезно за протокол
func sessionDidBecomeInactive(_ session: WCSession) {}
func sessionDidDeactivate(_ session: WCSession) {
session.activate()
}
}ConnectivityManager имплементира синглтон за рад са WCSession-ом. sendWorkoutData проверава isReachable: ако је сат активан, подаци се шаљу одмах преко sendMessage-а; ако није — чувају се у applicationContext-у за одложену доставу. onReceiveMessage на страни примаоца обрађује долазне поруке и обавештава апликацију преко NotificationCenter-а.
transferFile омогућава пренос великих количина података: слике, аудио датотеке, архиве. Максимална величина датотеке — 100 MB. Датотеке се чувају у директоријуму Inbox на уређају примаоцу. transferUserInfo је погодан за JSON податке до 100 KB. Све методе раде у позадини: ако уређај није доступан, пренос се ставља у ред и аутоматски наставља при поновном успостављању везе.
Објављивање watchOS апликације следи иста правила као iOS: потребна је претплата на Apple Developer Program (99 USD/година) и пролазак кроз модерацију App Review-а. Апликација се поставља у App Store Connect као део iOS апликације или као standalone апликација.
watchOS апликација се може испоручити на два начина: као уграђена екстензија iOS апликације (iOS app bundle садржи watchOS .app) или као standalone апликација (преузима се и ради без iPhone-а). За standalone режим је потребно WKRunsIndependently = YES у Info.plist-у. Величина watchOS апликације је ограничена на 50 MB за преузимање преко мобилне мреже.
Посебни захтеви за watchOS: апликација мора да ради исправно без активног iPhone-а (ако је декларисана као standalone), интерфејс мора бити читљив без увећања, сви интерактивни елементи — најмање 44 тачке у величини. Забрањене су апликације које дуплирају функционалност уграђених (нпр. пулсометар без додатне вредности).
| Захтев | Опис |
|---|---|
| Величина апликације | До 50 MB за мобилно преузимање, до 4 GB преко Wi-Fi-ја |
| Standalone режим | WKRunsIndependently = YES у Info.plist-у |
| Touch циљеви | Најмање 44 pt за све интерактивне елементе |
| Безбедност | HealthKit подаци не могу да се преносе на сервер без сагласности |
| Перформансе | Покретање апликације не више од 5 секунди |
Често постављана питања
Основни језик је Swift са фрејмворком SwiftUI. WatchKit на UIKit-у је такође подржан, али Apple препоручује SwiftUI за све нове пројекте на watchOS-у. Objective-C се користи само у старим апликацијама објављеним пре 2019. године. Од watchOS 7, сви Apple примери користе искључиво SwiftUI.
Почевши од watchOS 6, Apple Watch може да инсталира апликације директно из App Store-а без iPhone-а. Међутим, многе функције — синхронизација података, push обавештења, геолокација — захтевају упаривање са iPhone-ом. Потпуно аутономне апликације су могуће са watchOS 9 и WKRunsIndependently у подешавањима изградње.
Типична аутономија Apple Watch Series 9 — до 18 сати у мешовитом режиму. При активном коришћењу апликације са GPS-ом и пулсометром — 5-7 сати. watchOS 10 оптимизује потрошњу енергије кроз Smart Stack и BGTaskScheduler, смањујући позадинску активност апликација до 4 пута у поређењу са watchOS 9.
Watch Connectivity фрејмворк пружа четири начина: sendMessage (тренутни пренос), transferUserInfo (позадина), transferFile (датотеке до 100 MB) и updateApplicationContext (синхронизација стања). Све методе раде преко Bluetooth-а или Wi-Fi-ја са аутоматским стављањем у ред при губитку везе.
Apple Watch Series 9 и Ultra 2 укључују: акцелерометар, жироскоп, оптички и електрични пулсометар, SpO2 (сатурација), сензор температуре зглоба, барометар, компас, GPS L1+L5 и микрофон. Приступ сензорима — преко HealthKit-а и Core Motion-а. Подаци о пулсу и SpO2 захтевају изричиту дозволу корисника.
Итог
Развићемо мобилну апликацију под кључ
IT Sectr креира iOS и Android апликације за стартапе и предузећа од 2017. године. Саветоваћемо вас и предложити најбоље решење.
Прочитајте такође