WatchKit — vad är det, ramverket för Apple Watch och watchOS

Författare: IT Sectr Publicerad: 2026-06-16 Lästid: 8 min

WatchKit — Apples ramverk för att skapa applikationer på Apple Watch, tillkännagett 2014 tillsammans med watchOS 1. Det tillhandahåller en uppsättning WKInterface-gränssnittselement — knappar, etiketter, tabeller, kartor — och navigeringsmekanismer mellan skärmar. Trots att modern watchOS-utveckling alltmer övergår till SwiftUI, förblir WatchKit viktigt för stöd till befintliga applikationer och scenarier där fullständig kontroll över gränssnittet krävs. Enligt Apple Developer Documentation, 2026 används WatchKit fortfarande i 35 % av applikationerna i watchOS App Store-katalogen, inklusive fitnessappar, navigatorer och verktyg för snabb åtkomst till data.

Huvudpunkter

  • WatchKit — Apples ramverk för att skapa applikationer på Apple Watch, som använder WKInterface UI-komponenter och navigering baserad på WKInterfaceController.
  • WKInterfaceController — huvudklassen för appskärmen, liknande UIViewController på iOS, med livscykelhantering och hierarki.
  • WCSession — kommunikationsmekanism mellan Apple Watch och iPhone som möjliggör överföring av data, filer och kontext via Bluetooth.
  • WKInterfaceDevice — enhetsinformation: skärmstorlek, modell, watchOS-version och hårdvarukomponenters kapacitet.
  • Complications Controller — API för att visa data på urtavlan, aktiverat via CLKComplicationDataSource.

Vad är WatchKit och hur fungerar det?

WatchKit — Apples ramverk som tillhandahåller API för att skapa applikationer på Apple Watch. Från och med watchOS 2 (2015) körs WatchKit-applikationer direkt på klockan, inte på iPhone, vilket gör att de kan bearbeta data och visa gränssnitt utan permanent anslutning till telefonen. Innan detta i watchOS 1 kördes alla applikationer på iPhone och klockan var endast en fjärrkontroll för fjärrvisning, vilket orsakade betydande UI-fördröjningar.

Den moderna WatchKit-arkitekturen inkluderar två komponenter: WatchKit App (Storyboard + resurser på klockan) och WatchKit Extension (kod som exekveras på klockan). Användaren installerar båda komponenterna via App Store vid installation av den överordnade iOS-applikationen. WatchKit tillhandahåller integration med systemfunktioner: notifikationer (via UNUserNotificationCenter), komplikationer (data på urtavlan), Workout API och HealthKit.

Enligt Counterpoint Research (2025) innehar Apple Watch 52 % av den globala smartklocksmarknaden, och den genomsnittliga användaren installerar 6–8 tredjepartsapplikationer med WatchKit eller SwiftUI. De mest populära kategorierna är fitness (56 %), hälsa (22 %), navigering (9 %) och verktyg (8 %).

WatchKit vs SwiftUI för watchOS

SwiftUI — Apples rekommenderade sätt att skapa gränssnitt för watchOS från och med watchOS 6. SwiftUI tillhandahåller deklarativ syntax och automatisk anpassning till skärmstorlekar. WatchKit förblir dock relevant för projekt som påbörjades före SwiftUIs ankomst, för användning av specifika element (WKInterfaceMap, WKInterfaceMovie) och i fall där stöd för watchOS-versioner lägre än 6 krävs.

KriteriumWatchKitSwiftUI
Apple-rekommendationLegacyCurrent
Minsta watchOSwatchOS 1watchOS 6
KodmängdMerMindre
Compose-integrationDirekt via klasserVia WidgetKit
WKInterfaceMapJaMap (MapKit)

WatchKit-gränssnitt: WKInterfaceController och element

WKInterfaceController — baskklassen för att hantera skärmen i WatchKit. Den ansvarar för livscykeln: initiering (awake(withContext:)), visning (willActivate), försvinnande (didDeactivate) och kontextöverföring mellan kontroller. Varje appskärm representeras av en separat underklass av WKInterfaceController, kopplad till Storyboard via Interface Builder. Navigering kan vara hierarkisk (push) eller modal (present).

WatchKit tillhandahåller en uppsättning gränssnittselement med prefixet WKInterface: WKInterfaceLabel (text), WKInterfaceButton (knapp), WKInterfaceTable (tabell), WKInterfaceImage (bild), WKInterfaceMap (karta) och WKInterfaceGroup (behållare med rundade hörn och bakgrund). Alla element fungerar asynkront — UI-ändringar köas och tillämpas av systemet mellan renderingscykler, vilket garanterar stabila 30 FPS på klockans skärm.

Grundläggande WKInterfaceController

swift
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("Hej, Watch!")
    }
    
    override func willActivate() {
        super.willActivate()
        actionButton.setTitle("Starta")
    }
    
    @IBAction func didTapButton() {
        pushController(withName: "DetailController", context: nil)
    }
}

WCSession: kommunikation mellan Watch och iPhone

WCSession — den centrala klassen för tvåvägskommunikation mellan Apple Watch och iPhone via Bluetooth eller Wi-Fi. Sessionen möjliggör överföring av små dataordböcker (updateApplicationContext), skicka meddelanden med omedelbart svar (sendMessage), överföra filer (transferFile) och synkronisera komplexa objekt (transferUserInfo). WCSession fungerar asynkront och väljer automatiskt den optimala kommunikationskanalen.

