ERROR ITMS-90056: This bundle is invalid. The Info.plist file is missing the required key: CFBundleVersion

I keep getting an error when uploading a build to the app store using Xcode 7.0.1 and Xcode 7.1 even on an archive that was accepted two days ago.


"ERROR ITMS-90056: This bundle is invalid. The Info.plist file is missing the required key: CFBundleVersion"

Replies

If it was ok then and kicked back now, the issue is the backend being swamped and your efforts hitting a wall. You can wait until later or just keep pounding on it like the rest of us.

You have to check all the Info.plist that are in use in your project including, for instance, third party resource bundles.

It is conceivable that the server side validation has been upgraded to check all the Info.plist rather than the main ones.


First you locate the .xcarchive that was created by the archive manager, then in that folder, run the below command :


find . -name 'Info.plist' | while read file; do

echo $file;

{ plutil -p $file | grep CFBundleVersion; } || echo Failed $file;

done;


Any files with blank or non-existent CFBundleVersion key are a problem. However,

*storyboardc folders also have their own Info.plist, but they do not need this key, apparently.

😝 Following nokiddin's advice I performed the following and am now able to upload the application

and with the helpful script modifications by OutLander


Here's what I did to upload my build to the App Store


In terminal navigate to Archives location of your .xcarchive

cd Library/Developer/Xcode/Archives/2015-10-27


In my error case the issue was surrounding CFBundleShortVersionString (not everyone has issues with the short version string; there are variations of bad .plists occurring with other properties as well)

So I tweaked nokiddin's shell command to search CFBundleShortVersionString


find . -name 'Info.plist' -not -path "*.storyboard*"  | while read file; do
echo $file;
{ plutil -p $file | grep CFBundleShortVersionString; } || echo Failed $file;
done;


Ignoring (storyboard based ones) I scanned Failed Info.plist files

I found the one that definitely should have had a short version

./Products/Applications/smartspot-ios-app-store.app/Frameworks/Alamofire.framework/Info.plist ✅

"CFBundleShortVersionString" => "3.1.0"

./Products/Applications/smartspot-ios-app-store.app/Frameworks/Haneke.framework/Info.plist ✅

"CFBundleShortVersionString" => "1.0"

./Products/Applications/smartspot-ios-app-store.app/Frameworks/JGProgressHUD.framework/Info.plist ✅

"CFBundleShortVersionString" => "1.2.6"

./Products/Applications/smartspot-ios-app-store.app/Frameworks/Mixpanel.framework/Info.plist ✅

"CFBundleShortVersionString" => "1.0"

./Products/Applications/smartspot-ios-app-store.app/Frameworks/Mixpanel.framework/MPNotification.storyboardc/Info.plist IGNORE

Failed ./Products/Applications/smartspot-ios-app-store.app/Frameworks/Mixpanel.framework/MPNotification.storyboardc/Info.plist IGNORE

./Products/Applications/smartspot-ios-app-store.app/Frameworks/Mixpanel.framework/MPSurvey.storyboardc/Info.plist IGNORE

Failed ./Products/Applications/smartspot-ios-app-store.app/Frameworks/Mixpanel.framework/MPSurvey.storyboardc/Info.plist IGNORE

./Products/Applications/smartspot-ios-app-store.app/Frameworks/PromiseKit.framework/Info.plist ✅

"CFBundleShortVersionString" => "3.0.0"

./Products/Applications/smartspot-ios-app-store.app/Frameworks/Stripe.framework/Info.plist ✖

Failed ./Products/Applications/smartspot-ios-app-store.app/Frameworks/Stripe.framework/Info.plist

./Products/Applications/smartspot-ios-app-store.app/Info.plist ✅

"CFBundleShortVersionString" => "1.1.5"

./Products/Applications/smartspot-ios-app-store.app/LaunchScreen.storyboardc/Info.plist IGNORE


I opened the problem .plist file in Xcode via terminal command

open ./Products/Applications/smartspot-ios-app-store.app/Frameworks/Stripe.framework/Info.plist


and added the missing CFBundleShortVersionString giving it some random value.

I didn't really care so I just put in 6.0.0


Going back to Organizer I found the archive and reattempted to upload to App Store.


Success 😁 ✅

find . -name 'Info.plist' -not -path "*.storyboard*"  | while read file; do echo $file; { plutil -p $file | grep CFBundleVersion; } || echo Failed $file; done;

This script will automatically exclude Storyboard files

My bundle version was 7.1 and I went through all of the solutions without success. I read through the documentation about CFBundleVersion and it said three digits are expected. I change the bundle version to 7.1.0 and it worked.

I too went through this process.

I modified the build settings to be XML for release mode.


Low and behold, I was then able to run the script:

find . -name 'Info.plist' -not -path "*.storyboard*"  | while read file; do echo $file; { plutil -p $file | grep CFBundleVersion; } || echo Failed $file; done;


I then used vi and added the two missing (CFBundleShortVersionString and CFBundleVersion) settings to each of the missing Info.plist files.


I was then able to successfully upload to Apple. This issue did not crop up until I updated to the XCode 7.1. Clearly Apple tightened down on the server-side validation of all Info.plist files contained within your IPA file.