WatchKit é um framework da Apple para criar aplicações no Apple Watch, anunciado em 2014 junto com o watchOS 1. Ele fornece um conjunto de elementos de interface WKInterface — botões, rótulos, tabelas, mapas — e mecanismos de navegação entre telas. Embora o desenvolvimento moderno para watchOS esteja migrando cada vez mais para SwiftUI, o WatchKit continua importante para dar suporte a aplicações existentes e cenários onde é necessário controle total sobre a interface. De acordo com Apple Developer Documentation, 2026, o WatchKit ainda é usado em 35% dos aplicativos do catálogo da watchOS App Store, incluindo aplicativos de fitness, navegadores e utilitários de acesso rápido a dados.
Principais pontos
WatchKit é um framework da Apple que fornece uma API para criar aplicações no Apple Watch. A partir do watchOS 2 (2015), os aplicativos WatchKit são executados diretamente no relógio, e não no iPhone, permitindo processar dados e exibir a interface sem uma conexão constante com o telefone. Antes disso, no watchOS 1, todos os aplicativos eram executados no iPhone e o relógio era apenas um display remoto, causando atrasos significativos na interface.
A arquitetura moderna do WatchKit inclui dois componentes: WatchKit App (Storyboard + recursos no relógio) e WatchKit Extension (código executado no relógio). O usuário instala ambos os componentes através da App Store ao instalar o aplicativo iOS principal. O WatchKit integra-se com recursos do sistema: notificações (via UNUserNotificationCenter), complicações (dados no mostrador), Workout API e HealthKit.
De acordo com Counterpoint Research (2025), o Apple Watch detém 52% do mercado global de smartwatches, e o usuário médio instala 6 a 8 aplicativos de terceiros que usam WatchKit ou SwiftUI. As categorias mais populares são fitness (56%), saúde (22%), navegação (9%) e utilitários (8%).
SwiftUI é a forma recomendada pela Apple para criar interfaces para watchOS a partir do watchOS 6. O SwiftUI fornece sintaxe declarativa e adaptação automática aos tamanhos de tela. No entanto, o WatchKit continua relevante para projetos iniciados antes da existência do SwiftUI, para usar elementos específicos (WKInterfaceMap, WKInterfaceMovie) e em casos onde é necessário suporte para versões do watchOS anteriores à 6.
| Critério | WatchKit | SwiftUI |
|---|---|---|
| Recomendação da Apple | Legado | Atual |
| watchOS mínimo | watchOS 1 | watchOS 6 |
| Volume de código | Mais | Menos |
| Integração de complicações | Direta via classes | Via WidgetKit |
| WKInterfaceMap | Sim | Map (MapKit) |
WKInterfaceController é a classe base para gerenciar telas no WatchKit. Ela lida com o ciclo de vida: inicialização (awake(withContext:)), aparecimento (willActivate), desaparecimento (didDeactivate) e transferência de contexto entre controladores. Cada tela do aplicativo é representada por uma subclasse separada de WKInterfaceController conectada ao Storyboard via Interface Builder. A navegação pode ser hierárquica (push) ou modal (present).
O WatchKit fornece um conjunto de elementos de interface com o prefixo WKInterface: WKInterfaceLabel (texto), WKInterfaceButton (botão), WKInterfaceTable (tabela), WKInterfaceImage (imagem), WKInterfaceMap (mapa) e WKInterfaceGroup (contêiner com cantos arredondados e fundo). Todos os elementos funcionam de forma assíncrona — as alterações na interface são enfileiradas e aplicadas pelo sistema entre os ciclos de renderização, garantindo 30 FPS estáveis na tela do relógio.
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("Olá, Watch!")
}
override func willActivate() {
super.willActivate()
actionButton.setTitle("Iniciar")
}
@IBAction func didTapButton() {
pushController(withName: "DetailController", context: nil)
}
}
WCSession é a classe central para comunicação bidirecional entre Apple Watch e iPhone via Bluetooth ou Wi-Fi. A sessão permite transferir pequenos dicionários de dados (updateApplicationContext), enviar mensagens com resposta imediata (sendMessage), transferir arquivos (transferFile) e sincronizar objetos complexos (transferUserInfo). O WCSession funciona de forma assíncrona e seleciona automaticamente o canal de comunicação ideal.
Para usar o WCSession, você deve ativar a sessão em ambos os dispositivos. O aplicativo Watch cria uma WCSession no método willActivate(), enquanto o aplicativo iOS faz isso no AppDelegate ou SceneDelegate. Após a ativação, os dispositivos sincronizam automaticamente o contexto quando possível. É importante tratar o delegado WCSessionDelegate para receber dados de entrada e monitorar o estado da conexão.
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 são pequenos elementos de dados exibidos no mostrador do Apple Watch que fornecem acesso rápido a informações sem abrir o aplicativo. O WatchKit fornece CLKComplicationDataSource — um protocolo cuja implementação permite que o aplicativo forneça dados para complicações. O mostrador do relógio decide quais posições estão disponíveis — circulares, retangulares, de canto ou modulares.
O desenvolvedor pode fornecer complicações para três famílias de tamanho: CLKComplicationFamily — circularSmall, extraLarge, graphicCircular, graphicRectangular, graphicCorner, graphicBezel, modularSmall, modularLarge e utilitarianSmall/Large. Cada família tem suas próprias dimensões e formato de exibição. Um aplicativo pode suportar várias famílias, mas um mínimo de duas — gráfica e modular — é recomendado.
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)
}
}
Criar um aplicativo WatchKit começa adicionando um WatchKit App Target no Xcode. O Xcode gera um Interface.storyboard com um controlador inicial e o vincula automaticamente à classe InterfaceController. O desenvolvedor adiciona elementos de interface através do Interface Builder e cria IBOutlets para interação a partir do código. Abaixo está um exemplo completo de um controlador com uma tabela de dados recebidos do iPhone via 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 é um conjunto de classes do WatchKit para criar aplicativos de fitness que podem executar treinos no Apple Watch em segundo plano. A API fornece acesso a sensores: acelerômetro, giroscópio, monitor de frequência cardíaca (via HKHealthStore) e GPS (em modelos de Watch com GPS). Os treinos são iniciados via HKWorkoutSession do HealthKit, e os dados de frequência cardíaca são atualizados em tempo real através de HKSampleQuery.
A principal vantagem da Workout API é a operação em segundo plano. Quando um treino está ativo, o watchOS não suspende o aplicativo ao abaixar o pulso — os sensores continuam coletando dados e o aplicativo pode exibir frequência cardíaca, distância, ritmo e outras métricas. Após o término do treino, os dados são sincronizados com o aplicativo Saúde no iPhone via HealthKit, proporcionando um perfil de fitness unificado para o usuário.
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()
}
}
Perguntas frequentes
A Apple recomenda SwiftUI para novos aplicativos watchOS. Use WatchKit apenas para suporte a projetos legados ou se precisar de funcionalidade específica como WKInterfaceMap que não está disponível em SwiftUI.
WCSession suporta transferência diferida via transferUserInfo e transferFile. Os dados serão entregues na próxima vez que uma conexão for estabelecida entre o relógio e o telefone, garantindo a entrega mesmo com perda temporária de conectividade.
Aplicativos escritos com WatchKit são compatíveis com Apple Watch Series 0 e posteriores (watchOS 1+). No entanto, alguns recursos (GPS, monitor de frequência cardíaca, Dynamic Island) estão disponíveis apenas em modelos específicos.
Sim, você pode combinar SwiftUI e WatchKit em um único aplicativo. Use WKHostingController para incorporar visualizações SwiftUI em um WKInterfaceController, ou integre WKInterfaceObjects via UIViewRepresentable.
Execute ambos os aplicativos (iOS + watchOS) a partir do Xcode em dispositivos conectados. Use o console de depuração para monitorar as mensagens do WCSessionDelegate. Certifique-se de que ambos os dispositivos estejam dentro do alcance do Bluetooth (até 10 metros).
Resumo
Vamos desenvolver um aplicativo móvel chave na mão
A IT Sectr cria aplicativos para iOS e Android para startups e empresas desde 2017. Nós vamos aconselhá-lo e propor a melhor solução.
Leia também