För att använda WCSession måste sessionen aktiveras på båda enheterna. Watch-appen skapar WCSession i metoden willActivate(), och iOS-appen i AppDelegate eller SceneDelegate. Efter aktivering av sessionen synkroniserar enheterna automatiskt kontexten när det är möjligt. Det är viktigt att hantera delegaten WCSessionDelegate för att ta emot inkommande data och övervaka anslutningsstatus.

Exempel på WCSession på Watch-sidan

swift
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: data på urtavlan

Complications — små dataelement som visas på Apple Watch-urtavlan och ger snabb åtkomst till information utan att öppna appen. WatchKit tillhandahåller CLKComplicationDataSource — ett protokoll vars implementering gör att appen kan leverera data för komplikationer. Urtavlan bestämmer själv vilka positioner som är tillgängliga — runda (circular), rektangulära (rectangular), hörn (corner) eller modulära (modular).

Utvecklaren kan leverera komplikationer för tre storleksfamiljer: CLKComplicationFamily — circularSmall, extraLarge, graphicCircular, graphicRectangular, graphicCorner, graphicBezel, modularSmall, modularLarge och utilitarianSmall/Large. Varje familj har sina egna dimensioner och visningsformat. Appen kan stödja flera familjer, men minst två rekommenderas — grafisk och modulär.

Exempel på CLKComplicationDataSource

swift
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)
    }
}

Exempel på WatchKit-app i Swift

Att skapa en WatchKit-app börjar med att lägga till WatchKit App Target i Xcode. Xcode genererar Interface.storyboard med en初始 kontroller och kopplar den automatiskt till klassen InterfaceController. Utvecklaren lägger till UI-element via Interface Builder och skapar IBOutlet för interaktion från kod. Nedan — ett komplett exempel på en kontroller med en tabell över data mottagen från iPhone via WCSession.

swift
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 för fitnessappar

Workout API — en uppsättning WatchKit-klasser för att skapa fitnessappar som kan köra träningspass på Apple Watch i bakgrunden. API:et ger tillgång till sensorer: accelerometer, gyroskop, pulsmätare (via HKHealthStore) och GPS (på Watch-modeller med GPS). Träningspass startas via HKWorkoutSession från HealthKit och pulsdata uppdateras i realtid via HKSampleQuery.

Den viktigaste fördelen med Workout API är möjligheten att arbeta i bakgrunden. När ett träningspass är aktivt pausar watchOS inte appen när armen sänks — sensorerna fortsätter att samla in data och appen kan visa puls, distans, tempo och andra mätvärden. Efter träningspasset synkroniseras data med Health App på iPhone via HealthKit, vilket säkerställer en enhetlig fitnessprofil för användaren.

Starta träningspass med sensorer

swift
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()
    }
}

Vanliga frågor

Är det värt att använda WatchKit i ett nytt projekt?

Apple rekommenderar SwiftUI för nya watchOS-appar. Använd WatchKit endast för att stödja legacy-projekt eller om specifik funktionalitet som WKInterfaceMap, som inte är tillgänglig i SwiftUI, krävs.

Hur överför man data från Watch till iPhone utan anslutning?

WCSession stöder fördröjd överföring via transferUserInfo och transferFile. Data levereras vid nästa upprättande av anslutning mellan klockan och telefonen, vilket garanterar leverans även vid tillfällig förlust av anslutning.

Fungerar WatchKit-appar på alla Apple Watch-modeller?

Appar skrivna i WatchKit är kompatibla med Apple Watch Series 0 och nyare (watchOS 1+). Vissa funktioner (GPS, pulsmätare, dynamisk ö) är dock endast tillgängliga på vissa modeller.

Kan SwiftUI och WatchKit användas i samma app?

Ja, du kan kombinera SwiftUI och WatchKit i samma app. Använd WKHostingController för att bädda in en SwiftUI View i WKInterfaceController eller vice versa — integrera WKInterfaceObject via UIViewRepresentable.

Hur felsöker man WCSession på verkliga enheter?

Starta båda apparna (iOS + watchOS) från Xcode på anslutna enheter. Använd felsökningskonsolen för att observera WCSessionDelegate-meddelanden. Se till att båda enheterna befinner sig inom Bluetooth-räckvidd (upp till 10 meter).

Sammanfattning

  • WatchKit — Apples ramverk för att skapa applikationer på Apple Watch, med WKInterface UI-komponenter och WKInterfaceController-kontroller.
  • WCSession — central mekanism för tvåvägskommunikation mellan Watch och iPhone via Bluetooth/Wi-Fi med stöd för meddelanden, filer och kontext.
  • Complications — data på Apple Watch-urtavlan via CLKComplicationDataSource med stöd för 9 visningsfamiljer.
  • Workout API — uppsättning klasser för fitnessappar med bakgrundsinsamling av puls-, GPS- och accelerometerdata via HKWorkoutSession.
  • SwiftUI — Apples rekommenderade tillvägagångssätt för nya projekt, men WatchKit förblir relevant för legacy-appar och specifik funktionalitet.
  • Kombination av WatchKit och SwiftUI i en app är möjlig via WKHostingController och UIViewRepresentable.

Vi utvecklar en mobil applikation nyckelfärdigt

IT Sectr skapar iOS- och Android-applikationer för startups och företag sedan 2017. Vi ger dig råd och föreslår den bästa lösningen.

Diskutera projektet

Läs också