ERROR ITMS-90345: "Metadata/Info.plist Mismatch.

Hi, I am trying to publish my app (derivative of the Cannon starter project) and having issues.  After going down the path of updating icons I am still getting this ambiguous error message:

ERROR ITMS-90345: “Metadata/Info.plist Mismatch. The value for bundle_version in the metadata.xml file does not match the value for CFBundleVersion in Obomba [Payload/__app____].”

Is there a way I can get more information about what is actually failing?  

Hi and welcome tot he forums.

Can you post your build.settings file, please?

Thanks

Rob

Thanks Rob, my build settings are:

settings = { splashScreen = { enable = true, image = "ObombaSplashScreen.png" }, orientation = { default = 'landscapeRight', supported = {'landscapeLeft', 'landscapeRight'} }, android = { installLocation = 'auto', usesPermissions = {}, supportsTV = true, isGame = true, largeHeap = true, usesFeatures = { {name = 'android.hardware.gamepad', required = false} }, mainIntentFilter = { categories = {'tv.ouya.intent.category.GAME'} } }, iphone = { iCloud = true, xcassets = "Images.xcassets", plist = { CFBundleIconFiles = {}, UIPrerenderedIcon = true, UILaunchStoryboardName = 'launchscreen', UIBackgroundModes = {'remote-notification'}, UIApplicationExitsOnSuspend = false }, skipPNGCrush = true }, tvos = { iCloud = true, icon = { small = { -- A collection of 400x240 images, in order from top to bottom 'Icon-tvOS-Small-4.png', 'Icon-tvOS-Small-3.png', 'Icon-tvOS-Small-2.png', 'Icon-tvOS-Small-1.png' }, large = { -- A collection of 1280x768 images, in order from top to bottom 'Icon-tvOS-Large-4.png', 'Icon-tvOS-Large-3.png', 'Icon-tvOS-Large-2.png', 'Icon-tvOS-Large-1.png' } }, topShelfImage = 'Icon-tvOS-TopShelf.png', -- 1920x720 topShelfImageWide = 'Icon-tvOS-TopShelfWide.png', -- 2320x720 launchImage = 'Icon-tvOS-Launch.png' -- 1920x1080 }, osx = { iCloud = {['kvstore-identifier'] = 'com.harbours.obomba'}, plist = {NSHumanReadableCopyright = 'Copyright 2017 © The Harbours, Inc.'} }, window = { defaultMode = 'fullscreen', defaultViewWidth = 1280, defaultViewHeight = 720, minViewWidth = 1280, minViewHeight = 720, --enableMaximizeButton = true, --resizable = true, titleText = {default = 'Obomba'} }, plugins = { ['plugin.iCloud'] = {publisherId = 'com.coronalabs', supportedPlatforms = {iphone = true, appletvos = true, ['iphone-sim'] = true, osx = true}}, ['plugin.bit'] = {publisherId = 'com.coronalabs'} -- Needed for Tiled loader }, excludeFiles = { all = { 'Banner-\*.png', 'Icon-\*dpi.png', 'Icon-ouya-xiaomi.png', 'Icon-ouya.png', 'Icon-tvOS-\*.png', '\*.icns', '\*.ico', 'icon1024.png', 'icon1024-iOS.png', 'key.der', '\*.keystore', 'maps/\*.tmx', 'prepare\_icons.sh', 'Obombav\*.apk', "Obomba.cer", "Obomba.csr", "Obomba.mobileprovision", "icon1024-iOS-NoAlpha.png", "icon1024-iOS.png", "Obomba.pem", "README.md" } } } local iPhoneIcons = {} for i = 1, #settings.iphone.plist.CFBundleIconFiles do iPhoneIcons[i] = settings.iphone.plist.CFBundleIconFiles[i] end iPhoneIcons[#iPhoneIcons + 1] = '\*.nib' iPhoneIcons[#iPhoneIcons + 1] = 'Default-\*.png' iPhoneIcons[#iPhoneIcons + 1] = 'iTunes\*' settings.excludeFiles.tvos = iPhoneIcons settings.excludeFiles.android = iPhoneIcons settings.excludeFiles.osx = iPhoneIcons settings.excludeFiles.win32 = iPhoneIcons

Also I’ve modified the prepare_iconds.sh script that came with the project because I saw some posts about alpha channels and I needed to generate the additional images specified in the Content.json.  That file now looks like this:

