Creazione di un'app watchOS
Copia un prompt di configurazione con le istruzioni di installazione e la guida markdown completa per questo plugin.
Questa guida ti guida attraverso la creazione di un watchOS da zero, compresa la configurazione del progetto in Xcode, l'integrazione del CapgoWatchSDK e la creazione di un'app watch funzionale con SwiftUI.
Per Wear OS, utilizza Creazione di un'app Wear OS al suo posto.
Prerequisites
Sezione intitolata “Requisiti”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 l'hai già fatto) - Account Apple Developer (un account gratuito funziona per lo sviluppo)
Panoramica della struttura del progetto
Sezione intitolata “Panoramica della struttura del progetto”Dopo aver completato questa guida, il tuo progetto avrà questa struttura:
Directoryios/
DirectoryApp/
DirectoryApp/ Progetto principale iOS (nome tuo)
- …
- App.xcodeproj
- App.xcworkspace Usa questo per aprire il progetto
- Podfile
DirectoryMioWatch/ (nuova app orologio)
DirectoryMioWatch/ (fonte app orologio)
- MioWatchApp.swift
- VistaContenuto.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 - Apre
App.xcworkspacenon.xcodeproj) cliccandolo due volte - duplicando il doppio clic
Passo 2: Aggiungi un Target watchOS
Capo 2: Aggiungi un Target watchOS-
Nell'area di Xcode, vai a File → Nuovo → Target…
-
Nel selettore di template:
- Seleziona watchOS barra di navigazione in alto
- App Clicca
- Click Prossimo
-
Configura il tuo app 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 Scena di Notifica (a meno che non ne abbia bisogno)
- Disabilita Includi Complicazione (a meno che non ne abbia bisogno)
- Nome del prodotto:
-
Clicca Concludi
-
When richiesto “Attiva lo schema ‘MyWatch’?”, clicca Attiva
Passo 3: Configura Impostazioni dell'App Watch
Area del contenuto intitolata “Passo 3: Configura Impostazioni dell'App Watch”-
Nella Navigazione del Progetto (barra laterale sinistra), seleziona il tuo progetto (l'icona blu in alto)
-
Seleziona il tuo target watch (ad esempio, “MyWatch”) dalla lista dei target
-
Vai al Generale tab:
- Nome Visualizzato: Il nome mostrato sotto l'icona dell'app (ad esempio, “Il mio App”)
- Identificatore del Bundle: Dovrebbe concludersi con
.watchkitapp - Versione: Corrispondi alla versione del tuo app iOS
- CostruzioneSincronizza il numero di build dell'app iOS
-
Vai a Signing & Capabilities tab:
- : Abilita Gestisci automaticamente la firma
- Scegli il tuo Team
- Xcode creerà automaticamente i profili di provisioning.
-
Set Informazioni di distribuzione:
- Informazioni di distribuzioneMinimi deployment
Passo 4: Aggiungi CapgoWatchSDK tramite Swift Package Manager
Passo 4: Aggiungi CapgoWatchSDK tramite Swift Package ManagerIl CapgoWatchSDK fornisce un'applicazione pronta all'uso WatchConnector CapgoWatchSDK fornisce una classe pronta all'uso
-
per la comunicazione. File → Aggiungi Dipendenze del Pacchetto…
-
Nella casella di ricerca, inserisci:
https://github.com/Cap-go/capacitor-watch.git -
Tocca 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 aggiunto al tuo target watch ad esempio, “MyWatch”), non l'app iOS
- Clicca Aggiungi Pacchetto
- IMPORTANTE: Seleziona solo
Passo 5: Implementa l'App Watch
Passo 5: Implementare l'App per l'OrologioOra creiamo l'app per 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
Titolo della sezione “Passo 6: Configura l'app iOS per WatchConnectivity”Sezione intitolata “Passo 6: Configura l'app iOS per WatchConnectivity”
-
L'app iOS richiede anche la capacità di WatchConnectivity.
-
Scegli il tuo Target iOS App (non il target dell'orologio)
-
Vai a Tabella delle firme e delle 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>
Etapo 7: Costruisci e Esegui
Etapo 7: Costruisci e EseguiEsegui sul Simulatore
Etapo intitolata “Esegui sul Simulatore”-
Scegli il tuo schema di orologio dal selettore dei schemi (in alto nella finestra di Xcode)
-
Scegli un simulatore di orologio:
- Clicca sul selettore del dispositivo accanto al schema
- Scegli un simulatore di Apple Watch (ad esempio “Apple Watch Series 9 (45mm)”)
-
Clicca il Run Esegui (▶️) o premi
Cmd + R -
L'iOS Simulator si avvierà con entrambi l'iPhone e l'Apple Watch
Esegui su dispositivo fisico
Sezione intitolata “Esegui su dispositivo fisico”-
Connetti il tuo iPhone tramite USB
-
Assicurati che il tuo Apple Watch sia associato a quel iPhone
-
Scegli il tuo schema di orologio
-
Scegli il tuo Apple Watch fisico dal elenco dei dispositivi
-
Clicca Esegui
-
Prima volta: potresti dover fidarti del computer su entrambi i dispositivi
Passo 8: Testa la comunicazione
Titolo della sezione “Passo 8: Testa la comunicazione”Da iPhone (Capacitor) a Watch
Titolo della sezione “Da iPhone (Capacitor) a Watch”Nella tua 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
Titolo della sezione “Da Watch a iPhone”L'app per 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 i messaggi su iPhone
Sezione intitolata “Gestisci i 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()Troubleshooting
Sezione intitolata “Risoluzione dei problemi”L'app non compare sull'orologio
Sezione intitolata “L'app non compare sull'orologio”- Ensure bundle IDs are correctly related (watch app bundle ID should be iOS app bundle ID +
.watchkitapp) - Verifica che entrambe le app siano firmate con lo stesso team
- Su dispositivo fisico: Apri l'app Watch su iPhone → Il mio Watch → scorri per trovare la tua app → attiva ON
Non ricevi messaggi
Sottosezione intitolata “Non ricevi messaggi”- Verifica che entrambe le app abbiano WCSession attivato
- Controlla
isReachableprima di inviare messaggi - Per una consegna garantita, utilizza
transferUserInfoal posto disendMessage - Assicurati che i listener siano registrati prima che l'altro dispositivo invii messaggi
Sottosezione intitolata “Errore di sessione non attivata”
Sottosezione intitolata “Errore di sessione non attivata”- Chiamare
WatchConnector.shared.activate()all' inizio del ciclo di vita dell'app - Sul iOS, il plugin si attiva automaticamente - assicurati di aver importato il plugin
- Verifica 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'orologioe non al target iOS
- Pulisci cartella di compilazione: Prodotto → Pulisci cartella di compilazione (Cmd + Shift + K)
- Riprista cache dei pacchetti: File → Pacchetti → Riprista Cache dei Pacchetti
Issue del Simulatore
Sottosezione intitolata “Issue del Simulatore”- Riprista 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
- Creazione di un'app Wear OS per orologi Android
- Riferimento a API - Documentazione completa di API
- Modelli di comunicazione - Quando utilizzare ogni metodo
- Esempio di App - Esempio di App completo e funzionante
Continua da Creazione di un'app watchOS
- Sezione intitolata “Continua da Creazione di un'app watchOS”Se stai utilizzando Creazione di un'app watchOS per pianificare il lavoro di plugin nativi, connettilo con Utilizza @capgo/capacitor-watch per la capacità nativa in Utilizzo di @capgo/capacitor-watch, Directory Plugin Capgo per il flusso di lavoro del prodotto in Directory Plugin Capgo, Plugin Capacitor di Capgo per il dettaglio di implementazione in Plugin Capacitor di Capgo, Aggiungere o Aggiornare Plugin per il dettaglio di implementazione in Aggiungere o Aggiornare Plugin, e Sostituti di Plugin Enterprise Ionic per il flusso di lavoro del prodotto in Sostituti di Plugin Enterprise Ionic.