An Experiment In iOS App Pricing

I’ve a couple of paid apps and I am never really sure what to price them. On the one hand it’d be nice if I made anything from them but I also want people to actually use them. Last year, Michael Jurewitz wrote a series of fascinating posts on App Store Pricing. In particular the section on price elasticity stuck in my head.

My tax calculator app (unimaginatively called) TaxCalc.ie generally does best at two times of the year – in and around the budget announcements and in January (presumably as people are checking their first payslip).

On the run up to the 2014 Budget, I did a bigger than normal update to the app both modernising its internals and sprucing up the UI a bit. Based on the extra effort that was put in and keeping price elasticity in mind, I decided to increase the price on the 1st of October from 89c to €1.79 as a bit of an anti-sale.

For the period between the 1st of October 2013 and the 6th of January 2014 (€348.80 profit), I sold 320 copies compared to 315 the previous year (€151.20 profit). So not only did I sell more, I also more than doubled my profit.

I hadn’t really noticed this until I was doing my usual end of year comparisons at the start of January. As people seemed to be as willing to pay €1.79 as they were 89c, I decided to ratchet up the price to the next tier (€2.69) for the rest of January. The result was 72 sales compared to 101 in the same period of 2013. It may have been a 30% drop in downloads, but when you look at the proceeds, the app still generated more than twice amount at €118.08 as opposed to €54.54. I’d call that a successful experiment.

Will I increase the price again? Possibly for a week later in the year, but probably not. My gut feeling is that another price increase would would further drop download numbers to the point where it would make less money. More likely, I’ll either release the 2015 calculator as a standalone app or offer an update as an in-app purchase.

The tax calculator is a very niche app and and it’s really only providing me with beer money. Still, it was well worth tweaking the price to squeeze that little bit extra out of it to make the time spent developing it actually worth something.

tl;dr Increased the price of TaxCalc.ie from 89c to €1.79 and finally to €2.69 resulting in 2x profits while more or less maintaining the number downloads.

Broadsheet Yearly Stats 3: We’re getting a bit old in the tooth now.

So here we are again, another year, another gathering of stats from Broadsheet.ie. If I’m lucky, it’ll be in the Sunday Times again.

The Headline Figures

  • 4.9% increase in visits to 13.8 million
  • 5% drop in unique visitors to 2.9 million
  • 6.5% increase in pageviews to 30.1 million

So why the drop in unique users? We didn’t have another smash hit like the Meanwhile, At Smithfield Horse Fair. It provided a huge surge in once off visitors that we didn’t manage to replicate this year.

We’ve also not the had the massive growth of the previous couple of years, but that is somewhat expected. With the tiny team we have and a zero marketing budget, we’ve done extraordinarily well. Now we need to expand out from the core audience we’ve built.

Where Are You Based These Days?

There’s been no big change in where out visitors are from – Irish visitors account for 74% (up 2%), UK at 10% (no change), US 4.8% (down 0.3%), Germany 1.2% (up 0.13%) and Australia 1.12% (down 0.07%).

What Are You Reading?

Unlike previous years, the laughs are low on the top three stories so I’ll proceed without comment on those.

Instead I’m mention two of the more enduring pieces we ran from 2012 – Daisy: The Cutest Kitten In The World and the already mentioned Meanwhile, At Smithfield Horse Fair. Both of these pull in more once off visitors than most other posts from 2013.

How They’re Finding Us

Apart from the usual crowd that put in some form of ‘Broadsheet’, the top six search terms of 2013 were:

  • electric picnic 2013
  • property tax calculator
  • mikey clancy
  • tayto chocolate
  • niamh horan
  • bus porn

I’ve gone with six entries here rather than my usual five as, well, how could I resist exposing a term like “bus porn”? Niamh Horan continues to be popular for whatever reason.

The Window You Look At The Internet Through

Chrome continues to be the dominant browser choice with 39% (up 6%) of users viewing the site with it. Firefox stays in second place with 17.6% (down 4%), Safari takes third with 15.9% (down 0.1%) taking Internet Explorer’s place which now has 14.9% (down 2.9%).

iOS still accounts for 2/3rds of the mobile browser traffic to the site and Android taking most of the rest. The big winner though is Windows Phone from which pageviews exploded by 648% (for a total of 2.4% of the mobile traffic).

Apps

This year saw the release of an updated iOS app as well as new Android and Windows Phone apps.

There were 8,522 downloads on iOS (for about 30K total), 4,654 on Android and 2,310 on Windows Phone. From that, there’s between 2,500 and 3,000 active users a day producing 2.5 million sessions and 15 million screen views between them. It very much seems like people dip in and out of the apps a few times a day.

Anything Else?

If there’s anything else you’d like to know about, ask in the comments and I’ll see what I can dig out.

Previously:

A Broadsheet New Year
Broadsheet – Entering the Terrible Twos
A year in the Broadsheet

