Résolution des problèmes watchOS

Cette page contient des informations supplémentaires et des solutions de contournement pour les problèmes que vous pouvez rencontrer.

Problèmes connus

Général

  • Les versions antérieures de Visual Studio pour Mac montrent incorrectement l’une des icônes AppleCompanionSettings comme étant de 88 x 88 pixels ; ce qui entraîne une erreur d’icône manquante si vous tentez de soumettre au App Store. Cette icône doit être de 87 x 87 pixels (29 unités pour @3x écrans Retina). Vous ne pouvez pas résoudre ce problème dans Visual Studio pour Mac : modifiez la ressource d’image dans Xcode ou modifiez manuellement le fichier Contents.json.

  • Si l’ID d’offre groupée WKApp info.plist > du projet d’extension Watch n’est pas correctement défini pour correspondre à l’ID de bundle de l’application Watch, le débogueur ne parvient pas à se connecter et Visual Studio pour Mac attendra avec le message « En attente de connexion du débogueur ».

  • Le débogage est pris en charge en mode Notifications , mais il peut être peu fiable. La nouvelle tentative fonctionne parfois. Vérifiez que la liste Info.plistWKCompanionAppBundleIdentifier de l’application Watch est définie pour correspondre à l’identificateur groupé de l’application parente/conteneur iOS (par exemple, celle qui s’exécute sur l’iPhone).

  • Le Designer iOS n’affiche pas de flèches de point d’entrée pour les contrôleurs d’interface De type Aperçu ou Notification.

  • Vous ne pouvez pas en ajouter deux WKNotificationControllers à un storyboard. Solution de contournement : l’élément notificationCategory dans le code XML du storyboard est toujours inséré avec le même id. Pour contourner ce problème, vous pouvez ajouter deux (ou plusieurs) contrôleurs de notification, ouvrir le fichier storyboard dans un éditeur de texte, puis modifier manuellement l’élément id pour qu’il soit unique.

    Ouverture du fichier storyboard dans un éditeur de texte et modification manuelle de l’élément id pour qu’il soit unique

  • Vous pouvez voir une erreur « L’application n’a pas été générée » lors de la tentative de lancement de l’application. Cela se produit après un nettoyage lorsque le projet de démarrage est défini sur le projet d’extension watch. Le correctif consiste à sélectionner Générer > tout reconstruire, puis à relancer l’application.

Suppression du canal Alpha des images d’icônes

Les icônes ne doivent pas contenir de canal alpha (le canal alpha définit les zones transparentes d’une image), sinon l’application sera rejetée pendant App Store soumission avec une erreur similaire à ceci :

Invalid Icon - The watch application '...watchkitextension.appex/WatchApp.app'
contains an icon file '...watchkitextension.appex/WatchApp.app/Icon-27.5@2x.png'
with an alpha channel. Icons should not have an alpha channel.

Il est facile de supprimer le canal alpha sur Mac OS X à l’aide de l’application Préversion :

  1. Ouvrez l’image d’icône en préversion, puis choisissez Exportation de fichier>.

  2. La boîte de dialogue qui s’affiche inclut une case à cocher Alpha si un canal alpha est présent.

    La boîte de dialogue qui s’affiche inclut une case à cocher Alpha si un canal alpha est présent.

  3. Décochez la case Alpha et Enregistrez le fichier à l’emplacement approprié.

  4. L’image d’icône doit maintenant passer les vérifications de validation d’Apple.

Ajout manuel de fichiers du contrôleur d’interface

Important

La prise en charge de WatchKit de Xamarin inclut la conception de watch de storyboards dans le concepteur iOS (à la fois dans Visual Studio pour Mac et Visual Studio), ce qui ne nécessite pas les étapes décrites ci-dessous. Donnez simplement un nom de classe à un contrôleur d’interface dans le Visual Studio pour Mac pavé Propriétés et les fichiers de code C# seront créés automatiquement.

