If you used any of the iOS 5 APIs, then the application will crash when this code tries to run on iOS 4.x, if you have not added any code to verify that the methods are available before calling them (look up "SoSelector answers:" in the documentation).
Set your deployment target for iOS 4.3. In the simulator, in the upper left drop-down list, he should offer you a choice of iOS 5 or 4.3 simulators. Select 4.3, then test the application carefully, if it works, you can check the console log to find the API intruder call and then figure out what to do with it.
If you do not see 4.3 in the assembly drop-down list, you should have 5.0 as the deployment target.
I suggest not setting the deployment target earlier than 4.3 unless you have a test device with an earlier OS that you can use.
So, the answer to your question: the deployment target should be the earliest version of iOS that you can test the application on (either with a simulator or with the actual device), unless you rely on the API in later versions of the OS and cannot get around them .
source share