- If your application is using webservices then before submitting the app to the app store make sure that the application is pointing towards the webservices in the production server and not the testing server.
- Delete the app from your device, turn off WiFi, off cellular data, now install and test app. Does it work properly (as much as it can without Internet)? Does it at least tell the user that a network connection is required (if it is) or does it crash?
- If you use CLLocationManager: Delete the app, fresh install and run, but do not allow app to have Location Data. Does the app behave well or does it crash? Does it at least tell the user that it can't run without location data (if that is a requirement)? Does it work on an iPod Touch that does all geo location using WiFi only?
- Run the app in the simulator and for each view controller do the following steps: (a) From the iPhone Simulator menu select "Hardware" --> "Simulate Memory Warning",
(b) now navigate around your app to other view controllers and see if everything is working.
(c) repeat test for another view controller.
- If you support older firmware (ie: iOS 3.1.3), install your app on a device running 3.1.3 and test it there (if you don't have one, use the 3.2 simulator).
- Accept a phone call while in your app, does it resign active and resume properly? Do sounds from your app stop playing while in the phone call?, Also you can test the application in the call mode in the simulator all you have to do is select the hardware menu from the iOS simulator and select Toggle in-Call Status Bar.
- Start your app while playing music, does the music continue to play? Do your sounds mix properly or fade the music appropriately?
- Test performance on a slower devices with limited RAM such as: iPhone 3G (128MB RAM, 412Mhz CPU) or iPod Touch (1st or 2nd gen).
- Run the Clang static analyzer and fix (or at least understand) every warning.
- Make sure NSZombiesEnabled is NO in the environment variables.
- Make sure that you remove all the crashes from the application as this may lead to rejection.
- Make sure that your app does not become slow due to memory leaks after using it for sometimes.
- Is all the functionality you describer in iTunes Connect available in the app and if not then get ready for the no signal from apple.
- Do not show price of your app inside the app.
- If your app contains some login stuff then add the demo login credentials in the review notes.
- If your app contains brand names, description or keywords of well known public figures or trademarks make sure you get them all cleared with the holders.
- Your app should not contain any media, code which is copyrighted by others. If so then you should contact the owner and get the approval from them.
- Do not use any private libraries which are prohibited by apple or any undocumented feature of the SDK.
- Have you followed all the steps of the Human Interface Guidelines (HIG).
- Trial versions of app are not supported make sure that our application is not a trial version.
- If your application makes use of any hardware unauthorized by apple then your app will be rejected.
- Your app should not contain a runtime plugins, or interpreted code layer.
- Turn off all the NSLog in the application.
- In case if a new version is introduced with the new design then in that case you have to change the screen shots of the application which was previously submitted to the app store with the new design interface of your application.
- In case you app is a medical app then you must fulfill any applicable regulatory requirements, including full compliance with all applicable laws, regulations, and policies related to the manufacturing, marketing, sale and distribution of Your Application in the United States, and in particular the requirements of the U.S. Food and Drug Administration ("FDA").
- If you are submitting a new version then in that case make sure that the bundle version of your application is greater than 1.0
Tips2Code: Many developers come across crashes which they are unable to locate then in that case i would suggest to run the application by selecting profile from the xcode menu which will enable the instruments and from the instruments list select the Zombies, which will give you exact details why your app is crashing.
- Avoid using loops for doing simple stuff.
- Make use of switch case in place of if..else
- Use core data and not sqlite for database coding as core data is way to simpler as compared to sqlite.
- JSON is a blessing in case of webservice and faster.
- Unit test the module yourself and then confirm it. In short test the app like user and not like a developer.
- Follow MVC module as it simplifies lots of task in your project.
- In case if you have done a major task then prepare a library for the same which can be reused by other developers.
- Release all your objects in dealloc but if an object is local then release it then and their don't make it global.
- If you are releasing some view like the map or the picker, table view then make its delegate and datasource method nil.
- Do not release an IBOutlet it is handled by the xcode itself, if you do you will get a memory warning their saying that incorrect reference counting which will lead to crash.
I hope that the above check list helps you by preventing rejection of your precious iPhone application.
Happy iCoding and have a great Day.