adamnathan.netSubscribe to this blogMetro Web BrowserTODO ListAlarm ClockTip CalculatorSound RecorderGroceriesPick a CardNotepadStopwatchMetronomePinned SearchesFake CallMood RingCocktailsTODO ListAlarm ClockTip CalculatorSound RecorderGroceriesPick a CardNotepadStopwatchMetronomePinned SearchesFake CallMood RingCocktails
 Thursday, November 04, 2010

Ahh, the App Hub.  It's where you submit your apps for the Windows Phone Marketplace.  Given that I've got more than a few apps in the marketplace, I now have a lot of experience dealing with it.  I want to share some tips and info with you, so hopefully your experience will be as smooth as possible.  Don't get me wrong… I love Windows Phone 7 and I greatly appreciate everything that works well with the marketplace process.  But it's a brand new site and process, so there are a bunch of gotchas to be aware of.  It's clear to me that the App Hub will continue to improve, and it already has since I started using it, so I'll try to update this post as things change.

The theme of this post is get it right the first time!

The Good:

  • The process can be very quick.  Some apps of mine have been live in the marketplace the day after I submit them.  It has usually taken 2-3 days, and sometimes a week.
  • The PNG upload process is slick, as you get an instant preview on the page after choosing each file.  (Although sometimes the file-choosing dialog doesn't remember my current folder, which gets old really quickly.)
  • All screenshots (up to eight) are visible at the same time in your app listing in the marketplace, so you don't have to stress as much about which screenshots should be your first few.
  • The app testers seem to be really good.  In my first submission of Crayon Cannon, they caught a light-theme-only bug, in which my Instructions page rendered white-on-white text.  In my first submission of Lottery Numbers Picker, they caught a bug in which tapping the "pick" button twice within a short span caused the app to crash.  Good stuff!
  • When your submission fails, the detailed test results can be pretty nice.  Although the whole download-a-PDF thing is overkill for me.  Just tell me in the email notifying me of the failure, please!
  • There seems to be no limit to the number/length of keywords you can associate with your app.  (BUT see the first bullet in "The Bad" for the rest of this story.)

The Bad:

  • Your keywords do not yet seem to be used in Marketplace searches (or anything else).  Add to this fact that you can't do app-only searches on the phone (your results get polluted with music) and the lack of auto-completion in the search box, and you get a situation in which your apps can be hard to find.  I'm still waiting for a "magic" search to bring up my Pick a Card magic trick app.  Instead, I get a LOOONG list of artists, albums, songs, playlists, and some magic 8 ball apps.  (I don't have such an app… yet! :))  I hate to suggest this, but you might want to make your app names more descriptive to combat this.  For example, I'm thinking about renaming "Pick a Card" to "Pick a Card Magic Trick."  I suppose that could/should help its ranking in a "magic" search, even if keywords were respected.
  • You can't cancel/edit a submission that is currently being tested/reviewed.  You have to wait until your app passes or fails first.  Therefore, get it right the first time.
  • When you update your app, there's no separate spot to describe what has changed.  You can only pollute your main description with this information.
  • When you update an app that has failed, you have to go out of your way to resubmit it.  For some reason, the wizard only lets you "Save & Quit" after setting the price when resubmitting a failed app.  You must do this, then go back to your entry (now marked "Submission in progress"), press Next on every page of the wizard, then this time you can get to the final page that lets you resubmit.  Be careful to notice when this happens, as I unknowingly had some apps sitting around for a few days waiting for me to take the next step.
  • Your list of apps is a bit hard to manage.  Once you choose an internal "application name," you can't change it.  Although you can update your public-facing "application title" at any time, it's annoying to be stuck with the old names in your list.  You also can't delete an entry without it being sent to Microsoft and have it either pass or fail.  I created a "test" entry under my account and I can't get rid of it, unless I waste a tester's time by submitting a bogus XAP that I know is going to fail!

The Ugly:

  • If you want to make any change to your marketplace listing (other than the price), you must do a whole new submission.  This means getting your app re-tested, with the time delay associated with that.  (Your exact same app could even fail testing the second time, due to tester differences or policy changes.  This has happened to me more than once.)  You must even bump up your version number (in the marketplace, anyway… your app binary can be the same) because App Hub doesn't allow uploading a new binary without a corresponding version number update.  (That would be sensible if you weren't forced to resubmit a binary all the time.)  All this for just fixing a typo in your description, changing the category, updating the icon/screenshots, etc.!  Remember, get it right the first time.  And although you can update the price without doing a resubmission, you have no way of adding any text to the description like "SALE… THIS WEEK ONLY!" without doing a resubmission. Also, according to Gergely in the comments, once you change a paid app to free, you can't change it back. I haven't verified this.
  • When you update a submission that has been published to the marketplace, you have to fill everything out again, and you can no longer see the content from your previous submission.  Therefore, be sure to open the details in a separate tab/window before starting your update!  If you didn't previously open your submission details, you probably won't remember your list of keywords and will have to brainstorm new ones.  You can retrieve the other information from Zune, although you curiously cannot copy/paste text from it.  Along these lines:
    • Remember to reapply your chosen category so your app doesn't end up in the default Games category!
    • If you have an internal "application name" that is different from your marketplace-visible "application title" (not recommended), remember to reapply your desired title each time, because it defaults back to the application name every time!
    • Remember to reapply your price, so you don't accidentally start giving your app away for free! (Yikes!)
  • Avoid marketplace icons with transparent backgrounds.  Although using a transparent background is desirable for your app's real icon (I'll elaborate in a different post), bad things happen when you upload images with transparency to the marketplace.  Especially because a typical app icon is all-white.  The Marketplace app on the phone gives your icon a black background, which looks especially goofy under the dark theme, and Zune does nothing, which means you typically get a white-on-white icon.  So what should you do?  You could come up with some colorful icon that doesn't match the built-in apps.  In my case, for the apps where I wanted to keep the simple-white-icon look, I hard-coded the default blue accent color as the background, just like the icons on this blog.  I find this regrettable, however, as the icons you see in the marketplace don't necessarily match the icon you'll see once you install the app.  (I could have gone with the grey background applied to app list icons, but I'm holding out hope that a future version will allow accent-colored backgrounds for app list icons.)
  • The images downloaded to the phone's Marketplace app have compression artifacts. The icons usually have noticeable artifacts, especially for the simple-geometric style of icons used by most Windows Phone apps.  (Photographic icons, such as the one for Subservient Cat, look fine.)  Screenshots have this problem, too.  Everything looks great in Zune on the desktop, however, as it looks like it's using your original PNG files.  There's really nothing you can do about this.

