Cut the Drama: Private APIs, the App Store & You

I’ve had a rant building up for a few weeks. A rant about developer’s treatment at the hands of the App Store submission procedure. However unlike many rants on the topic, mine is not directed towards Apple (s aapl). It is directed towards the iPhone developers who complain about the poor, unfair treatment they get, carrying their bleeding hearts in their palms while claiming Apple is bludgeoning the life out of them.

Two recent news headlines, seemingly separate, are intrinsically tied together and the synergy of them have made my eyes dislocated from the continued rolling they involuntarily perform.

The first headline, Facebook Developer Turns Back on iPhone relates how another high-profile developer has thrown their hands up in disgust over how Apple’s closed system runs against their principles. A direct quote from Joe Hewitt, developer of the popular Facebook application can be found on TechCrunch, and is most relevant. I will come back to this later:

I respect their right to manage their platform however they want, however I am philosophically opposed to the existence of their review process.

The second headline is Apple’s App Store Approval Process Now Includes an Automated Layer. The quick version is that Apple is now using an automated tool to determine if the Apps that developers submit to the App Store are using any Private API calls.

These two headlines are actually the same story, a fact that was made quite apparent by a popular direct iPhone-to-iPhone messaging App called Ping!. On Ping!’s Facebook Page, the developer announced that the much-anticipated version 1.2 of Ping! has been rejected by Apple:

Bad news is Ping! 1.2 has been rejected by Apple on Nov 14 due to a software library we used, developed by the Facebook company. This library is used by many apps including Ping! and the iPhone Facebook app itself. Unfortunately the most recent version of this library has violated some of Apple’s guidelines and  has caused hundreds of apps to get rejected including Ping! 1.2.

So let’s get this straight. Ping! and hundreds of apps have been rejected because they used a popular development framework, a framework which used Private APIs. A framework, which was created by Joe Hewitt initially for use with the Facebook application and then made available to third-party developers.

Lets be clear about this; Joe Hewitt used Private APIs in his public framework, well-known to be against the rules of the App Store, and then acts all indigent when Apple slaps his framework down. Rather than disclosing his error, rather than saying “oops sorry about that,” he would rather ride the trendy wave of ‘blame Apple control policy’ and cite ‘philosophical differences.’ I rather wonder if these philosophical differences would still be present if his framework hadn’t been caught in this automated tool. If it were just other people’s frameworks that were caught, would he still have quit for ideological reasons?

Now I don’t mean to pick solely on Mr Hewitt, and maybe I’m being too harsh. But he is just the latest example in a blogosphere that increasingly seems to love taking the loud minority and say “Look! Here’s proof that the end is nigh!” Come on, the end isn’t nigh, it’s not even on the horizon. Out of the thousands of App Developers that exist, we’ve had a dozen, maybe two dozen make a public fuss and quit. Big deal! This is the real world; businesses start, some succeed and some can’t hack the brutal reality. Those just make excuses and quit. Just like everywhere else in the business world.

To summarize the full story that I see, it goes something like this:

  • Apple publishes the rules for making iPhone Apps, including publishing and documenting the specific APIs which developers are allowed to use.
  • Some developers ignore these rules and make use of Private APIs. Some Apps get through the cracks in the newly functioning App Store review procedures.
  • Apple starts to crack down on private API usage. Developers who get rejected due to Private API use cry foul “Why are WE rejected but THOSE apps are allowed?” This was a fair question.
  • In response Apple says “They shouldn’t have been allowed, we are working on a way to fill up the cracks in the system”
  • Apple then goes ahead and fill the cracks with an automated (and thus unbiased) system to test of private API usage.
  • Developers then cry foul, “It’s not fair, you’re a bully, it’s too hard.”

Cry me a river….

Before I get off my soap box, I’d like to add that there are times and places for Private API use. As a professional software developer working on proprietary custom embedded solutions on Windows Mobile devices for specific customers, I freely admit to using Private API calls at times. Sometimes its necessary to get a specific job done. The difference is scope and control. Our clients deploy the software under our care and guidance, with specific OS and hardware requirements. If they change devices or operating systems, we know about it well in advance and can prepare for it accordingly. Our clients don’t just upgrade the OS and expect everything to work.

The consumer market is a completely different kettle of fish, customers upgrade willy-nilly  and expect things to just work, especially things related to Apple products. Private APIs are private for a reason, because they can not be relied upon to behave from one OS release to the next. This means that applications will break and the consumers, you and me, lose out.

In the brutal competition of any market place, and indeed the world in general, the strong will survive and the weak will perish. The App Store is no different and I’m constantly dumb-founded as to why some people expect it to be so.