Windows Phone App Certification Requirements when using Location ServicesWhy do I even care? Two reasons:
- It might push away users if they get the feeling my app wants to spy on them.
- Apps using Location Services have to follow certain rules. If they don't they can't enter the Store.
Fair enough, but I wasn't using any actual location data. Apart from that the requirement leaves some room for interpretation (emphasis mine):
How does Capability Detection by the Store Test Kit work?
|Open the Store Test Kit via Project context menu.|
You can look up what APIs require which app capability in Rules.xml, a file included in the Windows Phone SDK. On my machine it can be found in C:\Program Files (x86)\Microsoft SDKs\Windows Phone\v7.1\Tools\Marketplace.
Here is the relevant part of Rules.xml showing what needs ID_CAP_LOCATION:
<Capability ID="ID_CAP_LOCATION" Type="Security"> <Assembly Name="System.Device, Version=188.8.131.52, Culture=neutral, PublicKeyToken=24eec0d8c86cda1e"> <Namespace Name="System.Device.Location"> <Class Name="GeoCoordinateWatcher" /> <Class Name="GeoPosition" /> <Class Name="GeoPositionChangedEventArgs" /> <Class Name="GeoPositionStatusChangedEventArgs" /> </Namespace> </Assembly> <Assembly Name="Microsoft.Phone, Version=184.108.40.206, Culture=neutral, PublicKeyToken=24eec0d8c86cda1e"> <Namespace Name="Microsoft.Phone.Controls"> <Class Name="WebBrowser"> <Method Name="set_IsGeolocationEnabled"/> </Class> </Namespace> </Assembly> </Capability>
Why does the SharePoint SDK for Windows Phone use Location Services?To determine where the SharePoint SDK uses location-related functionality I had a look into the assemblies included in the SDK - and found something in Microsoft.SharePoint.Phone.Application.
Normally I use ILSpy to look at the implementation of framework assemblies, but ILSpy unfortunately doesn't support full text search as of this writing. So I tried the free JustDecompile by Telerik and this worked nicely.
Searching for GeoCoordinateWatcher lead to the class ModifyItemViewModelBase.
I could not find where OnGeolocationStatusChanged is used in any of the SDK assemblies. It's public and virtual so maybe it's just there to use for us. Seems the documentation is a bit scarce here as well.