Xcode构建中不包括应用程序图标

34
最新版本的 Xcode Beta 安装构建后,我找不到 iOS 应用程序图标,可能出现了什么错误?我已经包含了所需的图标尺寸,包括 1024x1024。

看这里:https://dev59.com/FqXja4cB1Zd3GeqPRnmO#48209761 看起来苹果已经悄悄地(而且令人恼火地)为iPad添加了额外的图标要求。 - Mike Gledhill
尽量确保每个图像资产文件夹中都有一个“Contents.json”,其中列出了所有资产及其映射到的设备类型。 - S.D.
23个回答

30

你并不孤单。

在我的项目中,我发现之前正常工作的AppIcon资源无法渲染出应用程序图标。经过一系列的实验,我找到了以下结论:

  • 从另一个AppIcon正常工作的项目中复制的AppIcon资源可以在此项目中正常工作,这表明具体原始AppIcon资源存在问题。
  • 将非工作中的图像文件复制到工作的AppIcon中会导致工作的AppIcon也失败。
  • 创建一个新的AppIcon资源,并插入原始应用图标图像同样导致空白的应用图标。

综合以上观察结果,目前阶段推测可能是图像本身存在问题。因此,我尝试了各种步骤来解决这个问题:

  • 使用我通常预处理应用程序Prepo重新导出所有图标大小。确保我的源图像不包含透明度。仍然插入这些重新创建的图标图像会导致空白的应用图标。
  • 使用不同的方式通过Sketch重新创建所有图标大小,并插入相同的AppIcon资源中,结果应用图标正常工作。
  • 创建一个新的AppIcon资源,并插入Sketch创建的图像,结果应用图标仍然正常工作。

以上的所有结论表明,Xcode 9中存在某些问题会拒绝或无法使用此前正常工作的应用程序图标图像,并且之前正常工作的应用程序图标创建过程可能会生成Xcode 9无法使用的图像。也许是png规范中存在一些有效的png,但不是Xcode 9可以接受的应用程序图标,最明显的想法是具有透明度的应用程序图标可能会被拒绝,但我不认为我使用的图标图像包含透明度,并且我尝试在上述测试中排除了这种情况。


有一种完全不同的原因被报告给某些用户,与CocoaPods集成相关。请参见此处的讨论以及已为Cocoapods创建的拉取请求,理论上解决了这个问题。我说理论上是因为我尝试实施了这两个解决方案,但在我遇到该问题的项目中,它们都没有解决问题。


这对我来说完全没有意义,我的一个项目正在工作,而另一个项目却没有。 - thibaut noah
我也尝试过从我的图标中移除阿尔法通道,但仍然没有起作用。我完全同意这是某些PNG中的问题,它们现在被拒绝了。 - siburb
1
从.plist文件中删除“CFBundleIcons〜ipad”键对我的构建起作用,而其他方法则没有。在此处查看完整解决方案:https://dev59.com/FqXja4cB1Zd3GeqPRnmO#47597386 - Aakash Aggarwal

22
为了清晰明了,请确保颜色配置文件设置为:sRGB IEC61966-2.1。在我发现这个问题之前,我的图标没有颜色配置文件。 我相信其他颜色配置文件也可以使用,但我还没有进行测试以确定。 您可以在预览中完成以下操作:
  1. 工具 → 分配配置文件

Assign Profile1

  1. 选择sRGB IEC61966-2.1

Assign Profile2

当您对图标进行“获取信息”时,它应该显示正确的颜色配置文件。

Example of working / non working Get Info on two images


1
不幸的是,这并不适用于每个人,无论如何还是谢谢你,伙计,你给了我希望。 - thibaut noah
2
我必须删除 Alpha 通道才能使其正常工作。(要做到这一点,请在预览中打开图标,导出,取消选中 Alpha 通道并保存为 PNG)。 - codeinthesky
太棒了!经过几天的尝试,这个解决方案对我有效。 - Kamil
从.plist文件中删除“CFBundleIcons〜ipad”键对我的构建起作用,而其他方法则没有。在此处查看完整解决方案:链接 - Aakash Aggarwal
我没有任何pod文件,但我的应用程序图标仍然没有显示出来。甚至我的图标也不是透明的。这个技巧解决了它。 - Poles

17
尝试了各种解决方案,如上述的“为图标指定颜色配置文件(sRGB IEC61966-2.1)”、“CocoaPods解决方案”或“在项目设置中将应用程序图标源名称更改为不同的资产名称”,我发现一个非常基本的解决方案如下:
  1. 清除您的项目
  2. 清除(~/Library/Developer/Xcode/DerivedData/)中的派生数据
  3. 进入"项目->构建阶段"
  4. 找到"复制包资源"并将其拖到列表的最后一项
  5. 如果已经存在应用程序,则卸载它并运行项目

查找屏幕截图以获得更好的理解。

之前

enter image description here

之后

enter image description here

注意:您可以通过简单地将“复制包资源”的位置向上移动来检查在您的项目中为应用程序图标创建问题的是什么。


2
我找到了一个类似的解决方法:Copy Bundle Resources 列表中没有包括 images.xcassets 文件。将该文件添加到列表中即可解决问题。我不需要重新定位 Copy Bundle Resources 列表本身。 - Andrew Duncan

13

