WatchKit — framework ng Apple para sa paggawa ng mga aplikasyon sa Apple Watch, inihayag noong 2014 kasama ng watchOS 1. Nagbibigay ito ng set ng mga elemento ng interface ng WKInterface — mga button, label, table, mapa — at mga mekanismo ng nabigasyon sa pagitan ng mga screen. Kahit na ang modernong pag-develop para sa watchOS ay lalong lumilipat sa SwiftUI, ang WatchKit ay nananatiling mahalaga para sa suporta ng mga umiiral na aplikasyon at mga sitwasyon kung saan kinakailangan ang ganap na kontrol sa interface. Ayon sa Apple Developer Documentation, 2026, ang WatchKit ay ginagamit pa rin sa 35% ng mga aplikasyon mula sa katalogo ng watchOS App Store, kabilang ang mga fitness app, navigator, at utility para sa mabilis na pag-access sa data.
Mga Pangunahing Punto
WatchKit — framework ng Apple na nagbibigay ng API para sa paggawa ng mga aplikasyon sa Apple Watch. Simula sa watchOS 2 (2015), ang mga WatchKit app ay direktang tumatakbo sa relo, hindi sa iPhone, na nagpapahintulot sa kanila na magproseso ng data at magpakita ng interface nang walang permanenteng koneksyon sa telepono. Bago ito sa watchOS 1, lahat ng app ay tumatakbo sa iPhone at ang relo ay isang remote control lamang para sa malayuang pagpapakita, na nagdudulot ng malaking pagkaantala sa UI.
Ang modernong arkitektura ng WatchKit ay may dalawang component: WatchKit App (Storyboard + mga resource sa relo) at WatchKit Extension (code na isinasagawa sa relo). Ini-install ng user ang parehong component sa pamamagitan ng App Store kapag ini-install ang parent iOS app. Nagbibigay ang WatchKit ng integrasyon sa mga function ng system: mga notification (sa pamamagitan ng UNUserNotificationCenter), komplikasyon (data sa mukha ng relo), Workout API, at HealthKit.
Ayon sa Counterpoint Research (2025), ang Apple Watch ay may 52% ng pandaigdigang merkado ng smartwatch, at ang karaniwang user ay nag-i-install ng 6–8 third-party na app gamit ang WatchKit o SwiftUI. Ang pinakasikat na kategorya ay fitness (56%), kalusugan (22%), nabigasyon (9%), at utility (8%).
SwiftUI — ang inirerekomendang paraan ng Apple para sa paggawa ng mga interface para sa watchOS simula sa watchOS 6. Nagbibigay ang SwiftUI ng deklaratibong syntax at awtomatikong adaptasyon sa mga laki ng screen. Gayunpaman, ang WatchKit ay nananatiling may kaugnayan para sa mga proyektong sinimulan bago ang pagdating ng SwiftUI, para sa paggamit ng mga partikular na elemento (WKInterfaceMap, WKInterfaceMovie), at sa mga kaso na nangangailangan ng suporta para sa mga bersyon ng watchOS na mas mababa sa 6.
| Kraytirya | WatchKit | SwiftUI |
|---|---|---|
| Rekomendasyon ng Apple | Legacy | Current |
| Pinakamababang watchOS | watchOS 1 | watchOS 6 |
| Dami ng code | Mas marami | Mas kaunti |
| Integrasyon ng Compose | Direkta sa pamamagitan ng mga klase | Sa pamamagitan ng WidgetKit |
| WKInterfaceMap | Oo | Map (MapKit) |
WKInterfaceController — base na klase para sa pamamahala ng screen sa WatchKit. Responsable ito sa lifecycle: pagsisimula (awake(withContext:)), paglitaw (willActivate), paglaho (didDeactivate), at paglipat ng konteksto sa pagitan ng mga controller. Bawat screen ng app ay kinakatawan ng isang hiwalay na subclass ng WKInterfaceController, na naka-link sa Storyboard sa pamamagitan ng Interface Builder. Ang nabigasyon ay maaaring hierarchical (push) o modal (present).
Nagbibigay ang WatchKit ng set ng mga elemento ng interface na may prefix na WKInterface: WKInterfaceLabel (teksto), WKInterfaceButton (button), WKInterfaceTable (talahanayan), WKInterfaceImage (larawan), WKInterfaceMap (mapa), at WKInterfaceGroup (container na may bilugang sulok at background). Lahat ng elemento ay gumagana nang asynchronous — ang mga pagbabago sa UI ay nakapila at inilalapat ng system sa pagitan ng mga cycle ng render, na ginagarantiyahan ang stable na 30 FPS sa screen ng relo.
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("Kamusta, Watch!")
}
override func willActivate() {
super.willActivate()
actionButton.setTitle("Simulan")
}
@IBAction func didTapButton() {
pushController(withName: "DetailController", context: nil)
}
}
WCSession — sentral na klase para sa two-way na komunikasyon sa pagitan ng Apple Watch at iPhone sa pamamagitan ng Bluetooth o Wi-Fi. Ang sesyon ay nagpapahintulot sa paglipat ng maliliit na diksyunaryo ng data (updateApplicationContext), pagpapadala ng mga mensahe na may agarang tugon (sendMessage), paglipat ng mga file (transferFile), at pagsasabay ng mga komplikadong bagay (transferUserInfo). Gumagana ang WCSession nang asynchronous at awtomatikong pumipili ng pinakamainam na channel ng komunikasyon.
Para magamit ang WCSession, kailangan i-activate ang sesyon sa parehong device. Gumagawa ang Watch app ng WCSession sa willActivate() method, at ang iOS app naman ay sa AppDelegate o SceneDelegate. Pagkatapos i-activate ang sesyon, awtomatikong nag-synchronize ang mga device ng konteksto kung posible. Mahalagang hawakan ang delegado ng WCSessionDelegate para sa pagtanggap ng papasok na data at pagsubaybay sa status ng koneksyon.
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 — maliliit na elemento ng data na ipinapakita sa mukha ng Apple Watch at nagbibigay ng mabilis na access sa impormasyon nang hindi binubuksan ang app. Nagbibigay ang WatchKit ng CLKComplicationDataSource — isang protocol na ang implementasyon ay nagpapahintulot sa app na magbigay ng data para sa mga komplikasyon. Ang mukha ng relo mismo ang nagpapasya kung aling mga posisyon ang available — bilog (circular), parihaba (rectangular), sulok (corner), o modular (modular).
Ang developer ay maaaring magbigay ng mga komplikasyon para sa tatlong laki ng pamilya: CLKComplicationFamily — circularSmall, extraLarge, graphicCircular, graphicRectangular, graphicCorner, graphicBezel, modularSmall, modularLarge, at utilitarianSmall/Large. Bawat pamilya ay may sariling laki at format ng pagpapakita. Maaaring suportahan ng app ang maraming pamilya, ngunit hindi bababa sa dalawa ang inirerekomenda — graphic at 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)
}
}
Ang paggawa ng WatchKit app ay nagsisimula sa pagdaragdag ng WatchKit App Target sa Xcode. Gumagawa ang Xcode ng Interface.storyboard na may initial controller at awtomatikong iniuugnay ito sa InterfaceController na klase. Nagdaragdag ang developer ng mga UI elemento sa pamamagitan ng Interface Builder at gumagawa ng IBOutlet para sa interaksyon mula sa code. Sa ibaba — isang kumpletong halimbawa ng controller na may talahanayan ng data na natanggap mula sa iPhone sa pamamagitan ng 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 — isang set ng mga klase ng WatchKit para sa paggawa ng mga fitness app na maaaring magpatakbo ng mga ehersisyo sa Apple Watch sa background. Nagbibigay ang API ng access sa mga sensor: accelerometer, gyroscope, pulse meter (sa pamamagitan ng HKHealthStore), at GPS (sa mga modelong Watch na may GPS). Ang mga ehersisyo ay sinisimulan sa pamamagitan ng HKWorkoutSession mula sa HealthKit, at ang data ng pulso ay ina-update sa real-time sa pamamagitan ng HKSampleQuery.
Ang pangunahing bentahe ng Workout API ay ang kakayahang gumana sa background. Kapag aktibo ang ehersisyo, hindi pinipigilan ng watchOS ang app kapag ibinaba ang kamay — patuloy na nangongolekta ng data ang mga sensor, at maaaring ipakita ng app ang pulso, distansya, bilis, at iba pang mga sukatan. Pagkatapos ng ehersisyo, ang data ay naka-sync sa Health App sa iPhone sa pamamagitan ng HealthKit, na tinitiyak ang isang pinag-isang profile ng fitness ng user.
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()
}
}
Mga Madalas Itanong
Inirerekomenda ng Apple ang SwiftUI para sa mga bagong watchOS app. Gamitin lamang ang WatchKit para sa suporta ng legacy projects o kung kinakailangan ang partikular na functionality tulad ng WKInterfaceMap na hindi available sa SwiftUI.
Ang WCSession ay sumusuporta sa naantalang paglipat sa pamamagitan ng transferUserInfo at transferFile. Ang data ay maihahatid sa susunod na pagtatag ng koneksyon sa pagitan ng relo at telepono, na ginagarantiyahan ang paghahatid kahit sa pansamantalang pagkawala ng koneksyon.
Ang mga app na isinulat sa WatchKit ay compatible sa Apple Watch Series 0 at mas bago (watchOS 1+). Gayunpaman, ang ilang function (GPS, pulse meter, dynamic island) ay available lamang sa ilang modelo.
Oo, maaari mong pagsamahin ang SwiftUI at WatchKit sa isang app. Gamitin ang WKHostingController para i-embed ang SwiftUI View sa WKInterfaceController o vice versa — i-integrate ang WKInterfaceObject sa pamamagitan ng UIViewRepresentable.
Patakbuhin ang dalawang app (iOS + watchOS) mula sa Xcode sa mga nakakonektang device. Gamitin ang debug console para obserbahan ang mga mensahe ng WCSessionDelegate. Tiyakin na ang parehong device ay nasa saklaw ng Bluetooth (hanggang 10 metro).
Buod
Gagawa kami ng mobile application na turnkey
Gumagawa ang IT Sectr ng mga iOS at Android application para sa mga startup at negosyo mula noong 2017. Magpapayo kami sa iyo at magmumungkahi ng pinakamahusay na solusyon.
Basahin din