Thursday, May 27, 2010

No more MobileSubstrate

My company operates SMS deliver solutions for the massmarket. As part of that it has access to low priced SMS delivery around the Globe. Compared to end user prices its a real bargain. In 2009, we decided to start to offer this to iPhone and iPod Touch users so they can send and also receive SMS at much lower rates than going through their traditional operators. Global.AQ was born.

In its current release it supports sending and receiving SMS. And by receiving I mean receiving from most GSM operators around the world. It also supports free SMS between Global.AQ users.

It seemed to be that we where very successful with this idea. We have over 250'000 subscribers after less than a year of launch. So we should be making a hell of a lot of money and be in the top rankings but we aren't. AppStore shows we have sold the app 185'000 times (this includes the free Lite version). So how comes the difference of 35%? One reason is because people purchase the application once but use it on two devices. That's a legitimate use but it still doesn't explain that much of a difference.

The reason are the jailbreakers. Now I'm not going to rant about jailbreaking. If you want to do it to experiment with your phone, fine. But don't come back whining if you screw up your phone. Happens many many times. When we developed Global.AQ initially we even made sure that jailbroken iPhone users can use Global.AQ in all cases and spent a lot of testing on it. However we did get strange support cases which we had to scratch our head on.

Some examples of what we encountered:

- Login crashes due to the fact that a language setting came back nil. This should never happen as there's always a language configured. I could never figure out how to get into such a situation but it happened to quite some customers. The fix was one line of code. It only happened on jailbroken phones or phones which where updated from a jailbroken to a non jailbroken phone. Never to new phones.

- People complained they couldn't purchase SMS but instead get an error saying something about "sandbox". In fact the in-app-purchase was believing it was running in developer testing mode and failed to work. This was caused by AppSync. AppSync patches MobileInstallation file on iPhone OS 3.x which is needed in order to install .ipa files manually without using iTunes.

- Push notification didn't work because of the certificate being destroyed due to the hacktivation. We made a popup explaining this at start but people still complained about it.

And many other simple crashes which we where always blamed off even though it was simply the phone's software crashing. This was in 90% of the cases due to MobileSubstrate a library which allows tools to redirect system calls and mess with all kinds of things. We have seen screenshots from customers with fonts being replaced, colors being wild etc. If you mess with such things on a system call level, you should not be surprised with frequent crashes, especially not if Apps and the iPhone OS are being updated with new system calls but the tools who patch them are only supported older outdated calls.

Anyway. Be it as it is, jailbreaking per-se is not the problem. Its what people do after that. Install all kind of old crap which modifies about everything but is totally unsupported. So I was feeling like Don Quichote fighting against windmills. You can never predict what people install next.

So the solution was: we can't fix your iPhone if you mess with it.

Anyway, coming back to the discrepancy of subscriptions versus sales. During our research for crashes, we figured out that a lot of users where using a cracked version of Global.AQ. Now out of 100% of users, about 10% have jailbroken iPhones. This would mean a whooping 25% where pirating our software? If you read this you will realize that it can't be true. 25% is too much.
The reason is a different one. Its UDID Faker. This is a tool which allows you to change your iPhone's unique device identity number (UDID). There where people out there who downloaded Global.AQ (cracked or purchased), used up the included SMS and instead of buying additional credits, just made our system fool this is a new device it has never seen before by presenting a new UDID with the help of UDID Faker. Result: a new signup shows up in our log on a magically new device.

My original intention towards pirated apps was like: Let it be. it will make our app popular and it will advertise. When people like it, they will buy it. And the ones who won't buy, they wouldn't buy anyway so the loss is none. But with Global.AQ there's a slight difference. Global.AQ is a piece of software and a service. If someone pirates the software, so be it. I have better things to do than chasing them. But we provide a service. And the service is not free to us. By people presenting a new device every time, they where creating real costs on our end. And those costs had reached the 6 digit euro figures. This is a hell of a lot of cash out of the window for our small company.

