图标,资产目录和Info.plist混淆

时间:2013-10-01 11:20:29

标签: ios7 info.plist asset-catalog

我有一款适用于iOS 5的应用程序,从那时起就一直在更新。对于iOS 7,我已经切换到使用资产目录来获取所有资源,这很不错并且似乎运行良好。但是,当我尝试向Apple提交时,我会收到验证错误:

  

无效的图像路径 - 在“CFBundleIconFiles”键下引用的路径中找不到图像:'Icon@2x.png'

我也得到了其他图标的相同错误。这些图标出现在资产目录中,名称 - 直到案例 - 完全符合我的判断。资产目录位于“复制捆绑资源”中,当我在iPhone和iPad(iOS 7)以及iOS 6模拟器中运行应用程序时,所有资源都显示在正确的位置。

我已更新应用以使用iOS 6的最低部署目标。

那么,我如何成功将更新提交给Apple?我是否需要Info.plist中的引用?我还应该检查其他任何设置吗?警告是否是虚假的,我应该忽略一些事情(在提升雷达之后)?

3 个答案:

答案 0 :(得分:10)

当为iOS 6及更低版本编译资产目录时,图像将放在应用程序包的根目录中,就像您只是以旧方式复制它们一样。发生这种情况时,Apple会根据资产名称而不是文件名来命名图像,这意味着我们仍然可以使用+[UIImage imageNamed:]来获取iOS 6及更低版本的资产。

当我们在资产目录中设置了以下图标时,App Icon资产就是如此:

enter image description here

它们编译成如下:

enter image description here

由于iOS 6仍然是iOS 6,因此必须在Info.plist中引用这些文件,否则现有系统将无法运行。查看此测试应用程序的已编译Info.plist,您会看到Xcode已为我们添加了CFBundleIconFiles,因此我们不需要这样做。

enter image description here

我已经将我曾经使用的测试项目上传到github.com/danielctull-tests/AssetTest

答案 1 :(得分:4)

好的,所以这就是我最终要做的事情。我不是100%肯定这是正确的,但我认为值得分享。

  • 我删除了CFBundleIconFile,我认为这不是在iOS 6及更高版本中使用的
  • 我在CFBundleIconFiles
  • 中使用了资产名称而不是图标文件名

我不清楚这些名称是什么,为了清楚起见:通过图标文件名我的意思是当选择图标时,资产目录的属性检查器中可见的名称;我所说的资产名称是AppIcon,在我的情况下是指七个实际图标。

这两个都通过了Apple的验证步骤,看起来还不错。我目前没有iOS 6设备,但它在模拟器中正确显示。

答案 2 :(得分:0)

我在这件事上也遇到了很多问题 - 我经常遇到错误的CFBundleIconName,而我的图标找不到。所以这是我的故事,也许对某人有帮助。顺便说一下,我正在使用Visual Studio和Xamarin。

  1. 使用AppIcons将资产目录添加到您的项目中(资产的实际名称并不重要,只是它适用于应用程序图标)。添加所有必要的图标大小。对于'App Store'图标,我在论坛建议中添加了一个没有@的图标,但是我不确定,是否100%是必要的。为了生成不同的图标大小,有很多网站和工具可以为您做到这一点,您只需要提供1024x1024。他们将产生其余的。

  2. 在“Visual Assets”下的Info.plist中,然后在“App Icons”中将源设置为您刚刚创建的资产。

  3. 现在查看您的Info.plist。 不要使用外部编辑器打开它,因为在构建项目后,所有更改都将被覆盖。执行以下操作 - 在解决方案资源管理器中右键单击Info.plist,然后选择打开方式 - >通用PList编辑器。

  4. 检查您是否有以下条目:

    -Property = CFBundleIconName,Type = String。 Value = Assets.xcassets / AppIcons.appiconset -Property = XSAppIconAssets,Type = String。值= Assets.xcassets / AppIcons.appiconset

  5. 请注意,Visual Studio会在添加完全内容时自动添加“Resources / Assets.xcassets / AppIcons.appiconset”作为Value。但在我的情况下,资产目录是在Resources文件夹之外创建的,因此我的图标找不到。因此,请检查您的资产文件夹的创建位置。

  6. 不需要CFBundleIconFiles,因为Apple现在使用资产目录。

  7. 我希望我有所帮助:)