18 May 2013
iOS Apps: Keeping data over re-installs

I took my own advice and decided to create a Freemium version of Drive Mode and call it Speak and Drive.

The app will allow users to dictate 20 destinations to their favorie navigation app. After these 20 free uses, the user has the option to unlock the app for unlimited use with an In-App Purchase.

Where should I store this “uses” counter?

The easiest place to store this data is the NSUserDefaults dictionary. This is a big mistake since the user can trick the counter. All he has to do is uninstall the app and then re-install this. This will delete the NSUserDefaults entry and return the counter to 0.

Hello Keychain

The only place to store data that never gets deleted is the Keychain. The purpose of the keychain is to store sensitive data like usernames, passwords, etc. I’ll use it here since it doesn’t get deleted when the app is deleted.

Reading and writing to the Keychain isn’t as straight forward as writing to the NSUserDefaults dictionary. There is a lot of boilerplate and you got to deal with a lot of C code (the iOS SDK doesn’t provide a neat Objective-C interface for it).

Fortunately, the open source community is always there to save me. I found this amazing Keychain wrapper and it makes the Keychain work similar to NSUserDefaults.

Except for one small detail. It will only allow you to store NSStrings in the Keychain. I quickly created my own counter wrapper class:

Now I can track the number of uses easily without letting people trick the counting system.

3 May 2013
I suck at marketing

I have a lot of ideas for products. Some are really bad, others are quite good.

Once in a while a really good idea comes along. This is the product I build.

The last good idea turned into Drive Mode. A good product that solves a real pain for users. I also know that people are actively looking to solve this pain.

I created two versions of the app:

  1. A localized version for my own country (Israel)
  2. A multi-language version

Marketing is so easy

The localized version was so easy to market. I just sent a few emails to relevant blogs, they picked it up and so did the users. A national newspaper wrote about it and I was even interviewed for a popular TV show about it.

image

(I do have eyes in real life, just not in this photo)

The app is still a regular Top 10 ranked app in the Israeli App Store and it has a great rating score from a lot of users. Not my-friends-users, but real users who use the app every day (And I have the analytics to prove it).

Marketing is so hard

After conquering the Israeli market, I was sure I could repeat the same success in other markets.

So I took the “Marketing Recipe” from the localized version and applied it again: I sent the information about the app to as many blogs and review sites as I could. Not only to English blogs, but to French, Dutch, Italian and you-name-it language blogs as well.

It got a few reviews on those blogs, but it didn’t drive many users to download and use the app.

Those who did use it liked it. I know, they said so on the App Store: “Ottima”, “WELL DONE !!!”, “Perfect”, “Fantasticaaaaaaaa!!!!!!!!!!”, “Realmente práctica”, “Life saver”, “Handige app!”. (To be fair, there were some users who weren’t impressed by it, but they are the minority).

So here’s a useful product that people like. Why doesn’t it take off by itself?

I knew I had to do something about it. I started reading every blog post ever about marketing apps and marketing in general and took some actions. Still, I couldn’t reach the result I aimed for and that is suitable for the app.

What should I do next?

“What have you tried?”

Matt wrote a long time ago that after asking a question you might face with the “What have you tried?” question. I’m all up for that.

Here’s what I’ve tried:

  1. I used Applaunch.us services to help me reach bigger review sites. It didn’t work.
  2. I wrote on car/driving forums about the app. I don’t regularly visit these communities, so my posts were not welcomed there (I asked for permission before posting about the app. Most told me “Thanks for being honest and asking for permission, but please don’t advertise on our forums”).
  3. I dropped the app price to attract more downloads. It didn’t work. People were either willing to pay or not. It wasn’t about the price.
  4. I posted a few posts on hacker news about it.
  5. I updated the app to support more navigation apps. That didn’t change much (Most users did upgrade to it).
  6. I’ve tried using Google Adwords to attract traffic to the app landing page. Unfortunately, Google did not approve the keywords I was targeting (They didn’t like “Siri” nor “Google Maps”).
  7. I’m currently looking at Twitter ads as well. I love Twitter and I hope this might actually work.

What’s next?

I have a few ideas for my next steps.

People like the app once they download it, but not many are willing to give it a spin. I could create a new lite version of the app and give it away for free. It will support X operations and users can unlock it with an In-App Purchase.

Friends told me that the app name should be better and that it should say clearly what the app does. The current name is “Drive Mode”. The idea was that when you get on an Airplane you use “Airplane Mode” and when you start Driving you use “Drive Mode”. I might change the app name to something like “Speak and Navigate”, “Speak and Drive” or similar.

