Uhren-Repository __CAPGO_KEEP_0__
Einen Einrichtungsprompt mit den Installationsanweisungen und der vollständigen Markdown-Guideline für diesen Plugin kopieren.
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 der Erstellung einer funktionsfähigen Uhr-App mit SwiftUI.
Voraussetzungen
Abschnitt mit dem Titel ‘Voraussetzungen’Before you begin, ensure you have:
- Xcode 15 oder eine spätere Version (herunterladen vom Mac App Store)
- macOS Sonoma oder eine spätere Version (für die neueste watchOS SDK)
- Ein bestehendes Capacitor iOS-Projekt (ausführen
npx cap add ios(wenn Sie noch nicht getan haben) - Apple-Entwicklerkonto (ein kostenloses Konto reicht für die Entwicklung aus)
Übersicht über die Projektstruktur
Abschnitt mit Titel “Übersicht über die Projektstruktur”Nach Abschluss dieser Anleitung wird Ihr Projekt diese Struktur haben:
Verzeichnisios/
VerzeichnisApp/
VerzeichnisApp/ (Ihr Haupt-App für iOS)
- …
- App.xcodeproj
- App.xcworkspace (Benutzen Sie dies, um das Projekt zu öffnen)
- Podfile
VerzeichnisMyWatch/ (neue Watch-Anwendung)
VerzeichnisMyWatch/ (Quelle der Watch-Anwendung)
- MeinWatchApp.swift
- InhaltView.swift
VerzeichnisAssets.xcassets/
- …
- MyWatch.xcodeproj
Schritt 1: Öffnen Sie Ihr iOS-Projekt in Xcode
Abschnitt mit der Überschrift „Schritt 1: Öffnen Sie Ihr iOS-Projekt in Xcode“- Navigieren Sie zu Ihrem Capacitor-Projekt
ios/AppOrdner - Öffnen
App.xcworkspacenicht.xcodeprojdurch Doppelklicken - Warten Sie, bis Xcode das Projekt indexiert
Schritt 2: Hinzufügen eines watchOS-Ziels
Schritt 2: Hinzufügen eines watchOS-Ziels-
Schritt 2: Hinzufügen eines watchOS-Ziels In Xcode gehen Sie zu
-
Datei → Neues → Ziel…
- Select Wählen Sie Oberer Reiter
- Choose Wählen Sie
- App Nächster
-
Konfigurieren Sie Ihre Uhranwendung:
- Produktname:
MyWatch(oder Ihren bevorzugten Namen) - Team: Wählen Sie Ihr Apple-Entwicklerteam
- Organisations-Bezeichner: Sollte Ihrem iOS-App entsprechen (z.B.
app.capgo) - Bundle-Bezeichner: Wird automatisch generiert (z.B.
app.capgo.myapp.watchkitapp) - Sprache: Swift
- Benutzeroberfläche: SwiftUI
- Arten von Uhrenanwendungen: App (kein App für bestehende iOS-App)
- Entfernen Benachrichtigungsszene einschließen (es sei denn, Sie benötigen sie)
- Entfernen Komplikation einschließen (es sei denn, Sie benötigen sie)
- Produktname:
-
Klicken Fertigstellen
-
When du aufgefordert wirst “‘MyWatch’-Schem aktivieren?”, klicke Aktivieren
Schritt 3: Konfiguration der Watch-App-Einstellungen
Schritt 3: Konfiguration der Watch-App-Einstellungen-
In der Projektnavigator (linker Seitenleiste), wähle dein Projekt (das blaue Icon oben)
-
Wähle dein Watch-Target (z.B. “MyWatch”) aus der Liste der Ziele
-
Gehe zur Allgemein tab:
- Anzeigename: Der Name, der unter dem App-Icon angezeigt wird (z.B. “Mein App”)
- Bundle-IdentifierSollte mit einem Punkt enden.
.watchkitapp - Version: Passen Sie Ihre iOS-Anwendungsversion an
- BuildPassen Sie die iOS-Anwendungsbuildnummer an
-
Gehe zu Zertifizierung & Fähigkeiten tab:
- tab: Automatisches Signieren verwalten
- Wählen Sie Team
- Xcode erstellt Provisioning-Profiles automatisch
-
Setzen Bereitstellungsinformationen:
- Zuordnungs-Informationen: watchOS 9.0 oder später
Schritt 4: Fügen Sie CapgoWatchSDK über Swift Package Manager hinzu
Schritt 4: Fügen Sie CapgoWatchSDK über Swift Package Manager hinzuDer CapgoWatchSDK bietet einen fertig konfigurierten WatchConnector Klasse für die Kommunikation.
-
In Xcode gehen Sie zu Datei → Paketabhängigkeiten hinzufügen…
-
In der Suchleiste eingeben:
https://github.com/Cap-go/capacitor-watch.git -
Drücken Sie Enter und warten Sie, bis Xcode das Paket abruft
-
Konfigurieren Sie das Paket:
- Abhängigkeitsregel: „Bis zur nächsten Hauptversion“ mit „8.0.0“
- Klicken Paket hinzufügen
-
Wählen Sie, welche Produkte hinzugefügt werden sollen:
- WICHTIG: Wählen Sie nur
CapgoWatchSDK - Stellen Sie sicher, dass es in Ihrem watch-Ziel enthalten ist z.B. "Mein Watch", nicht die iOS-Anwendung
- 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 Watch-App code. Ersetzen Sie die automatisch generierten Dateien durch die folgenden:
5.1 Erstellen Sie den Anwendungs-Einstiegspunkt
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.
-
Im Projekt-Explorer wählen Sie Ihr Projekt
-
Wählen Sie Ihr iOS-App-Ziel (nicht das Ziel für die Uhr)
-
Gehe zu Signierung und Fähigkeiten tab
-
Klicken Sie + Fähigkeit
-
Suchen Sie nach und fügen Sie WatchConnectivity (wenn verfügbar) oder es kann automatisch hinzugefügt werden
-
Das Capacitor Plugin handhabt die iOS-Seite automatisch, aber stellen Sie sicher, dass Ihr Info.plist folgende Einträge enthält:
<key>WKCompanionAppBundleIdentifier</key><string>app.capgo.myapp.watchkitapp</string>
Schritt 7: Erstellen und Ausführen
Schritt 7: Erstellen und AusführenIm Simulator ausführen
Abschnitt mit dem Titel „Im Simulator ausführen“-
Wählen Sie Ihr Uhrschema aus der Schemeselektor (oben im Xcode-Fenster)
-
Wählen Sie einen Uhrsimulator:
- Klicken Sie auf den Geräteauswahlbutton neben dem Schemaselektor
- Wählen Sie einen Apple Watch-Simulator (z.B. „Apple Watch Series 9 (45mm)“)
-
Klicken Sie auf Laufen button (▶️) oder drücken
Cmd + R -
Der iOS-Simulator wird mit beiden iPhone und Apple Watch gestartet
Run auf physischem Gerät
Abschnitt mit dem Titel “Run auf physischem Gerät”-
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 Laufen
-
Zuerst: Sie müssen Ihrem Computer auf beiden Geräten vertrauen
Schritt 8: Kommunikation testen
Abschnitt mit dem Titel „Schritt 8: Kommunikation testen“Von iPhone (Capacitor) zu Uhr
Abschnitt mit dem Titel „Von iPhone (Capacitor) zu Uhr“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 Uhr zu iPhone
Abschnitt mit dem Titel „Von Uhr 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 dem iPhone bearbeiten
Abschnitt: "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: "Erweitert: Benutzerdefinierte Delegate für mehr Kontrolle"If you need more control, implement 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()Hilfe bei Problemen
Abschnitt: "Hilfe bei Problemen"App auf dem Uhr nicht sichtbar
Abschnitt: "App auf dem Uhr nicht sichtbar"- Stellen Sie sicher, dass die Bundle-IDs korrekt miteinander in Beziehung stehen (die ID der Watch-App sollte die 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
Nachrichten werden nicht empfangen
Abschnitt mit dem Titel „Nachrichten werden nicht empfangen“- Stellen Sie sicher, dass beide Apps WCSession aktiviert haben
- Überprüfen
isReachablebevor Nachrichten gesendet werden - Für eine garantierte Zustellung verwenden Sie
transferUserInfoanstattsendMessage - Stellen Sie sicher, dass Hörer registriert sind, bevor das andere Gerät Nachrichten sendet
„Sitzung nicht aktiviert“-Fehler
Abschnitt mit dem Titel „„Sitzung nicht aktiviert“-Fehler“- Anrufen
WatchConnector.shared.activate()früh im App-Lebenszyklus - Aktiviert sich auf iOS automatisch - Importieren Sie die Plugin
- Überprüfen Sie, ob die WatchConnectivity-Fähigkeit zum iOS-Ziel hinzugefügt wurde
Fehler beim Bauen mit CapgoWatchSDK
Abschnitt mit dem Titel „Fehler beim Bauen mit CapgoWatchSDK“- Stellen Sie sicher, dass das Paket zum watch Zielnicht zum Ziel iOS
- Ordner für den Clean Build: Produkt → Ordner für den Clean Build (Cmd + Shift + K)
- Package-Caches zurücksetzen: Datei → Pakete → Package-Caches zurücksetzen
Simulator-Probleme
Abschnitt: "Simulator-Probleme"- Die Simulator zurücksetzen: Gerät → Alle Inhalte und Einstellungen löschen
- Stellen Sie sicher, dass iOS- und watchOS-Simulator ein kompatibles Paar sind
- Beide Simulator müssen läuft, damit die Kommunikation funktioniert
Nächste Schritte
Abschnitt: "Zukünftige Schritte"- API-Referenz - API-Dokumentation abschließen
- Kommunikationsmuster - Wann verwenden Sie jede Methode
- Beispiel-App - Vollständiges funktionierendes Beispiel
Weitermachen von Creating a watchOS App
Abschnitt mit dem Titel “Weitermachen von Creating a watchOS App”Wenn Sie Creating a watchOS App verwenden Erstellen einer watchOS-Anwendung zum Planen von native Plugin-Arbeiten, verbinden Sie es mit Verwendung von @capgo/capacitor-watch für die native Fähigkeit in Verwendung von @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 Plugins hinzufügen oder aktualisieren für die Implementierungsdetails in Plugins hinzufügen oder aktualisieren und Ionic Enterprise-Plugin-Alternativen für den Produktworkflow in Ionic Enterprise-Plugin-Alternativen.