Guarda il repository watchOS
Copia un prompt di configurazione con i passaggi di installazione e la guida markdown completa per questo plugin.
Questa guida ti guida attraverso la creazione di un'app di accompagnamento watchOS da zero, inclusa la configurazione del progetto in Xcode, l'integrazione del CapgoWatchSDK e la creazione di un'app watch funzionale con SwiftUI.
Requisiti preliminari
Sezione intitolata “Requisiti preliminari”Prima di iniziare, assicurati di avere:
- Xcode 15 o successivo (scarica dal Mac App Store)
- macOS Sonoma o successivo (per l'ultima versione di watchOS SDK)
- Un progetto iOS esistente Capacitor (esegui
npx cap add iosse non hai fatto così) - Account di sviluppatore Apple (funziona anche con un account gratuito per lo sviluppo)
Panoramica della struttura del progetto
Sottosezione intitolata “Panoramica della struttura del progetto”Dopo aver completato questa guida, il tuo progetto avrà questa struttura:
Directoryios/
DirectoryApp/
DirectoryApp/ (la tua app iOS principale)
- …
- App.xcodeproj
- App.xcworkspace (utilizza questo per aprire il progetto)
- Podfile
DirectoryMyWatch/ (nuova app orologio)
DirectoryMyWatch/ (fonte dell'app orologio)
- MyWatchApp.swift
- ContentView.swift
DirectoryAssets.xcassets/
- …
- MyWatch.xcodeproj
Passo 1: Apri il tuo progetto iOS in Xcode
Sezione intitolata “Passo 1: Apri il tuo progetto iOS in Xcode”- Naviga nel tuo progetto Capacitor
ios/Appcartella - Apri
App.xcworkspacenon.xcodeprojdoppiocliccando - Attendere che Xcode indichi il progetto
Passo 2: Aggiungi un Target watchOS
Sottosezione intitolata “Passo 2: Aggiungi un Target watchOS”-
In Xcode, vai a File → Nuovo → Target…
-
In il scegli il modello:
- Scegli watchOS barra in alto
- Scegli Applicazione
- Clicca Avanti
-
Configura la tua app per orologio:
- Nome del prodotto:
MyWatch(o il nome che preferisci) - Team: Seleziona il tuo team di sviluppatori Apple
- Identificatore dell'organizzazione: Deve corrispondere alla tua app iOS (ad esempio,
app.capgo) - Identificatore del Bundle: Sarà generato automaticamente (ad esempio,
app.capgo.myapp.watchkitapp) - Lingua: Swift
- Interfaccia utente: SwiftUI
- Tipo di App Watch: App (non App per App iOS esistente)
- Disabilita Includi la scena di notifica (a meno che non ne abbia bisogno)
- Disabilita Includi Complicazione (a meno che tu non ce ne abbia bisogno)
- Nome del prodotto:
-
Clicca Completa
-
Quando ti viene chiesto “Attiva lo schema ‘MyWatch’?”, clicca Attiva
Passo 3: Configura Impostazioni dell'App dell'Orologio
Sezione intitolata “Passo 3: Configura Impostazioni dell'App dell'Orologio”-
Nel Navigatore del Progetto (barra laterale sinistra), seleziona il tuo progetto (l'icona blu in alto)
-
Seleziona il tuo target dell'orologio (ad esempio “MyWatch”) dalla lista dei target
-
Vai al Generale tab:
- Nome a schermoIl nome mostrato sotto l'icona dell'applicazione (ad esempio, "Mia App")
- Identificatore del BundleDeve terminare con
.watchkitapp - VersioneCorrispondi alla versione dell'applicazione iOS
- BuildCorrispondi al numero di costruzione dell'applicazione iOS
-
Vai a Firma e Capacità tab:
- Abilita Gestisci automaticamente la firma
- Seleziona il tuo Team
- Xcode creerà automaticamente i profili di provisioning
-
Imposta Informazioni di distribuzione:
- Minime distribuzioniPasso 4: Aggiungi CapgoWatchSDK tramite Swift Package Manager
Il CapgoWatchSDK fornisce un ready-to-use
Il CapgoWatchSDK fornisce un ready-to-useIl CapgoWatchSDK fornisce un ready-to-use WatchConnector classe per la comunicazione.
-
In Xcode, vai a File → Aggiungi dipendenze del pacchetto…
-
In campo di ricerca, digita:
https://github.com/Cap-go/capacitor-watch.git -
Tieni premuto Invio e attendi che Xcode recuperi il pacchetto
-
Configura il pacchetto:
- Regola di dipendenza: “Fino alla prossima versione maggiore” con “8.0.0”
- Clicca Aggiungi pacchetto
-
Scegli quali prodotti aggiungere:
- IMPORTANTE: Selezionare solo
CapgoWatchSDK - Assicurati che sia aggiunto al tuo target watch (ad esempio, “MyWatch”), non all'app iOS
- Clicca Aggiungi Pacchetto
- IMPORTANTE: Selezionare solo
Passo 5: Implementa l'App per l'Orologio
Titolo della sezione “Passo 5: Implementa l'App per l'Orologio”Ora creiamo l'app per l'orologio code. Sostituisci i file generati automaticamente con i seguenti:
5.1 Crea il Punto di Ingresso dell'App
Titolo della sezione “5.1 Crea il Punto di Ingresso dell'App”Modifica 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 Crea la Vista Principale
Titolo della sezione “5.2 Crea la Vista Principale”Modifica 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()}Passo 6: Configura l'App iOS per la Connettività dell'Orologio
Sezione intitolata “Passo 6: Configura l'app iOS per WatchConnectivity”La tua app iOS richiede anche la capacità di WatchConnectivity.
-
In Navigatore del Progetto, seleziona il tuo progetto
-
Seleziona il tuo Target dell'app iOS (non il target dell'orologio)
-
Vai a Autenticazione e Capacità tab
-
Clicca + Capacità
-
Cerca e aggiungi WatchConnectivity (se disponibile) o potrebbe essere aggiunto automaticamente
-
Il plugin Capacitor gestisce automaticamente il lato iOS, ma assicurati che il tuo Info.plist abbia:
<key>WKCompanionAppBundleIdentifier</key><string>app.capgo.myapp.watchkitapp</string>
Passo 7: Costruisci e Esegui
Sezione intitolata “Passo 7: Costruisci e Esegui”Esegui sul Simulatore
Sezione intitolata “Esegui sul Simulatore”-
Seleziona il tuo schema di orologio dal selezionatore di schema (in alto nella finestra di Xcode)
-
Scegli un simulatore di orologio:
- Clicca sul selezionatore dispositivo accanto al schema
- Seleziona un simulatore di Apple Watch (ad esempio, “Apple Watch Series 9 (45mm)”)
-
Click il button (▶️) o premi il
Cmd + R -
Il simulatore iOS si avvierà con entrambi l'iPhone e l'Apple Watch
Run su Dispositivo Fisico
Sottosezione intitolata “Run su Dispositivo Fisico”-
Collega il tuo iPhone tramite USB
-
Assicurati che il tuo Apple Watch sia sincronizzato con quell'iPhone
-
Scegli il tuo schema di watch
-
Scegli il tuo Apple Watch fisico dalla lista dei dispositivi
-
Click Run
-
Prima volta: potresti dover fidarti del computer su entrambi i dispositivi
Fase 8: Testare la comunicazione
Sottosezione intitolata “Fase 8: Testare la comunicazione”Dal telefono (Capacitor) all'orologio
Sottosezione intitolata “Dal telefono (Capacitor) all'orologio”Nell'app Capacitor:
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!' } });}Da Watch a iPhone
Sezione intitolata “Da Watch a iPhone”L'app del watch utilizza 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)")}Gestisci messaggi su iPhone
Sezione intitolata “Gestisci messaggi su iPhone”// 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'] } });});Avanzato: Delegato personalizzato per più controllo
Sezione intitolata “Avanzato: Delegato personalizzato per più controllo”Se hai bisogno di più controllo, implementa 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()Risoluzione dei problemi
Sezione intitolata “Risoluzione dei problemi”L'App Watch non compare sull'orologio
Sezione intitolata “L'App Watch non compare sull'orologio”- Assicurati che gli ID dei bundle siano correttamente correlati (l'ID del bundle dell'app Watch dovrebbe essere l'ID del bundle dell'app iOS +
.watchkitapp) - Verifica che entrambe le app siano firmate con lo stesso team
- Sullo smartphone fisico: Apri l'app Watch sull'iPhone → Il mio Watch → scorri per trovare la tua app → attiva ON
I Messaggi Non Vengono Ricevuti
Sezione intitolata “I Messaggi Non Vengono Ricevuti”- Verifica che entrambe le app abbiano attivata la WCSession
- Controlla
isReachableprima di inviare i messaggi - Per una consegna garantita, utilizza
transferUserInfoal posto disendMessage - Assicurati che i listener siano registrati prima che l'altra dispositivo invii messaggi
Errore di "Sessione non attivata"
Sottosezione intitolata "Errore di "Sessione non attivata""- Chiamata
WatchConnector.shared.activate()contexto: "appflow_migration_step2" - all'inizio della vita dell'app
- Sul iOS, il plugin si attiva automaticamente - assicurati che il plugin sia importato
Controlla che la capacità di WatchConnectivity sia aggiunta al target iOS
Errori di compilazione con CapgoWatchSDK- Sottosezione intitolata "Errori di compilazione con CapgoWatchSDK" Assicurati che il pacchetto sia aggiunto al target dell'orologioNon iOS target
- Pulisci cartella di build: Prodotto → Pulisci Cartella di Build (Cmd + Shift + K)
- Ripristina cache dei pacchetti: File → Pacchetti → Ripristina Cache dei Pacchetti
Issue del simulatore
Sottosezione intitolata “Issue del simulatore”- Ripristina i simulatori: Dispositivo → Cancella Tutti i Contenuti e le Impostazioni
- Assicurati che i simulatori iOS e watchOS siano coppie compatibili
- Entrambi i simulatori devono essere in esecuzione per consentire la comunicazione
Passaggi successivi
Sezione intitolata “Passaggi successivi”- API Reference - Documentazione completa di API
- Modelli di comunicazione - Quando utilizzare ogni metodo
- Esempio di App - Esempio di App completo e funzionante
Continua da Creare un'app watchOS
Sezione intitolata “Continua da Creare un'app watchOS”Se stai utilizzando Creare un'app watchOS per pianificare il lavoro del plugin nativo, connettilo con Utilizza @capgo/capacitor-watch per la capacità nativa in Utilizza @capgo/capacitor-watch, Capgo Directory dei Plugin per il flusso di lavoro del prodotto in Capgo Directory dei Plugin, Capacitor Plugin da Capgo per la dettaglio di implementazione in Capacitor Plugin da Capgo, Aggiungere o Aggiornare i Plugin per il dettaglio di implementazione in Aggiungere o Aggiornare i Plugin, e Alternative per Plugin Enterprise Ionic per il flusso di lavoro del prodotto in Alternative per Plugin Enterprise Ionic.