WatchOS-Anwendung erstellen
Ein Setup-Anweisung mit den Installations-Schritten und der vollständigen Markdown-Guideline für dieses Plugin kopieren.
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.
Voraussetzungen
Abschnitt mit dem Titel “Voraussetzungen”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 iosWenn Sie noch nicht registriert sind) - Apple-Entwicklerkonto (Ein kostenloses Konto reicht für die Entwicklung aus)
Übersicht über die Projektstruktur
Abschnitt mit dem Titel „Übersicht über die Projektstruktur“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- Navigieren Sie zu Ihrem Projekt in Ihrem Capacitor-Ordner
ios/AppOrdner - Öffnen
App.xcworkspace(nicht.xcodeprojdurch Doppelklicken - 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-
Überschrift: Schritt 2: Hinzufügen eines watchOS-Ziels In Xcode gehen Sie zu
-
Datei → Neu → Ziel…
- In der Vorlageauswahl: Wählen Sie aus Oberer Reiter
- Wählen Sie App
- Klicken Sie Weiter
-
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)
- Produktname:
-
Klicken Fertigstellen
-
Wenn Sie aufgefordert werden “Die ‘MyWatch’-Schablone aktivieren?”, klicken Sie Aktivieren
Schritt 3: Watch-App-Einstellungen konfigurieren
Abschnitt mit dem Titel “Schritt 3: Watch-App-Einstellungen konfigurieren”-
In der Projekt-Navigator-Leiste (links) wählen Sie Ihr Projekt (das blaue Icon oben aus)
-
Wählen Sie Ihr Watch-Target (z.B. “MyWatch”) aus der Liste der Ziele
-
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
-
Zum Zertifizierung und Fähigkeiten tab:
- Aktivieren Automatisch die Signierung verwalten
- Wählen Sie Ihr Team
- Mannschaft
-
Xcode erstellt die Bereitstellungsprofile automatisch Setzen:
- Bereitstellungs-InformationenMindestens
Mindestanforderungen
Schritt 4: Fügen Sie CapgoWatchSDK über Swift Package Manager hinzuDie CapgoWatchSDK bietet eine fertige Lösung WatchConnector Klasse für die Kommunikation.
-
In Xcode gehen Sie zu Datei → Hinzufügen von Paketabhängigkeiten…
-
Im Suchfeld eingeben:
https://github.com/Cap-go/capacitor-watch.git -
Drücken Sie Enter und warten Sie, bis Xcode das Paket herunterlädt
-
Konfigurieren Sie das Paket:
- Abhängigkeitsregel: „Bis zur nächsten Hauptversion“ mit „8.0.0“
- Klicken Sie Paket hinzufügen
-
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
- WICHTIG: Wählen Sie nur
Schritt 5: Implementieren Sie die Watch-App
Überschrift: Schritt 5: Implementieren Sie die Watch-AppErstellen 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-EinstiegspunktBearbeiten MyWatch/MyWatchApp.swift:
import SwiftUIimport CapgoWatchSDK
@mainstruct 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 HauptansichtBearbeiten MyWatch/ContentView.swift:
import SwiftUIimport 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 statusstruct 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()}Schritt 6: Konfigurieren Sie die iOS-App für WatchConnectivity
Abschnitt mit dem Titel “Schritt 6: Konfigurieren Sie die iOS-Anwendung für WatchConnectivity”Ihre iOS-Anwendung benötigt auch die WatchConnectivity-Fähigkeit.
-
Wählen Sie in der Projekt-Navigator-Ansicht Ihr Projekt
-
Wählen Sie Ihr iOS-App-Ziel (nicht das Ziel für die Uhr)
-
Gehe zu Zertifizierung und Fähigkeiten Registerkarte
-
Klicken Sie auf Fähigkeit hinzufügen
-
Suchen Sie nach und fügen Sie WatchConnectivity (wenn verfügbar) oder es wird automatisch hinzugefügt
-
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>
Schritt 7: Erstellen und Ausführen
Abschnitt mit dem Titel „Schritt 7: Erstellen und Ausführen“Auf dem Simulator ausführen
Abschnitt mit dem Titel „Auf dem Simulator ausführen“-
Wähle in der Scheme-Auswahl (oben im Xcode-Fenster) deine Uhr-App aus
-
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)“)
-
Klicken Sie auf den Starten Schaltfläche (▶️) oder drücken Sie
Cmd + R -
Der iOS-Simulator wird mit beiden iPhone und Apple Watch gestartet
Auf einem physischen Gerät ausführen
Abschnitt mit dem Titel “Auf einem physischen Gerät ausführen”-
Verbinden Sie Ihr iPhone über USB
-
Stellen Sie sicher, dass Ihr Apple Watch mit diesem iPhone paired ist
-
Wählen Sie Ihr Uhrschema
-
Wählen Sie Ihr physisches Apple Watch aus der Geräteliste
-
Klicken Sie Starten
-
Erstmalig: Sie müssen Ihrem Computer auf beiden Geräten vertrauen
Schritt 8: Kommunikation testen
Schritt 8: Kommunikation testenVon iPhone (Capacitor) zu Uhr
Von iPhone (Capacitor) zu UhrIn Ihrer Capacitor-App:
import { CapgoWatch } from '@capgo/capacitor-watch';
// Check connectionconst info = await CapgoWatch.getInfo();console.log('Watch reachable:', info.isReachable);
// Send a messageif (info.isReachable) { await CapgoWatch.sendMessage({ data: { action: 'update', value: 'Hello from iPhone!' } });}Von Watch zu iPhone
Abschnitt: “Von Watch zu iPhone”Die Uhr-App verwendet WatchConnector:
// Send message (fire and forget)WatchConnector.shared.sendMessage(["action": "buttonTapped"])
// Send message with replyWatchConnector.shared.sendMessage(["request": "getData"]) { reply in print("Got reply: \(reply)")}Nachrichten auf iPhone bearbeiten
Abschnitt: “Nachrichten auf iPhone bearbeiten”// Listen for messages from watchawait CapgoWatch.addListener('messageReceived', (event) => { console.log('Message from watch:', event.message); // { action: 'buttonTapped' }});
// Handle messages that need a replyawait 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 SwiftUIimport 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 = handlerWatchConnector.shared.activate()Fehlerbehebung
Abschnitt mit dem Titel “Fehlersuche”Watch-App erscheint nicht auf dem Watch
Abschnitt mit dem Titel “Watch-App erscheint nicht auf dem Watch”- Stellen Sie sicher, dass die Bundle-IDs korrekt miteinander in Beziehung stehen (Watch-App-Bundle-ID sollte iOS-App-Bundle-ID +
.watchkitapp) - Überprüfen Sie, ob beide Apps mit demselben Team signiert sind
- 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
Nachrichten werden nicht empfangen
Abschnitt mit dem Titel “Nachrichten werden nicht empfangen”- Überprüfen Sie, ob beide Apps die WCSession aktiviert haben
- Überprüfen Sie
isReachablebevor Nachrichten gesendet werden - Für eine sichere Zustellung verwenden Sie
transferUserInfoanstattsendMessage - Stellen Sie sicher, dass die Listener vor der Übertragung von Nachrichten durch das andere Gerät registriert sind
”Sitzung nicht aktiviert”-Fehler
Sektion mit dem Titel “”Sitzung nicht aktiviert”-Fehler”- Aufrufen
WatchConnector.shared.activate()context - früh im Lebenszyklus der App
- 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- Sektion mit dem Titel “Build-Fehler mit CapgoWatchSDK” Stellen Sie sicher, dass das Paket der Anzeige hinzugefügt istnicht Ziel für iOS
- Ordner für den Clean Build löschen: Produkt → Ordner für Clean Build löschen (Cmd + Shift + K)
- Pakete neu laden: Datei → Pakete → Pakete neu laden
Simulator-Probleme
Abschnitt mit dem Titel „Simulator-Probleme“- Die Simulator zurücksetzen: Gerät → Alle Inhalte und Einstellungen löschen
- Stellen Sie sicher, dass iOS- und watchOS-Simulator kompatible Paare sind
- Beide Simulator müssen läuft, damit die Kommunikation funktioniert
Nächste Schritte
Abschnitt: Nächste Schritte- API Referenz - API-Dokumentation abschließen
- Kommunikationsmuster - Anwendungsbereiche jeder Methode
- Beispiel-App - Vollständiges lauffähiges Beispiel
Weitermachen von der Erstellung einer watchOS-App
Abschnitt: Weitermachen von der Erstellung einer watchOS-AppWenn 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.