Créer une application watchOS
Copiez une commande de configuration avec les étapes d'installation et le guide markdown complet pour ce plugin.
Ce guide vous guide à travers la création d'une application de compagnon watchOS à partir de zéro, y compris la configuration du projet dans Xcode, l'intégration de l' SDK CapgoWatch et la création d'une application watch fonctionnelle avec SwiftUI.
Préalables
Section intitulée “Préalables”Avant de commencer, assurez-vous d'avoir :
- Xcode 15 ou une version ultérieure (télécharger depuis l'App Store de Mac)
- macOS Sonoma ou une version ultérieure (pour la dernière version de watchOS SDK)
- Un projet iOS existant Capacitor (exécuter
npx cap add iossi vous n'avez pas déjà) - Compte Apple Developer (un compte gratuit fonctionne pour le développement)
Vue d'ensemble de la structure du projet
Section intitulée « Vue d'ensemble de la structure du projet »Après avoir terminé ce guide, votre projet aura cette structure :
Répertoireios/
RépertoireApp/
RépertoireApp/ (votre application iOS principale)
- …
- App.xcodeproj
- App.xcworkspace (utilisez cela pour ouvrir le projet)
- Podfile
RépertoireMyWatch/ (nouvelle application de surveillance)
RépertoireMyWatch/ (source de l'application de surveillance)
- MyWatchApp.swift
- ContentView.swift
RépertoireAssets.xcassets/
- …
- MyWatch.xcodeproj
Étape 1 : Ouvrez votre projet iOS dans Xcode
Section intitulée « Étape 1 : Ouvrez votre projet iOS dans Xcode »- Naviguez vers le dossier de votre projet Capacitor
ios/Appdossier - Ouvrez
App.xcworkspacepas.xcodeprojpar double-cliquez sur elle - Attendez que Xcode indexe le projet
Étape 2 : Ajouter une cible watchOS
Section intitulée « Étape 2 : Ajouter une cible watchOS »-
Dans Xcode, allez à Fichier → Nouveau → Cible…
-
Dans le choix de modèle :
- Sélectionnez l'onglet watchOS en haut Choisissez
- Application Cliquez sur
- Suivant In the target chooser: __CAPGO_KEEP_0__
-
Configurez votre application pour montre :
- Nom du produit:
MyWatch(ou votre nom préféré) - Équipe: Sélectionnez votre équipe développeur Apple
- Identifiant de l'organisation: Doit correspondre à votre application iOS (par exemple,
app.capgo) - Identifiant de l'application: Serait généré automatiquement (par exemple,
app.capgo.myapp.watchkitapp) - Langue: Swift
- Interface utilisateur: SwiftUI
- Type d'application Apple Watch: Application (pas Application pour Application iOS existante)
- Désactiver Inclure la scène de notification (sauf si vous en avez besoin)
- Désactiver Inclure la complication (sauf si vous en avez besoin)
- Nom du produit:
-
Cliquez Terminer
-
Lorsque vous êtes invité à « Activer le schéma ‘MyWatch’ ? », cliquez Activer
Étape 3 : Configurez les paramètres de l'application de montre
Section intitulée “Étape 3 : Configurez les paramètres de l'application de montre”-
Dans le navigateur de projet (barre latérale gauche), sélectionnez votre projet (l'icône bleue en haut)
-
Sélectionnez votre cible de montre (par exemple, “MonMontre”) de la liste des cibles
-
Allez à la Général :
- Nom d'affichage: Le nom affiché sous l'icône de l'application (par exemple, “Mon Application”)
- Identifiant de l'application: Doit se terminer par
.watchkitapp - Version: Correspond à la version de votre application iOS
- Build: Correspond au numéro de build de votre application iOS
-
Allez à Signature et capacités tab:
- Activer Gérer automatiquement la signature
- Sélectionnez votre Équipe
- Xcode créera automatiquement les profils de provisioning
-
Définir Informations de déploiement:
- Déploiements minimums: watchOS 9.0 ou une version ultérieure
Étape 4 : Ajouter CapgoWatchSDK via le gestionnaire de packages Swift
Section intitulée “Étape 4 : Ajouter CapgoWatchSDK via le gestionnaire de packages Swift”Le CapgoWatchSDK fournit un élément prêt à l'emploi WatchConnector pour la communication.
-
Dans Xcode, allez à Fichier → Ajouter des dépendances de package…
-
Dans le champ de recherche, saisissez :
https://github.com/Cap-go/capacitor-watch.git -
Appuyez sur Entrée et attendez que Xcode récupère le package
-
Configurez le package :
- Règle de dépendance: « Jusqu'à la prochaine version majeure » avec « 8.0.0 »
- Cliquez Ajouter un package
-
Choisissez les produits à ajouter :
- IMPORTANT: Sélectionnez uniquement
CapgoWatchSDK - Vérifiez qu'il est ajouté à votre cible de surveillance (par exemple, « MonWatch »), et non l'application iOS
- Cliquez Ajouter un package
- IMPORTANT: Sélectionnez uniquement
Étape 5 : Mettre en œuvre l'application horlogère
Section intitulée « Étape 5 : Mettre en œuvre l'application horlogère »Créons maintenant l'application horlogère code. Remplacez les fichiers générés automatiquement par les suivants :
5.1 Créez l'entrée de l'application
Section intitulée « 5.1 Créez l'entrée de l'application »Modifier 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 Créer la Vue Principale
Section intitulée “5.2 Créer la Vue Principale”Modifier 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()}Étape 6 : Configurer l'application iOS pour WatchConnectivity
Section intitulée “Étape 6 : Configurer l'application iOS pour WatchConnectivity”Votre application iOS nécessite également la capacité WatchConnectivity.
-
Dans le navigateur de projet, sélectionnez votre projet
-
Sélectionnez votre cible d'application iOS pas la cible d'horloge
-
Allez à Signature et Capacités onglet
-
Cliquez + Capacité
-
Recherchez et ajoutez Connectivité de l'horloge (si disponible) ou elle peut être ajoutée automatiquement
-
Le plugin Capacitor gère automatiquement le côté iOS, mais assurez-vous que votre fichier Info.plist contient :
<key>WKCompanionAppBundleIdentifier</key><string>app.capgo.myapp.watchkitapp</string>
Étape 7 : Construire et exécuter
Section intitulée « Étape 7 : Construire et Exécuter »Exécuter sur Simulateur
Section intitulée « Exécuter sur Simulateur »-
Sélectionnez votre schéma d'horloge à partir du sélecteur de schéma (haut de la fenêtre Xcode)
-
Choisissez un simulateur d'horloge :
- Cliquez sur le sélecteur d'appareil à côté du schéma
- Sélectionnez un simulateur d'Apple Watch (par exemple, « Apple Watch Series 9 (45mm) »)
-
Cliquez sur le bouton Exécuter ou appuyez sur
Cmd + R -
Le simulateur iOS lancera avec l'iPhone et l'Apple Watch
Exécuter sur Appareil Physique
Section intitulée « Exécuter sur appareil physique »-
Connectez votre iPhone via USB
-
Vérifiez que votre montre Apple est pairée avec cet iPhone
-
Sélectionnez votre schéma de montre
-
Sélectionnez votre montre Apple physique dans la liste des appareils
-
Cliquez Exécuter
-
Première fois : Vous devrez peut-être faire confiance à votre ordinateur sur les deux appareils
Étape 8 : Tester la communication
Section intitulée « Étape 8 : Tester la communication »De l'iPhone (Capacitor) à l'horloge
Section intitulée « De l'iPhone (Capacitor) à l'horloge »Dans votre application 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!' } });}De l'horloge à l'iPhone
Section intitulée « De l'horloge à l'iPhone »L'application horloge utilise 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)")}Gérer les messages sur l'iPhone
Section intitulée « Gérer les messages sur 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'] } });});Avancé : Délégué personnalisé pour plus de contrôle
Section intitulée « Avancé : Délégué personnalisé pour plus de contrôle »Si vous avez besoin de plus de contrôle, implémentez 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()Résolution des problèmes
Section intitulée « Résolution des problèmes »L'application Watch ne s'affiche pas sur Watch
Section intitulée « L'application Watch ne s'affiche pas sur Watch »- Assurez-vous que les identifiants de bundle sont correctement liés (l'identifiant de bundle de l'application Watch doit être l'identifiant de bundle de l'application iOS +
.watchkitapp) - Vérifiez que les deux applications sont signées avec le même équipe
- Sur appareil physique : Ouvrez l'application Watch sur iPhone → Mon montre → défilez pour trouver votre application → activez-le
Messages qui ne sont pas reçus
Section intitulée « Messages qui ne sont pas reçus »- Vérifiez que les deux applications ont WCSession activé
- Vérifiez
isReachableavant d'envoyer des messages - Pour une livraison garantie, utilisez
transferUserInfoau lieu desendMessage - Assurez-vous que les écouteurs sont enregistrés avant que l'autre appareil n'envoie des messages
Erreur « Session Non Activée »
Section intitulée « Erreur « Session Non Activée » »- Appelez
WatchConnector.shared.activate()tôt dans le cycle de vie de l'application - Sur iOS, le plugin s'active automatiquement - assurez-vous que le plugin est importé
- Vérifiez que la capacité WatchConnectivity est ajoutée à la cible iOS
Erreurs de construction avec CapgoWatchSDK
Section intitulée “Erreurs de construction avec CapgoWatchSDK”- Assurez-vous que le package est ajouté à la cible de l'horlogeet non à la cible iOS
- Nettoyer le dossier de construction : Produit → Nettoyage du dossier de construction (Cmd + Maj + K)
- Réinitialiser les caches du package : Fichier → Packages → Réinitialiser les caches de package
Problèmes de simulateur
Section intitulée “Problèmes de simulateur”- Réinitialiser les simulateurs : Appareil → Effacer tout le contenu et les paramètres
- S'assurer que les simulateurs iOS et watchOS sont des paires compatibles
- Les deux simulateurs doivent être en cours d'exécution pour que la communication fonctionne
Étapes suivantes
Section intitulée “Étapes suivantes”- API Référence - Consulter la documentation complète de API
- Modèles de communication - Quand utiliser chaque méthode
- Exemple d'application - Exemple complet fonctionnel