Developing for the iPhone – Part 2, App Store Drama
Many of you may have heard rumors of the strict app submission process by Apple, but I personally did not believe it to be true. In submitting the Omniprise iPhone App, we had to resubmit binaries three times until we got it right. On top of that, we started the submission process during what seemed to be a busy time—we had to wait 1-2 weeks between submissions. This may have been due to the Thanksgiving break, or could also have been due to it being our first App.
Try #1 – In our original submission, we had turned on the UIFileSharingEnabled feature for our App. It allows you to drag and drop files from iTunes to be stored in your App’s folder for use on the phone. We were mainly using this for developers at our office to use to enable some extended features (an ability to quickly switch between Omniprise servers). It turns out, that Apple does not allow you to enable this feature unless your App exposes file operations to use/delete these files from within the App. This makes some sense to tell you the truth, but I think dragging and dropping of files should be enabled by the iPhone OS in general.
Try #2 – For this submission, all we did was basically turn off UIFileSharingEnabled. After a week or so of waiting, Apple comes back with an email saying they were unable to login to Omniprise with our App. Of course, I quickly tested Omniprise with my 3GS and no problems at all. So we sent a reply having them test Omniprise with Safari; they were able to get it to work in Safari, but not our App.
It turns out the culprit was a trick that we carried over from C# development on Windows:
WebRequest.DefaultWebProxy = null;
The above line of code speeds up the first web request on Windows in a .Net application by around 1-3 seconds. We find this to be extremely beneficial on Windows, especially if the program only makes one request in its lifetime. Of course, this also would cause the application to not work in environments that require a proxy server to reach the internet. So for Omniprise Apps on Windows, we simply have a setting to turn it off if we ever run into trouble.
We try to reuse as much code as possible, so much of our Omniprise API interaction is cross-compiled for standard .Net, .Net CF, and MonoTouch. In standard iPhone usage this would never be a problem since an iPhone user would not have their internet traffic forced through a proxy server. We tested on 3G, Edge, and standard Wifi all with no problems. But apparently Apple has a strange testing environment—one with a proxy. Luckily, removing the above code does not cause the 1-3 second delay that you would experience on Windows.
Try #3 – We removed the code disabling proxy servers, and after another week or so, finally got approved.
So the App store process, in short:
• Build a binary and upload it to iTunes connect
• Wait 1-2 weeks for your binary to be reviewed
• Apple rejects your app based on some minor detail… rinse and repeat
If you would like to check out our App on iTunes, check out: Omniprise