Zum Inhalt springen

WatchOS-Anwendung erstellen

GitHub

Diese Anleitung führt Sie durch die Erstellung einer watchOS-Komponenten-App von Grund auf, einschließlich der Projektierung in Xcode, der Integration des CapgoWatchSDK und der Erstellung einer funktionsfähigen Uhr-App mit SwiftUI.

Bevor Sie beginnen, stellen Sie sicher, dass Sie Folgendes haben:

  • Xcode 15 oder später (herunterladen vom Mac App Store)
  • macOS Sonoma oder später (für die neueste watchOS SDK)
  • Ein bestehendes Capacitor iOS-Projekt (ausführen) npx cap add ios Wenn Sie noch nicht registriert sind)
  • Apple-Entwicklerkonto (Ein kostenloses Konto reicht für die Entwicklung aus)

Nach Abschluss dieses Leitfadens wird Ihr Projekt diese Struktur haben:

  • Verzeichnisios/
    • VerzeichnisApp/
      • VerzeichnisApp/ (Ihre Haupt-App für iOS)
      • App.xcodeproj
      • App.xcworkspace (Verwenden Sie dies, um das Projekt zu öffnen)
      • Podfile
    • VerzeichnisMyWatch/ (neue Uhr-App)
      • VerzeichnisMyWatch/ (Quelle der Uhr-App)
        • MyWatchApp.swift
        • ContentView.swift
        • VerzeichnisAssets.xcassets/
      • MyWatch.xcodeproj

Schritt 1: Öffnen Sie Ihr iOS-Projekt in Xcode

