Creazione di un'app watchOS
Copia un prompt di installazione con i passaggi di installazione e la guida markdown completa per questo plugin.
Questa guida ti guida nella creazione di un'app di accompagnamento watchOS da zero, compresa la configurazione del progetto in Xcode, l'integrazione del CapgoWatchSDK e la creazione di un'app watch funzionale con SwiftUI.
Requisiti
Sezione intitolata “Requisiti”Prima di iniziare, assicurati di avere:
- Xcode 15 o successivo (scarica dal Mac App Store)
- macOS Sonoma o successivo (per il più recente watchOS SDK)
- Un progetto iOS esistente Capacitor (esegui
npx cap add iosse non l'hai già fatto) - Account di sviluppatore Apple (un account gratuito funziona per lo sviluppo)
Struttura del Progetto Panoramica
Sottosezione intitolata “Struttura del Progetto Panoramica”Dopo aver completato questa guida, il tuo progetto avrà questa struttura:
Directoryios/
DirectoryApp/
DirectoryApp/ (il tuo app iOS principale)
- …
- App.xcodeproj
- App.xcworkspace (usa 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 al tuo progetto Capacitor
ios/Appcartella - Apre
App.xcworkspace(non.xcodeproj) facendo doppio clic su di esso - Aspetta che Xcode indichi il progetto
Passo 2: Aggiungi un Target watchOS
Sezione intitolata “Passo 2: Aggiungi un Target watchOS”-
In Xcode, vai a File → Nuovo → Target…
-
In il scegli il template:
- Scegli watchOS tabella in alto
- Scegli App
- Click Prossimo
-
Configura la tua app per orologio:
- Nome del prodotto:
MyWatch(o il nome che preferisci) - Team: Seleziona il tuo team di sviluppatore Apple
- Identificatore dell'organizzazione: Deve corrispondere alla tua app iOS (ad esempio,
app.capgo) - Identificatore del pacchetto: Sarà generato automaticamente (ad esempio,
app.capgo.myapp.watchkitapp) - LinguaSwift
- Interfaccia utenteSwiftUI
- Tipo di app per orologioApp (non App per App iOS esistente)
- Deseleziona Includi la scena di notifica (a meno che non ne abbia bisogno)
- Deseleziona Includi la complicazione (a meno che non ne abbia bisogno)
- Nome del prodotto:
-
Clicca Completa
-
Quando verrai sollecitato “Attiva lo schema ‘MyWatch’?”, clicca Attiva
Passo 3: Configura Impostazioni dell'App per l'Orologio
Sezione intitolata “Passo 3: Configura Impostazioni dell'App per l'Orologio”-
Nel Navigatore del Progetto (barra laterale sinistra), seleziona il tuo progetto (l'icona blu in alto)
-
Seleziona il tuo target per l'orologio (ad esempio, “MyWatch”) dalla lista dei target
-
Vai al Generale tabella:
- Nome Visualizzato: Il nome mostrato sotto l'icona dell'app (ad esempio, “Il mio App”)
- Identificatore Bundle: Dovrebbe concludersi con
.watchkitapp - Versione: Corrisponde alla versione del tuo app iOS
- Costruzione: Corrisponde al numero di costruzione del tuo app iOS
-
Vai a Autenticazione e Capacità tab:
- Abilita Gestisci automaticamente l'autenticazione
- Scegli il tuo Team
- Xcode creerà automaticamente i profili di provisioning
-
Imposta Informazioni di distribuzione:
- Minime distribuzioni: watchOS 9.0 o successivo
Passo 4: Aggiungi CapgoWatchSDK tramite Gestore Pacchetti Swift
Sezione intitolata “Passo 4: Aggiungi CapgoWatchSDK tramite Gestore Pacchetti Swift”Il CapgoWatchSDK fornisce un class pronto all'uso WatchConnector per la comunicazione.
-
In Xcode, vai a File → Aggiungi dipendenze dei pacchetti…
-
Inserisci nel campo di ricerca:
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: Seleziona solo
CapgoWatchSDK - Assicurati che sia stato aggiunto al tuo monitora il target (ad esempio, “MyWatch”), non l'app di iOS
- Clicca Aggiungi Pacchetto
- IMPORTANTE: Seleziona solo
Passo 5: Implementa l'App dell'Orologio
Sottosezione intitolata “Passo 5: Implementa l'App dell'Orologio”Ora creiamo l'app dell'orologio code. Sostituisci i file generati automaticamente con i seguenti:
5.1 Crea il punto di ingresso dell'app
Sezione intitolata “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
Sezione intitolata “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 WatchConnectivity
Sezione intitolata “Passo 6: Configura l'app iOS per WatchConnectivity”La tua app iOS richiede anche la capacità di WatchConnectivity.
-
Nel Navigatore dei progetti, seleziona il tuo progetto
-
Scegli il tuo target iOS App (non il target dell'orologio)
-
Vai a tabella delle firme e delle capacità tab
-
Clicca Aggiungi 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>
Passaggio 7: Costruisci e Esegui
Sezione intitolata “Passaggio 7: Costruisci e Esegui”Esegui sul Simulatore
Sezione intitolata “Esegui sul Simulatore”-
Seleziona il tuo schema di orologio dalla selezione dei schemi (in alto nella finestra di Xcode)
-
Scegli un simulatore di orologio:
- Clicca sul selettore del dispositivo accanto allo schema
- Seleziona un simulatore di Apple Watch (ad esempio, “Apple Watch Series 9 (45mm)”
-
Clicca sul Pulsante (▶️) di Esecuzione Premi il pulsante (▶️) di Esecuzione
Cmd + R -
La simulazione di iOS si avvierà con entrambi l'iPhone e l'Apple Watch
Esegui su Dispositivo Fisico
Sezione intitolata “Esegui su Dispositivo Fisico”-
Collega il tuo iPhone tramite USB
-
Assicurati che l'Apple Watch sia accoppiato a quel iPhone
-
Seleziona lo schema del tuo orologio
-
Seleziona il tuo Apple Watch fisico dalla lista dei dispositivi
-
Clicca Esegui
-
Prima volta: potresti dover fidarti del tuo computer su entrambi i dispositivi
Passo 8: Testa la comunicazione
Sezione intitolata “Passo 8: Testa la comunicazione”Dal iPhone (Capacitor) all'orologio
Sezione intitolata “Dal iPhone (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!' } });}Dal Watch all'iPhone
Sezione intitolata “Dal Watch all'iPhone”L'app orologio 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 un controllo maggiore
Sezione intitolata “Avanzato: Delegato personalizzato per un controllo maggiore”Se hai bisogno di un controllo maggiore, 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 non compare sul watch
Sezione intitolata “L'app non compare sul watch”- Assicurarsi 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) - Verificare che entrambe le app siano firmate con lo stesso team
- Sullo smartphone fisico: Apri l'app Watch sul tuo iPhone → Il mio Watch → scorri per trovare la tua app → attiva ON
Messaggi Non Ricevuti
Sottosezione intitolata “Messaggi Non Ricevuti”- Verificare che entrambe le app abbiano WCSession attivato
- Controlla
isReachableprima di inviare messaggi - Per una consegna garantita, utilizza
transferUserInfoal posto disendMessage - Assicurati che gli ascoltatori siano registrati prima che l'altra dispositivo invii messaggi
”Sessione Non Attivata” Errore
Sezione intitolata “”Errore di sessione non attivata””- Chiamata
WatchConnector.shared.activate()all'inizio del ciclo di vita dell'app - Sul iOS, il plugin si attiva automaticamente - assicurati di aver importato il plugin
- Controlla che la capacità WatchConnectivity sia aggiunta al target iOS
Errori di compilazione con CapgoWatchSDK
Sezione intitolata “Errori di compilazione con CapgoWatchSDK”- Assicurati che il pacchetto sia aggiunto al target watch, non al target iOS
- Pulisci la cartella di compilazione: Prodotto → Pulisci cartella di compilazione (Cmd + Shift + K)
- Ripristina cache dei pacchetti: File → Pacchetti → Ripristina Cache dei Pacchetti
Problemi del Simulatore
Sezione intitolata “Problemi 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 garantire 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 per watchOS
Sezione intitolata “Continua da Creare un'app per watchOS”Se stai utilizzando Creare un'app per watchOS per pianificare il lavoro di plugin nativi, connettilo con Utilizzare @capgo/capacitor-watch per la capacità nativa in Utilizzare @capgo/capacitor-watch Directory dei plugin Capgo per il workflow del prodotto in Directory dei plugin Capgo I plugin Capacitor sviluppati da Capgo per la dettaglio di implementazione in I plugin Capacitor sviluppati da Capgo, Aggiungere o aggiornare i plugin per la dettaglio di implementazione in Aggiungere o aggiornare i plugin, e Alternative plugin Enterprise Ionic per il workflow del prodotto in Alternative plugin Enterprise Ionic.