应用程序图标不包含在Xcode的构建中

时间:2017-09-08 06:16:47

标签: ios xcode

从最新的Xcode Beta 6安装构建时,我看不到iOS AppIcon。可能出现的错误是什么?

我已经包含了必需的图标尺寸,包括1024x1024。

22 个答案:

答案 0 :(得分:25)

你并不孤单。

在我的项目中,我发现以前运行正常的AppIcon资源不再导致呈现应用程序图标。一系列实验发现如下:

  • 从AppIcon工作的另一个项目复制的AppIcon资源导致AppIcon在此项目中工作,表明特定的原始AppIcon资源无法正常工作。
  • 将图像文件从非工作文件复制到正在运行的AppIcon资产,导致工作文件现在也失败了。
  • 创建新的AppIcon资源,并插入原始应用程序图标图像同样导致了一个空白的应用程序图标。

结合在一起,这个阶段的要点表明图像文件本身可能存在问题。因此,我尝试了各种步骤来解决这个问题:

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

以上所有内容都表明Xcode 9中存在拒绝或未能使用以前正在运行的应用程序图标图像的内容,并且创建以前很好的应用程序图标的某些过程会生成Xcode 9无法使用的图像。也许png规范中有一些东西是有效的png,但不是Xcode 9的可接受应用程序图标。最明显的想法是有透明度的应用程序图标可能被拒绝,但我不相信我使用的图标图像包含透明度,我试图在上面的测试中消除这一点。

一些用户报告的完全独立的原因与CocoaPods集成有关。请参阅可能的临时修复here和理论上解决此问题的pull request that has been created for Cocoapods的讨论。我说理论上是地址,因为我已经尝试过实现这两个解决方案,而且他们都没有在我遇到它的项目中解决问题。

答案 1 :(得分:19)

为清楚起见,请确保颜色配置文件设置为: sRGB IEC61966-2.1 。在我偶然发现这个问题之前,我的图标没有颜色配置文件。

我确定其他颜色配置文件必须正常工作但我还没有完成测试。

这可以通过以下方式预览:

  1. 工具→指定个人资料
  2. Assign Profile1

    1. 选择 sRGB IEC61966-2.1
    2. Assign Profile2

      当你对图标进行获取信息时,它现在应该说正确的颜色配置文件。

      Example of working / non working Get Info on two images

答案 2 :(得分:13)

我的App图标遇到了同样的问题。它们显示在某些设备上但不显示在其他设备上我进一步研究了这个问题,发现并非所有的图标都被展平,并且所有图标的颜色空间都不正确(Adobe RGB)。我将所有图标展平并转换为SRGB色彩空间,然后替换现有图标。所有图标现在都显示完美。

答案 3 :(得分:12)