Schritt 1: Öffnen Sie Ihr iOS-Projekt in Xcode
  1. Navigieren Sie zu Ihrem Projekt in Ihrem Capacitor-Ordner ios/App Ordner
  2. Öffnen App.xcworkspace (nicht .xcodeprojdurch Doppelklicken
  3. Warten Sie, bis Xcode das Projekt indexiert

Der Workspace enthält CocoaPods-Abhängigkeiten, die Ihr Projekt benötigt.

Schritt 2: Hinzufügen eines watchOS-Ziels
  1. Überschrift: Schritt 2: Hinzufügen eines watchOS-Ziels In Xcode gehen Sie zu

  2. Datei → Neu → Ziel…

    • In der Vorlageauswahl: Wählen Sie aus Oberer Reiter
    • Wählen Sie App
    • Klicken Sie Weiter
  3. Ihre Uhranwendung einrichten:

    • Produktname: MyWatch (oder Ihren bevorzugten Namen)
    • TeamWählen Sie Ihr Apple-Entwickler-Team
    • Organisations-IdentifierStimmt mit Ihrer iOS-Anwendung überein (z.B. app.capgo)
    • Bundle-Bezeichner: Wird automatisch generiert (z.B., app.capgo.myapp.watchkitapp)
    • Sprache: Swift
    • Benutzeroberfläche: SwiftUI
    • Arten von Apple Watch Apps: App (nicht App für bestehende iOS-App)
    • Entfernen Benachrichtigungsszenario einschließen (es sei denn, Sie benötigen es)
    • Entfernen Komplexe einbeziehen (außer Sie benötigen es)
  4. Klicken Fertigstellen

  5. Wenn Sie aufgefordert werden “Die ‘MyWatch’-Schablone aktivieren?”, klicken Sie Aktivieren

  1. In der Projekt-Navigator-Leiste (links) wählen Sie Ihr Projekt (das blaue Icon oben aus)

  2. Wählen Sie Ihr Watch-Target (z.B. “MyWatch”) aus der Liste der Ziele

  3. Zum Allgemein tab:

    • AnzeigenameAnzeigename: Der Name, der unter dem App-Icon angezeigt wird (z.B. "Meine App")
    • Bundle-BezeichnerBezeichner: Soll mit .watchkitapp
    • VersionVersion: Passen Sie Ihre iOS-App-Version an
    • BuildBuild: Passen Sie Ihre iOS-App-Build-Nummer an
  4. Zum Zertifizierung und Fähigkeiten tab:

    • Aktivieren Automatisch die Signierung verwalten
    • Wählen Sie Ihr Team
    • Mannschaft
  5. Xcode erstellt die Bereitstellungsprofile automatisch Setzen:

    • Bereitstellungs-InformationenMindestens

Die CapgoWatchSDK bietet eine fertige Lösung WatchConnector Klasse für die Kommunikation.

  1. In Xcode gehen Sie zu Datei → Hinzufügen von Paketabhängigkeiten…

  2. Im Suchfeld eingeben:

    https://github.com/Cap-go/capacitor-watch.git
  3. Drücken Sie Enter und warten Sie, bis Xcode das Paket herunterlädt

  4. Konfigurieren Sie das Paket:

    • Abhängigkeitsregel: „Bis zur nächsten Hauptversion“ mit „8.0.0“
    • Klicken Sie Paket hinzufügen
  5. Wählen Sie, welche Produkte hinzugefügt werden sollen:

    • WICHTIG: Wählen Sie nur CapgoWatchSDK
    • Stellen Sie sicher, dass es zu Ihrem Uhrziel (z.B. "Meine Uhr"), nicht der iOS-Anwendung Klicken Sie
    • Paket hinzufügen Tip

Schritt 5: Implementieren Sie die Watch-App

Überschrift: Schritt 5: Implementieren Sie die Watch-App

Erstellen wir nun die Watch-App code. Ersetzen Sie die automatisch generierten Dateien durch die folgenden:

5.1 Erstellen Sie den App-Einstiegspunkt

Überschrift: 5.1 Erstellen Sie den App-Einstiegspunkt

Bearbeiten MyWatch/MyWatchApp.swift:

import SwiftUI
import CapgoWatchSDK
@main
struct MyWatchApp: App {
init() {
// Activate WatchConnectivity when app launches
WatchConnector.shared.activate()
}
var body: some Scene {
WindowGroup {
ContentView()
}
}
}

5.2 Erstellen Sie die Hauptansicht

Überschrift: 5.2 Erstellen Sie die Hauptansicht

Bearbeiten MyWatch/ContentView.swift:

import SwiftUI
import CapgoWatchSDK
struct ContentView: View {
// Observe the WatchConnector for automatic UI updates
@ObservedObject var connector = WatchConnector.shared
// Local state
@State private var messageText = ""
@State private var statusMessage = "Ready"
var body: some View {
ScrollView {
VStack(spacing: 16) {
// Connection Status
ConnectionStatusView(connector: connector)
Divider()
// Message Input
TextField("Message", text: $messageText)
.textFieldStyle(.roundedBorder)
// Send Buttons
HStack {
Button("Send") {
sendMessage()
}
.disabled(!connector.isReachable || messageText.isEmpty)
Button("Request") {
sendWithReply()
}
.disabled(!connector.isReachable || messageText.isEmpty)
}
Divider()
// Status
Text(statusMessage)
.font(.caption)
.foregroundColor(.secondary)
// Last Received Message
if !connector.lastMessage.isEmpty {
VStack(alignment: .leading) {
Text("Last Message:")
.font(.caption)
.foregroundColor(.secondary)
Text(formatMessage(connector.lastMessage))
.font(.caption2)
}
.frame(maxWidth: .infinity, alignment: .leading)
}
}
.padding()
}
}
private func sendMessage() {
connector.sendMessage(["text": messageText, "timestamp": Date().timeIntervalSince1970])
statusMessage = "Message sent"
messageText = ""
}
private func sendWithReply() {
connector.sendMessage(["text": messageText, "needsReply": true]) { reply in
DispatchQueue.main.async {
statusMessage = "Reply: \(formatMessage(reply))"
}
}
messageText = ""
}
private func formatMessage(_ message: [String: Any]) -> String {
message.map { "\($0.key): \($0.value)" }.joined(separator: ", ")
}
}
// Separate view for connection status
struct ConnectionStatusView: View {
@ObservedObject var connector: WatchConnector
var body: some View {
HStack {
Circle()
.fill(connector.isReachable ? Color.green : Color.red)
.frame(width: 12, height: 12)
Text(connector.isReachable ? "Connected" : "Disconnected")
.font(.headline)
Spacer()
if connector.isActivated {
Image(systemName: "checkmark.circle.fill")
.foregroundColor(.green)
}
}
}
}
#Preview {
ContentView()
}

