It seems as if a week doesn't pass without a new story of some app being rejected from Apple's iPhone App Store. Should developers really be surprised? Steve Jobs never wanted third-party developers tinkering with his platform in the first place -- he thought Safari-based Web apps would be enough. Little wonder, then, that when Apple launched the App Store in 2008, it was under strict conditions.
Still, it'd be nice for Apple to make those conditions clear. Apple has been tinkering with the language of its iPhone SDK license agreement lately, but that hasn't done much to clarify the rules -- unless you're Adobe. For everyone else, the App Store's requirements seem as vague and capricious as ever.
So let's try to tally the score. There's no guarantee that anyone's app will be accepted, but as near as I can tell, here are a few things you can do to get you booted off the App Store:
1. Write lousy code. To be fair, not every app deserves to be posted. Apps that crash -- at least often enough that they bomb on the App Store's screeners -- are deemed unfit for distribution. What's more, your app has to work as advertised. If it's missing features or if it springs unwanted surprises on the user, it's a safe bet it will be rejected. I think we can agree that's a good thing. It would be nice, though, if the rest of Apple's rules seemed as reasonable.
2. Duplicate Apple's software. The iPhone comes with a set of pre-installed software that provides basic functions, such as voice calling, SMS, email, MP3 playing, and Web browsing. Duplicate any of those and you're out, even -- or maybe especially -- if you improve on Apple's offerings. Just ask Google, or any of the various developers who came up with podcast software for the platform.
3. Get in the way. Apple expects its handsets to work a certain way, and if you interfere, you can expect your app to be rejected. That's why you can't sync your iPhone with iTunes over Wi-Fi, for example. It doesn't matter that people might want that capability; changing the way the iPhone normally does things is a no-no.
4. Execute interpreted code. This one has been discussed at length. It's why you can't get Flash or Java on your iPhone or iPad. It's also why you can't do fun things like emulating a Commodore 64 on your phone, and it's why iPhone users can't run RevMobile, a clone of Apple's long-lamented HyperCard software. Apple has offered various excuses why these things are verboten, but none holds much water.
5. Use too much bandwidth. AT&T likes to complain that dropped calls on its network are because iPhone users are gobbling up too much bandwidth. Apple is apparently listening; if your app is too network-centric, it's likely to be rejected. That's why Internet radio apps are off-limits (when they're not duplicating core iPhone functionality, that is).