【问题标题】:App Icons not included in build from Xcode应用程序图标未包含在 Xcode 构建中
【发布时间】:2017-09-08 06:16:47
【问题描述】:

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

我已包含所需的图标大小,包括 1024x1024。

【问题讨论】:

  • 看看这里:stackoverflow.com/a/48209761/391605 Apple 似乎悄悄地(而且令人讨厌地)为 iPad 添加了额外的图标要求。
  • 尽量确保每个图像资产文件夹中都有一个“Contents.json”,其中列出了所有资产及其映射到的设备类型。

标签: ios xcode


【解决方案1】:

你并不孤单。

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

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

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

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

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


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

【讨论】:

  • 这对我来说绝对没有意义,我的一个项目正在运行,而另一个没有
  • 我还尝试从我的图标中删除 Alpha 通道,但它仍然不起作用。我绝对同意他们现在拒绝某些 PNG 中的某些东西。
  • 从 .plist 文件中删除密钥“CFBundleIcons~ipad”适用于我的构建,而其他的则没有。在此处查看完整的解决方案:stackoverflow.com/a/47597386/6346864
【解决方案2】:

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

我确信其他颜色配置文件必须有效,但我还没有完成测试。

这可以通过以下方式在预览中完成:

  1. 工具 → 分配配置文件

  1. 选择sRGB IEC61966-2.1

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

【讨论】:

  • 不幸的是,这并不适合所有人,无论如何,谢谢你给了我希望的朋友
  • 我必须移除 Alpha 通道才能使其正常工作。 (为此打开预览中的图标,导出,取消选中 Alpha 通道并另存为 PNG)。
  • 太棒了!经过几天的尝试,这个解决方案对我有用。
  • 从 .plist 文件中删除密钥“CFBundleIcons~ipad”适用于我的构建,而其他的则没有。在此处查看完整的解决方案:link
  • 我没有任何 pod 文件,但我的应用程序图标仍然没有显示。甚至我的图标也不透明。这个技巧解决了它。
【解决方案3】:

在尝试了上述“将颜色配置文件 (sRGB IEC61966-2.1) 分配给图标”“CocoaPods 解决方案”“更改应用程序”等各种解决方案之后项目设置中不同资产名称的图标源名称", 我找到了一个非常基本的解决方案如下:

  1. 清除您的项目。
  2. 清除 (~/Library/Developer/Xcode/DerivedData/) 处的派生数据
  3. 转到“项目 -> 构建阶段”
  4. 找到“复制捆绑资源并将其拖到列表的最后一项”
  5. 如果应用程序已经存在,请卸载它,然后运行项目。

查找屏幕截图以便更好地理解。

之前

之后

注意:您可以通过简单地将“复制捆绑资源”的位置更改为向上的方向来检查项目中应用程序图标的问题。

【讨论】:

  • 我发现了一个类似的修复:复制捆绑资源列表不包括images.xcassets 文件。将文件添加到列表中解决了问题。我不需要重新定位 Copy Bundle Resources 列表本身。
【解决方案4】:

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

【讨论】:

  • 我正在使用来自 AppStore 的名为“Asset Catalog Creator”的 Mac 应用程序来创建应用程序图标。他们一直工作到 Xcode 9。您的评论很有用,我查看了我的图像,颜色配置文件是“Adobe RGB”,我发现我用于创建资产的原始图像也是“Adobe RGB”,有一个在选中“[x] 保留原始颜色配置文件”的“资产目录创建器”中设置首选项,一旦我取消选中该复选框,然后使用原始图像运行图标资产创建器,新图像将使用 sRGB 颜色配置文件创建,现在工作正常!谢谢。
【解决方案5】:

发现的另一个简单修复:

我在使用 XCode 9.0 时遇到了同样的问题,该项目在 XCode 8 和 iOS 10 下运行良好,但在我升级解决方案时突然丢失了它的图标(仅在 iPad 上)。

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

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

CFBundleIcons~ipad

我早就开始在目标构建设置中指定它了。

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

【讨论】:

  • 对我来说恰恰相反。支持 IOS 7,需要将缺少的文件名条目添加到 CFBundleIcons~IPad 字典。当我删除密钥时,尽管在 xcassets 中引用了它,但它却找不到任何图标
  • 对我来说,AppCategory 条目也不能为空。也许这意味着,所有条目都必须填充一些值?
【解决方案6】:

编辑:这需要在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")