More Notes About Updating Your App:

  • When updating your app, the site's pages still say "submit new app."  Don't worry about this.
  • After submitting an update, the details shown in the App Hub are still the old details until your submission has passed.  Don't worry about this either.
  • When you update your icon or other artwork, it takes awhile to see the change in the marketplace.  It takes especially long on the phone's Marketplace app… sometimes over a week after the updated submission is live!  Don't worry, the updated artwork will eventually appear!
  • By the way, updating your app does not appear to reset its ranking, nor does it clear/hide past reviews, nor does it cause it to show up as a "new" app.  This all makes sense.  It's unfortunate that old reviews are not tagged with the relevant version number, though, so it's probably a good idea to call out fixes in your description that address complaints from past reviews.

Miscellaneous Tips:

  • If you choose to upload the 1000x800 background art for the Zune client, give it its full contrast.  Don't worry about the visibility of text on top of it, because the Zune client places it under a translucent background.  You might as well upload an image, as it makes it eligible for being featured specially in the phone's Marketplace app.
  • Apps marked "testing in progress" seem to sometimes jump to the top of your app list when something happens, even though there is no visible change in status.
  • When first uploading a XAP, the size is shown in bytes, but when you revisit the page, it is shown in KB.  In the past, this has made me nervous and I've re-uploaded the XAP, but there seems to be no cause for alarm here. :)
  • When looking for your app to appear in the marketplace, don't rely on seeing it at the top of the "new" list.  In fact, as new apps get added throughout the day, they seem to be added after apps that were added earlier in the morning!  (@Arktronic believes that the ordering is based on the submission date rather than the publishing date.) I'm also suspicious that the first four "new" apps on any given day are hand-picked, since they get featured more prominently elsewhere.  My Lottery Numbers Picker app was once featured as a "new" app along with another lottery-themed app, so that seemed like the result of human involvement.  On the other hand, yesterday my geeky XAML Editor app was featured as a "new" app, which would have been an odd choice for a human to make.

