为什么Xcode在OS X应用程序项目中忽略了我的.xcassets更大的尺寸?

时间:2015-01-24 17:59:41

标签: xcode macos icons xcasset

我正在试图为我的OS X应用程序设置自定义图标。我创建了所需的所有图像文件:

mondrian_128x128.png
mondrian_128x128@2x.png
mondrian_16x16.png
mondrian_16x16@2x.png
mondrian_256x256.png
mondrian_256x256@2x.png
mondrian_32x32.png
mondrian_32x32@2x.png
mondrian_512x512.png
mondrian_512x512@2x.png

我已将每张图片拖入AppIcon xcassets区域的相应孔中,现在所有十张图像都显示在那里。 (大于32x32 @ 2x的那些显示的大小与Xcode中32x32 @ 2x的大小相同,但也许应该如此;我猜Xcode是为了节省屏幕空间,因为显示1024x1024图像会占据整个窗口。)

当我在Xcode中检查这些图像时,通过单击每个孔,它会在检查器区域中显示看起来很好的信息 - 正确的名称,大小,比例等。同样,.xcassets中的.json文件看起来不错:

{
  "images" : [
    {
      "size" : "16x16",
      "idiom" : "mac",
      "filename" : "mondrian_16x16.png",
      "scale" : "1x"
    },
    {
      "size" : "16x16",
      "idiom" : "mac",
      "filename" : "mondrian_16x16@2x.png",
      "scale" : "2x"
    },
    {
      "size" : "32x32",
      "idiom" : "mac",
      "filename" : "mondrian_32x32.png",
      "scale" : "1x"
    },
    {
      "size" : "32x32",
      "idiom" : "mac",
      "filename" : "mondrian_32x32@2x.png",
      "scale" : "2x"
    },
    {
      "size" : "128x128",
      "idiom" : "mac",
      "filename" : "mondrian_128x128.png",
      "scale" : "1x"
    },
    {
      "size" : "128x128",
      "idiom" : "mac",
      "filename" : "mondrian_128x128@2x.png",
      "scale" : "2x"
    },
    {
      "size" : "256x256",
      "idiom" : "mac",
      "filename" : "mondrian_256x256.png",
      "scale" : "1x"
    },
    {
      "size" : "256x256",
      "idiom" : "mac",
      "filename" : "mondrian_256x256@2x.png",
      "scale" : "2x"
    },
    {
      "size" : "512x512",
      "idiom" : "mac",
      "filename" : "mondrian_512x512.png",
      "scale" : "1x"
    },
    {
      "size" : "512x512",
      "idiom" : "mac",
      "filename" : "mondrian_512x512@2x.png",
      "scale" : "2x"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

然而,当我构建我的应用程序时,事情似乎搞砸了。没有出现构建警告或错误,但构建的产品没有任何但最小的尺寸。具体来说:由Xcode生成的AppIcon.icns似乎只有16x16和16x16 @ 2x图像。我可以通过在Finder中进行QuickView(如Apple推荐)或在Preview中打开它来看到这一点。此外,当我在Finder中选择它时,应用程序本身会显示一个模糊的图标,该图标从小图标中清晰地放大。当我在面板中的NSImageView中使用NSApplicationIcon时,显示的图标很小。较大的尺寸显然没有被复制过。

我整个上午都在网上阅读.xcassets,观看有关如何组装它们的YouTube视频,以及(当然)查看Apple相当无用的文档。我不能为我的生活弄清楚我做错了什么。有什么想法吗?

更新

我现在正在尝试尝试使用iconutil来制作ICNS,希望能够理解为什么Xcode无法正常运行。我将我的AppIcon.appiconset复制到我的桌面并尝试了“iconutil -c icns AppIcon.appiconset”。它说“AppIcon.appiconset:错误:无效的Iconset。”。如果这是一个问题,我将名称更改为“AppIcon.iconset”,并将其错误更改为“AppIcon.iconset:错误:无法生成ICNS”。在我看来,可能图像需要与.iconset的名称相同,所以我将它们从“mondrian”开始改为以“AppIcon”开头。仍然得到“AppIcon.iconset:错误:无法生成ICNS。”如果iconutil打印出更多有用的错误消息,那肯定会很好。

我还打开了GraphicConverter中的所有图像文件,添加了一个alpha通道,并将它们保存回来,以为可能需要一个alpha通道(虽然我没有看到任何地方提到过 - 但大多数应用确实有他们的图标中的alpha,所以...)。同样,没有变化:“AppIcon.iconset:错误:无法生成ICNS。”。 AARGH。

更新2: 它现在有效。我不知道为什么。我添加了修改后的图像(添加了Alpha通道,保存在GraphicConverter而不是Photoshop Elements中),这些图像在我的桌面上的实验性.iconset中返回到我的Xcode项目的.xcassets中的AppIcon,已清理并构建,现在是都好。 iconutil仍拒绝将其编译为ICNS,但Xcode现在可以执行此操作。我不知道为什么。也许关于我的项目状态的某些内容已损坏,或者可能需要alpha,或者GraphicConverter可能以Xcode比Photoshop Elements格式更喜欢的方式保存PNG文件。神秘事物比比皆是。无论如何,也许这个记录对类似情况下的其他人有帮助。

3 个答案:

答案 0 :(得分:1)

我遇到了同样的问题。 “Clean Build”,“Clean Build Folder”(⎇⇧⌘K)以及其他建议并没有改善问题,但他们确实指出了我正确的方向。

我已按照此guide创建了图标集,但它可能已过时和/或我犯了一个错误并且搞砸了。

在开始以下似乎已解决问题的步骤之前,我能够查看应用包中的所有正确图标。 查看包>内容/资源/ *。ICNS

要重置我执行以下操作的所有内容:

删除与项目相关的所有图标:

  1. 使用Project Navigator从项目中删除assetcatalog和iconset文件夹。我相信icns文件夹是由命令行图标实用程序创建的,不需要。
  2. 从项目文件夹中手动删除关联的文件夹。
  3. 重新启动Xcode。
  4. 再次添加图标:

    由于我仍然在文件系统的iconset文件夹中拥有所有正确的图标,因此我执行了以下操作将图标添加到项目中:

    1. 在Project Navigator中右键单击项目文件夹,然后选择“新文件...”

    2. 选择OS X>资源>资产目录,用于在项目文件夹中创建新的资产目录文件夹。试图将其指向现有的iconset文件夹似乎使事情变得复杂。

    3. 单击Project Navigator中新创建的assets文件夹,然后右键单击Xco​​de界面中心的新图标占位符。从弹出菜单中选择“New Mac OS Icon”。您现在应该看到不同图标尺寸的所有空井。

    4. 再次右键单击并从现有的iconset文件夹中“导入...”(此步骤显示我有一些额外的.pngs Xcode不知道该怎么做)。从一个容器拖放到另一个容器,直到所有容器都填满,然后删除空的图标持有者。右键单击还会在菜单底部显示一个有用的“获取资产目录”链接,该链接通过常规帮助选项不容易找到(它不在屏幕顶部的主编辑菜单下)。

    5. 清理构建,清理文件夹和构建。

答案 1 :(得分:1)

我发现如果我使用Preview.app重新保存图像,确保每个图像的正确画布大小和ppi,那么我就可以在生成的icns文件中显示所有10个表示。

我的猜测是Photoshop或Photoshop元素会在iconutil / xcode不喜欢的文件中注入额外的垃圾。事实上,保存后,每个文件都要小得多(16x16 1x从374kb变为1kb)。

答案 2 :(得分:0)

除上述解决方案外,使用" sRgb"保存图像。颜色配置文件为我解决了这个问题。它可以通过预览或photoshop或其他首选编辑器完成。