Windows Phone 7 Certification Requirements

The MicrosoftTM Windows Phone Market place has a few technical certification requirements that those not previously versed in phone development may not be aware of. A full list of current certification requirements can be found here. The list of certification requirements is (understandably) quite wordy. The requirements that are 'big ticket' items to me are listed below with possible solutions / workarounds.

Responsiveness requirements:

  • Apps must display a splash screen within five seconds of launch.
  • Apps must respond to user input within twenty seconds of launch.
  • Apps have ten seconds to deactivate (tombstone) or they are detected as hung.

Memory requirements:

  • Apps must now 'opt out' of 256Mb device support.
  • App packages (XAP) must not be larger than 225Mb.

Other requirements:

  • Microsoft is soon to bar users who have not updated to Windows 7.5 (Mango) from downloading apps from the App store.
  • This means new or updated apps must be written for Mango (called 7.1 in Visual Studio)

 

Responsiveness Requirements

There are a few blogs floating around the Internet suggesting ways to speed launch times. Most of these solutions defer content loading and use threading. Windows Phone 7 appears to be a (mainly) single tasking OS - apparently threading has a high overhead. Using custom threading in content loading may make loading take longer than it otherwise would.

Microsoft provides a Game State Management sample XNA development on the creators club website. Basically this is an interface stack that lets you show simple menu items before loading the main game content. While this framework is more technically complex (and potentially uses more memory) in the longer term the work involved pays off.

Note that an older (pre Mango) version of the Game State Management sample is included in the Catapult Wars. If you haven't looked at catapult wars yet, have a look now - it tells you almost everything you need to know to make a 2D Windows Phone 7 game. For those that aren't aware there is also a free Windows Phone 7 eBook available Programming Windows Phone 7 by Charles Petzold (all part of gaining developer mind share).

When a call or SMS message comes in (or the back button is pressed) an application has ten seconds to tombstone. If you have a large number of objects consider saving to an IsolatedStorageFile rather than creating huge lists of state items inside PhoneApplicatioService.Current.State.

 

Memory requirements

All previous Windows Phone 7 devices had 512Mb of RAM, NokiaTM is soon to release the first 256Mb Windows Phone 7 device the Nokia Lumia 610. When running on devices with only 256Mb of RAM, XNA applications have a peak of 90Mb peak memory available at runtime. If the memory requirements of your app are too high and you want to explicitly 'opt-out' of support for 256Mb devices then you need to add the following to your application manifest (WMAppManifest.xml):


    
        
        
            
        
    

You can check the memory usage at runtime using the property Microsoft.Phone.Info.DeviceStatus.ApplicationCurrentMemoryUsage. Putting something like the following in you main Microsoft.Xna.Framework.Game::Update() function will display the memory usage in the debug output once a second. Keep in mind that the debug runtime used more memory that the release runtime

m_Elapsed += gameTime.ElapsedGameTime.Milliseconds;
if (m_Elapsed > 1000)
{
    const long bytesPerKb = 1024;  // NOTE: Hard drive manufacturers should read this
    long nowKb = Microsoft.Phone.Info.DeviceStatus.ApplicationCurrentMemoryUsage / bytesPerKb;
    long peakKb = Microsoft.Phone.Info.DeviceStatus.ApplicationPeakMemoryUsage / bytesPerKb;
    System.Diagnostics.Debug.WriteLine
    (
        string.Format
        (
            "Memory Usage: {0:0000000}Kb | {1:000}Mb (Now) / {2:0000000}Kb | {3:000}Mb (Max)",
            nowKb,
            nowKb / bytesPerKb,
            peakKb,
            peakKb / bytesPerKb
        )
    );

    m_Elapsed = 0;
} 

 

The size of the app on disk cannot exceed 225Mb. Images are one of the biggest consumers of space. If you are hitting this limit, try turning compression on images. This will reduce image quality and doesn't work well with images that include an alpha channel.

  • Right click on an image in the content project inside Visual Studio, Properties.
  • XNA Framework Content Pipeline, Content Processor, Texture Format
  • Change the value from 'Color' to DxtCompressed