Ihre iOS-Anwendung benötigt auch die WatchConnectivity-Fähigkeit.

  1. Wählen Sie in der Projekt-Navigator-Ansicht Ihr Projekt

  2. Wählen Sie Ihr iOS-App-Ziel (nicht das Ziel für die Uhr)

  3. Gehe zu Zertifizierung und Fähigkeiten Registerkarte

  4. Klicken Sie auf Fähigkeit hinzufügen

  5. Suchen Sie nach und fügen Sie WatchConnectivity (wenn verfügbar) oder es wird automatisch hinzugefügt

  6. Das Plugin Capacitor handhabt die iOS-Seite automatisch, aber stelle sicher, dass dein Info.plist folgende Einträge enthält:

    <key>WKCompanionAppBundleIdentifier</key>
    <string>app.capgo.myapp.watchkitapp</string>
  1. Wähle in der Scheme-Auswahl (oben im Xcode-Fenster) deine Uhr-App aus

  2. Wähle einen Apple Watch-Simulator aus:

    • Klicke auf den Geräteauswahlbutton neben der Scheme
    • Wähle einen Apple Watch-Simulator (z.B. „Apple Watch Series 9 (45mm)“)
  3. Klicken Sie auf den Starten Schaltfläche (▶️) oder drücken Sie Cmd + R

  4. Der iOS-Simulator wird mit beiden iPhone und Apple Watch gestartet

  1. Verbinden Sie Ihr iPhone über USB

  2. Stellen Sie sicher, dass Ihr Apple Watch mit diesem iPhone paired ist

  3. Wählen Sie Ihr Uhrschema

  4. Wählen Sie Ihr physisches Apple Watch aus der Geräteliste

  5. Klicken Sie Starten

  6. Erstmalig: Sie müssen Ihrem Computer auf beiden Geräten vertrauen

Schritt 8: Kommunikation testen

Schritt 8: Kommunikation testen

Von iPhone (Capacitor) zu Uhr

Von iPhone (Capacitor) zu Uhr

In Ihrer Capacitor-App:

import { CapgoWatch } from '@capgo/capacitor-watch';
// Check connection
const info = await CapgoWatch.getInfo();
console.log('Watch reachable:', info.isReachable);
// Send a message
if (info.isReachable) {
await CapgoWatch.sendMessage({
data: { action: 'update', value: 'Hello from iPhone!' }
});
}

Die Uhr-App verwendet WatchConnector:

// Send message (fire and forget)
WatchConnector.shared.sendMessage(["action": "buttonTapped"])
// Send message with reply
WatchConnector.shared.sendMessage(["request": "getData"]) { reply in
print("Got reply: \(reply)")
}
// Listen for messages from watch
await CapgoWatch.addListener('messageReceived', (event) => {
console.log('Message from watch:', event.message);
// { action: 'buttonTapped' }
});
// Handle messages that need a reply
await CapgoWatch.addListener('messageReceivedWithReply', async (event) => {
console.log('Request from watch:', event.message);
// Send reply back
await CapgoWatch.replyToMessage({
callbackId: event.callbackId,
data: { status: 'success', items: ['item1', 'item2'] }
});
});

Erweitert: Benutzerdefinierte Delegate für mehr Kontrolle

Abschnitt: “Erweitert: Benutzerdefinierte Delegate für mehr Kontrolle”