Si vous utilisez Xcode Interface Builder, procédez comme suit pour créer de nouveaux contrôleurs d’interface pour votre application watch et activer la synchronisation avec Xcode afin que les sorties et les actions soient disponibles en C#:

  1. Ouvrez le tableau Interface.storyboard de l’application watch dans Xcode Interface Builder.

    Ouverture du storyboard dans Xcode Interface Builder

  2. Faites glisser un nouveau InterfaceController sur le storyboard :

    A InterfaceController

  3. Vous pouvez maintenant faire glisser des contrôles sur le contrôleur d’interface (par exemple, les étiquettes et les boutons), mais vous ne pouvez pas encore créer de sorties ou d’actions, car il n’existe aucun fichier d’en-tête .h . Les étapes suivantes entraînent la création du fichier d’en-tête .h requis.

    Bouton dans la disposition

  4. Fermez le storyboard et revenez à Visual Studio pour Mac. Créez un fichier C# MyInterfaceController.cs (ou n’importe quel nom que vous souhaitez) dans le projet d’extension d’application watch (pas l’application watch elle-même où se trouve le storyboard). Ajoutez le code suivant (mise à jour de l’espace de noms, classname et nom du constructeur) :

    using System;
    using WatchKit;
    using Foundation;
    
    namespace WatchAppExtension  // remember to update this
    {
        public partial class MyInterfaceController // remember to update this
        : WKInterfaceController
        {
            public MyInterfaceController // remember to update this
            (IntPtr handle) : base (handle)
            {
            }
            public override void Awake (NSObject context)
            {
                base.Awake (context);
                // Configure interface objects here.
                Console.WriteLine ("{0} awake with context", this);
            }
            public override void WillActivate ()
            {
                // This method is called when the watch view controller is about to be visible to the user.
                Console.WriteLine ("{0} will activate", this);
            }
            public override void DidDeactivate ()
            {
                // This method is called when the watch view controller is no longer visible to the user.
                Console.WriteLine ("{0} did deactivate", this);
            }
        }
    }
    
  5. Créez un autre fichier C# MyInterfaceController.designer.cs dans le projet d’extension d’application watch et ajoutez le code ci-dessous. Veillez à mettre à jour l’espace de noms, le classname et l’attribut Register :

    using Foundation;
    using System.CodeDom.Compiler;
    
    namespace HelloWatchExtension  // remember to update this
    {
        [Register ("MyInterfaceController")] // remember to update this
        partial class MyInterfaceController  // remember to update this
        {
            void ReleaseDesignerOutlets ()
            {
            }
        }
    }
    

    Conseil

    Vous pouvez (éventuellement) faire de ce fichier un nœud enfant du premier fichier en le faisant glisser vers l’autre fichier C# dans le Visual Studio pour Mac Pavé solution. Il s’affiche alors comme suit :

    Le volet Solution

  6. Sélectionnez Générer > tout afin que la synchronisation Xcode reconnaisse la nouvelle classe (via l’attribut Register ) que nous avons utilisée.

  7. Ouvrez à nouveau le storyboard en cliquant avec le bouton droit sur le fichier de storyboard d’application watch et en sélectionnant Ouvrir avec > Xcode Interface Builder :

    Ouverture du storyboard dans Le Générateur d’interface

  8. Sélectionnez votre nouveau contrôleur d’interface et donnez-lui le nom de classe que vous avez défini ci-dessus, par exemple. MyInterfaceController. Si tout a fonctionné correctement, il doit apparaître automatiquement dans la liste déroulante Classe: et vous pouvez le sélectionner à partir de là.

    Définition d’une classe personnalisée

  9. Choisissez la vue Assistant Editor dans Xcode (icône avec deux cercles qui se chevauchent) afin de voir le storyboard et le code côte à côte :

    Élément de barre d’outils Assistant Editor

    Lorsque le focus se trouve dans le volet de code, vérifiez que vous examinez le fichier d’en-tête .h , et si vous ne cliquez pas avec le bouton droit dans la barre de navigation et sélectionnez le fichier approprié (MyInterfaceController.h)

    Sélectionnez MyInterfaceController

  10. Vous pouvez maintenant créer des sorties et des actions en ctrl + glisser du storyboard vers le fichier d’en-tête .h .

    Création de points de vente et d’actions

    Lorsque vous relâchez le glisser, vous êtes invité à sélectionner s’il faut créer une prise ou une action, et choisir son nom :

    La sortie et une boîte de dialogue d’action

  11. Une fois que les modifications apportées au storyboard sont enregistrées et que Xcode est fermé, revenez à Visual Studio pour Mac. Il détecte les modifications apportées au fichier d’en-tête et ajoute automatiquement du code au fichier .designer.cs :

    [Register ("MyInterfaceController")]
    partial class MyInterfaceController
    {
        [Outlet]
        WatchKit.WKInterfaceButton myButton { get; set; }
    
        void ReleaseDesignerOutlets ()
        {
            if (myButton != null) {
                myButton.Dispose ();
                myButton = null;
            }
        }
    }
    

