WatchKit হল Apple Watch-এ অ্যাপ্লিকেশন তৈরির জন্য Apple-এর একটি ফ্রেমওয়ার্ক, যা 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 সুপারিশ | লিগ্যাসি | বর্তমান |
| সর্বনিম্ন watchOS | watchOS 1 | watchOS 6 |
| কোডের পরিমাণ | আরও | কম |
| কমপ্লিকেশন ইন্টিগ্রেশন | ক্লাসের মাধ্যমে সরাসরি | WidgetKit-এর মাধ্যমে |
| WKInterfaceMap | হ্যাঁ | Map (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 সুপারিশ করে। শুধুমাত্র লিগ্যাসি প্রকল্প সমর্থনের জন্য বা আপনার যদি SwiftUI-তে উপলব্ধ না হওয়া নির্দিষ্ট কার্যকারিতা যেমন WKInterfaceMap প্রয়োজন হয় তবেই WatchKit ব্যবহার করুন।
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 অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।
আরও পড়ুন