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.
Ajout manuel de fichiers de contrôleur d’interface pour Xcode Interface Builder.
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.plist
WKCompanionAppBundleIdentifier
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émentnotificationCategory
dans le code XML du storyboard est toujours inséré avec le mêmeid
. 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émentid
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 :
Ouvrez l’image d’icône en préversion, puis choisissez Exportation de fichier>.
La boîte de dialogue qui s’affiche inclut une case à cocher Alpha si un canal alpha est présent.
Décochez la case Alpha et Enregistrez le fichier à l’emplacement approprié.
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#:
Ouvrez le tableau Interface.storyboard de l’application watch dans Xcode Interface Builder.
Faites glisser un nouveau
InterfaceController
sur le storyboard :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.
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); } } }
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 :
Sélectionnez Générer > tout afin que la synchronisation Xcode reconnaisse la nouvelle classe (via l’attribut
Register
) que nous avons utilisée.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 :
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à.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 :
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)
Vous pouvez maintenant créer des sorties et des actions en ctrl + glisser du storyboard vers le fichier d’en-tête .h .
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 :
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