Erstellung einer Uhr-App
Kopieren Sie einen Einrichtungsbefehl mit den Installationsanweisungen und der vollständigen Markdown-Guideline für diesen Plugin.
Diese Anleitung führt Sie durch die Erstellung einer watchOS-Kompanion-App von Grund auf, einschließlich Projekt-Einrichtung in Xcode, Integration des CapgoWatchSDK und 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 das neueste watchOS SDK)
- Ein bestehendes Capacitor iOS-Projekt (ausführen
npx cap add ioswenn Sie noch nicht getan haben) - Ein 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/ (Ihr Haupt-App für iOS)
- …
- App.xcodeproj
- App.xcworkspace (Verwenden Sie dies, um das Projekt zu öffnen)
- Podfile
VerzeichnisMyWatch/ (neue Uhr app)
VerzeichnisMyWatch/ (Uhr app Quelle)
- MyWatchApp.swift
- ContentView.swift
VerzeichnisAssets.xcassets/
- …
- MyWatch.xcodeproj
Schritt 1: Öffnen Sie Ihr iOS-Projekt in Xcode
Abschnitt mit dem Titel “Schritt 1: Öffnen Sie Ihr iOS-Projekt in Xcode”- Navigieren Sie zu Ihrem Capacitor-Projekt in der
ios/AppOrdner - Öffnen
App.xcworkspacenicht.xcodeprojdurch Doppelklicken - Warten Sie, bis Xcode das Projekt indexiert
Schritt 2: Fügen Sie ein watchOS-Ziel hinzu
Abschnitt mit dem Titel „Schritt 2: Fügen Sie ein watchOS-Ziel hinzu“-
In Xcode gehen Sie zu Datei → Neues → Ziel…
-
In der Vorlagenauswahl:
- Wählen Sie watchOS Registerkarte oben
- Wählen Sie App
- Klicken Sie auf Weiter
-
Ihre Uhr-App einrichten:
- Produktname:
MyWatch(oder Ihr bevorzugter Name) - Team: Wählen Sie Ihr Apple-Entwicklerteam
- Organisations-Identifier: Sollte Ihrem iOS-App entsprechen (z.B.
app.capgo) - Bundle-Identifier: 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 (falls Sie es benötigen)
- Entfernen Komplikation einschließen (falls Sie es benötigen)
- Produktname:
-
Klicken Fertigstellen
-
Wenn Sie aufgefordert werden, ‘MyWatch’-Schematismus zu aktivieren, klicken Sie __CAPGO_KEEP_0__
Schritt 3: Konfiguriere Watch-App-Einstellungen
Abschnitt mit dem Titel „Schritt 3: Konfiguriere Watch-App-Einstellungen“-
Wählen Sie in der Projekt-Navigator-Leiste (links) Ihr Projekt (das blaue Icon oben) aus
-
Wählen Sie Ihr Watch-Target (z.B. „MeinWatch“) aus der Liste der Ziele
-
Gehe zu dem Allgemein Registerkarte:
- Anzeigename: Der Name, der unter dem App-Icon angezeigt wird (z.B. „Meine App“)
- Bundle-Identifier: Soll mit
.watchkitapp - Version: Deine iOS-Anwendungsversion anpassen
- Build: Deine iOS-Anwendungsbauversion anpassen
-
Zu Zertifizierung und Fähigkeiten tab:
- Aktivieren Automatisch die Zertifizierung verwalten
- Wähle dein Team
- Xcode erstellt die Berechtigungsprofile automatisch
-
Konfiguration Zuordnungsinformationen:
- Mindestzusammenfassungen: watchOS 9.0 oder später
Schritt 4: Fügen Sie CapgoWatchSDK über Swift Package Manager hinzu
Abschnitt mit dem Titel “Schritt 4: Fügen Sie CapgoWatchSDK über Swift Package Manager hinzu”Das CapgoWatchSDK bietet eine fertige Lösung für die Kommunikation. WatchConnector In Xcode gehen Sie zu
-
Datei → Abhängigkeiten hinzufügen… Im Suchfeld eingeben:
-
__CAPGO_KEEP_0__
https://github.com/Cap-go/capacitor-watch.git -
Drücken Sie die Eingabetaste 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 Ihrem Beobachtungsziel (z. B. „MeinBeobachtungsziel“), nicht dem iOS-App-ziel hinzugefügt wurde
- Klicken Paket hinzufügen
- WICHTIG: Wählen Sie nur
Schritt 5: Implementieren Sie die Watch-App
Abschnitt mit dem Titel “Schritt 5: Implementieren Sie die Watch-App”Erstellen wir nun die Uhranwendung code. Ersetzen Sie die automatisch generierten Dateien durch die folgenden:
5.1 Erstellen Sie den Anwendungsstartpunkt
Abschnitt mit dem Titel “5.1 Erstellen Sie den Anwendungsstartpunkt”Bearbeiten 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
Abschnitt mit dem Titel „5.2 Erstellen Sie die Hauptansicht“Bearbeiten 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-Anwendung 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 Projektnavigator Ihr Projekt
-
Wählen Sie Ihr iOS-App-Ziel nicht das Ziel des Uhren
-
Zu Signierung und Fähigkeiten Registerkarte
-
Klicken Sie + Fähigkeit
-
Suchen Sie nach und fügen Sie hinzu WatchConnectivity (wenn verfügbar) oder es kann automatisch hinzugefügt werden
-
Der Capacitor-Plugin handhabt die iOS-Seite automatisch, aber stellen Sie sicher, dass Ihre Info.plist folgende 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 Simulator ausführen
Abschnitt mit dem Titel “Auf Simulator ausführen”-
Wählen Sie Ihr Watch-Schema aus der Scheme-Auswahl (oben im Xcode-Fenster)
-
Wählen Sie einen Apple Watch-Simulator:
- Klicken Sie auf den Geräteauswahlknopf neben der Scheme
- Wählen Sie einen Apple Watch-Simulator (z.B. “Apple Watch Series 9 (45mm)” )
-
Klicken Sie auf den Ausführen Button (▶️) oder drücken Sie
Cmd + R -
Der iOS Simulator wird mit beiden iPhone und Apple Watch gestartet
Auf physischem 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 pairt ist
-
Wählen Sie Ihr Watch-Schema
-
Wählen Sie Ihr physisches Apple Watch aus der Geräteliste
-
Klicken Sie Ausführen
-
Erstes Mal: Sie müssen Ihr Computer auf beiden Geräten vertrauen
Schritt 8: Kommunikation testen
Abschnitt mit dem Titel „Schritt 8: Kommunikation testen“Von iPhone (Capacitor) zu Watch
Abschnitt mit dem Titel „Von iPhone (Capacitor) zu Watch“In 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 mit dem Titel „Von Watch zu iPhone“Die Watch-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 mit dem Titel “Nachrichten auf dem 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 mit dem Titel “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()Fehlersuche
Abschnitt mit dem Titel “Fehlersuche”App auf dem Uhr nicht sichtbar
Abschnitt mit dem Titel “App auf dem Uhr nicht sichtbar”- Stellen Sie sicher, dass die Bundle-IDs korrekt miteinander in Beziehung stehen (die Bundle-ID der Uhr-App sollte die Bundle-ID der iOS-App sein +
.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 Uhr → scrollen Sie, um Ihre App zu finden → ON schalten
Nicht empfangene Nachrichten
Abschnitt mit dem Titel „Nicht empfangene Nachrichten“- Stellen Sie sicher, dass beide Apps die WCSession aktiviert haben
- Überprüfen
isReachableBevor Nachrichten gesendet werden - Für eine sichere Zustellung verwenden Sie
transferUserInfoanstattsendMessage - Stellen Sie sicher, dass Hörer registriert sind, bevor das andere Gerät Nachrichten sendet
Fehler „Sitzung nicht aktiviert“
Abschnitt mit dem Titel „Fehler „Sitzung nicht aktiviert““- Aufrufen
WatchConnector.shared.activate()früh in der App-Laufzeit - Bei iOS aktiviert sich der Plugin automatisch - stellen Sie sicher, dass das Plugin importiert ist
- Überprüfen Sie, ob die WatchConnectivity-Fähigkeit der iOS-Zielgruppe hinzugefügt wurde
Fehler beim Bauen mit CapgoWatchSDK
Abschnitt mit dem Titel “Fehler beim Bauen mit CapgoWatchSDK”- Stellen Sie sicher, dass das Paket der watch-Zielgruppehinzugefügt ist, nicht der iOS-Zielgruppe
- Ordner für den Clean Build löschen: Produkt → Ordner für Clean Build löschen (Cmd + Shift + K)
- Paket-Caches zurücksetzen: Datei → Pakete → Paket-Caches zurücksetzen
Simulator-Probleme
Abschnitt mit dem Titel „Simulator-Probleme“- Die Simulatoren zurücksetzen: Gerät → Alle Inhalte und Einstellungen löschen
- Stellen Sie sicher, dass iOS- und watchOS-Simulatoren kompatible Paare sind
- Beide Simulatoren müssen läuft, damit die Kommunikation funktioniert
Nächste Schritte
Abschnitt mit dem Titel „Nächste Schritte“- API-Referenz - API-Dokumentation abschließen
- Kommunikationsmuster - Wann jede Methode verwenden
- Beispiel-App - Vollständiges funktionierendes Beispiel