Other than that I’m quite lost. I suck at marketing.

Do you have an idea?

I would really love to hear your ideas about what can/should be done. Please leave a comment below, I read and answer every single one, always.

You can download it for free with one of these app promo codes:

(1 2 3 4 5 6 7 8 9 10)

27 April 2013
Remote control your iOS app

If you’re in the business of developing iPhone apps, you probably already  know that app version upgrades are a pain. Each app upgrade must go through Apple’s app review process which takes 5-14 days.

That’s the reason why I always add remote configuration to my Apps. I call it a “Remote control” for apps.

Remote Control for apps

What I do is include a JSON file as my configuration. It controls everything that can be configured: supported languages, number of items to show per page, colors to use, etc.

Once a day, the app connects to my servers and pulls a new version of that configuration JSON file. This way, I control the configuration from my server. I can change my app behavior whenever I want.

This is how it saved me with Drive Mode, my latest iPhone app:

Drive Mode is an app that let’s you speak and control navigation apps with your voice. It supports various navigation apps. The integration with one of the apps, Navigon, was buggy and didn’t work. My super nice users sent me feedback about it and asked me to fix it.

Since it is all remotely-configured, I just had to change a string in my JSON file and upload it to my server and BOOM! Every user gets this update instantly.

I managed to fix the issue in one hour instead of 5-14 days.

I can also add support for new apps without having to submit a new app to the App Store. Now that’s a competitive advantage.

Do you want something like this for your app?

This is so simple to implement, so I wonder why it isn’t part of the iOS SDK (something like NSRemoteUserDefaults). I’m thinking about open sourcing this or maybe making a small (free) hosted service to handle this for everyone.

Let me know if you’re interested.

12 April 2013
My [disappointing] experience with AppLaunch.us

I used the services of AppLaunch.us exactly twice: for the first time and the last time.

I first heard about AppLaunch from the popular weekly newsletter curated by Dave Verwer (@daveverwer), the iOS Dev Weekly.

It was a sponsored item and as I truly respect Dave’s work, I concluded that AppLaunch.us could help me market Drive Mode, my latest iPhone app.

AppLaunch.us is a tool for easily getting your app to the press. I decided to try their most basic package costing $55 and see how it works.

I filled all the information about my app, payed and got a confirmation email telling me that my submission arrived successfully. They also said I can contact them with what ever questions I had.

After 4 days of hearing nothing, I contacted them to ask what is the roadmap for the campaign. I was never answered. Three days later I got a generic email stating that my campaign started. On that day I got 7 more identical emails saying that my press-kit was downloaded by a review site.

I waited a few days to see if a review site will contact me, or post anything about the app, but nothing happened. It’s okay, maybe the app wasn’t interesting enough.

I tried contacting AppLaunch.us asking about the state of the campaign and exploring what else could I do. It was never answered.

I logged in to their website, but there was no info for my account, just stating that the campaign is in “Preparing campaign” state.

After a few more days, I tried contacting them again. Guess what? They never answered it as well.

It was now 3 contact attempts and 0 answers.

After about two weeks, AppLaunch.us website had been redesigned and now the account page shows statistics about the campaign. Here it is:

  • 140 Reviewers have read the launch email
  • 6 Reviewers have viewed the press release
  • 13 Reviewers have downloaded your Press Kit
  • 0 Reviewers have requested a promo code

Pretty much a campaign failure, but this is not their fault.

I did however try to find one developer saying AppLaunch.us did work for him, but I couldn’t find anyone. Finding people saying it didn’t work for them was much easier.

As Apple would say it: It just doesn’t work.

On my own

Okay. Anyone can send an email pitching an app to the press, right? That’s exactly what I did.

The results:

  • 21 email sent
  • 4 reviews posted

So without “press connections” and reputation I got more reviews than a service that “specializes” in this operation.

My suggestion: Do not use AppLaunch.us! Do it on your own.

16 March 2013
The part-time indie developer

I’m a “Full-time software developer” for a startup company. I wake up everyday and drive to work where they pay me to work on my hobby. I develop iOS and web applications that lots of people use everyday. It’s a great job and I consider myself to be very fortunate.

When my work day ends, I go home and become a “Part-time indie developer”.

So what is a “Part-time indie developer”? I’m not totally sure myself as I just came up with this title a few minutes ago. Basically, if you’re working alone on $0 budget side-projects in your free time then you are one. I am one.

Read More