WatchKit Apple کا ایک فریم ورک ہے جو Apple Watch پر ایپلیکیشنز بنانے کے لیے ہے، جس کا اعلان 2014 میں watchOS 1 کے ساتھ کیا گیا تھا۔ یہ WKInterface UI عناصر کا ایک سیٹ فراہم کرتا ہے — بٹن، لیبل، ٹیبل، نقشے — اور اسکرینوں کے درمیان نیویگیشن میکانزم۔ اگرچہ جدید watchOS ڈیولپمنٹ تیزی سے SwiftUI کی طرف منتقل ہو رہی ہے، WatchKit موجودہ ایپلیکیشنز کو سپورٹ کرنے اور ان منظرناموں کے لیے اہم ہے جہاں انٹرفیس پر مکمل کنٹرول کی ضرورت ہو۔ Apple Developer Documentation, 2026 کے مطابق، WatchKit اب بھی watchOS App Store کیٹلاگ کی 35% ایپس میں استعمال ہوتا ہے، جس میں فٹنس ایپس، نیویگیٹرز اور فوری ڈیٹا تک رسائی کے لیے یوٹیلیٹیز شامل ہیں۔
اہم نکات
WatchKit Apple کا ایک فریم ورک ہے جو Apple Watch پر ایپلیکیشنز بنانے کے لیے API فراہم کرتا ہے۔ watchOS 2 (2015) سے شروع ہو کر، WatchKit ایپس براہ راست گھڑی پر چلتی ہیں نہ کہ iPhone پر، جس سے وہ فون سے مستقل کنکشن کے بغیر ڈیٹا پروسیس کر سکتی ہیں اور انٹرفیس ظاہر کر سکتی ہیں۔ اس سے پہلے، watchOS 1 میں، تمام ایپس iPhone پر چلتی تھیں اور گھڑی صرف ایک ریموٹ ڈسپلے تھی، جس سے UI میں نمایاں تاخیر ہوتی تھی۔
جدید WatchKit آرکیٹیکچر میں دو اجزاء شامل ہیں: WatchKit App (گھڑی پر Storyboard + وسائل) اور WatchKit Extension (گھڑی پر چلنے والا کوڈ)۔ صارف بنیادی iOS ایپلیکیشن انسٹال کرتے وقت App Store کے ذریعے دونوں اجزاء انسٹال کرتا ہے۔ WatchKit سسٹم کی خصوصیات کے ساتھ ضم ہوتا ہے: اطلاعیں (UNUserNotificationCenter کے ذریعے)، کمپلیکیشنز (گھڑی کے چہرے پر ڈیٹا)، Workout API اور HealthKit۔
Counterpoint Research (2025) کے مطابق، Apple Watch عالمی اسمارٹ واچ مارکیٹ کا 52% رکھتی ہے، اور اوسط صارف WatchKit یا SwiftUI استعمال کرنے والی 6–8 تھرڈ پارٹی ایپس انسٹال کرتا ہے۔ سب سے مشہور زمرے فٹنس (56%)، صحت (22%)، نیویگیشن (9%) اور یوٹیلیٹیز (8%) ہیں۔
SwiftUI watchOS 6 سے شروع ہو کر watchOS کے لیے انٹرفیس بنانے کا Apple کا تجویز کردہ طریقہ ہے۔ SwiftUI اعلانیہ نحو اور اسکرین سائز کے ساتھ خودکار موافقت فراہم کرتا ہے۔ تاہم، WatchKit ان پروجیکٹس کے لیے جو SwiftUI کے وجود میں آنے سے پہلے شروع ہوئے، مخصوص عناصر (WKInterfaceMap، WKInterfaceMovie) کے استعمال کے لیے، اور ان صورتوں میں جہاں watchOS ورژن 6 سے نیچے کی سپورٹ کی ضرورت ہو، متعلقہ رہتا ہے۔
| معیار | WatchKit | SwiftUI |
|---|---|---|
| Apple کی سفارش | Legacy | موجودہ |
| کم از کم watchOS | watchOS 1 | watchOS 6 |
| کوڈ کا حجم | زیادہ | کم |
| کمپلیکیشن انضمام | کلاسز کے ذریعے براہ راست | WidgetKit کے ذریعے |
| WKInterfaceMap | ہاں | نقشہ (MapKit) |
WKInterfaceController WatchKit میں اسکرینوں کو منظم کرنے کے لیے بنیادی کلاس ہے۔ یہ لائف سائیکل کو ہینڈل کرتا ہے: ابتدا (awake(withContext:))، ظاہر ہونا (willActivate)، غائب ہونا (didDeactivate) اور کنٹرولرز کے درمیان سیاق و سباق کی منتقلی۔ ہر ایپ اسکرین کو ایک علیحدہ WKInterfaceController ذیلی کلاس کے ذریعے ظاہر کیا جاتا ہے جو Interface Builder کے ذریعے Storyboard سے منسلک ہوتا ہے۔ نیویگیشن درجہ بندی (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 Bluetooth یا Wi-Fi کے ذریعے Apple Watch اور iPhone کے درمیان دو طرفہ مواصلات کے لیے مرکزی کلاس ہے۔ سیشن چھوٹے ڈیٹا ڈکشنری (updateApplicationContext) کی منتقلی، فوری جواب کے ساتھ پیغام بھیجنا (sendMessage)، فائلیں منتقل کرنا (transferFile) اور پیچیدہ اشیاء کو ہم آہنگ کرنا (transferUserInfo) کی اجازت دیتا ہے۔ WCSession غیر ہم آہنگی سے کام کرتا ہے اور خود بخود بہترین مواصلاتی چینل کا انتخاب کرتا ہے۔
WCSession استعمال کرنے کے لیے، آپ کو دونوں آلات پر سیشن کو فعال کرنا ہوگا۔ Watch ایپ willActivate() طریقہ میں WCSession بناتی ہے، جبکہ 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 ایپ بنانا Xcode میں WatchKit App Target شامل کرنے سے شروع ہوتا ہے۔ Xcode ایک ابتدائی کنٹرولر کے ساتھ Interface.storyboard تیار کرتا ہے اور اسے خود بخود InterfaceController کلاس سے منسلک کرتا ہے۔ ڈیولپر Interface Builder کے ذریعے UI عناصر شامل کرتا ہے اور کوڈ سے تعامل کے لیے IBOutlets بناتا ہے۔ ذیل میں WCSession کے ذریعے iPhone سے موصول ہونے والے ڈیٹا کے جدول کے ساتھ ایک مکمل کنٹرولر کی مثال ہے۔
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 (GPS والے Watch ماڈلز پر)۔ ورزشیں HealthKit سے HKWorkoutSession کے ذریعے شروع کی جاتی ہیں، اور دل کی دھڑکن کا ڈیٹا HKSampleQuery کے ذریعے ریئل ٹائم میں اپ ڈیٹ ہوتا ہے۔
Workout API کا اہم فائدہ پس منظر میں کام کرنا ہے۔ جب ورزش فعال ہوتی ہے، صارف کی کلائی نیچے کرنے پر watchOS ایپ کو معطل نہیں کرتا — سینسر ڈیٹا اکٹھا کرتے رہتے ہیں اور ایپ دل کی دھڑکن، فاصلہ، رفتار اور دیگر میٹرکس ظاہر کر سکتی ہے۔ ورزش ختم ہونے کے بعد، ڈیٹا HealthKit کے ذریعے iPhone پر ہیلتھ ایپ کے ساتھ ہم آہنگ ہوتا ہے، جو صارف کے لیے ایک متحد فٹنس پروفائل فراہم کرتا ہے۔
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 نئی watchOS ایپس کے لیے SwiftUI کی سفارش کرتا ہے۔ WatchKit کو صرف لیگیسی پروجیکٹس کو سپورٹ کرنے کے لیے یا اگر آپ کو SwiftUI میں دستیاب نہ ہونے والی مخصوص فعالیت جیسے WKInterfaceMap کی ضرورت ہو تو استعمال کریں۔
WCSession transferUserInfo اور transferFile کے ذریعے موخر منتقلی کو سپورٹ کرتا ہے۔ ڈیٹا گھڑی اور فون کے درمیان اگلے کنکشن قائم ہونے پر پہنچایا جائے گا، جو عارضی کنیکٹیویٹی کی کمی پر بھی ترسیل کو یقینی بناتا ہے۔
WatchKit کے ساتھ لکھی گئی ایپس Apple Watch Series 0 اور نئے (watchOS 1+) کے ساتھ مطابقت رکھتی ہیں۔ تاہم، کچھ خصوصیات (GPS، دل کی دھڑکن مانیٹر، Dynamic Island) صرف مخصوص ماڈلز پر دستیاب ہیں۔
ہاں، آپ ایک ایپ میں SwiftUI اور WatchKit کو یکجا کر سکتے ہیں۔ WKInterfaceController میں SwiftUI ویوز ایمبیڈ کرنے کے لیے WKHostingController استعمال کریں، یا UIViewRepresentable کے ذریعے WKInterfaceObjects کو ضم کریں۔
منسلک آلات پر Xcode سے دونوں ایپس (iOS + watchOS) چلائیں۔ WCSessionDelegate پیغامات کی نگرانی کے لیے ڈیبگ کنسول استعمال کریں۔ یقینی بنائیں کہ دونوں آلات Bluetooth کی حدود (10 میٹر تک) میں ہیں۔
خلاصہ
ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے
IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