Vous pouvez maintenant référencer le contrôle (ou implémenter l’action) en C#!

Lancement de l’application Watch à partir de la ligne de commande

Important

Vous pouvez démarrer l’application Watch en mode d’application normal par défaut, ainsi qu’en mode Aperçu ou Notification à l’aide de paramètres d’exécution personnalisés dans Visual Studio pour Mac et Visual Studio.

Vous pouvez également utiliser la ligne de commande pour contrôler le simulateur iOS. L’outil en ligne de commande utilisé pour lancer watch applications est mtouch.

Voici un exemple complet (exécuté en tant que ligne unique dans le terminal) :

/Library/Frameworks/Xamarin.iOS.framework/Versions/Current/bin/mtouch --sdkroot=/Applications/Xcode.app/Contents/Developer/ --device=:v2:runtime=com.apple.CoreSimulator.SimRuntime.iOS-8-2,devicetype=com.apple.CoreSimulator.SimDeviceType.iPhone-6
--launchsimwatch=/path/to/watchkitproject/watchsample/bin/iPhoneSimulator/Debug/watchsample.app

Le paramètre que vous devez mettre à jour pour refléter votre application est launchsimwatch:

--launchsimwatch

Chemin d’accès complet à l’offre groupée d’applications main pour l’application iOS qui contient l’application et l’extension watch.

Notes

Le chemin que vous devez fournir est pour le fichier .app de l’application iPhone, c’est-à-dire celui qui sera déployé sur le simulateur iOS et qui contient à la fois l’extension watch et watch application.

Exemple :

--launchsimwatch=/path/to/watchkitproject/watchsample/bin/iPhoneSimulator/Debug/watchsample.app

Notification Mode

Pour tester le mode notification de l’application, définissez le watchlaunchmode paramètre sur Notification et fournissez un chemin d’accès à un fichier JSON qui contient une charge utile de notification de test.

Le paramètre de charge utile est requis pour le mode Notification.

Par exemple, ajoutez ces arguments à la commande mtouch :

--watchlaunchmode=Notification --watchnotificationpayload=/path/to/file.json

Autres arguments

Les arguments restants sont expliqués ci-dessous :

--sdkroot

Obligatoire. Spécifie le chemin d’accès à Xcode (6.2 ou version ultérieure).

Exemple :

 --sdkroot /Applications/Xcode.app/Contents/Developer/

--Appareil

Appareil de simulateur à exécuter. Cela peut être spécifié de deux façons, soit à l’aide de l’udid d’un appareil spécifique, soit à l’aide d’une combinaison de runtime et de type d’appareil.

Les valeurs exactes varient d’une machine à l’autre et peuvent être interrogées à l’aide de l’outil simctl d’Apple :

/Applications/Xcode.app/Contents/Developer/usr/bin/simctl list

UDID

Exemple :

--device=:v2:udid=AAAAAAA-BBBB-CCCC-DDDD-EEEEEEEEEEEE

Runtime et type d’appareil

Exemple :

--device=:v2:runtime=com.apple.CoreSimulator.SimRuntime.iOS-8-2,devicetype=com.apple.CoreSimulator.SimDeviceType.iPhone-6