iBooks’ use of tons1 of private APIs is frustrating on a few levels, the biggest that it makes all third-party reading-related apps second-class citizens.
I won’t be able to offer some features that iBooks has (such as a true brightness control), but my customers will expect them, making my app inferior to Apple’s in key areas.
This app’s undocumented API use wouldn’t pass the App Store submission process, yet developers need to compete with it for App Store attention. One of the great potential failures of an app-review system is inconsistent or unfair enforcement of the rules.
Apple’s specially privileged, private-framework-using iPhone apps were relatively few, but their first-party area of influence on the iPad has just spread to e-readers, word processors, spreadsheets, and presentation tools: four major markets in which competitors may be at a severe disadvantage by not being able to do the same things as Apple’s alternatives if Apple chooses to play this card there.2
This has been problematic in our industry before, and we’re going to start seeing the same arguments against Apple — rightfully so — as they move into more application markets if they choose to exert unfair advantages.
That’s not the kind of development or software-market environment I want to see, as it would be a waste of a great platform and great potential. Ideally, Apple should only publish first-party App Store apps that would be approved if they were submitted by a third party, and they should therefore use no undocumented or prohibited APIs.
I don’t think Apple would ever implement such a policy for all first-party App Store apps, but I’d love to be proven wrong.
I’ve heard from numerous people that the teams producing Pages, Keynote, and Numbers made a point of not using any private APIs. If so, this is commendable. I haven’t yet used any of those apps long enough to spot any telltale signs to the contrary, whereas in iBooks, they’re very obvious. And, unfortunately, iBooks is the app whose feature-parity unreachability will be the biggest problem for me. ↩