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, 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).
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.
| Kriter | WatchKit | SwiftUI |
|---|---|---|
| Apple Tavsiyesi | Eski | Güncel |
| Minimum watchOS | watchOS 1 | watchOS 6 |
| Kod Hacmi | Daha fazla | Daha az |
| Komplikasyon Entegrasyonu | Sınıflar aracılığıyla doğrudan | WidgetKit aracılığıyla |
| WKInterfaceMap | Evet | Harita (MapKit) |
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.
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, 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.
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, 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.
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)
}
}
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.
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])
}
}
}
}
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.
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
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.
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 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.
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.
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
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.
Ayrıca okuyun