Things have been busy over the past few days, which is the reason why I haven’t had a chance to post about this until now. But for the PhoneGap community, I have some good news and some bad news. First, the good news: I got a phone call from the Apple app reviewer that was reviewing my test app. And before I go any further, I want to say a few things.
When I crafted my original letter to Apple, I was very cautious how I wrote it, because I don’t want to give anyone the wrong impression. I don’t have any problems with Apple or the fact that they have an app review process. I actually think the strict regulations Apple has with its review process is a good thing for users. If left to their own devices, app developers would release anything and everything whether it had merit or not, in the hopes of earning even a tiny bit of a buck.
That’s not to say that I have nothing but a big warm and fuzzy feeling for the review process, just that it’s like going to the dentist. It’s painful, but you’ll thank them later in life when your teeth would otherwise be falling out – or, in the case of the App Store review process, when the app store would otherwise be overrun with endless seas of buggy and non-functional crap.
Most developers out there seem to vilify the app reviewers, making them out to be legions of sadistic bureaucrats who like nothing more than to waste developer’s time. I’ve never been comfortable with that, because people simply don’t work that way. The app reviewers don’t have an easy job. They’re not developers, they don’t know how to write apps, they just review them to ensure they meet the guidelines Apple sets forth.
So when they reject your app, it’s not because they’re out to get you, they’re just enforcing policy. If they make some assumption about your app, perhaps you’re not giving enough information to help them along? There’s a comments field that you can use to help the reviewer of your app do their job, instead of throwing an app over the fence and saying “Here, take that”. They don’t owe you anything, and are simply making sure that they cover their asses. Could you imagine how bad it looked on the guy who reviewed the “Shaking Baby” app? I’m not sure if he lost his job, or just got seriously reprimanded, but this is the sort of thing these guys are trying to prevent. But because of the black-box nature of the whole process, it’s easy to jump to conclusions.
Finally, before I dig into the meat of my conversation with my App Store app reviewer, I want to point out a few things that many developers seem to have forgotten in their haste to get their apps released:
- app store is a voluntary process; you don’t want to play by their rules, you don’t have to.
- developers signed an agreement that states Apple can choose to reject any apps they want based on their own reasons. There’s no human right’s violations committed when Apple decides that your app isn’t fit for the store for some reason.
- is a business, whose goals are to advance their stock and market position for their investors. While some of Apple’s decisions may seem confusing from outside the black box, keep in mind that they are prone to keeping secrets until they throw down their big announcements at whatever annual conference they’re attending. So there are sometimes more reasons why they wouldn’t want some feature leveraged by app developers if they plan to do something much the same themselves. Is it fair? No. Is this what they’re doing? I have no idea, this is speculation on my part.
Now that I have that out of the way, I’d like to relate to you my conversation with Steve from the App Store.
My test app, aCookie Fortunes, was released to the app store ages ago, back when I was still learning how to use PhoneGap (and before I even started to extend and improve it). It is full of bugs, and is badly in need of an update. I made my PhoneGap improvements, and subsequently made a bug fix release. At that point, it sat in Apple’s queue since March 18th. I sent a few emails asking where things were with it, but never got anything more than the boilerplate responses.
So I suppose the app store reviewers were just chewing through their back-log of apps. They’re basically a support department, and they do the best they can. So when Steve got around to my app, he looked at the notes, saw the words “PhoneGap” in it, and was about to click the reject button. But since it had been sitting in the queue for so long, he thought he’d do the right thing and picked up the phone to call me.
Let me pause here for dramatic effect. This is awesome customer service, in my books. He certainly didn’t have to do this, and it shows great initiative on his part, as well as wonderful diligence. All he had to do was click “Reject”, and carry on with his day. It’s so easy in this day and age to dehumanize the person on the other end of the computer screen. To some people I was an entry in a FileMaker-Pro database. Instead of treating me like a number, he called me on my cell.
I was at work at the time, but took the call anyway – hey, this was big news, and I’d been waiting for over 3 months. Over an hour later (1:15 to be exact) I quickly sent out a message to Twitter and got back to work. We’d covered a lot of ground in that conversation, but what it basically boils down to is this:
Apple has an unfounded hate-on for PhoneGap. Most likely their misconceptions are based on early releases of PhoneGap, and they haven’t taken a second look since then. Perhaps a few bad-apples ruined it for the rest of us (pun totally intended). But these impressions are difficult to change.
Steve and I went through the list of every problem PhoneGap was perceived to have, and went through every single point of every single one of the Apple app guidelines that were listed as things that PhoneGap violated. It took a long time, but he would read out each problem, and I would explain to him why they were just flat out wrong. Some of the problems included the misconception that we were linking to and including a custom-compiled version of WebKit, that we had our own code interpreter built-in, and that we were using private and unpublished APIs on the phone.
I pointed Steve at my Github source, at my blog, and at the PhoneGap mailing list. He’s of course busy with his job too, so he didn’t have the time to read through the glut of articles that have been posted everywhere, but I did mention that I’d issued [an open letter to Apple] regarding this, and that it had been picked up by a number of sites around the ‘web.
He asked if there was a way to write my app using something other than PhoneGap, so I could just get it released easier. Certainly, there are alternatives, and since it’s just code, anything is possible. But after explaining to him that the goal of PhoneGap is to write cross-platform apps in a Rapid Application Development fashion, there’s little to no point in creating some of these apps in the traditional way.
And largely, my persistence in this matter is more than for my own benefit. I’m trying to help out the community at large, and want to make sure that all the PhoneGap developers can use it to build great apps, and not have to worry (any more than usual) about Apple rejecting their apps.
So Steve and I came to an arrangement. He’d agreed to do his best to work with his superiors to try and reverse their impression of PhoneGap, or at the very least evaluate each PhoneGap-based app on its own merits. I have no problems with Apple rejecting a crappy PhoneGap app, nor do I have a problem with Apple permanently banning a developer from the App Store if they try and do something subversive, like change the behaviour of an app remotely after an app has been released to the store. But those are things that any developer can do, whether based on PhoneGap or not. And if Apple comes back with a list of things that are problems still, then we can fix them. As I put it, “I can can fix almost anything with it. I have a hammer, I just need to see where the nail is so I can hit it.”
I’ll post more about this later, after I talk with Steve next. I have a few experiments I’m going to run, and Steve will keep an eye on the apps I release over the next few weeks, to see what happens with them as the percolate through the app review process. He’ll also be filling me in later if he was able to make any progress with his superiors.
Before I finish up this post, I’d like to say a big thank you to Steve. If any of his supervisors are reading this, I want to let you know just how great he is. He treated me with courtesy, listened to my problems, and didn’t prejudge me or my app based on any preconceived notions about PhoneGap or app developers as a whole. He listened to what I had to say, and went above and beyond the call of duty to help me get my app released, and to help me in getting PhoneGap acceptable to the developer community at large. These are all things he didn’t have to do, and his day would undoubtedly have been easier had he just clicked the “Reject” button.
And in the end, he actually thanked me for being so friendly and willing to help him through getting my app released. Steve, right back at you, and I look forward to working with you again.