A Guide to Your App's Status:

For my own apps, I've seen the following:

  • Submission in progress. When you see this, the ball is in your court to complete the submission!  As I mentioned earlier, there's a condition where you think you might be done but you see this instead.  If you see this, select the "edit application" action and finish it.
  • Ready for testing.  Your app is now in the queue.  I normally only see this for less than a minute, and then the status switches to the next one.
  • Testing in progress. This is where you do the most waiting.  As I mentioned earlier, you cannot do anything to your submission during this step.
  • Testing failed.  Oops.  There will be a PDF you can download that explains the problem, sometimes with very helpful steps to reproduce the problem.
  • Ready for signing.  Your app has passed; it just needs to be signed before it's ready.  Sometimes this has taken more than a day.  I'm not sure why this would take so long.
  • Ready to publish.  You see this when your app is ready but you opted-out of automatic marketplace publishing.  This status provides a "publish to marketplace" option, so you can time your release for a specific date.
  • Published to Marketplace.  It's live!  It might take a little while before you see it show up in Zune, and a bit longer (half a day?) before you see it on the phone's Marketplace app.
  • Application removed by Microsoft.  Your app got flagged for a policy violation.  Your only possible action for this state is "contact support."
  • None. This was a temporary glitch.
Want to be one of the most knowledgeable app developers around? Pre-order 101 Windows Phone 7 Apps, Volume I now!
Thursday, November 04, 2010 12:23:48 PM (Pacific Standard Time, UTC-08:00)  #    Comments [9] - Trackback    
 Tuesday, November 02, 2010

I love the iPhone. Before getting one, much to my wife's chagrin, I could never force myself to keep my cell phone with me. Because there are so many things I love about it, I was uneasy when I decided this spring that I'd be switching to Windows Phone 7 when it came out. But I made this decision because I planned on developing apps for it and writing the Windows Phone 7 book.

I've gotten a chance to use a Windows Phone 7 for a while, and I've been using many of the apps that are now out in the marketplace. Honestly, I'm surprised by how much I like the phone. So much so, that temporarily switching back to my iPhone felt like a downgrade. I did not expect to feel that way. Sure, there are many annoyances (such as the Marketplace app) , but I greatly appreciate:

  • A Mail app that actually works really well. It blows the iPhone Mail app away, despite not having threaded conversations. I've been using the app for Exchange, Hotmail, and Gmail as three different tiles, and I love it!
  • Seeing the next meeting & mail status (per account!) on the lock screen.
  • The behavior of the keyboard (caps lock, seeing letters in lowercase or caps, the text suggestions bar, …).
  • The cool "I'm running late" functionality.
  • Live tiles. I'm looking forward to having a good Weather app that exploits this. The WeatherBug app is a great example of this feature. My iPhone home screen, on the other hand, always tells me it's 73° and sunny. That permanent forecast might work out okay in Cupertino, but it's rarely accurate in Redmond! :)
  • Zune Pass. Actually very nice!
  • The truly excellent Facebook and Twitter apps. The Facebook integration into hubs is cute, but certainly no replacement for the full Facebook experience. My biggest gripe about the Facebook app is that it currently doesn't show you who likes things.
Tuesday, November 02, 2010 8:18:44 PM (Pacific Standard Time, UTC-08:00)  #    Comments [3] - Trackback    

The application bar automatically makes your white-on-transparent images white under the dark theme and black under the light theme. You can accomplish this same effect with your own custom images, without relying on custom code to swap images based on the theme (although that works, too).

The trick is to use the image as an opacity mask for a theme-colored element, such as a rectangle. For example:

<Rectangle Width="48" Height="48" Fill="{StaticResource PhoneForegroundBrush}">
  <Rectangle.OpacityMask>
    <ImageBrush ImageSource="/Images/icon.png"/>
  </Rectangle.OpacityMask>
</Rectangle>

The Groceries app uses this technique to make all of its non-application-bar images show up nicely for both themes, for example:

blog1  blog2

Be aware that opacity masks are expensive performance-wise, but for small, static content I think you'll be just fine.

Tuesday, November 02, 2010 6:25:42 PM (Pacific Standard Time, UTC-08:00)  #    Comments [0] - Trackback    

