应用程序图标集“AppIcon”具有未分配的子项

时间:2016-02-10 16:19:30

标签: ios xcode xcode7

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

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

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

我正在使用XCode 7.2。

我将不胜感激。

9 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:1)

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

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

查看并删除所有不必要的图标集。

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

删除后,先清理-然后-构建

答案 2 :(得分:0)

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

这可能是一个XCode错误。

答案 3 :(得分:0)

我在更新Xcode后遇到了这个问题。

在资产目录中,选择导致警告的图像集。可以在图像集的底部找到任何未分配的图像。选择未分配的图像或删除它们。在那之后,干净和构建应该删除警告。

答案 4 :(得分:0)

检查是否选择了正确的图像尺寸。如果显示为放置80x80尺寸的图像,则您只需放置80x80尺寸,不少于不多。

答案 5 :(得分:0)

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

这是我认为我学到的:

  • 绝对要确保1000%确保Info.plist中的内容完全匹配 Contents.json中的内容(包括路径,该路径定义了集合的名称),并且还必须匹配。 csproj文件(ItemGroup / ImageAsset)。如果您的Info.plist中有多次使用的文件,则仅在.csproj中列出一次。在文本模式下编辑这些文件。复制/粘贴是您的朋友。
  • 请确保Info.plist中包含前移斜线,而.csproj中包含后退斜线。复制/粘贴是您的敌人。
  • 资产目录或.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"
  }
}

答案 6 :(得分:0)

当图像文件名称中包含特殊字符时,我遇到了未分配孩子的问题。删除特殊字符后,问题得以解决。

答案 7 :(得分:0)

另一个导致此错误的原因:磁盘上和Content.json中文件名大小写的差异。他们需要匹配。

就我而言,磁盘上的文件名都是小写的,这就是在Content.json中引用它们的方式。然后我得到了新的图像,它们是大写的,我只是将它们拖到Xcode中以对其进行更新。现在,磁盘和Content.json都指向大写的文件。

但是Git并没有选择大写的更改,只是认为文件已更新并且没有更改大小写。因此,在构建服务器上,我最终使用小写的文件名,但是Content.json是指大写的文件名。需要在我的系统上将它们小写并修复Content.json

答案 8 :(得分:0)

就我而言,contents.json中的文件名神奇地消失了。

已经从一个新的flutter项目中替换了content.json文件的内容。