WatchKit — nedir, Apple Watch framework'ü ve watchOS

Yazar: IT Sectr Yayınlanma: 2026-06-16 Okuma süresi: 8 dk

WatchKit, 2014 yılında watchOS 1 ile birlikte duyurulan, Apple Watch üzerinde uygulama oluşturmak için bir Apple framework'üdür. WKInterface kullanıcı arayüzü öğeleri — düğmeler, etiketler, tablolar, haritalar — ve ekranlar arasında gezinme mekanizmaları sağlar. Modern watchOS geliştirme giderek SwiftUI'ye geçse de, WatchKit mevcut uygulamaları desteklemek ve arayüz üzerinde tam kontrol gerektiren senaryolar için önemini korumaktadır. Apple Developer Documentation, 2026'ya göre, WatchKit watchOS App Store kataloğundaki uygulamaların %35'inde hala kullanılmaktadır; fitness uygulamaları, navigasyon uygulamaları ve hızlı veri erişimi için araçlar dahil.

Önemli Noktalar

  • WatchKit, WKInterface UI bileşenlerini ve WKInterfaceController tabanlı navigasyonu kullanarak Apple Watch üzerinde uygulama oluşturmak için bir Apple framework'üdür.
  • WKInterfaceController, iOS'taki UIViewController'a benzer şekilde, yaşam döngüsü yönetimi ve hiyerarşi ile uygulamanın ana ekran sınıfıdır.
  • WCSession, Apple Watch ve iPhone arasında Bluetooth aracılığıyla veri, dosya ve bağlam aktarımına izin veren iletişim mekanizmasıdır.
  • WKInterfaceDevice, cihaz bilgilerini sağlar: ekran boyutu, model, watchOS sürümü ve donanım bileşen yetenekleri.
  • Complications Controller, CLKComplicationDataSource aracılığıyla etkinleştirilen, saat yüzünde veri görüntülemek için bir API'dir.

WatchKit Nedir ve Nasıl Çalışır?

WatchKit, Apple Watch üzerinde uygulama oluşturmak için API sağlayan bir Apple framework'üdür. watchOS 2'den (2015) itibaren WatchKit uygulamaları iPhone'da değil, doğrudan saatte çalışır ve bu sayede telefonla sürekli bağlantı olmadan veri işleme ve arayüz görüntüleme yapabilirler. Bundan önce, watchOS 1'de tüm uygulamalar iPhone'da çalışıyordu ve saat yalnızca bir uzak ekrandı, bu da kullanıcı arayüzünde önemli gecikmelere neden oluyordu.

Modern WatchKit mimarisi iki bileşen içerir: WatchKit App (saatte Storyboard + kaynaklar) ve WatchKit Extension (saatte çalışan kod). Kullanıcı, ana iOS uygulamasını yüklerken App Store aracılığıyla her iki bileşeni de yükler. WatchKit, sistem işlevleriyle entegre olur: bildirimler (UNUserNotificationCenter aracılığıyla), komplikasyonlar (saat yüzünde veri), Workout API ve HealthKit.

Counterpoint Research (2025)'e göre, Apple Watch küresel akıllı saat pazarının %52'sini elinde tutuyor ve ortalama bir kullanıcı WatchKit veya SwiftUI kullanan 6-8 üçüncü taraf uygulama yüklüyor. En popüler kategoriler fitness (%56), sağlık (%22), navigasyon (%9) ve araçlardır (%8).

watchOS için WatchKit vs SwiftUI

SwiftUI, watchOS 6'dan itibaren watchOS için arayüz oluşturmanın Apple tarafından önerilen yoludur. SwiftUI, bildirimsel sözdizimi ve ekran boyutlarına otomatik uyum sağlar. Ancak WatchKit, SwiftUI ortaya çıkmadan önce başlatılan projeler, belirli öğeleri (WKInterfaceMap, WKInterfaceMovie) kullanmak ve watchOS 6'nın altındaki sürümlerin desteğinin gerektiği durumlarda geçerliliğini korur.