尝试各种解决方案,例如"将颜色配置文件(sRGB IEC61966-2.1)设置为图标" " CocoaPods解决方案" 如上所述,或者"将应用程序图标源名称更改为proect设置中的不同资产名称" , 我发现了一个非常基本的解决方案如下:

  1. 清除您的项目。
  2. 清除派生数据(〜/ Library / Developer / Xcode / DerivedData /
  3. 转到"项目 - >构建阶段"
  4. 查找"复制捆绑资源并将其拖动到列表的最后一项"
  5. 卸载应用程序(如果已存在),然后运行项目。
  6. 查找屏幕截图以便更好地理解。

    <强>之前

    enter image description here

    <强>后

    enter image description here

    注意:您可以通过简单地更改&#34;复制捆绑资源&#34;的位置来检查项目中app-icon的创建问题是什么。向上的方向。

答案 4 :(得分:8)

一旦发现另一个简单修复:

我在XCode 9.0上遇到了同样的问题,这个项目在XCode 8下工作得非常好,当我升级解决方案时,iOS 10突然失去了它的图标(仅在iPad上)。

撕掉我的头发,做了sRGB的事情,做了透明度的事情。

原来我的目标info.plist文件中仍然有以下空条目

CFBundleIcons〜ipad的

我很久以前就开始在目标构建设置中指定它。

解决方案是简单地从info.plist文件中删除此条目(单击有用的小&#34; - &#34;按钮。重建和测试,一切都再次完美。

答案 5 :(得分:2)

<强>问题:

<强> 1。应用程序图标未出现在iOS 11或Xcode 9上。

<强> 2。应用程序图标在iPhone上可见但在iPad中无法显示。

对我有用的解决方案:

问题似乎与Xcode 9和iOS 11的构建过程有关。过去,Apple一直在使用~iPad扩展来区分iPhone和iPad的资产。

info.plist有一个字典,其中包含“CFBundleIcons~ipad”键,它没有任何项目(如Xcode 9中所示),这导致bundle从info.plist文件中获取图像而不是图像。 xcassets,因此Xcode 9上的应用程序图标没有出现。

从.plist 文件中删除此密钥对我的构建工作,而其他人做了&#39; nt。

Deleting "CFBundleIcons~ipad" key from .plist

答案 6 :(得分:2)

就我而言,这些解决方案都无效。

我的图标没有显示,因为它们没有正确的尺寸。一旦我正确调整它们的大小,我的问题就得到了解决。

答案 7 :(得分:2)

TL; DR:创建“复制捆绑资源”构建阶段

在这一天和其他线程上尝试了几乎所有解决方案的一天半后,我发现了一个非常不同的解决方案对我有用。查看我的构建文件夹中的app包,我注意到App Icon png文件没有被复制到其中。我从头开始创建了一个空白的应用程序,添加了一个应用程序图标,在该空白应用程序中,它确实复制了图标文件。什么给出了什么?

空白应用程序有一个“复制包资源”构建阶段,复制了Assets.xcassets包。我的没有。所以我创建了一个,添加了我的Images.xcassets,并且presto change-o,我的存档得到了验证。 NB我很确定我之前从未有过构建阶段,但是我能在一个月前提交构建版本......

答案 8 :(得分:2)

我花了一整天的时间浪费时间。我检查了我的png文件以确保没有透明度,为了确保正确的RGB设置,我还按照here的说法更改了podfile。没有任何效果。升级到Xcode 9 / iOS 11似乎打破/改变了一些东西,因为之前我为同一个应用程序显示了图标。

无论如何,为我修复的是更改Assets.xcassets(默认= AppIcon)中iOS应用程序图标的名称,并更改资产目录应用程序图标集名称&#39;在“构建设置”中与新名称对齐。

扼杀,在我开始工作之后,我在Assets.xcassets中更新了AppIcon中的所有图像,我又得到了一张空白图像!重复上述步骤,问题第二次解决。

答案 9 :(得分:2)

修改:这需要在gym的中间触发,我不知道该怎么做。一旦存档出现在文件夹中,运行错误修复就可以解决问题。如果有人可以帮助改善这一点,请告诉我!

我使用Fastlane遇到了这个问题,我编写了一个shell脚本,我将其作为一个通道运行来解决问题。修复本身是来自此thread中的用户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")

答案 10 :(得分:1)

来自gales_vasile的回答:https://forums.developer.apple.com/thread/86290

为我工作。

这应该是CocoaPods中的一个错误,如此处讨论https://github.com/CocoaPods/CocoaPods/issues/7003 我遇到了同样的问题,但我在接下来的步骤中修复了它:

1)将此代码添加到Podfile:

post_install do |installer|
    copy_pods_resources_path = "Pods/Target Support Files/Pods-IconTest/Pods-IconTest-resources.sh"
    string_to_replace = '--compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}"'
    assets_compile_with_app_icon_arguments = '--compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" --app-icon "${ASSETCATALOG_COMPILER_APPICON_NAME}" --output-partial-info-plist "${BUILD_DIR}/assetcatalog_generated_info.plist"'
    text = File.read(copy_pods_resources_path)
    new_contents = text.gsub(string_to_replace, assets_compile_with_app_icon_arguments)
    File.open(copy_pods_resources_path, "w") {|file| file.puts new_contents }
end

2)更改应用的copy_pods_resources_path并运行“pod update”。 这应该可以解决你的问题!

答案 11 :(得分:1)

这个问题是由iOS 11的 CocoaPods 引起的。经过一些研究我找到了一个解决方案:

 post_install do |installer|
     copy_pods_resources_path = "Pods/Target Support Files/Pods-XXX/Pods-XXX-resources.sh"
     string_to_replace = '--compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}"'
     assets_compile_with_app_icon_arguments = '--compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}"
     --app-icon "${ASSETCATALOG_COMPILER_APPICON_NAME}" --output-partial-info-plist "${BUILD_DIR}/assetcatalog_generated_info.plist"'
     text = File.read(copy_pods_resources_path)
     new_contents = text.gsub(string_to_replace, assets_compile_with_app_icon_arguments)
     File.open(copy_pods_resources_path, "w") {|file| file.puts new_contents } 
end

只需将上面的内容添加到podfile,然后在终端中执行 pod install 。 但是上面的代码有限制。 可能有这样的条件,比如我们有多个pod,然后我们需要循环运行。

 post_install do |installer|
     installer.aggregate_targets.each do |target|
         copy_pods_resources_path = "Pods/Target Support Files/Pods-Fixr/Pods-Fixr-resources.sh"

         string_to_replace = '--compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}"'
         assets_compile_with_app_icon_arguments = '--compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}"
         --app-icon "${ASSETCATALOG_COMPILER_APPICON_NAME}" --output-partial-info-plist "${BUILD_DIR}/assetcatalog_generated_info.plist"'
         text = File.read(copy_pods_resources_path)
         new_contents = text.gsub(string_to_replace, assets_compile_with_app_icon_arguments)
         File.open(copy_pods_resources_path, "w") {|file| file.puts new_contents }
     end

有多个文件时工作正常。

答案 12 :(得分:0)

