应用图标集“AppIcon”有一个未分配的子级。

26

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

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

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

我正在使用XCode 7.2。

我希望能得到任何帮助。


你尝试过添加另一个应用程序图标集,然后将相同的图像移动到那里吗? - jervine10
@jervine10 你是指将另一个图标集添加到同一资源目录中,还是创建一个新的资源目录?这样做有可能解决问题吗?还是这是发现问题来源的一种方式? - John Cashew
我的意思是添加另一个图标集。如果您没有看到任何未分配的图像,那么可能存在某个内部错误。创建一个新的图标集并查看问题是否仍然存在可以排除此选项,而且这很简单。 - jervine10
1
@jervine10 谢谢。我注意到 Content.json 中有 4 个图标的名称中带有破折号,但在导航器或文件系统中它们的名称中没有破折号。我将它们删除并重新添加后,警告消失了。当我重新添加它们时,只有 2 个图标在 Content.json 中带有破折号。 - John Cashew
9个回答

49

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


没想到这会这么容易,哈哈 - gtxtreme

10

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

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

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

对我来说,这是一组iPad图标(因为应用程序只适用于iPhone,所以不需要)。

一旦删除,先清除-然后构建


4
另一个导致此错误的原因是:在磁盘上和Content.json中文件名大小写不一致。它们需要匹配。
在我的情况下,磁盘上的文件名都是小写的,并且它们在Content.json中也是这样引用的。然后我得到了新图片,它们的字母大写,我只需将它们拖到Xcode中进行更新即可。现在,磁盘上和Content.json都指向了字母大写的文件。
但是Git没有检测到大小写的更改,它只认为文件已更新,并没有更改大小写。因此,在构建服务器上,我最终得到了小写的文件名,但是Content.json却引用了它们的大写形式。所以我需要在我的系统上将它们转换成小写,并修复Content.json

0

检查是否选择了正确的图像尺寸。如果显示要放置80x80大小的图像,则必须仅放置80x80大小,不多不少。


0

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

这可能是XCode的一个bug。


0

在我的情况下,contents.json 文件名神奇地消失了。

我已经用一个新的 Flutter 项目替换了 contents.json 文件的内容。


0

我曾经遇到过这样的问题,当图像文件名中包含特殊字符时,会出现未分配子级的问题。但是,一旦删除了这些特殊字符,问题就得到了解决。


0

我拥有计算机科学学位,但我不好意思说我花了多长时间才让我的watchOS应用程序的应用图标正常工作。

以下是我认为我已经学到的内容:

  • 绝对要确保 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"
  }
}


0
似乎最近在使用Xcode构建时出现了一些变化和应用程序图标失败的问题,即使文件名和Contents.json中的图标名称匹配,也会显示以下错误:
无法将应用程序图标集中的图像数据从"AppIcon.appiconset/120.png"写入到"/Users/redacted/Library/Developer/Xcode/DerivedData/Runner-gvtobjleqotxoegcxkjxrghpepal/Build/Products/Debug-iphoneos/Runner.app/AppIcon60x60@2x.png"。
或者
应用程序图标集"AppIcon"有一个未分配的子项。
之前所有正常工作的图标生成网站都出现了类似的错误。这是唯一一个有效的网站:
图标名称:
Icon-App-20x20@1x.png Icon-App-20x20@2x.png Icon-App-20x20@3x.png Icon-App-29x29@1x.png Icon-App-29x29@2x.png Icon-App-29x29@3x.png Icon-App-40x40@1x.png Icon-App-40x40@2x.png Icon-App-40x40@3x.png Icon-App-60x60@2x.png Icon-App-60x60@3x.pngIcon-App-76x76@1x.png Icon-App-76x76@2x.png Icon-App-83.5x83.5@2x.png ItunesArtwork@2x.png

Contents.json:

{
    "images":[
        {
            "idiom":"iphone",
            "size":"20x20",
            "scale":"2x",
            "filename":"Icon-App-20x20@2x.png"
        },
        {
            "idiom":"iphone",
            "size":"20x20",
            "scale":"3x",
            "filename":"Icon-App-20x20@3x.png"
        },
        {
            "idiom":"iphone",
            "size":"29x29",
            "scale":"1x",
            "filename":"Icon-App-29x29@1x.png"
        },
        {
            "idiom":"iphone",
            "size":"29x29",
            "scale":"2x",
            "filename":"Icon-App-29x29@2x.png"
        },
        {
            "idiom":"iphone",
            "size":"29x29",
            "scale":"3x",
            "filename":"Icon-App-29x29@3x.png"
        },
        {
            "idiom":"iphone",
            "size":"40x40",
            "scale":"2x",
            "filename":"Icon-App-40x40@2x.png"
        },
        {
            "idiom":"iphone",
            "size":"40x40",
            "scale":"3x",
            "filename":"Icon-App-40x40@3x.png"
        },
        {
            "idiom":"iphone",
            "size":"60x60",
            "scale":"2x",
            "filename":"Icon-App-60x60@2x.png"
        },
        {
            "idiom":"iphone",
            "size":"60x60",
            "scale":"3x",
            "filename":"Icon-App-60x60@3x.png"
        },
        {
            "idiom":"iphone",
            "size":"76x76",
            "scale":"2x",
            "filename":"Icon-App-76x76@2x.png"
        },
        {
            "idiom":"ipad",
            "size":"20x20",
            "scale":"1x",
            "filename":"Icon-App-20x20@1x.png"
        },
        {
            "idiom":"ipad",
            "size":"20x20",
            "scale":"2x",
            "filename":"Icon-App-20x20@2x.png"
        },
        {
            "idiom":"ipad",
            "size":"29x29",
            "scale":"1x",
            "filename":"Icon-App-29x29@1x.png"
        },
        {
            "idiom":"ipad",
            "size":"29x29",
            "scale":"2x",
            "filename":"Icon-App-29x29@2x.png"
        },
        {
            "idiom":"ipad",
            "size":"40x40",
            "scale":"1x",
            "filename":"Icon-App-40x40@1x.png"
        },
        {
            "idiom":"ipad",
            "size":"40x40",
            "scale":"2x",
            "filename":"Icon-App-40x40@2x.png"
        },
        {
            "idiom":"ipad",
            "size":"76x76",
            "scale":"1x",
            "filename":"Icon-App-76x76@1x.png"
        },
        {
            "idiom":"ipad",
            "size":"76x76",
            "scale":"2x",
            "filename":"Icon-App-76x76@2x.png"
        },
        {
            "idiom":"ipad",
            "size":"83.5x83.5",
            "scale":"2x",
            "filename":"Icon-App-83.5x83.5@2x.png"
        },
        {
            "size" : "1024x1024",
            "idiom" : "ios-marketing",
            "scale" : "1x",
            "filename" : "ItunesArtwork@2x.png"
        }
    ],
    "info":{
        "version":1,
        "author":"redacted"
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接