Créer une application watchOS
Copiez un prompt de configuration avec les étapes d'installation et la guide markdown complète pour ce plugin.
Ce guide vous guide à travers la création d'une application de montre 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 de montre fonctionnelle avec SwiftUI.
Prérequis
Sous-titre « Prérequis »Avant de commencer, assurez-vous d'avoir :
- Xcode 15 ou ultérieur Télécharger depuis l'App Store Mac
- macOS Sonoma ou ultérieur Pour le dernier watchOS SDK
- Un projet iOS existant Capacitor 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 :
Dossierios/
DossierApp/
DossierApp/ (votre application iOS principale)
- …
- App.xcodeproj
- App.xcworkspace (utilisez cela pour ouvrir le projet)
- Podfile
RépertoireMyWatch/ (nouvelle application horlogère)
RépertoireMyWatch/ (source de l'application horlogère)
- MyWatchApp.swift
- ContentView.swift
DossierDossiers Assets.xcassets/
- …
- MonProjetWatch.xcodeproj
Étape 1 : Ouvrez votre projet iOS dans Xcode
Titre de la section « Étape 1 : Ouvrez votre projet iOS dans Xcode »- Navigatez vers votre projet Capacitor
ios/AppDossier - Ouvrir
App.xcworkspace(pas.xcodeproj) en double-cliquant dessus - Attendez que Xcode indexe le projet
Étape 2 : Ajoutez un cible watchOS
Section intitulée « Étape 2 : Ajoutez un cible watchOS »-
Dans Xcode, allez à Fichier → Nouveau → Cible…
-
Dans le choix de modèle :
- Sélectionnez watchOS barre de navigation en haut
- Choisissez Application
- Cliquez Suivant
-
Configurez votre application pour montre :
- Nom du produit:
MyWatch(ou votre nom préféré) - Équipe: Sélectionnez votre équipe de développeurs Apple
- Identifiant de l'organisation: Doit correspondre à votre application iOS (par exemple,
app.capgo) - Identifiant de Bundle: sera généré automatiquement (par exemple,
app.capgo.myapp.watchkitapp) - Langue: Swift
- Interface utilisateur: SwiftUI
- Type d'application 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 Complication sauf si vous en avez besoin
- Nom du produit:
-
Cliquez Terminer
-
Lorsque vous êtes invité à « Activer le schéma ‘MonMontre’ ? », cliquez Activer
Étape 3 : Configurer les paramètres de l'application horlogère
Section intitulée « Étape 3 : Configurer les paramètres de l'application horlogère »-
Dans le navigateur de projet (barre latérale gauche), sélectionnez votre projet (l'icône bleue en haut)
-
Sélectionnez votre cible horlogère (par exemple, « MonMontre ») de la liste des cibles
-
Allez dans le Général tab:
- Nom d'affichageNom d'affichage : Le nom affiché sous l'icône de l'application (par exemple, « Mon application »)
- Identifiant de l'applicationIdentifiant de l'application : Doit se terminer par
.watchkitapp - VersionVersion : Correspond à la version de votre application iOS
- BuildBuild : Correspond à votre numéro de version de build iOS
-
Aller à Signature et capacités tab:
- Activer Gérer automatiquement la signature
- Sélectionnez votre Équipe
- Xcode créera automatiquement les profils de provisionnement
-
Configurer Informations de déploiement:
- Minimum de déploiements: watchOS 9.0 ou ultérieur
Étape 4 : Ajouter CapgoWatchSDK via Swift Package Manager
La section intitulée « Étape 4 : Ajouter CapgoWatchSDK via Swift Package Manager »Le CapgoWatchSDK fournit un module de développement prêt à l'emploi WatchConnector classe 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 - Assurez-vous qu'il est ajouté à votre cible de montre (par exemple, « MonMontre »), et non l'application iOS
- Cliquez Ajouter le package
- IMPORTANT: Sélectionnez uniquement
Étape 5 : Mettre en œuvre l'application de montre
Titre de la section « Étape 5 : Mettre en œuvre l'application de montre »Créons maintenant l'application de montre code. Remplacez les fichiers générés automatiquement par les éléments suivants :
5.1 Créer l'entrée d'application
Titre de la section « 5.1 Créer l'entrée d'application »Éditer 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
Titre de la section « 5.2 Créer la vue principale »Éditer 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
Étape 6 : Configurez l'application iOS pour WatchConnectivityVotre application iOS nécessite également la capacité WatchConnectivity.
-
Dans le navigateur de projet, sélectionnez votre projet
-
Sélectionnez votre Application iOS cible (pas la cible de l'horloge)
-
Allez à Signature et capacités onglet
-
Cliquez sur + 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 comporte :
<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 le simulateur
Section intitulée « Exécuter sur le simulateur »-
Choisissez votre schéma d'horloge dans le sélecteur de schéma (en haut de la fenêtre Xcode)
-
Sélectionnez un simulateur d'horloge :
- Cliquez sur le sélecteur de périphérique situé à côté du schéma
- Sélectionnez un simulateur d'Apple Watch (par exemple, « Apple Watch Series 9 (45mm) »)
-
Cliquez sur le bouton (▶️) ou appuyez sur Exécuter le bouton (▶️) ou appuyez sur
Cmd + R -
Le simulateur iOS lancera avec les deux iPhone et Apple Watch
Exécuter sur appareil physique
Section intitulée « Exécuter sur appareil physique »-
Connectez votre iPhone via USB
-
Vérifiez que votre Apple Watch est pairé avec cet iPhone
-
Sélectionnez votre schéma d'horloge
-
Sélectionnez votre Apple Watch 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
Sous-section intitulée « Étape 8 : Tester la communication »De l'iPhone (Capacitor) à l'horlogerie
Sous-section intitulée « De l'iPhone (Capacitor) à l'horlogerie »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 de problèmes »L'application Watch ne s'affiche pas sur la montre
Section intitulée « L'application Watch ne s'affiche pas sur la montre »- 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 l'iPhone → Mon Watch → faites défiler pour trouver votre application → activez l'option ON
Les messages ne sont pas reçus
Section intitulée « Les messages ne sont pas reçus »- Vérifiez que les deux applications ont WCSession activé
- Vérifiez
isReachableavant d'envoyer les 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 » »- Appeler
WatchConnector.shared.activate()context : Appflow Migration Step2 - 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'horlogepas cible iOS
- Nettoyer le dossier de build : Produit → Nettoyer le dossier de build (Cmd + Maj + K)
- Réinitialiser les caches de packages : Dossier → Packages → Réinitialiser les caches de packages
Problèmes de simulateur
Sous-section intitulée « Problèmes de simulateur »- Réinitialiser les simulateurs : Appareil → Effacer tout le contenu et les paramètres
- Assurez-vous 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 Reference - Documentation complète de API
- Modèles de communication - Utiliser chaque méthode quand ?
- Exemple d'application - Exemple de travail fonctionnel
Continuez de la création d'une application watchOS
Section intitulée « Continuez de la création d'une application watchOS »Si vous utilisez Créer une application watchOS planer les travaux de plugin natif, connectez-l’à En utilisant @capgo/capacitor-watch pour la capacité native dans En utilisant @capgo/capacitor-watch, Répertoire de plugin Capgo pour le flux de travail du produit dans Répertoire de plugin Capgo, Plugins Capacitor par Capgo pour le détail d'implémentation dans Plugins Capacitor par Capgo, Ajouter ou Mettre à jour les plugins pour le détail d'implémentation dans Ajouter ou Mettre à jour les plugins, et Alternatives de plugin d'entreprise Ionic pour le flux de travail du produit dans Alternatives de plugin d'entreprise Ionic.