[Windows Phone 7] Comment marche le capability detection tool?
Le capability detection tool est un petit utilitaire en ligne de commande qui va permettre de scanner votre application afin de détecter automatiquement, en fonction des API utilisées, quelles sont les “capabilities” à indiquer dans le manifest de votre application. Il est critique d’indiquer les bonnes capabilities dès le début car par défaut, elles sont toutes activées: ces capabilties sont d’ailleurs indiquées sur la page de votre application sur Marketplace et pourrait donc induire l’utilisateur en erreur sur ce que fait votre application réellement…
Le capabiltiy detection tool se trouve dans le dossier C:\Program Files (x86)\Microsoft SDKs\Windows Phone\v7.0\Tools\CapDetect. il faut ouvrir un command prompt et appeler la ligne de commande suivante:
CapabiltiyDetection.exe Rules.xml “CheminVersLeDossierDeVotreApplication”
L’outil vous retournera alors directement dans la fenêtre de commande les capabilities à inclure dans votre manifest dans la section <capabilities> (le fichier WMAppManifest.xml se trouve en dépliant les Properties de votre application)
Comment marche cet outil? Il scanne en fait le code de votre application à la recherche des API qui nécessite certaines capabilities. Et les règles qui régissent cette détection sont justement indiquées dans le fichier Rules.xml qu’on spécifie dans la ligne de commande Ce fichier est plutôt simple à comprendre: pour chaque capability, l’outil va chercher des namespaces, des classes ou des méthodes qui requièrent celle-ci.
Par exemple:
<Capability ID="ID_CAP_MICROPHONE" Type="Security">
<Assembly Name="Microsoft.Xna.Framework, Version=4.0.0.0, Culture=neutral, PublicKeyToken=842cf8be1de50553">
<Namespace Name="Microsoft.Xna.Framework.Audio">
<Class Name="Microphone" />
</Namespace>
</Assembly>
indique qu’on incluera la capability “ID_CAP_MICROPHONE” si on trouve une référence à l’assembly Microsoft.Xna.Framework, et qu’on utilise la classe Microphone définie dans le namespace “Microsoft.Xna.Framework.Audio”.
Du coup si vous vous demandez pourquoi l’outil retourne une capability que vous ne croyez pas avoir besoin de spécifier: un petit coup d’oeil dans ce fichier Rules.xml pourra surement éclairer votre lanterne.
Il arrive souvent par exemple que l’outil indique ID_CAP_NETWORKING alors que l’application ne fait pas forcément directement appel au réseau: mais le simple fait de spécifier une Uri locale dans du XAML (pour une image par exemple) peut faire que l’utilitaire détecte le besoin du réseau.. à tort. Laisser la clause using System.Net alors qu’on en a pas besoin provoque la même réaction… et cette clause est automatiquement ajoutée dans le template par défaut, il faut donc penser à bien nettoyer ses usings! Dans ce cas, vous pouvez enlever cette capability de votre manifest, mais attention tout de même à bien retester complètement votre application sans cette capability pour être sur que tout fonctionne quand même!!
Comments
Anonymous
January 13, 2011
Bonjour, Est-ce que cet outil nous indique aussi les références inutilisées ? MerciAnonymous
February 21, 2011
Non l'outil traite uniquement des capabilities mais pas des références.Anonymous
May 02, 2012
Bonjour, J'ai du code mort dans mon application qui nécessite des capabilities, est-ce que la validation peut être refusée si elles ne sont pas dans mon manifest ? Est-ce que cet outil est utilisé lors de la validation ? MerciAnonymous
May 09, 2012
Bonjour, Le code en lui même n'est pas vérifié puisqu'on ne fournit que les binaires pour la certification mais l'IL est vérifié, autrement dit si le code qui nécessite les capabilities est généré en IL il y a un risque que ça ne passe pas..Anonymous
May 10, 2012
Merci, Très bien mais j'ai lu ceci sur msdn : "When you submit an application to the Marketplace, the capabilities of the application are programmatically detected. The application submission process uses Microsoft Intermediate Language (MSIL) code analysis to detect the phone capabilities required by the application. The application submission process replaces the capabilities list, whether it is the auto-generated list or a list that you have modified, with the specific capabilities required for your application. This means that if the application manifest submitted with the application does not contain capabilities that are used by your application, these capabilities will be added as part of the submission process." sur la page : msdn.microsoft.com/.../gg180730(v=vs.92).aspx et il me semblait avoir compris que microsoft ajouté eux-mêmes les capabilities dont ils avaient besoin. Est-ce le cas ? Merci