Création d'une application watchOS
Copiez un prompt de configuration avec les étapes d'installation et la 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 du CapgoWatchSDK 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 ultérieur (télécharger depuis l'App Store de Mac)
- macOS Sonoma ou ultérieur (pour le dernier watchOS SDK)
- Un projet iOS Capacitor existant (exécuter
npx cap add iossi vous n'avez pas encore - 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épertoireMonPendule/ (nouvelle application de montre)
RépertoireMonPendule/ (source de l'application de montre)
- MonApplicationPendule.swift
- ContentView.swift
RépertoireAssets.xcassets/
- …
- MonPendule.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 - Ouvrir
App.xcworkspacepas.xcodeproj) en double-cliquant dessus - Attendez que Xcode indexe le projet
Étape 2 : Ajoutez 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 watchOS onglet en haut
- Choisissez Application
- Cliquez sur Suivant
-
Configurez votre application watch :
- 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 de montre: 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 ‘Ma montre’ ? », cliquez sur 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 dans le Général onglet :
- 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: Matchez votre version d'application iOS
- Build: Matchez votre numéro de version de build d'application iOS
-
Allez à Signature et capacités onglet:
- Activer Gérer automatiquement la signature
- Sélectionnez votre Équipe
- Xcode créera automatiquement les profils de provisioning
-
Configurer Informations de déploiement:
- Déploiements minimums: watchOS 9.0 ou ultérieur
Étape 4 : Ajouter CapgoWatchSDK via Gestionnaire de Packages Swift
Section intitulée “Étape 4 : Ajouter CapgoWatchSDK via Gestionnaire de Packages Swift”Le CapgoWatchSDK fournit un module 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
-
Sélectionnez les produits à ajouter :
- IMPORTANT: Sélectionnez uniquement
CapgoWatchSDK - Vérifiez qu'il est ajouté à votre watch cible (par exemple, « MonWatch »), et non l'application iOS
- Cliquez Ajouter le 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éer l'entrée de l'application
Section intitulée « 5.1 Créer 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 horlogerie)
-
Allez à Inscription & Capacités onglet
-
Cliquez + Capacité
-
Recherchez et ajoutez WatchConnectivity (si disponible) ou il peut être ajouté 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 : Lancer et exécuter
Section intitulée « Étape 7 : Lancer et exécuter »Exécuter sur le simulateur
Section intitulée « Exécuter sur le 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 de périphérique à 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 un appareil physique
Section intitulée « Exécuter sur un appareil physique »-
Connectez votre iPhone via USB
-
Assurez-vous 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écutez
-
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 l'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 horlogère ne s'affiche pas sur l'horloge
Section intitulée « L'application horlogère ne s'affiche pas sur l'horloge »- Assurez-vous que les identifiants de bundle sont correctement liés (l'identifiant de bundle de l'application horlogère 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 horlogère sur l'iPhone → Mon horloge → défilez pour trouver votre application → activez ON
Messages ne sont pas reçus
Section intitulée “Messages 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 envoie des messages
”Erreur de session non activée”
Section intitulée “”Erreur de session non activée””- Appelez
WatchConnector.shared.activate()tôt dans le cycle de vie de l'application - On 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 → Nettoyer le dossier de construction (Cmd + Maj + K)
- Réinitialiser les caches de package : Fichier → Packages → Réinitialiser les caches de package
Problèmes du simulateur
Section intitulée “Problèmes du 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 - Utiliser chaque méthode à quel moment
- Exemple d'application - Exemple de travail fonctionnel complet
Continuez de la section Créer une application watchOS
Titre de la section « Continuez de la section Créer une application watchOS »Si vous utilisez Créer une application watchOS pour planifier le travail de plugin natif, connectez-le à Utilisation de @capgo/capacitor-watch pour la capacité native dans Utilisation de @capgo/capacitor-watch, Capgo Répertoire des plugins pour le flux de travail du produit dans Capgo Répertoire des plugins, Capacitor Plugins par Capgo pour les détails d'implémentation dans Capacitor Plugins par Capgo, Ajouter ou Mettre à Jour les Plugins pour les détails d'implémentation dans Ajouter ou Mettre à Jour les Plugins, et Alternatives de Plugins Entreprise Ionic pour le flux de travail du produit dans Alternatives de Plugins Entreprise Ionic.