#!/bin/sh base="icon1024-iOS.png" mkdir -p Images.xcassets/AppIcon.appiconset/ convert "$base" -resize '20x20' -alpha remove -flatten -unsharp 1x4 "Images.xcassets/AppIcon.appiconset/Icon-40.png" convert "$base" -resize '29x29' -alpha remove -flatten -unsharp 1x4 "Images.xcassets/AppIcon.appiconset/Icon-58.png" convert "$base" -resize '29x29' -alpha remove -flatten -unsharp 1x4 "Images.xcassets/AppIcon.appiconset/Icon-87.png" convert "$base" -resize '40x40' -alpha remove -flatten -unsharp 1x4 "Images.xcassets/AppIcon.appiconset/Icon-80.png" convert "$base" -resize '60x60' -alpha remove -flatten -unsharp 1x4 "Images.xcassets/AppIcon.appiconset/Icon-180.png" convert "$base" -resize '76x76' -alpha remove -flatten -unsharp 1x4 "Images.xcassets/AppIcon.appiconset/Icon-76.png" convert "$base" -resize '76x76' -alpha remove -flatten -unsharp 1x4 "Images.xcassets/AppIcon.appiconset/Icon-152.png" convert "$base" -resize '80x80' -alpha remove -flatten -unsharp 1x4 "Images.xcassets/AppIcon.appiconset/Icon-Small-40@2x.png" convert "$base" -resize '83.5x83.5' -alpha remove -flatten -unsharp 1x4 "Images.xcassets/AppIcon.appiconset/Icon-167.png" convert "$base" -resize '100x100' -alpha remove -flatten -unsharp 1x4 "Images.xcassets/AppIcon.appiconset/Icon-Small-50@2x.png" convert "$base" -resize '114x114' -alpha remove -flatten -unsharp 1x4 "Images.xcassets/AppIcon.appiconset/Icon@2x.png" convert "$base" -resize '120x120' -alpha remove -flatten -unsharp 1x4 "Images.xcassets/AppIcon.appiconset/Icon-120.png" convert "$base" -resize '144x144' -alpha remove -flatten -unsharp 1x4 "Images.xcassets/AppIcon.appiconset/Icon-72@2x.png" convert "$base" -resize '152x152' -alpha remove -flatten -unsharp 1x4 "Images.xcassets/AppIcon.appiconset/Icon-152.png" convert "$base" -resize '180x180' -alpha remove -flatten -unsharp 1x4 "Images.xcassets/AppIcon.appiconset/Icon-60@3x.png" convert "$base" -resize '167x167' -alpha remove -flatten -unsharp 1x4 "Images.xcassets/AppIcon.appiconset/Icon-167.png" convert "$base" -resize '512x512' -alpha remove -flatten -unsharp 1x4 "Images.xcassets/AppIcon.appiconset/iTunesArtwork" convert "$base" -resize '1024x1024' -alpha remove -flatten -unsharp 1x4 "Images.xcassets/AppIcon.appiconset/iTunesArtwork@2x" convert "$base" -resize '1024x1024' -alpha remove -flatten -unsharp 1x4 "Images.xcassets/AppIcon.appiconset/Icon-1024.png"

hmmm, updated.  When I posted my build.settings I noticed the loop that was happening at the bottom, not sure why I didn’t notice that before.  Removing it I can remove the CFBundleIconFiles.  I still get the bundle_version error though attempting to upload to the app store so any help trying to figure out what exactly is going on there would be appreciated.

I am not sure where metadata.xml is being generated but these are the entries for version I see in my Info.plist file:

 \<key\>CFBundleShortVersionString\</key\> \<string\>1.0\</string\> \<key\>CFBundleSupportedPlatforms\</key\> \<array\> \<string\>iPhoneOS\</string\> \</array\> \<key\>CFBundleVersion\</key\> \<string\>2018.01.141030\</string\>

We compute the CFBundleVersion value because it has to be unique and an incrementing number on every submission. CFBundleShortVersionString comes from the build dialog.

I’m not seeing others report this issue. Generally speaking doing Lua code in build.settings is discouraged though I don’t see any issues with the code you have. I don’t know if the blank CFBundleIcons table is creating issues or not.

I’ll share this with engineering and see they have any thoughts about this.

Rob

Hi Rob, so I was able to remove the CFBundleIcons after I removed the lua code.  The build.settings is from the Cannon starter project so maybe the team that worked on that would have a better idea if they have updated the build script recently?  I am not sure what this manifest.xml file is either, would you be able to ask them if they know?  Maybe there is something else I have to update.  Thanks.

I forgot to ask. Are you doing simulator builds or native builds?

Rob

Hi Rob, in the build dialog I am selecting “Send to App Store” and the result is an *.ipa file so I believe that is a native build.  Is that correct or should I check another setting?

If you’re doing “native” builds, you would be using Xcode and building from inside Xcode. It sounds like you’re doing a simulator build by doing either a File->Build->iOS in the simulator or pressing CMD-B and using the dialog box that pops up.

