你并不孤单。
在我的项目中,我发现之前正常工作的AppIcon资源无法渲染出应用程序图标。经过一系列的实验,我找到了以下结论:
综合以上观察结果,目前阶段推测可能是图像本身存在问题。因此,我尝试了各种步骤来解决这个问题:
以上的所有结论表明,Xcode 9中存在某些问题会拒绝或无法使用此前正常工作的应用程序图标图像,并且之前正常工作的应用程序图标创建过程可能会生成Xcode 9无法使用的图像。也许是png规范中存在一些有效的png,但不是Xcode 9可以接受的应用程序图标,最明显的想法是具有透明度的应用程序图标可能会被拒绝,但我不认为我使用的图标图像包含透明度,并且我尝试在上述测试中排除了这种情况。
有一种完全不同的原因被报告给某些用户,与CocoaPods集成相关。请参见此处的讨论以及已为Cocoapods创建的拉取请求,理论上解决了这个问题。我说理论上是因为我尝试实施了这两个解决方案,但在我遇到该问题的项目中,它们都没有解决问题。
Copy Bundle Resources
列表中没有包括 images.xcassets
文件。将该文件添加到列表中即可解决问题。我不需要重新定位 Copy Bundle Resources
列表本身。 - Andrew Duncan我的应用程序图标也遇到了同样的问题,在一些设备上可以显示,但在其他设备上无法显示。我进一步调查发现,并不是所有的图标都被压缩,并且所有图标的颜色空间都有问题(Adobe RGB)。我把所有的图标压缩并转换为SRGB颜色空间,然后替换了现有的图标。现在所有的图标都能完美地显示了。
另一种简单的修复方法如下:
我在XCode 9.0中也遇到了同样的问题,我的项目在XCode 8和iOS 10下运行得非常完美,但升级后,它的图标(仅限于iPad)突然消失了。
我试过sRGB和透明度等各种方式,但都没有解决问题。
最后发现,在我的目标info.plist文件中仍有以下空条目:
CFBundleIcons~ipad
早些时候,我已经将其指定为目标构建设置中的内容。
解决方法很简单,只需从info.plist文件中删除此条目(点击帮助性的小“-”按钮),重新构建和测试,一切就会恢复正常。
编辑:这需要在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")