watchOS, Apple'ın Apple Watch için işletim sistemidir ve ilk olarak 2015 yılında ilk saatlerle birlikte piyasaya sürülmüştür. watchOS uygulama geliştirme, SwiftUI ve WatchKit kullanılarak Swift ile yapılır. Özellikler: küçük dikdörtgen ekran, 0,3 Wh sınırlı pil tüketimi ve Bluetooth üzerinden iPhone ile sıkı entegrasyon. Counterpoint Research'e göre Apple Watch, küresel akıllı saat pazarının %30'undan fazlasını elinde tutuyor.
Önemli Noktalar
watchOS, Apple'ın akıllı saatleri için işletim sistemidir ve Darwin XNU çekirdeğini temel alır. İlk olarak 24 Nisan 2015'te Apple Watch Series 0 ile birlikte piyasaya sürülmüştür. Sistem, iOS ile aynı mimari üzerine inşa edilmiştir ancak küçük ekran (1,5 ila 1,9 inç), sınırlı bellek (Series 9'da 1 GB RAM'e kadar) ve minimum güç tüketimi için optimize edilmiştir.
StatCounter'a (2026) göre watchOS, akıllı saat işletim sistemi pazarının yaklaşık %55'ini elinde tutarak Wear OS ve Çinli üreticilerin tescilli sistemlerini geride bırakmaktadır. Apple, her yıl büyük watchOS güncellemeleri yayınlar ve saatleri piyasaya sürüldükten sonra 5 yıla kadar destekler.
watchOS'un temel bir özelliği iPhone'a bağımlı olmasıdır. Çoğu uygulama, veri senkronizasyonu için Watch Connectivity'yi kullanır. watchOS 6'dan itibaren saatler, App Store'dan doğrudan uygulama yükleyebilir, ancak iPhone'dan tam bağımsızlık yalnızca watchOS 9 ile desteklenir.
İlk sürüm Watch OS 1.0, üçüncü taraf uygulamaları desteklemiyordu — yalnızca önceden yüklenmiş Apple uygulamaları. watchOS 2 (2015), geliştiricilere SDK'yı açtı. watchOS 3 (2016), uygulama başlatmayı 7 kat hızlandırdı. watchOS 6 (2019), saatte App Store'u tanıttı. watchOS 9 (2022), ilaçlar ve geliştirilmiş uyku takibi ekledi. watchOS 10 (2023), piyasaya sürülmesinden bu yana en büyük arayüz güncellemesi oldu.
| watchOS Sürümü | Yıl | Temel Yenilik |
|---|---|---|
| Watch OS 1 | 2015 | İlk sürüm, yalnızca yerel Apple uygulamaları |
| watchOS 2 | 2015 | Açık SDK, üçüncü taraf uygulamalar, Watch Connectivity |
| watchOS 3 | 2016 | Anında uygulama başlatma, Dock, Scribble |
| watchOS 6 | 2019 | Saatte App Store, Cycle Tracking, Noise uygulaması |
| watchOS 9 | 2022 | İlaçlar, uyku evreleri, geliştirilmiş koşu arkadaşı |
| watchOS 10 | 2023 | Smart Stack, Double Tap, yeni saat yüzleri |
watchOS mimarisi, donanımı kullanıcı uygulamalarından ayıran üç katmandan oluşur. iOS'un aksine watchOS, bileşen tabanlı bir yaklaşım kullanır: bir uygulama iki hedeften oluşur — bir uzantı ve bir iPhone ana bilgisayarı.
En alt katman, Apple'ın S4/S5/S6/S7/S8/S9 yongaları için sürücülere sahip değiştirilmiş bir XNU çekirdeğidir. Apple Watch Series 9, 5,6 milyar transistör ve 4 çekirdekli Neural Engine ile S9 SiP kullanır. Sistem hizmetleri arasında Core Bluetooth, Watch Connectivity, HealthKit ve Core Motion bulunur. Tüm arka plan görevleri, güç tüketimini optimize eden bir sistem zamanlayıcısı olan BGTaskScheduler aracılığıyla yönetilir.
WatchKit, watchOS uygulama arayüzleri oluşturmak için bir framework'tür. WKInterfaceController, WKInterfaceGroup, WKInterfaceLabel ve WKInterfaceButton içerir. watchOS 6'dan itibaren Apple, WatchKit yerine SwiftUI'yi önermektedir. SwiftUI aynı yetenekleri sunar ancak bildirimsel sözdizimi ve ekran boyutuna otomatik uyum sağlama özellikleriyle birlikte gelir: 38 mm (272×340), 42 mm (312×390), 40 mm (324×394), 44 mm (368×448), 45 mm (396×484), 49 mm (Apple Watch Ultra'da 410×502).
watchOS, pil tasarrufu için uygulamaların arka plan etkinliğini sınırlar. Mevcut arka plan modları: Workout (antrenman), HealthKit (sağlık izleme), Location (konum belirleme), Audio (ses oynatıcı) ve Complication (saat yüzünde veri). Her mod, entitlements'da ayrı bir capability gerektirir. Tipik güç tüketimi: aktif uygulama — 50-80 mA, arka plan modu — 5-15 mA, bekleme — 1-3 mA.
import BackgroundTasks
import WatchKit
/// watchOS'ta arka plan veri güncellemelerini planlama
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'te arka plan görevi kaydetme
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, arka plan görevlerinin en uygun zamanlarda (saat şarj olurken ve iPhone'a bağlıyken) çalışmasını sağlar. WKExtensionDelegate, gelen arka plan görevlerini işler ve saat yüzündeki verileri günceller. ComplicationController.reloadComplications, seçilen saat yüzündeki widget'ları günceller.
watchOS 10 — platform tarihindeki en büyük arayüz güncellemesi, Eylül 2023'te yayınlandı. Sistem, hiyerarşik navigasyondan içerik odaklı navigasyona geçti: ana ekran, uygulama dock'unun yerini alan akıllı bir widget yığını olan Smart Stack haline geldi.
Smart Stack, saat yüzünün altında görüntülenen dikey bir widget listesidir. Widget'lar bağlama göre sıralanır: sabah hava durumu ve takvim, gün içinde — aktivite ve hatırlatıcılar, akşam — meditasyon ve uyku hazırlığı gösterir. Geliştirici, iOS 17 ile aynı API'leri kullanarak WidgetKit for watchOS aracılığıyla özel widget'lar ekleyebilir.
Double Tap, işaret ve başparmağı birleştirme hareketidir ve ekrana dokunmadan ivmeölçer ve jiroskop tarafından algılanır. Apple Watch Series 9 ve Ultra 2'de hareket, Neural Engine aracılığıyla donanım düzeyinde işlenir. Geliştirici, olayı UIDoubleTapGestureRecognizer veya SwiftUI değiştiricisi .onTapGesture(count: 2) aracılığıyla alır. Hareket kalibrasyon gerektirmez ve herhangi bir el yönünde çalışır.
watchOS 10 şunları tanıttı: Spring ve Keyframe animasyonlarını destekleyen SwiftUI Animation, saatte harita görüntülemek için MapKit, kısa videolar (30 saniyeye kadar) oynatmak için VideoPlayer, hareketlerle geliştirilmiş VoiceOver ve NavigationView yerine yeni navigasyon paradigması NavigationStack.
| API | Amaç | Kullanılabilirlik |
|---|---|---|
| WidgetKit for watchOS | Smart Stack için widget'lar | watchOS 10 |
| UIDoubleTapGesture | Double Tap hareketi | watchOS 10 (S9+) |
| MapKit | Saatte harita görüntüleme | watchOS 10 |
| NavigationStack | Yeni navigasyon paradigması | watchOS 10 |
| SwiftUI Keyframe | Kare kare animasyon | watchOS 10 |
SwiftUI, watchOS arayüzleri geliştirmek için birincil framework'tür. Apple, watchOS 7'den itibaren tüm yeni projeler için SwiftUI'yi önermektedir. Saat için SwiftUI, iOS ile aynı prensipleri kullanır ancak watchOS'a özgü değiştiriciler ve bileşenlerle birlikte gelir.
watchOS için SwiftUI şunları içerir: ekranlar arasında kaydırmak için sayfa stilli TabView, kurma kolunun dönüşünü işlemek için DigitalCrownRotation, başlatmalar arasında durumu korumak için SceneStorage, özel bildirimler için WKNotificationScene ve saat yüzünde veri için ComplicationDescriptor.
import SwiftUI
import HealthKit
/// Nabız izleme için watchOS uygulaması
@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("Nabız", systemImage: "heart.fill") }
StepsView()
.tabItem { Label("Adımlar", systemImage: "figure.walk") }
SettingsView()
.tabItem { Label("Ayarlar", 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("bpm")
.font(.caption)
.foregroundStyle(.secondary)
}
}
}HeartMonitorApp, SwiftUI'de tipik bir watchOS uygulama yapısını gösterir: ekranlar arasında kaydırmak için sayfa stilli TabView, gerçek zamanlı nabız okuma için HealthKit entegrasyonu, bildirimleri işlemek için WKNotificationScene. Darbe animasyonlu SymbolEffect, CPU yükü olmadan yumuşak animasyon için Neural Engine donanım hızlandırmasını kullanır.
Digital Crown, Apple Watch'un yanındaki tekerlektir. SwiftUI, kurma kolunun dönüşüne bir değer bağlamak için DigitalCrownRotation sağlar. Değiştirici bir binding, aralık ve adım kabul eder. Hareketler: tap (dokunma), longPress (uzun basma), swipe (kaydırma) ve pan (sürükleme) — tümü SwiftUI için standarttır ve saat ekranı boyutuna uyarlanmıştır.
WatchKit, UIKit yaklaşımını kullanan orijinal watchOS framework'üdür. Apple SwiftUI'yi önermesine rağmen, WatchKit eski projeler ve belirli görevler (WKInterfaceGroup'da karmaşık animasyonlar ve SiriKit entegrasyonu) için geçerliliğini korumaktadır.
Bir watchOS uygulaması iki hedeften oluşur: WatchKit Extension (mantık ve arayüz) ve iOS Companion App (ayarlar ve senkronizasyon). Xcode 15'ten itibaren, iOS eşlikçisi olmadan bağımsız bir uygulama oluşturmak mümkündür. Arayüz, Interface.storyboard'da (WatchKit) veya SwiftUI aracılığıyla programlı olarak tanımlanır.
| Bileşen | WatchKit | SwiftUI |
|---|---|---|
| Ekran | WKInterfaceController | View |
| Düğme | WKInterfaceButton | Button |
| Tablo | WKInterfaceTable | List |
| Grup | WKInterfaceGroup | VStack / HStack |
| Görsel | WKInterfaceImage | Image / AsyncImage |
| Etiket | WKInterfaceLabel | Text |
| Harita | WKInterfaceMap | Map (watchOS 10+) |
| Komplikasyon | CLKComplicationDataSource | ComplicationDescriptor |
Komplikasyon, Apple Watch yüzünde veri görüntüleyen bir widget'tır. Geliştirici, CLKComplicationDataSource protokolünü uygulayarak farklı saat yüzü türleri (circular, rectangular, modular, extraLarge) için şablonlar sağlar. watchOS 10, SwiftUI için basitleştirilmiş bir API olan ComplicationDescriptor'ı destekler. Veriler, 30 dakikaya kadar bir süreyle arka plan görevleri aracılığıyla güncellenir.
Watch Connectivity, Bluetooth veya Wi-Fi aracılığıyla Apple Watch ve iPhone arasında veri alışverişi yapmak için bir framework'tür. Eşleştirilmiş cihazlar arasındaki tek iletişim yöntemidir. WCSession, oturumu yöneten merkezi sınıftır. iOS uygulaması ve watchOS uzantısı WCSessionDelegate'i uygulamalıdır.
Watch Connectivity dört veri aktarım yöntemi sağlar: sendMessage — onaylı anında gönderme (yalnızca her iki uygulama da etkinken çalışır), transferUserInfo — bir veri sözlüğünün arka planda teslimi, transferFile — meta verilerle dosya aktarımı, updateApplicationContext — paylaşılan durumun senkronizasyonu. Tüm yöntemler, bağlantı yeniden kurulduğunda teslimatı garanti eder.
import WatchConnectivity
/// iPhone ve Apple Watch arasında senkronizasyon yöneticisi
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'dan saate veri gönderme
func sendWorkoutData(_ data: [String: Any]) {
guard session.isReachable else {
// Saat kullanılamıyorsa — bağlama kaydet
try? session.updateApplicationContext(data)
return
}
session.sendMessage(data, replyHandler: nil) { error in
print("Gönderme hatası: \(error.localizedDescription)")
}
}
// MARK: — Saatte veri alma
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 etkinleştirildi: \(activationState.rawValue)")
}
// watchOS'ta gerekli değil ancak protokol için zorunlu
func sessionDidBecomeInactive(_ session: WCSession) {}
func sessionDidDeactivate(_ session: WCSession) {
session.activate()
}
}ConnectivityManager, WCSession ile çalışmak için bir singleton uygular. sendWorkoutData, isReachable'i kontrol eder: saat etkinse, veriler sendMessage aracılığıyla hemen gönderilir; değilse — ertelenmiş teslimat için applicationContext'e kaydedilir. Alıcı taraftaki onReceiveMessage, gelen mesajları işler ve NotificationCenter aracılığıyla uygulamayı bilgilendirir.
transferFile, büyük miktarda verinin (görseller, ses dosyaları, arşivler) aktarılmasına olanak tanır. Maksimum dosya boyutu 100 MB'tır. Dosyalar, alıcı cihazdaki Inbox dizinine kaydedilir. transferUserInfo, 100 KB'a kadar JSON verileri için uygundur. Tüm yöntemler arka planda çalışır: cihaz kullanılamıyorsa, aktarım sıraya alınır ve bağlantı yeniden kurulduğunda otomatik olarak devam eder.
Bir watchOS uygulamasını yayınlamak iOS ile aynı kuralları izler: Apple Developer Program aboneliği (yıllık 99 $) ve App Review denetiminden geçmek gerekir. Uygulama, bir iOS uygulamasının parçası olarak veya bağımsız bir uygulama olarak App Store Connect'e yüklenir.
Bir watchOS uygulaması iki şekilde dağıtılabilir: bir iOS uygulama uzantısı olarak (iOS uygulama paketi watchOS .app dosyasını içerir) veya bağımsız bir uygulama olarak (iPhone olmadan indirilir ve çalışır). Bağımsız mod için Info.plist'te WKRunsIndependently = YES gereklidir. watchOS uygulama boyutu, hücresel ağ üzerinden indirmeler için 50 MB ile sınırlıdır.
watchOS için özel gereksinimler: uygulama, etkin bir iPhone olmadan doğru şekilde çalışmalıdır (bağımsız olarak beyan edilmişse), arayüz büyütme olmadan okunabilir olmalıdır, tüm etkileşimli öğeler en az 44 punto boyutunda olmalıdır. Yerleşik işlevselliği kopyalayan uygulamalar (örneğin, katma değeri olmayan bir nabız monitörü) yasaktır.
| Gereksinim | Açıklama |
|---|---|
| Uygulama boyutu | Hücresel indirme için 50 MB'a kadar, Wi-Fi ile 4 GB'a kadar |
| Bağımsız mod | Info.plist'te WKRunsIndependently = YES |
| Dokunma hedefleri | Tüm etkileşimli öğeler için minimum 44 pt |
| Güvenlik | HealthKit verileri izinsiz sunucuya gönderilemez |
| Performans | Uygulama başlatma 5 saniyeden fazla olamaz |
Sıkça Sorulan Sorular
Ana dil, SwiftUI framework'ü ile birlikte Swift'tir. UIKit üzerinde WatchKit de desteklenmektedir, ancak Apple tüm yeni watchOS projeleri için SwiftUI'yi önermektedir. Objective-C yalnızca 2019'dan önce yayınlanmış eski uygulamalarda kullanılır. watchOS 7'den itibaren tüm Apple örnekleri yalnızca SwiftUI kullanır.
watchOS 6'dan itibaren Apple Watch, iPhone olmadan doğrudan App Store'dan uygulama yükleyebilir. Ancak birçok özellik — veri senkronizasyonu, push bildirimleri, konum belirleme — iPhone ile eşleştirme gerektirir. Tamamen bağımsız uygulamalar, watchOS 9 ve derleme ayarlarında WKRunsIndependently ile mümkündür.
Apple Watch Series 9'un tipik pil ömrü karma modda 18 saate kadardır. GPS ve nabız monitörünün aktif kullanımıyla — 5-7 saat. watchOS 10, Smart Stack ve BGTaskScheduler aracılığıyla güç tüketimini optimize ederek watchOS 9'a kıyasla arka plan uygulama etkinliğini 4 kata kadar azaltır.
Watch Connectivity framework'ü dört yöntem sağlar: sendMessage (anında aktarım), transferUserInfo (arka plan), transferFile (100 MB'a kadar dosyalar) ve updateApplicationContext (durum senkronizasyonu). Tüm yöntemler, bağlantı kesintisinde otomatik kuyruklama ile Bluetooth veya Wi-Fi üzerinden çalışır.
Apple Watch Series 9 ve Ultra 2 şunları içerir: ivmeölçer, jiroskop, optik ve elektrikli nabız sensörü, SpO2 (oksijen doygunluğu), bilek sıcaklık sensörü, barometre, pusula, GPS L1+L5 ve mikrofon. Sensörlere erişim HealthKit ve Core Motion aracılığıyla sağlanır. Nabız ve SpO2 verileri, kullanıcının açık iznini gerektirir.
Özet
Anahtar teslim bir mobil uygulama geliştireceğiz
IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.