web-dev-qa-db-fra.com

Comment déboguer une application Xamarin.iOS sur un périphérique iOS physique

Toutes mes excuses, par avance, pour cette longue question, mais j’ai perdu 3 jours à essayer de mettre en place un environnement de développement Xamarin.iOS qui me permet de déboguer sur un périphérique physique (pas un simulateur iPhone) et je ne sais pas quoi. essayer ensuite.

Je pense que ma configuration est plutôt une configuration standard de Xamarin:

  • PC Windows 10 exécutant Visual Studio 2015 et Xamarin v4.2.0.703
  • Téléphone HTC connecté par USB au PC pour le débogage Android (fonctionne très bien)
  • MacBook sous OS X 10.11 avec Xamarin Studio v6.1.1 et Xcode v8.0
  • iPhone ou iPad connecté par USB au Mac pour le débogage iOS

J'ai commencé par créer une solution Xamarin dans Visual Studio, que j'ai initialement développée et déboguée sur Android.

Pour passer au débogage iOS, j'ai ensuite configuré le Mac avec Xcode et Xamarin Studio, je l'ai activé pour la connexion à distance et j'ai créé un projet fictif Xcode avec le même identifiant de paquet que mon application Xamarin.iOS. J'ai également tenté de créer une identité de signature et un profil d'approvisionnement pour l'application, et de les télécharger/installer sur le Mac, plutôt compliqués. Ce processus est tellement peu intuitif (et le retour visuel dans Xcode est si médiocre) que je ne suis pas sûr de l'avoir fait correctement. Cependant, je suis en mesure d'exécuter le projet fictif Xcode sur l'iPhone, donc je suppose que ça doit aller?

Sur le PC Windows, le volet Xamarin > Options iOS dans les paramètres de Visual Studio confirme que Visual Studio est connecté au Mac et que l'iPhone connecté est également répertorié en tant que périphérique cible candidat. il semble que tout soit configuré pour le débogage sur le périphérique.

Si j'essaie de déboguer l'application sur le simulateur iPhone à partir de Visual Studio, cela fonctionne correctement. Toutefois, le débogage sur l’iPhone physique échoue avec le message inutile suivant:

Xamarin.Messaging.Exceptions.MonotouchException: error MT1006: Could not install the
application '/Users/Tim/Library/Caches/Xamarin/mtbs/builds/Test.iOS/c4f40041b6c58fc579a727bccfc18614/bin/iPhoneSimulator/Debug/TestiOS.app' 
on the device 'Tim’s iPhone': AMDeviceSecureInstallApplicationBundle returned: 0xe8008001.

À titre de comparaison, j'ai également essayé de déboguer directement sur Mac, à l'aide de Xamarin Studio. Encore une fois, le simulateur iPhone fonctionne correctement, mais il est impossible de lancer une session de débogage à l'aide du périphérique physique, car l'iPhone connecté n'est pas répertorié comme périphérique cible candidat pour le Debug | iPhone configuration.

Si j'ouvre les options du projet et navigue vers la vue iOS Debug , je peux voir que la plate-forme associée à Debug configuration est iPhoneSimulator . En le changeant en iPhone et en enregistrant la configuration, il semble fonctionner, mais les modifications ne sont pas enregistrées. J'imagine que c'est la raison pour laquelle mon périphérique de test ne figure pas dans la liste, mais je ne sais pas exactement ce que je dois faire pour que Xamarin Studio accepte mes modifications.

Donc, après toutes ces expériences, je suis complètement perdu. Il serait utile d’avoir un didacticiel A-Z complet et robuste pour ce processus d’installation mais, à défaut, toute suggestion de ce que je devrais essayer par la suite serait très appréciée.

UPDATE: Si j'utilise la configuration Ad-Hoc project (dans Visual Studio ou Xamarin Studio), elle déploie et lance correctement l'application sur le périphérique, mais n'attache pas le débogueur. Si j'active explicitement le débogage dans la configuration du projet Ad-Hoc, Xamarin Studio l'ignore, mais Visual Studio attache ensuite le débogueur mais n'atteint aucun point d'arrêt. Est-ce que tout cela semble bien? Est-ce que cela donne des indices sur ce que je dois changer pour que le vrai Debug config fonctionne correctement?

5
Tim Coulter

Pour toute personne confrontée à un problème similaire, la solution que j'ai finalement adoptée impliquait une approche de «force brute».

J'ai commencé par créer une nouvelle solution Xamarin.Forms (à l'aide du modèle Visual Studio standard) et à supprimer les projets de plate-forme indésirables (UWP et Windows Phone). Dans cet état initial, j'ai vérifié qu'il était possible de lancer le débogage à la fois sur les appareils Android et iOS, ainsi que sur leurs émulateurs/simulateurs respectifs. Tout fonctionnait correctement, confirmant que la configuration de mon Mac était correcte et me fournissant la configuration de projet iOS exacte requise pour le débogage.

À ce stade, j'ai supposé qu'un problème de configuration devait être responsable de mes problèmes antérieurs; j'ai donc répliqué exactement tous les détails de la configuration de travail dans ma solution d'origine. Toujours il a refusé de déboguer sur iOS.

J'ai alors commencé à suspecter le problème d'un paquet Nuget référencé, alors j'ai ajouté tous les paquets référencés de l'implémentation d'origine dans la nouvelle solution de test. Je m'attendais à ce que cela interrompe le débogage sur iOS, mais ce ne fut pas le cas.

Enfin, j'ai soigneusement transplanté tout le contenu de ma solution d'origine (fichiers XAML & code-behind, modèles de vue, ressources, etc.) dans la solution de test et le débogage s'est poursuivi correctement.

Donc, en l'absence d'une procédure de diagnostic viable, j'ai efficacement résolu le problème en reconstruisant ma solution à partir de la base. Aucun code n'a été modifié et, à ma connaissance, aucun paramètre de configuration n'a été modifié, mais la nouvelle implémentation est désormais débogable de manière fiable dans tous les environnements cibles.

1
Tim Coulter