Résolution des problèmes liés aux applications tvOS créées avec Xamarin

Cet article décrit les problèmes que vous pouvez rencontrer lors de l’utilisation de la prise en charge tvOS de Xamarin.

Problèmes connus

La version actuelle de la prise en charge tvOS de Xamarin présente les problèmes connus suivants :

  • Mono Framework : Mono 4.3 Cryptography.ProtectedData ne parvient pas à déchiffrer les données de Mono 4.2. Par conséquent, les packages NuGet ne peuvent pas être restaurés avec l’erreur Data unprotection failed lorsqu’une source NuGet protégée est configurée.
    • Solution de contournement : dans Visual Studio pour Mac vous devez ajouter des sources de package NuGet qui utilisent l’authentification par mot de passe avant de réessayer de restaurer les packages.
  • Visual Studio pour Mac complément w/ F# : erreur lors de la création d’un modèle Android F# sur Windows. Cela doit toujours fonctionner correctement sur Mac.
  • Xamarin.Mac : lors de l’exécution du projet de modèle unifié Xamarin.Mac avec l’infrastructure cible définie Unsupportedsur , la fenêtre contextuelle Could not connect to the debugger peut apparaître.
    • Solution de contournement potentielle : rétrogradez la version du framework Mono disponible dans notre canal stable.
  • Xamarin Visual Studio & Xamarin.iOS : lors du déploiement d’applications WatchKit dans Visual Studio, l’erreur The file ‘bin\iPhoneSimulator\Debug\WatchKitApp1WatchKitApp.app\WatchKitApp1WatchKitApp’ does not exist peut apparaître.

Signalez les bogues que vous trouvez sur GitHub.

Dépannage

Les sections suivantes répertorient certains problèmes connus qui peuvent se produire lors de l’utilisation de tvOS 9 avec Xamarin.tvOS et la solution à ces problèmes :

Exécutable non valide : l’exécutable ne contient pas de code binaire

Lorsque vous tentez d’envoyer une application Xamarin.tvOS à l’App Store Apple TV, vous pouvez recevoir un message d’erreur sous la forme « Exécutable non valide - L’exécutable ne contient pas de code binaire ».

Pour résoudre ce problème, procédez comme suit :

  1. Dans Visual Studio pour Mac, cliquez avec le bouton droit sur votre fichier projet Xamarin.tvOS dans le Explorateur de solutions, puis sélectionnez Options.

  2. Sélectionnez tvOS Build et vérifiez que vous êtes sur la configuration release :

    Select tvOS Build options

  3. Ajoutez --bitcode=asmonly au champ d’arguments mtouch supplémentaires, puis cliquez sur le bouton OK.

  4. Régénérez votre application dans la configuration Release .

Vérification que votre application tvOS contient du code binaire

Pour vérifier que votre build d’application Xamarin.tvOS contient bitcode, ouvrez l’application Terminal et entrez les éléments suivants :

otool -l /path/to/your/tv.app/tv

Dans la sortie, recherchez les éléments suivants :

Section
  sectname __bundle
   segname __LLVM
      addr 0x0000000100001000
      size 0x000000000000124f
    offset 4096
     align 2^0 (1)
    reloff 0
    nreloc 0
     flags 0x00000000
 reserved1 0
 reserved2 0

addr et size sera différent, mais d’autres champs doivent être identiques.

Vous devez vous assurer que toutes les bibliothèques statiques.a tierces que vous utilisez ont été créées sur des bibliothèques tvOS (et non des bibliothèques iOS) et qu’elles incluent également des informations de code binaire.

Pour les applications ou bibliothèques qui incluent le code binaire valide, le size sera supérieur à un. Il existe certaines situations où une bibliothèque peut avoir le marqueur de code binaire, mais qui ne contient pas encore de code binaire valide. Par exemple :

Code binaire non valide

 $ otool -arch arm64 libLibrary.a | grep __bitcode -A 3
   sect name __bitcode
   segname __LLVM
      add 0x0000000000000670
      size 0x0000000000000001

Code binaire valide

$ otool -l -arch arm64 libDownloadableAgent-tvos.a |grep __bitcode -A 3
   sectname __bitcode
   segname __LLVM
      addr 0x000000000001d2d0
      size 0x0000000000045440

Notez la différence size entre les deux bibliothèques de l’exemple répertorié ci-dessus. La bibliothèque doit être générée à partir d’une build d’archive Xcode avec le code binaire activé (paramètre ENABLE_BITCODEXcode) comme solution à ce problème de taille.

Les applications qui contiennent uniquement la tranche arm64 doivent également avoir « arm64 » dans la liste d’UIRequiredDeviceCapabilities dans Info.plist

Lors de l’envoi d’une application à l’App Store Apple TV pour publication, vous pouvez obtenir une erreur dans le formulaire :

« Les applications qui contiennent uniquement la tranche arm64 doivent également avoir « arm64 » dans la liste d’UIRequiredDeviceCapabilities dans Info.plist .