KriterWatchKitSwiftUI
Apple TavsiyesiEskiGüncel
Minimum watchOSwatchOS 1watchOS 6
Kod HacmiDaha fazlaDaha az
Komplikasyon EntegrasyonuSınıflar aracılığıyla doğrudanWidgetKit aracılığıyla
WKInterfaceMapEvetHarita (MapKit)

WatchKit Arayüzü: WKInterfaceController ve Öğeler

WKInterfaceController, WatchKit'te ekranları yönetmek için temel sınıftır. Yaşam döngüsünü yönetir: başlatma (awake(withContext:)), görünme (willActivate), kaybolma (didDeactivate) ve denetleyiciler arasında bağlam aktarımı. Her uygulama ekranı, Interface Builder aracılığıyla Storyboard'a bağlı ayrı bir WKInterfaceController alt sınıfı tarafından temsil edilir. Gezinme hiyerarşik (push) veya kalıcı (present) olabilir.

WatchKit, WKInterface ön ekine sahip bir dizi arayüz öğesi sağlar: WKInterfaceLabel (metin), WKInterfaceButton (düğme), WKInterfaceTable (tablo), WKInterfaceImage (görüntü), WKInterfaceMap (harita) ve WKInterfaceGroup (yuvarlak köşeli ve arka planlı kap). Tüm öğeler eşzamansız olarak çalışır — UI değişiklikleri sıraya alınır ve sistem tarafından işleme döngüleri arasında uygulanır, böylece saat ekranında sabit 30 FPS sağlanır.

Temel WKInterfaceController

swift
class MainInterfaceController: WKInterfaceController {
    @IBOutlet weak var titleLabel: WKInterfaceLabel!
    @IBOutlet weak var actionButton: WKInterfaceButton!
    
    override func awake(with context: Any?) {
        super.awake(with: context)
        titleLabel.setText("Merhaba, Watch!")
    }
    
    override func willActivate() {
        super.willActivate()
        actionButton.setTitle("Başlat")
    }
    
    @IBAction func didTapButton() {
        pushController(withName: "DetailController", context: nil)
    }
}

WCSession: Watch ve iPhone Arasında İletişim

WCSession, Bluetooth veya Wi-Fi aracılığıyla Apple Watch ve iPhone arasında çift yönlü iletişim için merkezi sınıftır. Oturum, küçük veri sözlüklerini aktarmaya (updateApplicationContext), anında yanıtlı mesajlar göndermeye (sendMessage), dosyaları aktarmaya (transferFile) ve karmaşık nesneleri senkronize etmeye (transferUserInfo) olanak tanır. WCSession eşzamansız olarak çalışır ve otomatik olarak en uygun iletişim kanalını seçer.

WCSession'ı kullanmak için oturumu her iki cihazda da etkinleştirmeniz gerekir. Watch uygulaması, willActivate() yönteminde bir WCSession oluştururken, iOS uygulaması bunu AppDelegate veya SceneDelegate'te yapar. Etkinleştirmeden sonra cihazlar, mümkün olduğunda bağlamı otomatik olarak senkronize eder. Gelen verileri almak ve bağlantı durumunu izlemek için WCSessionDelegate'ı işlemek önemlidir.

Watch Tarafında WCSession Örneği

swift
class SessionManager: NSObject, WCSessionDelegate {
    private let session = WCSession.default
    
    func activate() {
        session.delegate = self
        session.activate()
    }
    
    func sendDataToPhone(key: String, value: Any) {
        guard session.isReachable else { return }
        session.sendMessage([key: value],
            replyHandler: { response in
                print("Response: \(response)")
            },
            errorHandler: { error in
                print("Error: \(error.localizedDescription)")
            }
        )
    }
    
