The reviewers will often attempt to justify the rejection as the app fails to meet Apple's Human Interface Guidelines (HIG). These guides are published in a PDF document freely available on Apple's developer website. My main complaint is what the review states in reference to a HIG violation is often not even found in the HIG.
For example, I recently received a rejection email from Apple for an update to my app "The Gavel".
First, let me explain what my app does. It displays an image of a gavel and lets the user shake the phone to move the gavel on the screen. When the gavel hits the edge of the screen, it plays a sound simulating an actual gavel. This version of the app is already in the store. Also, to clarify, there are 9 other objects simulated in the app, each with a unqiue sound effect. (If you are interested, you can see the app in the iTunes store here.)
Now, my latest update to the app included random effects that might occur. There's a random chance you might crack the screen of the phone (and a crack is randomly drawn on the screen). There's also a random chance that an object might break and the graphics and sound effect update to reflect the broken item. None of the random breakage is permanent. If you scroll to a new object, the broken item is automatically repaired, and any crack simulated on the screen goes away after 20 seconds and (of course) goes away if you exit the app.
Best I can determine from Apple's email is they don't like the fact that I simulated a cracked screen. Based on their email, Apple's reason for rejection is my app "uses standard iPhone screen images in a non-standard way, potentially resulting in user confusion." They go on to elaborate that "simulating failures of those graphics, actions, or images is a violation of the iPhone Developer Program agreement which requires applications to abide by the Human Interface Guidelines." There is nothing in the HIG that says this. Yes, the HIG says you should only use buttons and icons to represent actions that are standard for whatever that button might be. For example, you shouldn't use the standard supplied Trashcan icon to send an email message.
But, in my case, I'm not changing the behavior of any graphics. I'm not even altering any of Apple's standard screen images. I am overlaying the whole screen with a bitmap image that looks like a crack, but the behavior of the phone and the underlying graphic images are unchanged. Everything still works.
And, to quote from the HIG:
An immersive application tends to hide much of the device’s user interface, replacing it with a custom user interface that strengthens the user’s sense of entering the world of the application. Users expect seeking and discovery to be part of the experience of an immersive application, so the use of nonstandard controls is often appropriate.
In the app update description I clearly state that new random events were added to the app and that none of the simulated damage is permanent. I even use the phrase "Don't panic" to make it clear this is all just part of the fun of the app.
Perhaps I'm missing the key passage in the HIG that says "simulating failures of those graphics, actions, or images is a violation of the iPhone Developer Program agreement". I've double-checked my copy of both the HIG and the SDK agreement and can't find where they mention this.
It's difficult and extremely frustrating for a developer to try to produce software under these conditions. You must first spend the time developing a piece of software and not until you are finished will you know whether Apple will accept it. Granted, the programming for "The Gavel" is not rocket science programming. Thankfully, it's a pretty basic app so I didn't lose too much time. But, the point is, I've lost some time and that's the risk you run developing apps for the iTunes store.
Right now, I'm leery of committing any serious amount of time towards developing an app when I have no idea whether it might be rejected in the end by Apple.
After having successfully submitted over 30 apps to Apple, I have seen my share of rejections for various nit picky reasons. At this point it's getting tempting to just bail on the whole idea of working through such a frustrating approval process.
In case you are curious, here are some screenshots demonstrating the offensive material in my app: