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.


Franz said...

I can understand your frustration at people using your service without paying for it and do also agree with the measures taken. Nevertheless, I use a jailbreaked iPhone myself and cannot think of abandoning apps like SBSettings which are based on the now incompatible MobileSubstrate.

Having spent 79 cents on your app it is not the loss of money that bothers me, but the impossibility of using your really great service. I miss it.

Therefore I would very much appreciate it if you found another way of preventing the abuse of your service.

Andreas Fink said...

SBSettings is just the kind of app which will screw up your iphone. Maybe not today but tomorrow when Apple releases new system calls as part of the next SDK. Apple always makes sure that apps compiled with SDK version X run on phones with SDK version Y properly by migrating things, giving developer warnings at compile time etc. Global.AQ is compiled for SDK 3.1.3 but maintains compatibility with SDK 3.0 If tomorrow SDK 4.0 comes out, apple will make sure most of the old apps will run on it while giving new apps new functionality. MobileSubstrate and SBSettings now sits in the middle and fiddles around things and breaks the chain. So the App will believe the system will provide 4.0 features but the middle man has no clue of 4.0 features as it was made for 3.0. This leads to many crashes and lots of support issues. 90% of our support questions where such problems. And we where never able to reproduce them because our phones didn't had those customisations things installed. Furthermore, I'm not sure the next iPhone will be jailbreakable again so you should get used to live without SBSettings.