WatchKit — framework Apple untuk membuat aplikasi di Apple Watch, diumumkan pada tahun 2014 bersama watchOS 1. Menyediakan serangkaian elemen antarmuka WKInterface — tombol, label, tabel, peta — dan mekanisme navigasi antar layar. Meskipun pengembangan watchOS modern semakin beralih ke SwiftUI, WatchKit tetap penting untuk mendukung aplikasi yang ada dan skenario yang memerlukan kontrol penuh atas antarmuka. Menurut Apple Developer Documentation, 2026, WatchKit masih digunakan di 35% aplikasi dari katalog watchOS App Store, termasuk aplikasi kebugaran, navigator, dan utilitas untuk akses cepat ke data.
Poin Penting
WatchKit — framework Apple yang menyediakan API untuk membuat aplikasi di Apple Watch. Mulai dari watchOS 2 (2015), aplikasi WatchKit berjalan langsung di jam, bukan di iPhone, memungkinkan mereka memproses data dan menampilkan antarmuka tanpa koneksi permanen ke telepon. Sebelumnya di watchOS 1, semua aplikasi berjalan di iPhone dan jam hanyalah remote control tampilan jarak jauh, yang menyebabkan keterlambatan UI yang signifikan.
Arsitektur WatchKit modern mencakup dua komponen: WatchKit App (Storyboard + sumber daya di jam) dan WatchKit Extension (kode yang dijalankan di jam). Pengguna menginstal kedua komponen melalui App Store saat menginstal aplikasi iOS induk. WatchKit menyediakan integrasi dengan fungsi sistem: notifikasi (melalui UNUserNotificationCenter), komplikasi (data di muka jam), Workout API, dan HealthKit.
Menurut Counterpoint Research (2025), Apple Watch menguasai 52% pasar jam tangan pintar global, dan rata-rata pengguna menginstal 6–8 aplikasi pihak ketiga menggunakan WatchKit atau SwiftUI. Kategori paling populer adalah kebugaran (56%), kesehatan (22%), navigasi (9%), dan utilitas (8%).
SwiftUI — cara yang direkomendasikan Apple untuk membuat antarmuka watchOS mulai dari watchOS 6. SwiftUI menyediakan sintaks deklaratif dan adaptasi otomatis ke ukuran layar. Namun WatchKit tetap relevan untuk proyek yang dimulai sebelum kemunculan SwiftUI, untuk penggunaan elemen spesifik (WKInterfaceMap, WKInterfaceMovie), dan dalam kasus yang memerlukan dukungan untuk versi watchOS di bawah 6.
| Kriteria | WatchKit | SwiftUI |
|---|---|---|
| Rekomendasi Apple | Legacy | Current |
| watchOS Minimal | watchOS 1 | watchOS 6 |
| Volume Kode | Lebih banyak | Lebih sedikit |
| Integrasi Compose | Langsung melalui kelas | Melalui WidgetKit |
| WKInterfaceMap | Ya | Map (MapKit) |
WKInterfaceController — kelas dasar untuk mengelola layar di WatchKit. Bertanggung jawab atas siklus hidup: inisialisasi (awake(withContext:)), kemunculan (willActivate), penghilangan (didDeactivate), dan transfer konteks antar controller. Setiap layar aplikasi diwakili oleh subclass WKInterfaceController terpisah, terhubung ke Storyboard melalui Interface Builder. Navigasi bisa hierarkis (push) atau modal (present).
WatchKit menyediakan serangkaian elemen antarmuka dengan awalan WKInterface: WKInterfaceLabel (teks), WKInterfaceButton (tombol), WKInterfaceTable (tabel), WKInterfaceImage (gambar), WKInterfaceMap (peta), dan WKInterfaceGroup (wadah dengan sudut membulat dan latar belakang). Semua elemen bekerja secara asinkron — perubahan UI diantrekan dan diterapkan oleh sistem di antara siklus render, menjamin 30 FPS yang stabil di layar jam.
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("Halo, Watch!")
}
override func willActivate() {
super.willActivate()
actionButton.setTitle("Mulai")
}
@IBAction func didTapButton() {
pushController(withName: "DetailController", context: nil)
}
}
WCSession — kelas pusat untuk komunikasi dua arah antara Apple Watch dan iPhone melalui Bluetooth atau Wi-Fi. Sesi memungkinkan transfer kamus data kecil (updateApplicationContext), mengirim pesan dengan respons segera (sendMessage), mentransfer file (transferFile), dan menyinkronkan objek kompleks (transferUserInfo). WCSession bekerja secara asinkron dan secara otomatis memilih saluran komunikasi optimal.
Untuk menggunakan WCSession, sesi harus diaktifkan di kedua perangkat. Aplikasi Watch membuat WCSession di metode willActivate(), dan aplikasi iOS di AppDelegate atau SceneDelegate. Setelah sesi diaktifkan, perangkat secara otomatis menyinkronkan konteks jika memungkinkan. Penting untuk menangani delegasi WCSessionDelegate untuk menerima data masuk dan melacak status koneksi.
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 — elemen data kecil yang ditampilkan di muka jam Apple Watch dan menyediakan akses cepat ke informasi tanpa membuka aplikasi. WatchKit menyediakan CLKComplicationDataSource — protokol yang implementasinya memungkinkan aplikasi memasok data untuk komplikasi. Muka jam sendiri memutuskan posisi mana yang tersedia — melingkar (circular), persegi panjang (rectangular), sudut (corner), atau modular (modular).
Pengembang dapat menyediakan komplikasi untuk tiga ukuran keluarga: CLKComplicationFamily — circularSmall, extraLarge, graphicCircular, graphicRectangular, graphicCorner, graphicBezel, modularSmall, modularLarge, dan utilitarianSmall/Large. Setiap keluarga memiliki ukuran dan format tampilan sendiri. Aplikasi dapat mendukung beberapa keluarga, tetapi setidaknya dua disarankan — grafis dan modular.
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)
}
}
Membuat aplikasi WatchKit dimulai dengan menambahkan WatchKit App Target di Xcode. Xcode menghasilkan Interface.storyboard dengan controller awal dan secara otomatis menghubungkannya ke kelas InterfaceController. Pengembang menambahkan elemen UI melalui Interface Builder dan membuat IBOutlet untuk interaksi dari kode. Di bawah ini — contoh lengkap controller dengan tabel data yang diterima dari iPhone melalui WCSession.
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 — kumpulan kelas WatchKit untuk membuat aplikasi kebugaran yang dapat menjalankan latihan di Apple Watch di latar belakang. API menyediakan akses ke sensor: akselerometer, giroskop, pengukur denyut nadi (melalui HKHealthStore), dan GPS (pada model Watch dengan GPS). Latihan dimulai melalui HKWorkoutSession dari HealthKit, dan data denyut nadi diperbarui secara real-time melalui HKSampleQuery.
Keuntungan utama Workout API adalah kemampuan bekerja di latar belakang. Saat latihan aktif, watchOS tidak menghentikan aplikasi saat tangan diturunkan — sensor terus mengumpulkan data, dan aplikasi dapat menampilkan denyut nadi, jarak, kecepatan, dan metrik lainnya. Setelah latihan selesai, data disinkronkan dengan Health App di iPhone melalui HealthKit, memastikan profil kebugaran pengguna yang terpadu.
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()
}
}
Pertanyaan Umum
Apple merekomendasikan SwiftUI untuk aplikasi watchOS baru. Gunakan WatchKit hanya untuk mendukung proyek legacy atau jika diperlukan fungsionalitas spesifik seperti WKInterfaceMap yang tidak tersedia di SwiftUI.
WCSession mendukung transfer tertunda melalui transferUserInfo dan transferFile. Data akan dikirimkan pada saat koneksi berikutnya antara jam dan telepon, menjamin pengiriman bahkan saat kehilangan koneksi sementara.
Aplikasi yang ditulis dengan WatchKit kompatibel dengan Apple Watch Series 0 dan yang lebih baru (watchOS 1+). Namun beberapa fitur (GPS, pengukur denyut nadi, pulau dinamis) hanya tersedia di model tertentu.
Ya, Anda dapat menggabungkan SwiftUI dan WatchKit dalam satu aplikasi. Gunakan WKHostingController untuk menyematkan SwiftUI View di WKInterfaceController atau sebaliknya — integrasikan WKInterfaceObject melalui UIViewRepresentable.
Jalankan kedua aplikasi (iOS + watchOS) dari Xcode di perangkat yang terhubung. Gunakan konsol debugging untuk mengamati pesan WCSessionDelegate. Pastikan kedua perangkat berada dalam jangkauan Bluetooth (hingga 10 meter).
Kesimpulan
Kami akan mengembangkan aplikasi seluler turnkey
IT Sectr membuat aplikasi iOS dan Android untuk startup dan bisnis sejak 2017. Kami akan memberi saran dan mengusulkan solusi terbaik.
Baca juga