Problèmes connus avec UWP dans le programme pour les développeurs Xbox

Cette rubrique décrit les problèmes connus liés à la plateforme UWP dans le programme pour les développeurs Xbox. Pour plus d’informations sur ce programme, voir UWP sur Xbox.

[Si vous êtes venu ici à partir d’un lien dans une rubrique de référence d’API et que vous recherchez des informations sur l’API de la famille d’appareils universels, consultez Fonctionnalités UWP non prises en charge sur Xbox.]

La liste ci-après répertorie certains problèmes connus que vous pourriez rencontrer, mais cette liste n’est pas exhaustive.

Vos commentaires nous intéressent. Par conséquent, n’hésitez pas à nous faire part de vos éventuels problèmes sur le forum Développement d’applications de plateforme Windows universelle.

Si vous êtes bloqué, lisez les informations présentées dans cette rubrique, consultez le Forum aux questions et utilisez les forums pour demander de l’aide.

Le déploiement à partir de Visual Studio échoue lorsque les paramètres de contrôle parental sont activés

Le lancement de votre application à partir de Visual Studio n’aboutit pas si le contrôle parental est activé dans les paramètres.

Pour contourner ce problème, désactivez ces paramètres temporairement ou procédez comme suit :

  1. Déployez votre application sur la console en désactivant les paramètres de contrôle parental.
  2. Activez ces paramètres.
  3. Lancez votre application à partir de la console.
  4. Saisissez un mot de passe ou un code confidentiel pour permettre à l’application de se lancer.
  5. L’application se lance.
  6. Fermez l’application.
  7. Effectuez le lancement à partir de Visual Studio à l’aide de la touche F5 ; l’application s’ouvre sans afficher d’invite.

À ce stade, l’autorisation est rémanente jusqu’à ce que vous fermiez la session de l’utilisateur, même si vous désinstallez l’application et la réinstallez.

Il existe un autre type d’exemption, uniquement disponible pour les comptes enfant. Un compte enfant requiert un parent, qui doit se connecter pour accorder l’autorisation adéquate. Lorsqu’il se connecte, le parent peut choisir d’autoriser systématiquement l’enfant à lancer l’application (paramètre Toujours). Cette exemption est stockée dans le cloud et est persistante, même si l’enfant se déconnecte et se reconnecte.

StorageFile.CopyAsync ne parvient pas à copier les fichiers chiffrés vers une destination non chiffrée

Lorsque StorageFile.CopyAsync est utilisé pour copier un fichier chiffré vers une destination qui n’est pas chiffrée, l’appel échoue avec l’exception suivante :

System.UnauthorizedAccessException: Access is denied. (Excep_FromHResult 0x80070005)

Cela peut affecter les développeurs Xbox qui souhaitent copier des fichiers déployés dans le cadre de leur package d’application vers un autre emplacement. La raison en est que le contenu du package est chiffré sur une Xbox en mode vente au détail, mais pas en mode Dev. Par conséquent, l’application peut sembler fonctionner comme prévu pendant le développement et le test, mais échouer une fois qu’elle a été publiée, puis installée sur une Xbox de vente au détail.

Ports réseau bloqués sur Xbox One

Les applications de plateforme Windows universelle (UWP) sur les appareils Xbox One ne sont pas autorisées à établir une liaison aux ports dans la plage [57344, 65535] (numéros de port inclus). Même si la liaison à ces ports semble réussir au moment de l’exécution, le trafic réseau peut être annulé sans avertissement avant d’atteindre votre application. Votre application doit si possible établir une liaison au port  0, ce qui permet au système de sélectionner le port local. Si vous avez besoin d’utiliser un port spécifique, le numéro de port doit être dans la plage [1025, 49151]. Vous devez vérifier dans le Registre IANA et éviter les conflits. Pour plus d’informations, voir le Registre des noms de services et des numéros de ports des protocoles de transport.

Couverture de l’API Windows Runtime

Toutes les API Windows Runtime ne sont pas prises en charge sur Xbox. Pour obtenir la liste des API qui ne fonctionnent pas, consultez Fonctionnalités UWP non prises en charge sur Xbox. Si vous rencontrez des problèmes avec d’autres API, signalez-les sur les forums.

Vous recevrez un avertissement concernant le certificat fourni, semblable à la capture d’écran ci-dessous, car le certificat de sécurité signé par votre console Xbox One n’est pas considéré comme un éditeur approuvé bien connu. Pour accéder à Windows Device Portal, cliquez sur Poursuivre sur ce site web.

Avertissement concernant le certificat de sécurité d’un site web

Mise en garde de KnownFolders.MediaServerDevices sur Xbox

Sur le bureau, les serveurs multimédias sont « couplés » avec le PC, et le service d’association d’appareils suit en permanence les serveurs actuellement en ligne, de sorte qu’une requête initiale de système de fichiers peut immédiatement renvoyer une liste des serveurs associés qui sont actuellement en ligne.

Sur Xbox, il n’y a pas d’interface utilisateur pour ajouter ou supprimer des serveurs, de sorte que la requête initiale du système de fichiers retourne toujours vide. Vous devez créer une requête et vous abonner à l’événement ContentsChanged et actualiser la requête chaque fois que vous recevez une notification. Les serveurs vont ruisseller et la plupart auront été découverts dans les 3 secondes.

Exemple de code simple :

namespace TestDNLA {

    public sealed partial class MainPage : Page {
        public MainPage() {
            this.InitializeComponent();
        }

        private async void FindFiles_Click(object sender, RoutedEventArgs e) {
            try {
                StorageFolder library = KnownFolders.MediaServerDevices;
                var folderQuery = library.CreateFolderQuery();
                folderQuery.ContentsChanged += FolderQuery_ContentsChanged;
                IReadOnlyList<StorageFolder> rootFolders = await folderQuery.GetFoldersAsync();
                if (rootFolders.Count == 0) {
                    Debug.WriteLine("No Folders found");
                } else {
                    Debug.WriteLine("Folders found");
                }
            } catch (Exception ex) {
                Debug.WriteLine("Error: " + ex.Message);
            } finally {
                Debug.WriteLine("Done");
            }
        }

        private async void FolderQuery_ContentsChanged(Windows.Storage.Search.IStorageQueryResultBase sender, object args) {
            Debug.WriteLine("Folder added " + sender.Folder.Name);
            IReadOnlyList<StorageFolder> topLevelFolders = await sender.Folder.GetFoldersAsync();
            foreach (StorageFolder topLevelFolder in topLevelFolders) {
                Debug.WriteLine(topLevelFolder.Name);
            }
        }
    }
}

Voir aussi