我正在努力为我的 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 中快速查看它(如 Apple 推荐的那样)或在预览中打开它来查看这一点。此外,当我在 Finder 中选择它时,应用程序本身会显示一个模糊的图标,该图标明显是从小图标放大的。当我在面板的 NSImageView 中使用 NSApplicationIcon 时,显示的图标很小。较大的尺寸显然没有被复制。
我整个上午都在网上阅读有关 .xcassets 的信息,观看有关如何组装它们的 YouTube 视频,以及(当然)查看 Apple 相当无用的文档。我一生都无法弄清楚我做错了什么。有任何想法吗?
更新:
我现在正在尝试让 iconutil 来制作 ICNS,希望能理解为什么 Xcode 不能正确地做到这一点。我将我的 AppIcon.appiconset 复制到我的桌面并尝试了“iconutil -c icns AppIcon.appiconset”。它说“AppIcon.appiconset:错误:无效的图标集。”。如果这是一个问题,我将名称更改为“AppIcon.iconset”,并将其错误更改为“AppIcon.iconset:error: Failed to generate ICNS”。我突然想到,也许图像需要与 .iconset 的名称具有相同的名称,所以我将它们全部从“mondrian”开头更改为“AppIcon”开头。仍然收到“AppIcon.iconset:error: Failed to generate ICNS”。如果 iconutil 打印出更多有用的错误消息当然会很好。
我还刚刚在 GraphicConverter 中打开了所有图像文件,添加了一个 alpha 通道,然后将它们保存回来,认为可能需要一个 alpha 通道(尽管我在任何地方都没有看到任何提及 - 但大多数应用程序确实在它们的图标,所以...)。同样,没有变化:“AppIcon.iconset:error: Failed to generate ICNS.”。啊。
更新 2: 它现在可以工作了。我不确定为什么。我将桌面上的实验性 .iconset 中的修改图像(添加了 alpha 通道,保存在 GraphicConverter 中而不是从 Photoshop Elements 中)添加回我的 Xcode 项目的 .xcassets 中的 AppIcon,清理并构建,现在都好。iconutil 仍然拒绝将其编译为 ICNS,但 Xcode 现在可以做到。我不知道为什么。也许关于我的项目状态的某些内容已损坏,或者可能需要 alpha,或者 GraphicConverter 以 Xcode 比 Photoshop Elements 格式更喜欢的方式保存 PNG 文件。谜团比比皆是。无论如何,也许这个记录会对处于类似情况的其他人有所帮助。