So we had to do something about it.
Here's what we did
a) we made sure our server was detecting tampering with the UDID properly log and block it.
b) we took the old version off the store. This means whom ever tried to sign up after that date was using UDID Fixer to get around paying as legitimate users would simply use their existing account if they reinstall Global.AQ. After about a month, we had 18'000 e-mail addresses from users who tried to sign up after the application was taken of the store. So there it was our difference! We have seen people who had signed up over 100 times in the past.
c) we released a new version with iPad support which doesn't run on jailbroken iPads and doesn't run on jailbroken iPhones/iPodTouch's which have MobileSubstrate installed.

The result of this is stunning. We have zero crash reports at Apple now. No more weird crashes (well some where our own faults). No more sandbox errors. Our daily new signup rate went down from around 500 users per day to about 50 per dayon the day we blocked new signups for pirated versions. Our sales figures where however stable.We got tons of bad reviews because of MobileSubstrate not working on the lite version (which is free). But we got good reviews for the Pro version which is paying.

What does it tell us?

1. Whatever you do to make jailbreakers happy, they will still rant. You give them free SMS as a promotion, they want more. If you take away free SMS they will be mad at you. Whatever gift you gave them, it will never be enough. They don't value your work. Otherwise they would not pirate your software. Nobody can tell me they can't afford the 1.99$/1.59€ of the standard version.

2. Legitimate users who paid for the software and got the service are happy. You offer them new features, they clap their hands. They buy more from you. They fill your bank account at the end of the day.

Now as a developer, for which of the two customer groups is it more fun to develop? What will pay off more in the long term? You can bet, it will be 2. Even we now have 10% of the new customers per day compared to before, those 10% represent 100% of the financial earnings. So thats what we are concentrating on.

This experience has shown us that kicking out MobileSubstrate is the right thing to do.
I was very close to even close down jailbreakers totally. But some users have no other choice than to jailbreak to get rid of the sim lock or network lock. That's why we left it in for the iPhone but not for the iPad.

Conclusion: It pays off to not run on jailbroken iPhones with MobileSubstrate. It will give you the ride of the lifetime as your reviews go to hell but at the end of the day, you will not loose anything. You gain more time as you need to spend less time on support. Your customers will be more happy. YOU will be more happy.

Same product, same vendor, different price?

Today I was trying out the Genius feature of iTunes. It was proposing me a song from YES which I have bought and even somewhere have the vinyl version of. But it was playing an extended version. So I searched for the standard version which was not in my iTunes library. So I searched for it in iTunes Store. And guess what, you can buy it multiple times at different prices. No I'm not talking about the expanded edition. I'm talking about exactly the same song from exactly the same album. Once at Fr. 1.60 and once at Fr. 2.20. Weird.

Now if you look at the two albums:

You can see that one Album has 9 songs of Fr. 2.20 each but the album all together costs Fr. 13.
And the other album has 9 songs of Fr. 1.60 each but the album all together costs Fr. 14.40 which is exactly the same as 9 x Fr. 1.60

How can the same product from the same shop be sold at two different prices??

Wednesday, May 12, 2010

The iPad 3G and WiFi hotspots

Imagine you have a brand new iPad 3G and you are running around airports. Gladly there's WiFi everywhere so you don't have to pay expensive 3G roaming data. Your mobile operator even offers you some WiFi minutes included. So you go and put a dedicated data sim card in your iPad 3G which has corresponding WiFi hotspot options included. Sounds great. In theory yes.

Now what happens. You end up on your favorite airport and you log on to the WiFi. Well to authorize yourself to the WiFi you have to key in your mobile number and you receive an SMS as verification code. But wait, where does it end up on your iPad's sim card? According to delivery reports, the SMS gets send, billed and accepted on the iPad but there's no way to see it. Bummer.

Ok then you take out the SIM card, put it temporarly into your iPhone and authorize that way? Ehm, the iPad has microsim's. If you put it into your larger iPhone slot, you risk of loosing it somewhere inside the case and never get it out. Fail.

Ok then you authorize using your iPhone's built-in sim card. Works, but then your iPhone sim card get's charged instead of the one from the iPad which you just added the "big huge data subscription".

In my case, I had to use my iPhone' sim card already for 400MB abroad last month and that's the biggest subscription you can get. So I wanted to have this solved and called Orange Switzerland. And guess what, their techies where able to solve the issue by allocating a fixed password. Bravo for their flexibility!