iPhone SDK 4 binary is not accepted by iTunes
Question: I’m going crazy. I’m trying to upload a new binary compiled by the latest iPhone SDK 4 to the iTunes App Store. I have got the error message: “Apple is not currently accepting applications built with this version of the SDK.” I build the code under SDK 4.0 with a deployment target of OS 3.0 or below and it does not work. I checked my code on the built-in simulator before uploading the bundle. Provisioning profile is correctly selected. I have even reinstalled the iPhone SDK 4.0.
Answer: We managed to upload an iPhone app to the App Store today. Before uploading an app to iTunes check out that you surely build your application with Device SDK and the configuration is set to Release. You may set your Deployment target to 3.0, so any iPhone running 3.0 or higher can run your app. Since iPhone SDK 4 we have to pay attention to these details.
You do not have to reinstall Xcode. The latest iPhone SDK will let you only build up against Device 3.2 (iPad only) or 4.0, but you can set your deployment target lower like iPod 3, iPhone 3G, iPhone 3GS running iPhone OS 3 or newer. Actually you can also select 2.0 … 2.2.1 deployment targets but it is not recommended.
If you build your app’s release version with the active SDK set to Simulator, iTunes App Store will not accept it.
The app store is a moving target. In iPhone SDK 4 also pay attention to the App ID. Generate a new provisioning profile with full name for your app such as com.myco.appname. You can no longer use a wildcard for distributing your apps or, if you try, you likely get a message from iTunes: “The binary you uploaded was invalid. The application-identifier entitlement is not formatted correctly; it should contain your 10-character App ID Seed, followed by a dot, followed by your bundle identifier.”
If you try to work-around the problem and add your application-identifier key-value pair to the Entitlements.plist file, you will notice that the iPhone SDK will rewrite it. We can patch the Xcode but that is not in our job description.
Another solution is to delete the Entitlements.plist from your project. When you re-add it, it will be created from a template that has a prebuilt correct application-identifier property. See the app bundle. Annoying though.
When you get the warning of “Building with ‘Targeted Device Family’ set to iPhone only (‘1’) not supported with SDK ‘Device – iPhone OS 3.2’” from Xcode and the target is not iPad exclusive, you must set the base SDK to 4.0. You can change the deployment target in the active target settings to whatever iPhone OS (see above). Use base SDK 3.2 in iPad projects.