WatchKit เป็นเฟรมเวิร์กของ Apple สำหรับสร้างแอปพลิเคชันบน Apple Watch ซึ่งประกาศในปี 2014 พร้อมกับ watchOS 1 โดยมีชุดองค์ประกอบอินเทอร์เฟซ WKInterface — ปุ่ม ป้ายกำกับ ตาราง แผนที่ — และกลไกการนำทางระหว่างหน้าจอ แม้ว่าการพัฒนา watchOS สมัยใหม่จะเปลี่ยนไปใช้ SwiftUI มากขึ้น แต่ WatchKit ยังคงมีความสำคัญสำหรับการสนับสนุนแอปพลิเคชันที่มีอยู่และสถานการณ์ที่ต้องการควบคุมอินเทอร์เฟซอย่างเต็มที่ ตามข้อมูลของ Apple Developer Documentation, 2026 WatchKit ยังคงใช้ใน 35% ของแอปในแคตตาล็อก watchOS App Store รวมถึงแอปฟิตเนส ตัวนำทาง และยูทิลิตี้สำหรับการเข้าถึงข้อมูลอย่างรวดเร็ว
ประเด็นสำคัญ
WatchKit เป็นเฟรมเวิร์กของ Apple ที่ให้ API สำหรับสร้างแอปพลิเคชันบน Apple Watch ตั้งแต่ watchOS 2 (2015) เป็นต้นมา แอป WatchKit ทำงานโดยตรงบนนาฬิกาแทนที่จะทำงานบน iPhone ทำให้สามารถประมวลผลข้อมูลและแสดงอินเทอร์เฟซโดยไม่ต้องเชื่อมต่อกับโทรศัพท์อย่างต่อเนื่อง ก่อนหน้านั้นใน watchOS 1 แอปทั้งหมดทำงานบน iPhone และนาฬิกาเป็นเพียงจอแสดงผลระยะไกล ซึ่งทำให้เกิดความล่าช้าอย่างมากใน UI
สถาปัตยกรรม WatchKit สมัยใหม่ประกอบด้วยสององค์ประกอบ: WatchKit App (Storyboard + ทรัพยากรบนนาฬิกา) และ WatchKit Extension (โค้ดที่ทำงานบนนาฬิกา) ผู้ใช้ติดตั้งทั้งสององค์ประกอบผ่าน App Store เมื่อติดตั้งแอปพลิเคชัน iOS หลัก WatchKit ผสานรวมกับฟังก์ชันระบบ: การแจ้งเตือน (ผ่าน UNUserNotificationCenter), คอมพลิเคชัน (ข้อมูลบนหน้าปัด), Workout API และ HealthKit
ตามข้อมูลของ Counterpoint Research (2025) Apple Watch ครองส่วนแบ่ง 52% ของตลาดสมาร์ทวอทช์ทั่วโลก และผู้ใช้ทั่วไปติดตั้งแอปของบุคคลที่สาม 6–8 รายการที่ใช้ WatchKit หรือ SwiftUI หมวดหมู่ที่ได้รับความนิยมมากที่สุดคือฟิตเนส (56%) สุขภาพ (22%) การนำทาง (9%) และยูทิลิตี้ (8%)
SwiftUI เป็นวิธีที่ Apple แนะนำสำหรับการสร้างอินเทอร์เฟซสำหรับ watchOS ตั้งแต่ watchOS 6 เป็นต้นไป SwiftUI มีรูปแบบไวยากรณ์แบบประกาศและการปรับให้เข้ากับขนาดหน้าจอโดยอัตโนมัติ อย่างไรก็ตาม WatchKit ยังคงมีความเกี่ยวข้องสำหรับโครงการที่เริ่มต้นก่อนที่ SwiftUI จะมีขึ้น สำหรับการใช้องค์ประกอบเฉพาะ (WKInterfaceMap, WKInterfaceMovie) และในกรณีที่ต้องการรองรับเวอร์ชัน watchOS ที่ต่ำกว่า 6
| เกณฑ์ | WatchKit | SwiftUI |
|---|---|---|
| คำแนะนำของ Apple | รุ่นเก่า | ปัจจุบัน |
| watchOS ขั้นต่ำ | watchOS 1 | watchOS 6 |
| ปริมาณโค้ด | มากกว่า | น้อยกว่า |
| การผสานรวมคอมพลิเคชัน | โดยตรงผ่านคลาส | ผ่าน WidgetKit |
| WKInterfaceMap | ใช่ | แผนที่ (MapKit) |
WKInterfaceController เป็นคลาสพื้นฐานสำหรับจัดการหน้าจอใน WatchKit โดยจัดการวงจรชีวิต: การเริ่มต้น (awake(withContext:)), การปรากฏ (willActivate), การหายไป (didDeactivate) และการถ่ายโอนบริบทระหว่างตัวควบคุม แต่ละหน้าจอของแอปพลิเคชันจะแสดงโดยคลาสย่อย WKInterfaceController ที่แยกต่างหากซึ่งเชื่อมต่อกับ Storyboard ผ่าน Interface Builder การนำทางสามารถเป็นแบบลำดับชั้น (push) หรือแบบโมดอล (present)
WatchKit มีชุดองค์ประกอบอินเทอร์เฟซที่มีคำนำหน้า WKInterface: WKInterfaceLabel (ข้อความ), WKInterfaceButton (ปุ่ม), WKInterfaceTable (ตาราง), WKInterfaceImage (รูปภาพ), WKInterfaceMap (แผนที่) และ WKInterfaceGroup (คอนเทนเนอร์ที่มีมุมโค้งมนและพื้นหลัง) องค์ประกอบทั้งหมดทำงานแบบอะซิงโครนัส — การเปลี่ยนแปลง UI จะถูกจัดคิวและนำไปใช้โดยระบบระหว่างรอบการเรนเดอร์ ซึ่งรับประกัน 30 FPS ที่เสถียรบนหน้าจอนาฬิกา
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("สวัสดี, Watch!")
}
override func willActivate() {
super.willActivate()
actionButton.setTitle("เริ่มต้น")
}
@IBAction func didTapButton() {
pushController(withName: "DetailController", context: nil)
}
}
WCSession เป็นคลาสหลักสำหรับการสื่อสารสองทางระหว่าง Apple Watch และ iPhone ผ่าน Bluetooth หรือ Wi-Fi เซสชันอนุญาตให้ถ่ายโอนพจนานุกรมข้อมูลขนาดเล็ก (updateApplicationContext), ส่งข้อความพร้อมการตอบกลับทันที (sendMessage), ถ่ายโอนไฟล์ (transferFile) และซิงโครไนซ์ออบเจกต์ที่ซับซ้อน (transferUserInfo) WCSession ทำงานแบบอะซิงโครนัสและเลือกช่องทางการสื่อสารที่เหมาะสมที่สุดโดยอัตโนมัติ
ในการใช้ WCSession คุณต้องเปิดใช้งานเซสชันบนอุปกรณ์ทั้งสอง แอป Watch สร้าง WCSession ในเมธอด willActivate() ในขณะที่แอป iOS ทำใน AppDelegate หรือ SceneDelegate หลังจากเปิดใช้งาน อุปกรณ์จะซิงโครไนซ์บริบทโดยอัตโนมัติเมื่อเป็นไปได้ การจัดการ WCSessionDelegate เป็นสิ่งสำคัญสำหรับการรับข้อมูลขาเข้าและตรวจสอบสถานะการเชื่อมต่อ
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 และให้การเข้าถึงข้อมูลอย่างรวดเร็วโดยไม่ต้องเปิดแอป WatchKit มี CLKComplicationDataSource — โปรโตคอลที่การนำไปใช้ช่วยให้แอปสามารถส่งข้อมูลสำหรับคอมพลิเคชันได้ หน้าปัดนาฬิกาจะตัดสินใจเองว่าตำแหน่งใดบ้างที่พร้อมใช้งาน — วงกลม สี่เหลี่ยม มุม หรือโมดูลาร์
นักพัฒนาสามารถให้คอมพลิเคชันสำหรับสามตระกูลขนาด: CLKComplicationFamily — circularSmall, extraLarge, graphicCircular, graphicRectangular, graphicCorner, graphicBezel, modularSmall, modularLarge และ utilitarianSmall/Large แต่ละตระกูลมีขนาดและรูปแบบการแสดงผลของตัวเอง แอปสามารถรองรับหลายตระกูล แต่แนะนำอย่างน้อยสองตระกูล — กราฟิกและโมดูลาร์
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 เริ่มต้นด้วยการเพิ่ม WatchKit App Target ใน Xcode Xcode สร้าง Interface.storyboard พร้อมตัวควบคุมเริ่มต้นและเชื่อมโยงกับคลาส InterfaceController โดยอัตโนมัติ นักพัฒนาเพิ่มองค์ประกอบ UI ผ่าน Interface Builder และสร้าง IBOutlets สำหรับการโต้ตอบจากโค้ด ด้านล่างเป็นตัวอย่างที่สมบูรณ์ของตัวควบคุมพร้อมตารางข้อมูลที่ได้รับจาก iPhone ผ่าน 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 คือชุดคลาส WatchKit สำหรับสร้างแอปฟิตเนสที่สามารถเรียกใช้การออกกำลังกายบน Apple Watch ในพื้นหลัง API ให้การเข้าถึงเซ็นเซอร์: มาตรวัดความเร่ง ไจโรสโคป เครื่องวัดอัตราการเต้นของหัวใจ (ผ่าน HKHealthStore) และ GPS (บน Watch รุ่นที่มี GPS) การออกกำลังกายเริ่มต้นผ่าน HKWorkoutSession จาก HealthKit และข้อมูลอัตราการเต้นของหัวใจจะอัปเดตแบบเรียลไทม์ผ่าน HKSampleQuery
ข้อได้เปรียบหลักของ Workout API คือการทำงานในพื้นหลัง เมื่อการออกกำลังกายทำงานอยู่ watchOS จะไม่ระงับแอปเมื่อผู้ใช้ลดข้อมือลง — เซ็นเซอร์ยังคงเก็บข้อมูลต่อไปและแอปสามารถแสดงอัตราการเต้นของหัวใจ ระยะทาง จังหวะ และเมตริกอื่น ๆ หลังจากการออกกำลังกายสิ้นสุดลง ข้อมูลจะซิงค์กับแอปสุขภาพบน iPhone ผ่าน HealthKit ซึ่งให้โปรไฟล์ฟิตเนสแบบครบวงจรสำหรับผู้ใช้
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()
}
}
คำถามที่พบบ่อย
Apple แนะนำ SwiftUI สำหรับแอป watchOS ใหม่ ใช้ WatchKit เฉพาะสำหรับการสนับสนุนโปรเจกต์เก่าหรือหากคุณต้องการฟังก์ชันเฉพาะเช่น WKInterfaceMap ที่ไม่มีใน SwiftUI
WCSession รองรับการถ่ายโอนแบบรอการตัดบัญชีผ่าน transferUserInfo และ transferFile ข้อมูลจะถูกส่งในการเชื่อมต่อครั้งถัดไประหว่างนาฬิกาและโทรศัพท์ ซึ่งรับประกันการส่งแม้ในกรณีที่สูญเสียการเชื่อมต่อชั่วคราว
แอปที่เขียนด้วย WatchKit เข้ากันได้กับ Apple Watch Series 0 และใหม่กว่า (watchOS 1+) อย่างไรก็ตาม ฟีเจอร์บางอย่าง (GPS, เครื่องวัดอัตราการเต้นของหัวใจ, Dynamic Island) มีให้ใช้งานเฉพาะในบางรุ่นเท่านั้น
ได้ คุณสามารถรวม SwiftUI และ WatchKit ในแอปเดียว ใช้ WKHostingController เพื่อฝัง SwiftUI View ใน WKInterfaceController หรือรวม WKInterfaceObjects ผ่าน UIViewRepresentable
เรียกใช้ ทั้งสองแอป (iOS + watchOS) จาก Xcode บนอุปกรณ์ที่เชื่อมต่อ ใช้คอนโซลดีบักเพื่อตรวจสอบข้อความ WCSessionDelegate ตรวจสอบให้แน่ใจว่าอุปกรณ์ทั้งสองอยู่ในระยะ Bluetooth (สูงสุด 10 เมตร)
สรุป
เราจะพัฒนาแอปพลิเคชันบนมือถือแบบครบวงจร
IT Sectr สร้างแอปพลิเคชัน iOS และ Android สำหรับสตาร์ทอัพและธุรกิจตั้งแต่ปี 2017 เราจะให้คำแนะนำและเสนอวิธีแก้ปัญหาที่ดีที่สุดแก่คุณ