Search code examples
ios7info.plistasset-catalog

Icons, Asset Catalog and Info.plist confusion


I have an app that started life for iOS 5 and has been updated ever since. For iOS 7 I have switched over to using an Asset Catalog for all the resources, which is nice and appears to work well. However, when I try to submit to Apple I get validation errors:

Invalid Image Path - No image found at the path referenced under key 'CFBundleIconFiles': '[email protected]'

I get the same error for the other icons, too. These icons do appear in the Asset Catalog and the names -- right down to the case -- match exactly as far as I can tell. The Asset Catalog is in the "Copy Bundle Resources" and all the resources appear in the right place when I run the app on both my iPhone and iPad (in iOS 7) and in the Simulator for iOS 6.

I have updated the app to use the minimum deployment target of iOS 6.

So, how do I successfully submit my update to Apple? Do I need the references in the Info.plist? Are there any other settings that I should check? Is the warning spurious and something that I should ignore (after raising a Radar)?


Solution

  • When an asset catalog is compiled for iOS 6 and lower, the images are put in the root of the app bundle, as if you were just copying them the old way. When this happens, Apple names the images according to the asset name, rather than the filename, which means we can still use +[UIImage imageNamed:] to get the assets on iOS 6 and lower.

    This is true for the App Icon asset, when we have the following icons set in our asset catalog:

    enter image description here

    They become compiled like so:

    enter image description here

    As iOS 6 is still iOS 6, these files must be referenced in the Info.plist, otherwise the existing system wouldn't work. Looking in the compiled Info.plist for this test app, you see that Xcode has added CFBundleIconFiles for us and so we don't need to.

    enter image description here

    I have uploaded the test project I used to github.com/danielctull-tests/AssetTest.