Check your Windows Phone application capabilities
So you created a nice Windows Phone application, published it to the Marketplace and then you see this:
Your app uses the camera? Push notifications? Phone Identity? No way! My app does not use that. Why does it say so?
Of course, you should have run the Marketplace Test Kit before publishing your app. It will tell you exactly what capabilities your app needs. But we all forget to do that sometimes.
Why is this a problem?
Users might not trust your application. They will think your app does secrect stuff you're not telling them. Why else are all these capabilities listed for a simple application?
When the capability ID_CAP_LOCATION is added, users always get a dialog window where they have to push the allow button for your application to use location data. If you're not using it, this can scare of users. It might not even pass marketplace verification, because apps that use location always need some sort of privacy statement.
What or who is adding these capabilities?
Why does it say your application uses the Camera functionality? Or Push notifications? Or Phone Identity?
There's a big chance you're using a third party library which needs that capability.
When you start a new Windows Phone project and run the Marketplace Test Kit, only 1 capability is needed:
ID_CAP_NETWORKING
However, when you start adding commonly used libraries, there are more capabilities needed.
How to see the capabiltiies your app uses?
Start the Marketplace Test Kit, by right clicking on your Windows Phone Application project in Visual Studio. Click "Open Marketplace Test Kit".
Choose Automated Tests and click Run Tests.
Note: set your build configuration to Release mode.
Tip for Windows Phone library developers:
Split your libraries based on capabilities. So no unnecessary capabilities are added to applications.
And tell your users which capabilities are added when using your library!
List of extra capabilities needed per library:
- None, Thanks!
- ID_CAP_IDENTITY_DEVICE
- ID_CAP_WEBBROWSERCOMPONENT
Wp7Contrib
Is nicely seperated over multiple assemblies.
Adding the "Core" NuGet package adds:
- ID_CAP_IDENTITY_DEVICE
Wp7Contrib.All package:
Depends on lots of other assemblies. You end up with these capabilities:
- ID_CAP_IDENTITY_DEVICE
- ID_CAP_LOCATION
- ID_CAP_WEBBROWSERCOMPONENT
- ID_CAP_PHONEDIALER
NorthernLights
Depends on the Silverlight Control Toolkit, but adds no extra capabilities.
- ID_CAP_WEBBROWSERCOMPONENT
- ID_CAP_IDENTITY_DEVICE
- ID_CAP_ISV_CAMERA
- ID_CAP_PUSH_NOTIFICATION
Wp7nl.External
- ID_CAP_PUSH_NOTIFICATION
Also includes Phone7.Fx:
Phone7.Fx
Warning: adds camera capability ID_CAP_ISV_CAMERA.** Not detected by marketplace test kit**, but it's added when uploading to the marketplace.
See this post: http://phone7.codeplex.com/discussions/284058
So make sure you know which libraries you are using and what they are doing to your application capabilities.