6 Tools In 5 Minutes, Or: How Not To Be A Caveman Developer


These are the slides from my talk at the XCake Xmas session.

Accessorizer:
http://www.kevincallahan.org/software/whatsNew.html
Download from the Mac App Store.

Objectify:
http://tigerbears.com/objectify/
Download from the Mac App Store.

Objective-Clean:
http://objclean.com/
Download from the Mac App Store.

Code Runner:
Download from the Mac App Store.

Reveal:
http://revealapp.com/

Tokens for Mac:
http://usetokens.com/

Getting your app reviewed on Broadsheet

After every post for Broadsheet’s App of the Day, there are a few emails about other apps to review. This is a guide for people who don’t have PR departments and are wondering what’s needed to get their app reviewed. I do look at every review request that comes in so don’t worry about it not being seen.

Submitting an App

All app submissions should be sent to broadsheet@broadsheet.ie. I’ll get them from there.

Your App

Tell me about it. What does it do? Why is it great? Who’s the audience? What devices/OS does it support? How much is it?

Include a link to it on the relevant app stores! Don’t make me search it out.

I have a selection of devices test on (iPhone 4s/5/5s, Samsung S3, Nexus 4) and I do test every app before review so if your app doesn’t work on one of these I’m afraid you’re out of luck.

Screenshots

If there’s particular screenshots that really show off your app, send them with your mail. If you don’t, I’ll first look at what you have on the app stores and possibly pick out something myself that captures my fancy.

The screenshots should have a max width of 400px (if they’re bigger we’ll resize them down ourselves).

Video

A video of your app is a great way explaining how your app works. The stand out in previous reviews is Soundwave.

Redemption Codes

If you’re submitting a paid app, a nice thing to do for the readers is to provided a few free versions. For iOS apps, I recommend Tokens to manage this.

Usually any codes put up are gone within minutes of the posts. On the downside, I’ve found the conversion rate for an unsuccessful redemption to a paying customer is practically nil.

Let me stress that this is completely optional and I don’t use any meant for the readers myself.

Canvassing Will Disqualify

As is always said at the bottom of the reviews, no favours, cuddles, or pints are given (or expected) for a review. If your app doesn’t make it, we probably just feel it doesn’t suit the content of the site.

Be Warned

The Broadsheet collective can be somewhat harsh. ParkYa got a bit of a savaging when they looked for beta testers but there’s usually a few nice people in the mix.

Slides from the talk “Face Detection and Recognition for Fun and Profit” for XCake

These are the slides to my talk for XCake on using OpenCV for face recognition on iOS. It should be noted that the first half of the talk deals with using OpenCV to also detect faces and so applies to any platform you can use OpenCV on. The simplified code sample on slide 14 should more or less work for you on non-iOS implementations.

Links

Slide 4: https://en.wikipedia.org/wiki/Prosopagnosia

Slide 6: http://opencv.org/

Slide 9: http://coding-robin.de/2013/07/22/train-your-own-opencv-haar-classifier.html

Slide 10: http://docs.opencv.org/modules/contrib/doc/facerec/facerec_tutorial.html

Slide 25: http://www.rekognition.com/
https://www.bioid.com/solutions/solutions-by-application/bioid-for-facedotcom.html
http://api.animetrics.com
http://www.identitykit.it/
http://www.skybiometry.com/

Slide 27: https://github.com/kmonaghan/FaceRecognition

Other

520 – What’s New in Camera Capture from WWDC 2012 talks about CIDetector and AVCaptureMetadataOutput from about the 19 minute mark. You should look at the sample code from that talk (StacheCam) for details on how to implement CIDetector and AVCaptureMedataOutput rather than the SquareCam project referenced in the Apple Documentation.

iOS 6, Auto Layout and MKMapView

I’m currently in the throws of updating an app for iOS 7. As part of the update, I’m throwing out all the XIBs and buying fully into using auto layout programatically.

I’ve been concentrating on getting it all to work on iOS 7 and only started at looking at how it looks on iOS 6 this week. Straight away I hit an issue

Auto Layout still required after executing -layoutSubviews. MKMapView's implementation of -layoutSubviews needs to call super.

The solution turns out to fairly straight forward. You don’t seem to be able to directly apply constraints between a MKMapView and another subview under iOS 6. Instead, you place your map into a container view and set the autoresizingMask to flexible width and height. You can then apply any constraints needed to the container view.

The code below simply creates a MKMapView which takes up the whole screen. From there, you could add buttons to the container view that are constrained to float 30 points from the bottom (which is what I needed to do).

self.mapContainerView = [[UIView alloc] initWithFrame:CGRectZero];
self.mapContainerView.translatesAutoresizingMaskIntoConstraints = NO;

self.mapView = [[MKMapView alloc] initWithFrame:self.mapContainerView.frame];
self.mapView.showsUserLocation = YES;
self.mapView.delegate = self;
self.mapView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
[self.mapContainerView addSubview:self.mapView];

