watchOS: SwiftUI ile Apple Watch Geliştirmenin Temelleri

Yazar: IT Sectr Yayınlanma: 2026-02-07 Okuma süresi: 12 dk

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 — XNU çekirdeği tabanlı Apple Watch işletim sistemi, düşük güç tüketimine odaklı
  • SwiftUI — watchOS uygulama arayüzleri geliştirmek için birincil framework
  • Watch Connectivity — Apple Watch ve iPhone arasında veri alışverişi mekanizması
  • Smart Stack — watchOS 10'da tanıtılan akıllı widget yığını
  • HealthKit — sensörlere erişim framework'ü: nabız, SpO2, sıcaklık, ivmeölçer

watchOS nedir?

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.

watchOS sürüm geçmişi

İ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ılTemel Yenilik
Watch OS 12015İlk sürüm, yalnızca yerel Apple uygulamaları
watchOS 22015Açık SDK, üçüncü taraf uygulamalar, Watch Connectivity
watchOS 32016Anında uygulama başlatma, Dock, Scribble
watchOS 62019Saatte App Store, Cycle Tracking, Noise uygulaması
watchOS 92022İlaçlar, uyku evreleri, geliştirilmiş koşu arkadaşı
watchOS 102023Smart Stack, Double Tap, yeni saat yüzleri

watchOS Mimarisi

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ı.

Çekirdek ve sistem hizmetleri

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 — uygulama katmanı

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).

Arka plan modları ve güç tüketimi

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.

swift
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: Smart Stack ve Double Tap

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

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

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.

Geliştiriciler için yeni API'ler

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.

APIAmaçKullanılabilirlik
WidgetKit for watchOSSmart Stack için widget'larwatchOS 10
UIDoubleTapGestureDouble Tap hareketiwatchOS 10 (S9+)
MapKitSaatte harita görüntülemewatchOS 10
NavigationStackYeni navigasyon paradigmasıwatchOS 10
SwiftUI KeyframeKare kare animasyonwatchOS 10

Apple Watch için SwiftUI

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'a özgü SwiftUI bileşenleri

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.

swift
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 ve hareketler

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 ve watchOS Uygulama Bileşenleri

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.

watchOS uygulama yapısı

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şenWatchKitSwiftUI
EkranWKInterfaceControllerView
DüğmeWKInterfaceButtonButton
TabloWKInterfaceTableList
GrupWKInterfaceGroupVStack / HStack
GörselWKInterfaceImageImage / AsyncImage
EtiketWKInterfaceLabelText
HaritaWKInterfaceMapMap (watchOS 10+)
KomplikasyonCLKComplicationDataSourceComplicationDescriptor

Komplikasyonlar — saat yüzünde veri

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 ile iPhone Entegrasyonu

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.

Veri aktarım yöntemleri

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.

swift
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.

Dosya alışverişi ve senkronizasyon

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.

watchOS Uygulamaları Yayınlama

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.

Derleme ve dağıtım

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.

App Review gereksinimleri

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.

GereksinimAçıklama
Uygulama boyutuHücresel indirme için 50 MB'a kadar, Wi-Fi ile 4 GB'a kadar
Bağımsız modInfo.plist'te WKRunsIndependently = YES
Dokunma hedefleriTüm etkileşimli öğeler için minimum 44 pt
GüvenlikHealthKit verileri izinsiz sunucuya gönderilemez
PerformansUygulama başlatma 5 saniyeden fazla olamaz

Sıkça Sorulan Sorular

watchOS geliştirmede hangi diller kullanılır?

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 uygulamasının çalışması için iPhone gerekli mi?

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.

Aktif uygulama kullanımında Apple Watch pil ömrü nedir?

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.

iPhone ve Apple Watch arasında veri nasıl aktarılı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'ta hangi sensörler mevcuttur?

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

  • watchOS — XNU çekirdeğinde Apple'ın akıllı saat işletim sistemi, enerji verimliliği ve iPhone entegrasyonuna odaklı
  • SwiftUI — watchOS için birincil framework, bildirimsel düzen ve otomatik ekran boyutu uyarlaması sağlar
  • watchOS 10 Smart Stack, Double Tap (S9+), NavigationStack ve widget'lar için WidgetKit'i tanıttı
  • Watch Connectivity — dört aktarım moduyla Bluetooth/Wi-Fi üzerinden iPhone ile tek iletişim kanalı
  • HealthKit, Apple Watch sensörlerine erişim sağlar: nabız, SpO2, sıcaklık, ivmeölçer, GPS
  • Komplikasyonlar — CLKComplicationDataSource veya SwiftUI ile uygulanan saat yüzü widget'ları
  • Yayınlama Apple Developer Program, 50 MB'a kadar boyut (hücresel) ve sıkı performans kontrolü gerektirir

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.

Projeyi tartış

Ayrıca okuyun