The Mental Blog
The Mental Blog
2009
Mental Case for iPhone has just been rejected from the App Store for using an undocumented method call. Mental Case has been calling the method since it first appeared in the App Store more than a year ago.
Some of you might find this surprising, but it didn’t come as a surprise to me, because the developer community has been awash with discussion over the last few weeks about a new tool Apple are using — a static analyzer — that helps them locate inappropriate use of their APIs. (I actually wouldn’t be surprised if the tool was actually a dynamic analyzer, perhaps based on DTrace, but that is another post...)
Two weeks ago, I fixed some fairly significant bugs in Mental Case, and submitted to the App Store review process. I was hoping my use of the undocumented method didn’t constitute a serious transgression, and that it might slip by. No such luck.
So what is that private method that is being called? It is a method called setOrientation, and it is used in Mental Case to ensure that if you are studying in landscape mode, the interface turns around to portrait mode when you exit the slideshow.
The problem now is this: How to proceed? Obviously I have to remove the private call. There are 3 options that I can see, none of which are attractive:
1)Leave the bugs in, and don’t upgrade the app.
2)Redo the whole interface so that it works in both landscape and portrait modes.
3)Remove landscape mode in study slideshows.
Obviously, (2) is the best solution, but I don’t have time to tackle it at this point, so it seems (1) is then my best option for the short term. In other words dear user, suck it! Apple have just made you swallow those bugs because I have no means of updating the app in any meaningful way.
This ‘App Store limbo’ is actually a new phenomenon. We have always had apps waiting endlessly in review queues to make their first appearance in the store, but I don’t think any Apple procedural change has ever cut off existing apps from updates. This change will affect a lot of developers, and — more importantly — users.
I should clarify that I am not opposed to a ban on calling private methods, which is actually quite reasonable, but I am opposed to the way Apple has handled this. Firstly, the problem is actually not that they can now detect use of private APIs, it was that they couldn’t do it to begin with. If Mental Case was rejected initially for this reason, you would all be happily viewing slideshows right now...in portrait mode.
Having come up with a means of detecting transgressions of the rule, Apple then began using it with no warning to developers. As a developer, you might expect that an app that was accepted last week would also be accepted this week, and that is no longer the case.
The very least you might expect in such circumstances is a warning that things are going to change. They must have known a large number of apps would be affected, and yet gave no warning. A hint or warning a few months in advance could have saved everyone a lot of trouble.
The last few months have seen some big name developers leave the iPhone because of the App Store review process. The Mental Faculty is not about to do that, but let’s just say we now prefer developing for the Mac, and that is where our attention is mostly focussed.
From our perspective, the App Store review process offers no benefit whatsoever for developers, users, or even Apple. Yes, the reviewers occasionally find a genuine bug, but the review process itself prevents bugs they missed from being fixed for weeks or months. I assume Apple persist with this madness because its lawyers are recommending it. In my view, there can be no other sane reason.
APP STORE LIMBO
19/11/09
The static analysis that has been introduced by Apple to identify the use of private APIs in the App Store review process has led to a new phenomenon: App Store limbo.
Photo by yeowatzup - http://flic.kr/p/5syggM