Wenn Sie mehr Kontrolle benötigen, implementieren Sie WatchConnectorDelegate:

import SwiftUI
import CapgoWatchSDK
class WatchHandler: WatchConnectorDelegate {
func didReceiveMessage(_ message: [String: Any]) {
print("Received: \(message)")
// Handle incoming message
}
func didReceiveMessageWithReply(_ message: [String: Any],
replyHandler: @escaping ([String: Any]) -> Void) {
print("Received request: \(message)")
// Process and send reply
replyHandler(["status": "processed"])
}
func didReceiveApplicationContext(_ context: [String: Any]) {
print("Context updated: \(context)")
}
func didReceiveUserInfo(_ userInfo: [String: Any]) {
print("User info received: \(userInfo)")
}
func reachabilityDidChange(_ isReachable: Bool) {
print("Reachability changed: \(isReachable)")
}
func activationDidComplete(with state: WCSessionActivationState) {
print("Activation completed: \(state.rawValue)")
}
}
// In your app setup:
let handler = WatchHandler()
WatchConnector.shared.delegate = handler
WatchConnector.shared.activate()
  1. Stellen Sie sicher, dass die Bundle-IDs korrekt miteinander in Beziehung stehen (Watch-App-Bundle-ID sollte iOS-App-Bundle-ID + .watchkitapp)
  2. Überprüfen Sie, ob beide Apps mit demselben Team signiert sind
  3. Auf physischem Gerät: Öffnen Sie die Watch-App auf dem iPhone → Meine Watch → scrollen Sie nach unten, um Ihre App zu finden → aktivieren Sie sie
  1. Überprüfen Sie, ob beide Apps die WCSession aktiviert haben
  2. Überprüfen Sie isReachable bevor Nachrichten gesendet werden
  3. Für eine sichere Zustellung verwenden Sie transferUserInfo anstatt sendMessage
  4. Stellen Sie sicher, dass die Listener vor der Übertragung von Nachrichten durch das andere Gerät registriert sind
  1. Aufrufen WatchConnector.shared.activate() context
  2. früh im Lebenszyklus der App
  3. Bei iOS aktiviert sich der Plugin automatisch - stellen Sie sicher, dass das Plugin importiert ist

Überprüfen Sie, ob die WatchConnectivity-Fähigkeit zum iOS-Ziel hinzugefügt ist

Build-Fehler mit CapgoWatchSDK
  1. Sektion mit dem Titel “Build-Fehler mit CapgoWatchSDK” Stellen Sie sicher, dass das Paket der Anzeige hinzugefügt istnicht Ziel für iOS
  2. Ordner für den Clean Build löschen: Produkt → Ordner für Clean Build löschen (Cmd + Shift + K)
  3. Pakete neu laden: Datei → Pakete → Pakete neu laden
  1. Die Simulator zurücksetzen: Gerät → Alle Inhalte und Einstellungen löschen
  2. Stellen Sie sicher, dass iOS- und watchOS-Simulator kompatible Paare sind
  3. Beide Simulator müssen läuft, damit die Kommunikation funktioniert

Weitermachen von der Erstellung einer watchOS-App

Abschnitt: Weitermachen von der Erstellung einer watchOS-App

Wenn Sie Erstellung einer watchOS-App für die native Plugin-Arbeit zu planen, verbinden Sie es mit Mit @capgo/capacitor-watch für die native Fähigkeit in Mit @capgo/capacitor-watch, Capgo Plugin-Verzeichnis für den Produktworkflow in Capgo Plugin-Verzeichnis, Capacitor Plugins von Capgo für die Implementierungsdetails in Capacitor Plugins von Capgo, Hinzufügen oder Aktualisieren von Plugins für die Implementierungsdetails in Hinzufügen oder Aktualisieren von Plugins, und Ionic Enterprise-Plugin-Alternativen für den Produktworkflow in Ionic Enterprise-Plugin-Alternativen.