One of my two applications -- the free version without the new forward -- was accepted and published by the App Store after several months of rejection. I like to think of this as a victory even though the charity version with the new forward was rejected again about the same time. The only difference was an extra block of text. It wasn't even HTML -- just ASCII. Somehow the bouncers patrolling the velvet rope decided that one twin with slightly shaggier hair couldn't join the other at the bar.
[ If not the iPhone, then what? See "How to choose a mobile development platform ," "A developer's-eye view of smartphone platforms ," and "The cross-platform option: Web apps for smartphones ." ]
There are other problems. If I were distributing the software, I could communicate directly with the customer. The bug reports would come to me. There would be a direct link. Apple, though, controls all of the interaction. Users' complaints show up only in the product reviews. There's a URL for support listed in the store, but Apple owns the customers.
So I guessed a bit, duplicated some of the users' problems, and rushed out a bug fix. There was no need to scramble, though, because the App Store team took about two weeks to approve the dozen or so new lines of code I had added to my application. What was the holdup? Who knows, but users continued to be frustrated, and I couldn't get the new code to them even if I knew who they were. Other developers report the same problems  trying to fix bugs.
Even when you seem to be home free, you're not. Two months after the first acceptance and several weeks after approving version 1.0.2, the mysterious masters of secrecy decided there was something very bad in the code. The App Store rejected the app anew. Where it stands now, I don't know.
New and New Again
The bottleneck in the approval process is amplified by a weird structural effect the App Store shares with Craigslist. The newest apps get the most play on the front pages of the App Store, so everyone has an incentive to upload a new version as often as possible. It's pretty clear that the iPhone users spend much of their browsing time on the list of the newest applications; getting a new version approved leads to a burst of sales. (Forget about the thesis of "The Long Tail.") Craigslist doesn't bother filtering, but the App Store does, and this just means more work for the bouncers at the door. Everyone is frantically trying to get reapproved, so the workload is endless.
Some developers suggest that the reviewers are delaying approvals to reduce the effects of this clamoring for attention. That is consistent with the way that I often got a rejection notice almost exactly one week after I submit the app. My personal conspiracy theory is the approval team is rated on statistics, such as how many applications are processed within a week of being submitted. But maybe it's something else. We get to know about Dick Cheney's plans at the CIA, but some secrets are better protected.
I would feel better about the App Store's decisions if they were understandable and predictable when they finally arrived, but they seem capricious and often outright wrong. Some of the rejection letters claimed I was misusing the UIWebView. They cited section 3.3.1 of the agreement: "Applications may only use Published APIs in the manner prescribed by Apple and must not use or call any unpublished or private APIs."
My app just dumped pure HTML in the UIWebView. When I wrote back and showed examples from Apple's documentation that used the APIs in exactly the same way, I heard nothing. Apple didn't "think different" when it created its customer service team for the iPhone developer. The company just borrowed standard operating procedure from the worst bureaucracies in the world (say, the DMV from Soviet-era Russia). Then it put the process behind an e-mail wall, giving the whimsical fascists the ability to operate without any contact with their cat toys. At least the old Soviet-era bureaucrats in "The Lives of Others" had to watch the effects of their games.
You might think that Apple would welcome a toolkit like PhoneGap because such an open source project can reduce a lot of the common bugs that developers encounter at the beginning -- but that's not the experience of many. While Apple doesn't explicitly forbid the use of PhoneGap, it's clear they reject many -- but not all -- projects that use it. Many PhoneGap users report they received the same text in their rejection letters as I did: PhoneGap is an "external framework" and those are forbidden.
Some PhoneGap developers have had some success, and they've shared this with others. The men and women behind the curtain only look at the linking tables to see the names of the objects. So someone wrote a Python script that would replace the word "PhoneGap" with your own made-up package name. Voilà -- it often works.
But make sure you delete words like "gap" from your HTML too because Apple's powerful anti-PhoneGap tool (grep) can sniff them out. When I fixed my code to get rid of the external framework, I inadvertently left in an HTML page with a thank you message to the PhoneGap team. Oops. That file was soon flagged. So I deleted the thank you note and settled down for another few weeks of waiting.
The latest twist is that my application is again rejected (a few weeks after it was approved) because PhoneGap is now officially forbidden. There is hope, though, because Apple says it is in communication with the PhoneGap organizers at Nitobi. When I checked with the folks at Nitobi, they told me that PhoneGap is 100 percent in compliance and they're working on educating Apple. But Apple has told them little except to pay attention to the rules.
Through all of this, I received little guidance from Apple. Whenever I sent in a question asking how long the review would take, I would get back a polite but worthless e-mail saying that every "app submitted to Apple has different capabilities, features, and complexity, which means that individual review times vary. Once the application review process has been completed, you will receive an e-mail notification."