Icons, Asset Catalog and Info.plist confusion

Stephen Darlington picture Stephen Darlington · Oct 1, 2013 · Viewed 10.7k times · Source

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)?

Answer

Daniel Tull picture Daniel Tull · Oct 1, 2013

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.