    func session(_ session: WCSession,
               didReceiveMessage message: [String: Any],
               replyHandler: @escaping ([String: Any]) -> Void) {
        handleIncomingData(message)
        replyHandler(["status": "ok"])
    }
}

Complications: Saat Yüzünde Veri

Complications, Apple Watch yüzünde görüntülenen ve uygulamayı açmadan bilgilere hızlı erişim sağlayan küçük veri öğeleridir. WatchKit, uygulamanın komplikasyonlar için veri sağlamasına olanak tanıyan CLKComplicationDataSource protokolünü sağlar. Saat yüzü, hangi konumların kullanılabilir olduğuna kendisi karar verir — dairesel, dikdörtgen, köşe veya modüler.

Geliştirici, üç boyut ailesi için komplikasyonlar sağlayabilir: CLKComplicationFamily — circularSmall, extraLarge, graphicCircular, graphicRectangular, graphicCorner, graphicBezel, modularSmall, modularLarge ve utilitarianSmall/Large. Her ailenin kendi boyutları ve görüntüleme biçimi vardır. Bir uygulama birden çok aileyi destekleyebilir, ancak en az iki — grafik ve modüler — önerilir.

CLKComplicationDataSource Örneği

swift
class ComplicationController: NSObject, CLKComplicationDataSource {
    func getCurrentTimelineEntry(
        for complication: CLKComplication,
        withHandler handler: @escaping (CLKComplicationTimelineEntry?) -> Void
    ) {
        let template = CLKComplicationTemplateModularSmallSimpleText()
        template.textProvider = CLKSimpleTextProvider(text: "96%")
        let entry = CLKComplicationTimelineEntry(
            date: Date(),
            complicationTemplate: template
        )
        handler(entry)
    }
}

Swift ile WatchKit Uygulaması Örneği

WatchKit uygulaması oluşturmak, Xcode'da bir WatchKit App Target eklemekle başlar. Xcode, bir başlangıç denetleyicisi ile Interface.storyboard oluşturur ve onu otomatik olarak InterfaceController sınıfına bağlar. Geliştirici, Interface Builder aracılığıyla UI öğeleri ekler ve kod etkileşimi için IBOutlets oluşturur. Aşağıda, WCSession aracılığıyla iPhone'dan alınan verilerin tablosuna sahip tam bir denetleyici örneği verilmiştir.

swift
class ItemRowController: NSObject {
    @IBOutlet weak var itemLabel: WKInterfaceLabel!
    
    func configure(with text: String) {
        itemLabel.setText(text)
    }
}

class ListController: WKInterfaceController {
    @IBOutlet weak var itemsTable: WKInterfaceTable!
    private var items: [String] = []
    
    override func awake(with context: Any?) {
        super.awake(with: context)
        items = context as? [String] ?? []
        
        itemsTable.setNumberOfRows(items.count,
            withRowType: "ItemRow")
        for i in 0..if let row = itemsTable
                .rowController(at: i) as? ItemRowController {
                row.configure(with: items[i])
            }
        }
    }
}

Fitness Uygulamaları için Workout API