Rob

Hi Rob,

Is there any additional information you need to help out?  Or can you point me to how to docs on how to export my project to a native build so I can troubleshoot further?  Again if you are looking to reproduce it you could probably have the team that built this project upgrade https://coronalabs.com/blog/2016/02/02/corona-cannon-a-new-corona-sdk-sample-game/ and they will most likely come across the issue as well.

Thanks,

Clayton

Before we go that route, as I don’t now that it would really help.  Instead what happens if you try and build and submit our HelloWorld sample app that ships with Corona?

Rob

Hi, just to close the loop on this: it suddenly started working, maybe a transient issue on Apple’s side?  Not sure.  Thanks for your help and suggestions.

Hi and welcome tot he forums.

Can you post your build.settings file, please?

Thanks

Rob

Thanks Rob, my build settings are:

settings = { splashScreen = { enable = true, image = "ObombaSplashScreen.png" }, orientation = { default = 'landscapeRight', supported = {'landscapeLeft', 'landscapeRight'} }, android = { installLocation = 'auto', usesPermissions = {}, supportsTV = true, isGame = true, largeHeap = true, usesFeatures = { {name = 'android.hardware.gamepad', required = false} }, mainIntentFilter = { categories = {'tv.ouya.intent.category.GAME'} } }, iphone = { iCloud = true, xcassets = "Images.xcassets", plist = { CFBundleIconFiles = {}, UIPrerenderedIcon = true, UILaunchStoryboardName = 'launchscreen', UIBackgroundModes = {'remote-notification'}, UIApplicationExitsOnSuspend = false }, skipPNGCrush = true }, tvos = { iCloud = true, icon = { small = { -- A collection of 400x240 images, in order from top to bottom 'Icon-tvOS-Small-4.png', 'Icon-tvOS-Small-3.png', 'Icon-tvOS-Small-2.png', 'Icon-tvOS-Small-1.png' }, large = { -- A collection of 1280x768 images, in order from top to bottom 'Icon-tvOS-Large-4.png', 'Icon-tvOS-Large-3.png', 'Icon-tvOS-Large-2.png', 'Icon-tvOS-Large-1.png' } }, topShelfImage = 'Icon-tvOS-TopShelf.png', -- 1920x720 topShelfImageWide = 'Icon-tvOS-TopShelfWide.png', -- 2320x720 launchImage = 'Icon-tvOS-Launch.png' -- 1920x1080 }, osx = { iCloud = {['kvstore-identifier'] = 'com.harbours.obomba'}, plist = {NSHumanReadableCopyright = 'Copyright 2017 © The Harbours, Inc.'} }, window = { defaultMode = 'fullscreen', defaultViewWidth = 1280, defaultViewHeight = 720, minViewWidth = 1280, minViewHeight = 720, --enableMaximizeButton = true, --resizable = true, titleText = {default = 'Obomba'} }, plugins = { ['plugin.iCloud'] = {publisherId = 'com.coronalabs', supportedPlatforms = {iphone = true, appletvos = true, ['iphone-sim'] = true, osx = true}}, ['plugin.bit'] = {publisherId = 'com.coronalabs'} -- Needed for Tiled loader }, excludeFiles = { all = { 'Banner-\*.png', 'Icon-\*dpi.png', 'Icon-ouya-xiaomi.png', 'Icon-ouya.png', 'Icon-tvOS-\*.png', '\*.icns', '\*.ico', 'icon1024.png', 'icon1024-iOS.png', 'key.der', '\*.keystore', 'maps/\*.tmx', 'prepare\_icons.sh', 'Obombav\*.apk', "Obomba.cer", "Obomba.csr", "Obomba.mobileprovision", "icon1024-iOS-NoAlpha.png", "icon1024-iOS.png", "Obomba.pem", "README.md" } } } local iPhoneIcons = {} for i = 1, #settings.iphone.plist.CFBundleIconFiles do iPhoneIcons[i] = settings.iphone.plist.CFBundleIconFiles[i] end iPhoneIcons[#iPhoneIcons + 1] = '\*.nib' iPhoneIcons[#iPhoneIcons + 1] = 'Default-\*.png' iPhoneIcons[#iPhoneIcons + 1] = 'iTunes\*' settings.excludeFiles.tvos = iPhoneIcons settings.excludeFiles.android = iPhoneIcons settings.excludeFiles.osx = iPhoneIcons settings.excludeFiles.win32 = iPhoneIcons

Also I’ve modified the prepare_iconds.sh script that came with the project because I saw some posts about alpha channels and I needed to generate the additional images specified in the Content.json.  That file now looks like this:

#!/bin/sh base="icon1024-iOS.png" mkdir -p Images.xcassets/AppIcon.appiconset/ convert "$base" -resize '20x20' -alpha remove -flatten -unsharp 1x4 "Images.xcassets/AppIcon.appiconset/Icon-40.png" convert "$base" -resize '29x29' -alpha remove -flatten -unsharp 1x4 "Images.xcassets/AppIcon.appiconset/Icon-58.png" convert "$base" -resize '29x29' -alpha remove -flatten -unsharp 1x4 "Images.xcassets/AppIcon.appiconset/Icon-87.png" convert "$base" -resize '40x40' -alpha remove -flatten -unsharp 1x4 "Images.xcassets/AppIcon.appiconset/Icon-80.png" convert "$base" -resize '60x60' -alpha remove -flatten -unsharp 1x4 "Images.xcassets/AppIcon.appiconset/Icon-180.png" convert "$base" -resize '76x76' -alpha remove -flatten -unsharp 1x4 "Images.xcassets/AppIcon.appiconset/Icon-76.png" convert "$base" -resize '76x76' -alpha remove -flatten -unsharp 1x4 "Images.xcassets/AppIcon.appiconset/Icon-152.png" convert "$base" -resize '80x80' -alpha remove -flatten -unsharp 1x4 "Images.xcassets/AppIcon.appiconset/Icon-Small-40@2x.png" convert "$base" -resize '83.5x83.5' -alpha remove -flatten -unsharp 1x4 "Images.xcassets/AppIcon.appiconset/Icon-167.png" convert "$base" -resize '100x100' -alpha remove -flatten -unsharp 1x4 "Images.xcassets/AppIcon.appiconset/Icon-Small-50@2x.png" convert "$base" -resize '114x114' -alpha remove -flatten -unsharp 1x4 "Images.xcassets/AppIcon.appiconset/Icon@2x.png" convert "$base" -resize '120x120' -alpha remove -flatten -unsharp 1x4 "Images.xcassets/AppIcon.appiconset/Icon-120.png" convert "$base" -resize '144x144' -alpha remove -flatten -unsharp 1x4 "Images.xcassets/AppIcon.appiconset/Icon-72@2x.png" convert "$base" -resize '152x152' -alpha remove -flatten -unsharp 1x4 "Images.xcassets/AppIcon.appiconset/Icon-152.png" convert "$base" -resize '180x180' -alpha remove -flatten -unsharp 1x4 "Images.xcassets/AppIcon.appiconset/Icon-60@3x.png" convert "$base" -resize '167x167' -alpha remove -flatten -unsharp 1x4 "Images.xcassets/AppIcon.appiconset/Icon-167.png" convert "$base" -resize '512x512' -alpha remove -flatten -unsharp 1x4 "Images.xcassets/AppIcon.appiconset/iTunesArtwork" convert "$base" -resize '1024x1024' -alpha remove -flatten -unsharp 1x4 "Images.xcassets/AppIcon.appiconset/iTunesArtwork@2x" convert "$base" -resize '1024x1024' -alpha remove -flatten -unsharp 1x4 "Images.xcassets/AppIcon.appiconset/Icon-1024.png"

hmmm, updated.  When I posted my build.settings I noticed the loop that was happening at the bottom, not sure why I didn’t notice that before.  Removing it I can remove the CFBundleIconFiles.  I still get the bundle_version error though attempting to upload to the app store so any help trying to figure out what exactly is going on there would be appreciated.

I am not sure where metadata.xml is being generated but these are the entries for version I see in my Info.plist file:

 \<key\>CFBundleShortVersionString\</key\> \<string\>1.0\</string\> \<key\>CFBundleSupportedPlatforms\</key\> \<array\> \<string\>iPhoneOS\</string\> \</array\> \<key\>CFBundleVersion\</key\> \<string\>2018.01.141030\</string\>

We compute the CFBundleVersion value because it has to be unique and an incrementing number on every submission. CFBundleShortVersionString comes from the build dialog.

I’m not seeing others report this issue. Generally speaking doing Lua code in build.settings is discouraged though I don’t see any issues with the code you have. I don’t know if the blank CFBundleIcons table is creating issues or not.

I’ll share this with engineering and see they have any thoughts about this.

Rob

Hi Rob, so I was able to remove the CFBundleIcons after I removed the lua code.  The build.settings is from the Cannon starter project so maybe the team that worked on that would have a better idea if they have updated the build script recently?  I am not sure what this manifest.xml file is either, would you be able to ask them if they know?  Maybe there is something else I have to update.  Thanks.

I forgot to ask. Are you doing simulator builds or native builds?

Rob