Note: I'm developing using Xamarin. Similar question posted in Xamarin Forum here
I'm creating an app called, say CompanyApp. Then I created an App ID for it com.Company.CompanyApp, along with Distribution Provisioning Profile that uses the corresponding App ID. I uploaded the binary and it worked perfectly fine.
Then I went on create a demo version of the app (basically the same app with small modification, so it's the same solution & project, just different bundle signing setting), CompanyAppDemo with a new App ID com.Company.CompanyAppDemo, along with a new Distribution Provisioning Profile that uses the new App ID. I updated the iOS Bundle Signing options to use the new Provisioning Profile and generated the IPA. But when I uploaded this to Application Loader, I got the following error:
[2015-01-23 16:08:21 SGT] ERROR: ERROR ITMS-90164: "Invalid Code
Signing Entitlements. The entitlements in your app bundle signature do
not match the ones that are contained in the provisioning profile.
According to the provisioning profile, the bundle contains a key value
that is not allowed: 'TEAMID.com.Company.CompanyApp' for the key
'application-identifier' in 'Payload/CompanyApp.app/CompanyApp'"
[2015-01-23 16:08:21 SGT] ERROR: ERROR ITMS-90046: "Invalid Code
Signing Entitlements. Your application bundle's signature contains
code signing entitlements that are not supported on iOS. Specifically,
value 'TEAMID.com.Company.CompanyApp' for key 'application-identifier'
in 'Payload/CompanyApp.app/CompanyApp' is not supported. This value
should be a string starting with your TEAMID, followed by a dot '.',
followed by the bundle identifier." I have been debugging for days to
figure out to no avail.
Finally after 2 weeks of hair pulling..
For some reasons, if there is no key 'application-identifier' in the Entitlements.plist that is set to TEAMID.com.Company.CompanyAppDemo, Xamarin will use the original application-identifier, i.e. TEAMID.com.Company.CompanyApp
So the solution was to add application-identifier specifying the correct application bundle ID inside Entitlements.plist. Then include the plist in the Build Options > iOS Bundle Signing.