Si cela se produit, modifiez votre Info.plist fichier et vérifiez qu’il possède les clés suivantes :

<key>UIRequiredDeviceCapabilities</key>
<array>
  <string>arm64</string>
</array>

Recompilez votre application à des fins de publication et de soumission à iTunes Connecter.

Exécution de la tâche « MTouch » -- Échec

Si vous utilisez une bibliothèque tierce (par exemple, MonoGame) et que votre compilation de mise en production a échoué avec une longue série de messages d’erreur se terminant par Task "MTouch" execution -- FAILED, essayez d’ajouter -gcc_flags="-framework OpenAL" à vos arguments tactiles supplémentaires :

Task MTouch execution

Vous devez également inclure --bitcode=asmonly dans les arguments tactiles supplémentaires, avoir les options de l’éditeur de liens définies sur Link All et effectuer une compilation propre.

Erreur ITMS-90471. L’icône Grande est manquante

Si vous recevez un message sous la forme « Erreur ITMS-90471. L’icône Grande est manquante » lors de la tentative d’envoi d’une application Xamarin.tvOS à l’App Store Apple TV pour la publication, veuillez case activée les éléments suivants :

  1. Vérifiez que vous avez inclus les ressources d’icône volumineuses dans votre Assets.car fichier que vous avez créé à l’aide de la documentation Icônes d’application.
  2. Vérifiez que vous avez inclus le Assets.car fichier à partir de la documentation Working with Icon and Images dans votre offre groupée d’applications finale.

Offre groupée non valide : une application qui prend en charge les contrôleurs de jeu doit également prendre en charge la télécommande Apple TV

or

Offre groupée non valide : les applications Apple TV avec l’infrastructure GameController doivent inclure la clé GCSupportedGameControllers dans info.plist de l’application.

Les contrôleurs de jeu peuvent être utilisés pour améliorer le jeu et fournir un sentiment d’immersion dans un jeu. Ils peuvent également être utilisés pour contrôler l’interface Apple TV standard afin que l’utilisateur n’ait pas à basculer entre la télécommande et le contrôleur.

Si vous envoyez une application Xamarin.tvOS avec prise en charge du contrôleur de jeu dans l’Apple TV App Store et que vous recevez un message d’erreur sous la forme suivante :

Nous avons découvert un ou plusieurs problèmes liés à votre remise récente pour « nom de l’application ». Votre livraison a réussi, mais vous pouvez corriger les problèmes suivants dans votre prochaine livraison :

Offre groupée non valide : une application qui prend en charge les contrôleurs de jeu doit également prendre en charge la télécommande Apple TV.

or

Offre groupée non valide : les applications Apple TV avec l’infrastructure GameController doivent inclure la clé GCSupportedGameControllers dans info.plist de l’application.

La solution consiste à ajouter la prise en charge de Siri Remote (GCMicroGamepad) au fichier de Info.plist votre application. Le profil Micro Game Controller a été ajouté par Apple pour cibler Siri Remote. Par exemple, incluez les clés suivantes :

<key>GCSupportedGameControllers</key>  
  <array>  
    <dict>  
      <key>ProfileName</key>  
      <string>ExtendedGamepad</string>  
    </dict>  
    <dict>  
      <key>ProfileName</key>  
      <string>MicroGamepad</string>  
    </dict>  
  </array>  
<key>GCSupportsControllerUserInteraction</key>  
<true/>

Important

Les contrôleurs de jeu Bluetooth sont un achat facultatif que les utilisateurs finaux peuvent effectuer, votre application ne peut pas forcer l’utilisateur à en acheter un. Si votre application prend en charge les contrôleurs de jeu, elle doit également prendre en charge Siri Remote afin que le jeu soit utilisable par tous les utilisateurs Apple TV.

Pour plus d’informations, consultez la section Utilisation des contrôleurs de jeu de notre documentation Sur les contrôleurs Siri Remote et Bluetooth.

Infrastructure cible incompatible : . NetPortable, Version=v4.5, Profile=Profile78

Lorsque vous essayez d’inclure une bibliothèque de classes portable (PCL) dans un projet Xamarin.tvOS, vous pouvez recevoir un message sous forme :

Infrastructure cible incompatible : . NetPortable, Version=v4.5, Profile=Profile78

Pour résoudre ce problème, ajoutez un fichier XML appelé Xamarin.TVOS.xml avec le contenu suivant :

<Framework Identifier="Xamarin.TVOS" MinimumVersion="1.0" Profile="*" DisplayName="Xamarin.TVOS"/>

Pour le chemin d’accès suivant :

/Library/Frameworks/Mono.framework/Versions/Current/lib/mono/xbuild-frameworks/.NETPortable/v4.5/Profile/Profile259/SupportedFrameworks/

Notez que le numéro de profil dans le chemin doit correspondre au numéro de profil du PCL.

Avec ce fichier en place, vous devez être en mesure d’ajouter le fichier PCL au projet Xamarin.tvOS.