【讨论】:

    【解决方案7】:

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

    无论如何,为我解决的问题是更改 Assets.xcassets 中 iOS 应用程序图标的名称(默认 = AppIcon),并更改构建设置中的“资产目录应用程序图标集名称”以对齐用新名字。

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

    【讨论】:

    • 为这篇文章添加了另一个答案。请参阅我的其他更新答案。
    【解决方案8】:

    问题:

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

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

    对我有用的解决方案:

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

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

    从 .plist 文件中删除此密钥 对我的构建有效,而其他的则无效。

    【讨论】:

    • 这是罪魁祸首.. 谢谢!
    【解决方案9】:

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

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

    空白应用程序有一个“复制捆绑资源”构建阶段,它复制了 Assets.xcassets 包。我的没有。所以我创建了一个,添加了我的 Images.xcassets,然后 presto change-o,我的存档得到了验证。注意我很确定我以前从未有过构建阶段,但我能够在一个月前提交构建......

    【讨论】:

      【解决方案10】:

      就我而言,这些解决方案都不起作用。

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

      【讨论】:

        【解决方案11】:

        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”。 这应该可以解决您的问题!

        【讨论】:

          【解决方案12】:

          这个问题是由于 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
          

          结束

          当有多个文件时它工作正常。

          【讨论】:

            【解决方案13】:

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

            Screenshot Automator

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

            【讨论】:

              【解决方案14】:

              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- pod 安装

              注意:确保你替换这个: Pods-IconTest/Pods-IconTest-resources.sh

              因为 IconTest 是您的应用程序的名称

              或者你可以通过搜索.sh得到这个路径:(查看图片)

              【讨论】:

                【解决方案15】:

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

                显示所有消息,过滤“图标”。警告: ApplicationIcons.appiconset/Icon-40@2x.png 是 80x80 但应该是 60x60。

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

                【讨论】:

                  【解决方案16】:

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

                  【讨论】:

                    【解决方案17】:

                    在我的情况下,应用程序图标在我更改后开始在 Finder 中正确显示

                    <key>CFBundleIconFile</key>
                    <string>AppIcon</string>
                    

                    进入

                    <key>CFBundleIconFile</key>
                    <string>AppIcon.icns</string>
                    

                    在 Info.plist 中。我的 XCode 版本是 8.3.3

                    【讨论】:

                      【解决方案18】:

                      在尝试了一堆这些解决方案之后,这就是为我解决它的方法:

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

                      然后删除对这些文件的所有引用:

                      2)。 Pods > 目标支持文件 > Pods-YourApp-resources.sh

                      最后,在我的 App > Build Phases > Copy Pod Resources 下

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

                      之后为了安全起见,我做了一个干净、干净的构建文件夹,然后删除了派生数据。关闭 Xcode 并重新打开,瞧!

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

                      【讨论】:

                        【解决方案19】:

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

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

                        【讨论】:

                          【解决方案20】:

                          就我而言

                          • 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 项目。

                          对我有用的是一些绝望的试验:

                          • 更改了 Bundle Identifier 并确保一切仍在构建:这涉及 Xcode 向项目元数据建议的大量一键修复,例如:https://stackoverflow.com/a/45976427/987846 和重新生成 .entitlements
                          • 已将CFBundleIconFIle 属性删除并重新添加到目标的Info.plist。将其命名为 AppIcon
                          • 在目标的General 设置中设置App Icon 属性以使用我的.xcassets
                          • 有经验.xcassets在我背后生成另一个名为AppIcon-2的空AppIcon,所以手动从.xcassets删除,然后将目标的App Icon重置为AppIcon
                          • .xcassets 读取到Copy Bundle Resources 构建阶段。

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

                          【讨论】:

                            【解决方案21】:

                            正如Andrew Dunkin 评论另一个建议的答案,我的图像资产未包含在复制捆绑资源构建阶段。我花费的时间可能比我应该寻找这个解决方案的时间要长,所以我希望我能节省其他人一些时间。

                            1. 转到 项目 -> 构建阶段
                            2. 打开Copy Bundle Resources下拉菜单
                            3. 确保包含图片资源的文件夹包含在此阶段。如果没有添加它。 (我的资产文件夹的名称是 Assets.xcassets

                            【讨论】:

                            • 一些截图会有更多帮助
                            【解决方案22】:

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

                            【讨论】:

                              猜你喜欢
                              • 1970-01-01
                              • 2019-04-30
                              • 1970-01-01
                              • 1970-01-01
                              • 1970-01-01
                              • 1970-01-01
                              • 2012-03-22
                              • 2013-06-06
                              • 1970-01-01
                              相关资源
                              最近更新 更多