I thought I'd post some tips from my Windows Phone 7 book, and what better way to start than by answering some questions my new boss posted on Twitter!

Most of the time, you should try to not care which theme is in use by sticking with the various brushes/colors defined as application resources, such as PhoneForegroundBrush and PhoneBackgroundBrush. Sometimes you can't avoid it, though, and you want to write code such as this:

if (/* dark theme */)
    // Do dark theme stuff
else
    // Do light theme stuff

To accomplish this, you can leverage one of several pre-defined application resources:

  • PhoneDarkThemeVisibility, of type Visibility (Visible or Collapsed)
  • PhoneLightThemeVisibility, of type Visibility (Visible or Collapsed)
  • PhoneDarkThemeOpacity, of type double (0 or 1)
  • PhoneLightThemeOpacity, of type double (0 or 1)

Therefore, here are four different yet equivalent ways to express the preceding pseudo-code:

if ((Visibility)Application.Current.Resources["PhoneDarkThemeVisibility"] == Visibility.Visible)
    // Do dark theme stuff
else
    // Do light theme stuff

 

if ((Visibility)Application.Current.Resources["PhoneLightThemeVisibility"] == Visibility.Collapsed)
    // Do dark theme stuff
else
    // Do light theme stuff

 

if ((double)Application.Current.Resources["PhoneDarkThemeOpacity"] == 1)
    // Do dark theme stuff
else
    // Do light theme stuff

 

if ((double)Application.Current.Resources["PhoneLightThemeOpacity"] == 0)
    // Do dark theme stuff
else
    // Do light theme stuff

 

I used this technique in Tip Calculator to define my own theme-specific brushes for the bottom buttons that match the built-in Calculator app's buttons:

 

This was necessary because, alas, the necessary brushes are not already defined as application resources.

Tuesday, November 02, 2010 4:23:00 AM (Pacific Standard Time, UTC-08:00)  #    Comments [0] - Trackback    
 Monday, November 01, 2010

As I tweeted the other day, my new Windows Phone 7 book is now available for pre-order.  Here's the first draft of the cover (with many app icons still needed to be filled in):

The title could be a little confusing (and we might still tweak it), so let me be clear that this is a book for software developers!  Each chapter walks you through the creation of a full app, teaching you lessons about Silverlight and Windows Phone along the way.  The first 10 chapters alone could be an entire book on Silverlight, with coverage of controls, layout, events, data binding, resources, styles, custom controls, and much more!  I put great emphasis in creating apps that look and feel like the apps that ship with the phone, so you'll learn how to use the application bar, pivot/panorama controls, animations, etc. the way that they were intended to be used.  And having created so many complete Windows Phone apps, I've got tons of tips and pitfalls to share.

The 101 apps are real apps.  Apps that are (or will be) in the marketplace.  Apps that people are willing to pay for.  101 apps == 101 chapters, spread across two volumes.  Volume I covers 50 apps, and Volume II will cover 51 apps.  Volume I is organized as follows:

  • Part I: Getting Started
  • Part II: Transforms & Animations
  • Part III: Storing & Retrieving Local Data
  • Part IV: Pivot & Panorama
  • Part V: Audio & Video
  • Part VI: Microphone
  • Part VII: Touch & Multi-Touch
  • Part VIII: Accelerometer

Each volume includes a disc with full source & artwork for the apps covered in that volume.  Even if you don't read the book, you could take the source code to, say, Tip Calculator, and add some features to it.  You only need to make yours slightly better than mine, and you might have the best tip calculator in the marketplace!  Or, perhaps you could repurpose the source code and create a loan calculator.  No matter what your app idea, "there's a chapter for that!"

Monday, November 01, 2010 7:47:12 AM (Pacific Standard Time, UTC-08:00)  #    Comments [9] - Trackback    
 Sunday, October 31, 2010

After years of inactivity, I'm going to start blogging again at this new address: http://blog.adamnathan.net. My old blog (http://blogs.msdn.com/adam_nathan) will still exist but will not be updated.
Sunday, October 31, 2010 9:01:37 AM (Pacific Standard Time, UTC-08:00)  #    Comments [0] - Trackback    
<November 2010>
SunMonTueWedThuFriSat
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011
Adam's Books
Disclaimer
The opinions expressed herein are my own personal opinions and do not represent my employer's view in any way.
© 2014 Adam Nathan