[self.view addSubview:self.mapContainerView];

[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"|[_mapContainerView]|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(_mapContainerView)]];

[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[_mapContainerView]" options:0 metrics:nil views:NSDictionaryOfVariableBindings(_mapContainerView)]];

As an aside: Reveal has been invaluable in debugging my auto layout issues.

Slides From The Broadsheet Talk For Refresh Dublin

These are the slides from my talk in the Science Gallery for Refresh Dublin. All the links mentioned in the slides are below.

Top of the Posts

The top 5 posts (in reverse order):

What Got People Going?

The top 5 most commented posts (in reverse order):

The Apps

iPhone code: https://github.com/kmonaghan/KMWordPress
Android code: https://github.com/kmonaghan/Broadsheet.ie-Android

2013/7/30 Clarification on App Download numbers

The numbers shown are for the last 12 months (like the rest of the stats) not the total downloads. The iPhone app has around 27K total downloads which is why the user numbers are higher than the total downloads shown.

Your Broadsheet.ie Android app has arrived

Screenshot_2013-06-09-12-23-01

Finally, more than two and a half years after my iOS version was released I’ve built an Android app for Broadsheet.ie and it’s available now on the Google Play store.

The app doesn’t quite have feature parity with the iOS version but is close enough that it warrants release (especially considering the clamouring for it from the readers). I will be actively developing it over the summer in step with some updates to the iOS app.

The Android fragmentation issue means I’ve not been able to test it on all platforms, but I’ve made an effort to ensure it works on the top 10 devices that access the website. Hopefully the app won’t look too bad outside of these.

Think you can do better?

As with the iOS version of the app, the code is available on GitHub under the MIT license. I do this not in the hope that someone will come along and fix bugs or improve it but in case someone else finds it useful and wants to use it.

I would, of course, be delighted if someone actually did create a pull request…

And now over to you

The Android using section of our readers have been very vocal about wanting an app. When presented with evidence of lower engagement on the site from Android the lack of an app has been blamed (an opinion which I don’t subscribe too – it seems more like Android users don’t really use their devices compared to iOS).

The only way developers are going to take Android seriously is if people actually use their phones and download apps. So grab the app today and make this developer a happy man!

Eclipse, ADT, Maven, m2e, Android Connector setup

I’m looking at some Android development at the moment in work after being immersed in iOS development for the last few years. Switching tools always has a bit of a learning curve and this post documents what’ve setup so far. I’ve had a few false starts so this might come in useful to someone else.

Since pretty much everything I do these days app wise involved consuming some sort of REST API, I went looking for a library to handle that end of things. I came across Robospice which at first glance fits the bill for what I want. It uses Maven for project and dependency management.

As I’ve not really used Java I’ve never used Maven in anger and had some difficult in setting it up properly. While there are instructions out there, they all assume some working knowledge of how Eclipse, Maven or the ADT works so not ideal for a complete beginner. There was a lot of googling and reading Stack Overflow before it finally all worked.

Here’s the steps I followed to get it running on my iMac:

  • Download the Android SDK as the ADT bundle and install
  • Set the environment variable ANDROID_HOME to point to the sdk directory
  • Run ‘android update sdk –no-ui –all –force’ (android is under tools in the sdk folder. Also, this can take a while as it downloads everything)
  • Open ADT and install the Marketplace Client via ‘Install new software…’ under ‘Help’
  • Install Eclipse Plug-in Development Environment via ‘Install new software…’ under ‘Help’
  • Install M2E Plugin via ‘Install new software…’ under ‘Help’ using the URL http://download.eclipse.org/technology/m2e/releases
  • Install Maven 3 if you have an older version (or none) on your system (instructions on how to do so here)
  • Install Egit from the Eclipse Marketplace
  • Install Android Configurator from the Eclipse Marketplace (search for ‘android m2e’)

After all the restarts, you should be now at a stage where you can import Maven projects.

There’s a couple of more steps before you’re able to create a Maven project:

  • Start creating a new Maven Project
  • In ‘Select an Archetype’, click on ‘Add Archetype…’
  • Set ‘Archetype Group Id’ to ‘de.akquinet.android.archetypes’
  • Set ‘Archetype Artifact Id’ to ‘android-quickstart’
  • Set ‘Archetype Version’ to ‘1.0.8’

You can then continue on creating your project. Once it’s created you may see the error Project ‘skillpages-android’ is missing required source folder: ‘src/test/java’ “. This is a known issue and here’s two solutions to this:

  1. Create the directory and refresh the project
  2. Update the Android Configurator from the URL http://rgladwell.github.com/m2e-android/updates/master/

I will note that after I updated the plugin, it broke creating new projects for me.  But I’m not sure if that was something I did or an issue with it. I ended up removing and reinstalling it.

Hopefully this will help someone else bootstrap themselves into Android development and not just left fruitlessly searching.