Erstellung einer watchOS-App
Eine Einrichtungsanleitung 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 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) - Apple-Entwicklerkonto (Ein kostenloses Konto reicht für die Entwicklung aus)
Übersicht über die Projektstruktur
Sektion 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
Abschnitt mit dem Titel „Schritt 1: Öffnen Sie Ihr iOS-Projekt in Xcode“- Navigieren Sie zu Ihrem Projekt in Ihrem Capacitor-Ordner
ios/AppOrdner - Öffnen
App.xcworkspacenicht.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-
Sektion mit dem Titel „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 Zurück
-
Konfigurieren Sie Ihre Uhranwendung:
- Produktname:
MyWatch(oder Ihren bevorzugten Namen) - Team: Wählen Sie Ihr Apple-Entwicklerteam
- Organisations-Identifier: Sollte Ihrem iOS-App entsprechen (z.B.
app.capgo) - Bundle-Bezeichner: Wird automatisch generiert (z.B.,
app.capgo.myapp.watchkitapp) - Sprache:
- SwiftBenutzeroberfläche
- : SwiftUIArten von Apple Watch Apps
- : App (nicht App für bestehende iOS-App) Abwählen Benachrichtigungsszenario einschließen
- (es sei denn, Sie benötigen es) Komplikation einschließen (außer Sie benötigen es)
- Produktname:
-
Klicken Fertigstellen
-
Wenn Sie aufgefordert werden “Aktivieren Sie das ‘Mein-Uhr’-Szenario?”, klicken Sie Aktivieren
Schritt 3: Konfigurieren Sie die Watch-App-Einstellungen
Abschnitt mit dem Titel “Schritt 3: Konfigurieren Sie die Watch-App-Einstellungen”-
Wählen Sie in der Projekt-Navigator-Leiste (links) Ihr Projekt (das blaue Icon oben) aus
-
Wählen Sie Ihr Uhrziel (z.B. “Mein-Uhr”) aus der Liste der Ziele aus
-
Gehe zur Allgemeine Einstellungen tab:
- AnzeigenameAnzeigename: Der Name, der unter dem App-Icon angezeigt wird (z.B. "Meine App")
- Bundle-BezeichnerBezeichner sollte mit
.watchkitapp - VersionVersion: Passen Sie Ihre iOS-App-Version an
- BuildBuild: Passen Sie Ihre iOS-App-Build-Nummer an
-
Zu Signierung und Fähigkeiten tab:
- Aktivieren Automatisch die Signierung verwalten
- Wählen Sie Ihr Team
- context: Capgo Marketing-Website. Rolle: Kurzbeschreibung oder Navigationspunkt. Anzeige auf: Seite sla.astro. Nachrichtenschlüssel `team_plan` (Team-Plan).
-
Xcode erstellt die Bereitstellungsprofile automatisch Einstellen:
- Bereitstellungs-InfoMindestbereitstellungen
: ab watchOS 9.0 oder später
Schritt 4: Fügen Sie CapgoWatchSDK über Swift Package Manager hinzuAbschnitt mit dem Titel „Schritt 4: Fügen Sie CapgoWatchSDK über Swift Package Manager hinzu“ WatchConnector Klasse für die Kommunikation.
-
Gehe in Xcode zu Datei → Hinzufügen von Paketabhängigkeiten…
-
Im Suchfeld eingeben:
https://github.com/Cap-go/capacitor-watch.git -
Drücke Enter und warte, bis Xcode das Paket herunterlädt
-
Konfiguriere das Paket:
- Abhängigkeitsregel: „Bis zur nächsten Hauptversion“ mit „8.0.0“
- Klicke Paket hinzufügen
-
Wähle die Produkte aus, die du hinzufügen möchtest:
- 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-App“Nun erstellen wir die Watch-App code. Ersetzen Sie die automatisch generierten Dateien durch die folgenden:
5.1 Erstellen Sie den Anwendungsstartpunkt
Überschrift: „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
Überschrift: „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 im Projekt-Explorer 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äteauswahl-Reiter 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
Run on Physical Device
Sektion mit dem Titel “Run on Physical Device”-
Verbinden Sie Ihr iPhone über USB
-
Stellen Sie sicher, dass Ihr Apple Watch mit diesem iPhone paired ist
-
Wählen Sie Ihr Watch-Schema
-
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()Hilfe bei Problemen
Abschnitt mit dem Titel “Fehlertreiber”Uhr-App erscheint nicht auf Uhr
Abschnitt mit dem Titel “Uhr-App erscheint nicht auf Uhr”- Stellen Sie sicher, dass die Bundle-IDs korrekt miteinander in Beziehung stehen (die Bundle-ID der Uhr-App sollte die Bundle-ID des iOS-Apps sein +
.watchkitapp) - Überprüfen Sie, ob beide Apps mit demselben Team signiert sind
- Auf physischem Gerät: Öffnen Sie die Uhr-App auf dem iPhone → Meine Uhr → scrollen Sie, um Ihre App zu finden → Aktivieren Sie das Schaltwerk
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 vorher registriert sind, bevor das andere Gerät Nachrichten sendet
”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 der Plugin importiert ist
Überprüfen Sie, dass die WatchConnectivity-Fähigkeit zur iOS-Ziel hinzugefügt ist
Fehler beim Bauen mit CapgoWatchSDK- Sektion mit dem Titel “Fehler beim Bauen mit CapgoWatchSDK” Stellen Sie sicher, dass das Paket zur watch-Ziel hinzugefügt ist, nicht Ziel für iOS
- Ordner für Clean Build: Produkt → Clean Build Ordner (Cmd + Shift + K)
- Paket-Caches zurücksetzen: Datei → Pakete → Paket-Caches zurücksetzen
Simulator-Probleme
Abschnitt mit dem Titel „Simulator-Probleme“- Simulatoren zurücksetzen: Gerät → Alle Inhalte und Einstellungen löschen
- Stellen Sie sicher, dass die iOS- und watchOS-Simulatoren kompatible Paare sind
- Beide Simulatoren 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 funktionierendes Beispiel
Weitermachen von der Erstellung einer watchOS-App
Abschnitt: Weitermachen von der Erstellung einer watchOS-AppWenn Sie Erstellung einer watchOS-App um native Plugin-Arbeit zu planen, verbinden Sie es mit Mit @capgo/capacitor-watch zur nativen Fähigkeit in Mit @capgo/capacitor-watch, Capgo Plugin-Verzeichnis zur Produktworkflow in Capgo Plugin-Verzeichnis, Capacitor Plugins von Capgo zur Implementierungsdetails in Capacitor Plugins von Capgo, Hinzufügen oder Aktualisieren von Plugins zur Implementierungsdetails in Hinzufügen oder Aktualisieren von Plugins, und Ionic Enterprise Plugin Alternativen zur Produktworkflow in Ionic Enterprise Plugin Alternativen.