1-将此代码添加到Podfile:

observeOn

2- pod install

注意:请确保替换为: 豆荚-IconTest / Pods-IconTest-resources.sh

因为IconTest是您应用的名称

或者您可以通过搜索.sh :(检查图像)

来获取此路径

enter image description here

答案 13 :(得分:0)

图标集中的图标大小不正确会导致应用程序图标无法显示@ iOS11。经过多天的调查,我在构建日志中找到了这个条目:

  

显示所有消息,过滤&#34; icon&#34;。警告:   ApplicationIcons.appiconset/Icon-40@2x.png是80x80,但应该是   60X60。

虽然此消息存在,但我的应用图标始终未显示(即会看到默认的iOS应用徽标)。我更正了问题图标文件(使用正确大小的图像交换它),现在我的应用程序图标始终显示。出于某种原因,更改资产目录应用程序图标集名称&#39;将此问题更正为一次性。后续的应用程序构建将导致再次显示默认图标。

答案 14 :(得分:0)

在我的情况下,其中一个Pod包含.xcasset。删除它解决了这个问题。

答案 15 :(得分:0)

在我的情况下,在我更改

后,应用程序图标开始在Finder中正确显示
<key>CFBundleIconFile</key>
<string>AppIcon</string>

<key>CFBundleIconFile</key>
<string>AppIcon.icns</string>
Info.plist中的

。我的XCode版本是8.3.3

答案 16 :(得分:0)

更改颜色配置文件的简单方法是使用Automator。 为每个文件和文件夹创建一个作业

Screenshot Automator

并保存。 然后,您可以标记资产中的所有图标文件,然后选择作业。 图标的所有配置文件都将被制作:)

答案 17 :(得分:0)

在尝试了大量这些解决方案后,这就是为我解决的问题:

  

1)。删除任何我的Pod文件夹中的任何.xcassets文件夹

然后删除对这些文件的任何引用:

  

2)。 Pods&gt;目标支持文件&gt; Pods-YourApp-resources.sh

非常,在我的应用程序&gt;构建阶段&gt;复制Pod资源

  

3)。删除对相同.xcassets路径的任何引用

之后为了安全起见我做了一个Clean,Clean构建文件夹,然后删除了Derived Data。关闭Xcode并重新打开,瞧!

希望这对某人有所帮助,我花了大约半天的时间来解决这个问题......

答案 18 :(得分:0)

经过几天的研究,我发现了问题所在,我认为罪魁祸首是导致iOS 11上缺少应用程序图标问题的xcode 10 beta。

我降级到xcode 9.4.1,现在该图标也出现在ios 11上。

答案 19 :(得分:0)

就我而言

  • Xcode 10.3
  • macOS 10.14.5

我有一个使用.icns而不是.xcassets的旧项目。 该应用程序甚至在我...之后仍坚持使用旧图标。

  • 删除了所有图标文件;
  • Copy Bundle Resources构建阶段中删除了对图标文件的所有引用;
  • 确保输出应用程序捆绑包资源中不包含旧的.icns文件;实际上,那里绝对没有.icns文件!
  • 已清理,深度清理的项目生成文件夹,在重建之前手动删除了~/Library/Developer/Xcode/DerivedData
  • 在项目中添加了Assets.xcassets,并测试了该捆绑软件的重命名方式:imagesImagesIcons等;
  • 创建并导入从Icon Set Creator生成的图标集图像;该图标集适用于新的空macOS Cocoa项目。

对我有用的是几次绝望的尝试:

  • 更改了捆绑包标识符,并确保一切仍在构建:这涉及Xcode建议对项目元数据进行的一键式修复,例如https://stackoverflow.com/a/45976427/987846并重新生成.entitlements
  • li>
  • 已删除CFBundleIconFIle属性并将其重新添加到目标的Info.plist。将其命名为AppIcon
  • 在目标的App Icon设置中设置General属性以使用我的.xcassets
  • 经验丰富的.xcassets在我身后生成了另一个名为AppIcon-2的空AppIcon,因此从.xcassets手动将其删除,然后将目标的应用图标重置为AppIcon。 / li>
  • .xcassets读入Copy Bundle Resources构建阶段。

重建后,这次将正确的.icns复制到应用程序包的资源文件夹中。

答案 20 :(得分:0)

Andrew Dunkin在评论另一个建议的答案时,我的图像资产未包含在“复制捆绑资源”构建阶段中。我花了比寻找该解决方案多得多的时间,所以我希望我可以节省一些时间。

  1. 转到项目->构建阶段
  2. 打开Copy Bundle Resources下拉列表
  3. 确保此阶段中包含带有图像资产的文件夹。如果没有添加。 (我的资产文件夹的名称为 Assets.xcassets

答案 21 :(得分:0)

就我而言,我有一个名为“Images”的资产文件,我必须创建一个名为“Assets”的资产文件。然后在里面创建一个AppIcon。

Step 1

Step 2

Step 3

Step 4