我的应用程序图标也遇到了同样的问题,在一些设备上可以显示,但在其他设备上无法显示。我进一步调查发现,并不是所有的图标都被压缩,并且所有图标的颜色空间都有问题(Adobe RGB)。我把所有的图标压缩并转换为SRGB颜色空间,然后替换了现有的图标。现在所有的图标都能完美地显示了。


1
我正在使用来自AppStore的Mac应用程序“Asset Catalog Creator”创建应用程序图标。它们在Xcode 9之前都可以正常工作。您的评论非常有用,我查看了我的图像,发现颜色配置文件为“Adobe RGB”,并且我发现用于创建资产的原始图像也是“Adobe RGB”。在“Asset Catalog Creator”中有一个设置首选项被勾选了“[x]保留原始颜色配置文件”,一旦我取消了该复选框,然后使用原始图像运行图标资产创建器,新图像将使用sRGB颜色配置文件创建,并且现在可以正常工作!谢谢。 - cavalleydude

8

另一种简单的修复方法如下:

我在XCode 9.0中也遇到了同样的问题,我的项目在XCode 8和iOS 10下运行得非常完美,但升级后,它的图标(仅限于iPad)突然消失了。

我试过sRGB和透明度等各种方式,但都没有解决问题。

最后发现,在我的目标info.plist文件中仍有以下空条目:

CFBundleIcons~ipad

早些时候,我已经将其指定为目标构建设置中的内容。

解决方法很简单,只需从info.plist文件中删除此条目(点击帮助性的小“-”按钮),重新构建和测试,一切就会恢复正常。


对我来说情况恰好相反。我正在支持IOS 7并需要将缺失的文件名条目添加到CFBundleIcons〜IPad字典中。当我删除该键时,尽管在xcassets中被引用,但它导致找不到任何图标。 - GameSalutes
对我来说,AppCategory条目也不能是空的。也许这意味着所有条目都必须填写一些值? - JoDavid

2
TL;DR: 创建一个“复制资源包”构建阶段。
经过一天半几乎尝试了这个和其他线程上的每个解决方案后,我找到了一个非常不同的解决方法,它对我起作用了。在我的构建文件夹中查看应用程序包时,我注意到App图标png文件没有被复制到其中。我从头开始创建了一个空白应用程序,并添加了一个应用程序图标,在那个空白应用程序中,它确实复制了图标文件。那么怎么回事呢?
空白应用程序有一个“复制bundle资源”构建阶段,可以将Assets.xcassets包复制过去。我的没有。因此,我创建了一个,添加了我的Images.xcassets,然后神奇地验证了我的档案。注意:我非常确定以前从未有过这个构建阶段,但一个月前我仍然能够提交一个构建...

2
我在这个问题上浪费了一整天的时间。我检查了我的png文件,以确保没有透明度,并确保正确的RGB设置,我还像这里讨论的那样更改了podfile。但是没有任何作用。Xcode 9/iOS 11的升级似乎破坏/改变了某些东西,因为先前相同应用程序的图标对我来说是可见的。
总之,解决我的问题的方法是更改Assets.xcassets中iOS应用程序图标的名称(默认值= AppIcon),并将'Build Settings'中的“Asset Catalog App Icon Set Name”也更改为新名称。
奇怪的是,在我解决了这个问题之后,我更新了Assets.xcassets中AppIcon中的所有图像,然后再次出现了空白图像!重复以上步骤,第二次问题得到了解决。

在这篇文章中添加了另一个答案。请查看我的其他更新的答案。 - ack

2

问题:

1. iOS 11或Xcode 9上未显示应用图标。

2. iPhone上可见应用图标,但iPad上不可见。

对我起作用的解决方案:

问题似乎出现在Xcode 9和iOS 11的构建过程中。过去,苹果一直在使用“〜iPad”扩展来区分iPhone和iPad的资源。

info.plist有一个字典,键为“CFBundleIcons〜ipad”,其中没有任何条目(在Xcode 9中显示),这使得bundle从info.plist文件而不是images.xcassets获取图像,因此在Xcode 9上应用程序图标未出现。

从.plist文件中删除此键对我的构建有用,而其他方法则没有。

Deleting "CFBundleIcons~ipad" key from .plist


这就是罪魁祸首。谢谢! - TheTiger

2
在我的情况下,这些解决方案都没有起作用。我的图标没有显示是因为它们的尺寸不正确。一旦我正确调整了它们的大小,我的问题就得到了解决。

2

编辑:这需要在gym中间触发,我不知道如何做到这一点。只要存档出现在文件夹中,就可以运行错误修复。如果有人能帮助改进此问题,请告诉我!

我在使用Fastlane时遇到了这个问题,并编写了一个作为车道运行的shell脚本来解决问题。修复本身是来自用户stubyte在此线程中的代码。

这是我的archive_fix.sh脚本:

#!/bin/bash

# navigate to latest archive created
cd ~/Library/Developer/Xcode/Archives
foo=$(ls -t | head -n1) && cd $foo
line=$(ls -t | head -n1) && cd "$line"

 # bug fix
find Products/ -name Info.plist -print0 | xargs -0n1 plutil -replace BuildMachineOSBuild -string 16A323

在我的Fastfile中,我运行了以下代码:

sh("./archive_fix.sh")

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接