Workout API, Apple Watch üzerinde arka planda egzersiz çalıştırabilen fitness uygulamaları oluşturmak için bir WatchKit sınıf koleksiyonudur. API, sensörlere erişim sağlar: ivmeölçer, jiroskop, kalp atış hızı monitörü (HKHealthStore aracılığıyla) ve GPS (GPS'li Watch modellerinde). Egzersizler, HealthKit'ten HKWorkoutSession aracılığıyla başlatılır ve kalp atış hızı verileri HKSampleQuery aracılığıyla gerçek zamanlı olarak güncellenir.

Workout API'nin temel avantajı arka planda çalışmasıdır. Bir egzersiz etkin olduğunda, kullanıcı bileğini indirdiğinde watchOS uygulamayı askıya almaz — sensörler veri toplamaya devam eder ve uygulama kalp atış hızı, mesafe, tempo ve diğer metrikleri görüntüleyebilir. Egzersiz sona erdikten sonra veriler, HealthKit aracılığıyla iPhone'daki Sağlık uygulamasıyla senkronize edilir ve kullanıcı için birleşik bir fitness profili sağlar.

Sensörlerle Egzersiz Başlatma

swift
class WorkoutManager: NSObject {
    private let healthStore = HKHealthStore()
    private var session: HKWorkoutSession!
    
    func startWorkout(activityType: HKWorkoutActivityType) {
        let config = HKWorkoutConfiguration()
        config.activityType = activityType
        config.locationType = .outdoor
        
        session = try! HKWorkoutSession(
            healthStore: healthStore,
            configuration: config
        )
        session.startActivity(with: Date())
    }
    
    func stopWorkout() {
        session.stopActivity(with: Date())
        session.end()
    }
}

Sıkça Sorulan Sorular

Yeni bir projede WatchKit kullanmalı mıyım?

Apple, yeni watchOS uygulamaları için SwiftUI'yi önermektedir. WatchKit'i yalnızca eski projeleri desteklemek için veya SwiftUI'de bulunmayan WKInterfaceMap gibi belirli işlevlere ihtiyacınız varsa kullanın.

Bağlantı olmadan Watch'tan iPhone'a veri nasıl aktarılır?

WCSession, transferUserInfo ve transferFile aracılığıyla ertelenmiş aktarımı destekler. Veriler, saat ve telefon arasında bir sonraki bağlantı kurulduğunda teslim edilir ve geçici bağlantı kesintilerinde bile teslimatı garanti eder.

WatchKit uygulamaları tüm Apple Watch modellerinde çalışır mı?

WatchKit ile yazılmış uygulamalar Apple Watch Series 0 ve daha yenileri (watchOS 1+) ile uyumludur. Ancak bazı özellikler (GPS, kalp atış hızı monitörü, Dynamic Island) yalnızca belirli modellerde kullanılabilir.

Aynı uygulamada SwiftUI ve WatchKit kullanabilir miyim?

Evet, tek bir uygulamada SwiftUI ve WatchKit'i birleştirebilirsiniz. WKInterfaceController'a SwiftUI görünümleri gömmek için WKHostingController'ı kullanın veya UIViewRepresentable aracılığıyla WKInterfaceObjects'u entegre edin.

Gerçek cihazlarda WCSession nasıl hata ayıklanır?

Bağlı cihazlarda Xcode'dan her iki uygulamayı (iOS + watchOS) çalıştırın. WCSessionDelegate mesajlarını izlemek için hata ayıklama konsolunu kullanın. Her iki cihazın da Bluetooth menzilinde (10 metreye kadar) olduğundan emin olun.

Özet

  • WatchKit, WKInterface UI bileşenlerini ve WKInterfaceController denetleyicilerini kullanarak Apple Watch'ta uygulama oluşturmak için bir Apple framework'üdür.
  • WCSession, mesaj, dosya ve bağlam desteği ile Bluetooth/Wi-Fi aracılığıyla Watch ve iPhone arasında çift yönlü iletişim için merkezi mekanizmadır.
  • Complications, 9 görüntüleme ailesini destekleyen CLKComplicationDataSource aracılığıyla Apple Watch yüzündeki verilerdir.
  • Workout API, HKWorkoutSession aracılığıyla kalp atış hızı, GPS ve ivmeölçer verilerini arka planda toplayan fitness uygulamaları için bir sınıf koleksiyonudur.
  • SwiftUI, yeni projeler için Apple'ın önerdiği yaklaşımdır, ancak WatchKit eski uygulamalar ve belirli işlevler için geçerliliğini korur.
  • Birleştirme, WKHostingController ve UIViewRepresentable aracılığıyla tek bir uygulamada WatchKit ve SwiftUI'yi birleştirmek mümkündür.

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