【问题标题】:The app icon set "AppIcon" has an unassigned child应用程序图标集“AppIcon”有一个未分配的子项
【发布时间】:2016-05-21 02:43:31
【问题描述】:

我清理构建了我的应用程序并看到此错误消息:应用程序图标集“AppIcon”有一个未分配的子项。

当我查看 Images.xcassets 时,每个图标槽都填充了正确的图标,并且没有未分配的图标。在过去,XCode 似乎会随机忘记图标的插槽并将其放在所有标记的图标插槽下方。在那些情况下,我将图标拖回正确的插槽并且错误消失了。也没有任何关于任何图标大小错误的错误。

我检查了 Images.xcassets/AppIcon.appiconset/Contents.json 并且 JSON 中没有具有空白文件名的条目。

我正在使用 XCode 7.2。

我将不胜感激。

【问题讨论】:

  • 您是否尝试过添加另一个应用图标集并将相同的图像移至该图标集?
  • @jervine10 您的意思是向同一个资产目录添加另一个图标集,还是创建一个新的资产目录?这可能会解决问题吗?或者这是发现问题根源的一种方式?
  • 我的意思是添加另一个图标集。如果您没有看到任何未分配的图像,则可能是某处存在内部错误。创建一个新的图标集并查看问题是否仍然存在可能会排除此选项,而且操作很简单。
  • @jervine10 谢谢。我注意到有 4 个图标在 Content.json 中的名称中有破折号,但在导航器或文件系统中的名称中没有破折号。我删除并阅读了这些,警告消失了。当我阅读它们时,只有 2 个在 Content.json 中有破折号。

标签: ios xcode xcode7


【解决方案1】:

在我的例子中,contents.json 中的文件名神奇地消失了。

已从新的 Flutter 项目中替换了 contents.json 文件的内容。

【讨论】:

    【解决方案2】:

    这个错误的另一个原因是:磁盘上的文件名大小写和Content.json 不同。他们需要匹配。

    在我的例子中,磁盘上的文件名都是小写的,这就是它们在Content.json 中的引用方式。然后我得到了新的图像,它们是大写的,我只是将它们拖到 Xcode 中来更新它们。现在 on-disk 和 Content.json 都指的是大写的文件。

    但是 Git 并没有选择这种变化,它只是认为文件已更新并且没有改变大小写。所以在构建服务器上,我最终得到了小写的文件名,但Content.json 指的是大写的文件名。需要在我的系统上将它们小写并修复Content.json

    【讨论】:

      【解决方案3】:

      当图像文件的名称中有特殊字符时,我遇到了未分配子项的问题。去掉特殊字符后,问题就解决了。

      【讨论】:

        【解决方案4】:

        我拥有计算机科学学位,但我很尴尬地说我花了多长时间才让应用图标适用于我的 watchOS 应用。

        以下是我认为我学到的:

        • 绝对 1000% 确保 Info.plist 中的内容与 Contents.json 中的内容完全匹配(包括它的路径,它定义了集合的名称)并且还匹配 . csproj 文件 (ItemGroup/ImageAsset)。如果您的 Info.plist 中有任何文件被多次使用,请在 .csproj 中仅列出一次。以文本模式编辑这些文件。复制/粘贴是您的朋友。
        • 确保 Info.plist 有 forward 斜杠,而 .csproj 有 back 斜杠。复制/粘贴是你的敌人。
        • 在您的资产目录或 .csproj 中不要有额外的文件——这就是“未分配子”警告的来源
        • 如果您使用 Visual Studio 打开资产目录并显示任何设置不正确,让它修复或使用它来修复,然后返回并手动编辑/验证 Content.json 和 .csproj
        • 我还输入了<key>CFBundlePackageType</key><string>APPL</string> 并将其命名为AppIcons.appiconset,尽管我不确定这些是否重要

        我将完整的 Contents.json 粘贴在下面。我从 Xamarin 示例“WatchKitCatalog”中提取了它。

        祝你好运。

        {
          "images": [
            {
              "scale": "1x",
              "size": "1024x1024",
              "idiom": "watch-marketing",
              "filename": "icon1024.png"
            },
            {
              "role": "notificationCenter",
              "subtype": "38mm",
              "scale": "2x",
              "size": "24x24",
              "idiom": "watch",
              "filename": "icon48.png"
            },
            {
              "role": "notificationCenter",
              "subtype": "42mm",
              "scale": "2x",
              "size": "27.5x27.5",
              "idiom": "watch",
              "filename": "icon55.png"
            },
            {
              "role": "companionSettings",
              "scale": "2x",
              "size": "29x29",
              "idiom": "watch",
              "filename": "icon58.png"
            },
            {
              "role": "companionSettings",
              "scale": "3x",
              "size": "29x29",
              "idiom": "watch",
              "filename": "icon87.png"
            },
            {
              "role": "appLauncher",
              "subtype": "38mm",
              "scale": "2x",
              "size": "40x40",
              "idiom": "watch",
              "filename": "icon80.png"
            },
            {
              "role": "appLauncher",
              "subtype": "40mm",
              "scale": "2x",
              "size": "44x44",
              "idiom": "watch",
              "filename": "Mark_NoType_SM_Trans88x88.png"
            },
            {
              "role": "appLauncher",
              "subtype": "44mm",
              "scale": "2x",
              "size": "50x50",
              "idiom": "watch",
              "filename": "Mark_NoType_SM_Trans100x100.png"
            },
            {
              "role": "quickLook",
              "subtype": "38mm",
              "scale": "2x",
              "size": "86x86",
              "idiom": "watch",
              "filename": "icon172.png"
            },
            {
              "role": "quickLook",
              "subtype": "42mm",
              "scale": "2x",
              "size": "98x98",
              "idiom": "watch",
              "filename": "icon196.png"
            },
            {
              "role": "quickLook",
              "subtype": "44mm",
              "scale": "2x",
              "size": "108x108",
              "idiom": "watch",
              "filename": "Mark_NoType_SM_Trans216x216.png"
            }
          ],
          "properties": {},
          "info": {
            "version": 1,
            "author": "xcode"
          }
        }

        【讨论】:

          【解决方案5】:

          检查您是否选择了正确的图像尺寸。如果显示要放置 80x80 尺寸的图像,那么您只需放置 80x80 尺寸,不能少也不能多。

          【讨论】:

            【解决方案6】:

            遇到同样的错误,但以不同的方式解决。

            在项目中导航到 Assets.xcassets/AppIcon.appiconset/Contents.json 并打开此 JSON 文件。

            查看并删除任何不必要的图标集。

            对我来说,它是一组 iPad 图标(看到该应用程序仅与 iPhone 兼容,就不需要了)。

            移除后,清理 - 然后 - 构建

            【讨论】:

              【解决方案7】:

              选择未分配的图像并通过删除按钮将其删除。清理并构建。

              【讨论】:

              • 没想到这么简单,哈哈
              【解决方案8】:

              我注意到有 4 个图标在 Content.json 中的名称中有破折号,但在导航器或文件系统中的名称中没有破折号。我删除并阅读了这些,警告消失了。当我阅读它们时,只有 2 个在 Content.json 中有破折号。

              这可能是一个 XCode 错误。

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 2016-05-07
                • 2016-02-05
                • 1970-01-01
                • 2015-06-02
                • 2015-06-08
                • 2019-04-27
                • 2015-03-14
                相关资源
                最近更新 更多