In iOS 10.3, Apple introduced new functionality related to App Store reviews. One part of it is the SKStoreReviewController, which displays a popup asking the user to rate your app. These popups have been quite popular for a very long time, but they always had the caveat of redirecting the user to the App Store, leaving your app and disrupting the user’s workflow. With SKStoreViewController, the user picks their rating directly in the app, never leaving it. It’s up to the developer to decide at what point it makes the most sense to show the popup.

A little history. Last year, I’ve released a new version of ID-Photo, an app of mine that I originally developed in 2011. It grew organically over the years, but finally reached a point where further development required a rewrite. So after some back and forth, I rewrote it in Swift from July on, and released it in September. Over the course of about seven months, I released four versions, and had about 32.000 updates and new downloads combined. Here are the worldwide reviews for these four versions (3.1.1 was skipped and never released):

Not a lot, isn’t it? ID-Photo was constantly in the German and US Top 100 Photo & Video apps, so it wasn’t really about exposure. People just didn’t care to review the app, which is fine, I suppose. There’s little incentive to review if everything is OK, but if you encounter a problem, writing a “bad” review is a nice way to blow off some steam. This leads to reviews being skewed towards negative ratings, even though most users are perfectly happy.

In April of this year, I’ve published a new version of ID-Photo, containing a couple of bug fixes and the new SKStoreReviewController. It was an experiment, I didn’t know what to expect. I figured in the worst case I will remove it again, because many people online were already threatening to give 1 star to any app asking for a review. Spoiler: it turned out much better than expected.

In just a little over one month, I’ve collected 52 reviews, most of which were positive. In the German app store, the rating is even better:

None of these reviews have any text associated with them, which means they were very likely obtained via the review controller. Of course there are still some 1 star reviews, but it’s impossible to know if these users where genuinely disappointed with my app, or if they just hated the prompt to review. Given how little there are, I don’t think it’s important for me to find out.

Theoretically, the whole thing would have only taken me three lines of code (four if you count the import of StoreKit):

if #available(iOS 10.3, *) {

Obviously it’s not that easy. I only show the request after the user used the basic core functionality of the app, namely picking or taking a photo and then creating a passport print. When the user switches back to the main menu, the request is fired. This makes sure that a new user is not immediately “greeted” with a review prompt after opening the app for the first time, and that the user had the opportunity to realise they got their money’s worth. And apparently it’s working. The reviews now paint a much better picture of what the app actually is like and checking out new reviews is a much happier experience for me.