为什么 Xcode 在 OS X 应用程序项目中忽略我的应用程序图标的更大尺寸的 .xcassets?
Why does Xcode ignore my .xcassets larger sizes for my app icon in an OS X app project?
我正在努力为我的 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 图像会占用整个 window。)
当我在 Xcode 中检查这些图像时,通过单击每个孔,它会在检查器区域中显示看起来不错的信息——正确的名称、大小、比例等。同样,. json .xcassets 中的文件看起来不错:
{
"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 中 select 应用程序本身时,会显示一个模糊的图标,该图标明显是从小图标放大的。当我在面板的 NSImageView 中使用 NSApplicationIcon 时,显示的图标很小。较大的尺寸显然没有被复制过来。
我整个上午都在网上阅读有关 .xcassets 的信息,观看有关如何 assemble 它们的 YouTube 视频,以及(当然)查看 Apple 相当无用的文档。我一辈子都弄不明白我做错了什么。有什么想法吗?
更新:
我现在正在尝试让 iconutil 制作 ICNS,希望能理解为什么 Xcode 不能正确完成。我将 AppIcon.appiconset 复制到我的桌面并尝试 "iconutil -c icns AppIcon.appiconset"。它说 "AppIcon.appiconset:error: Invalid Iconset."。我将名称更改为 "AppIcon.iconset" 以防出现问题,并将其错误更改为 "AppIcon.iconset:error: Failed to generate ICNS." 我突然想到,也许图像需要与 .iconset 的名称具有相同的名称,所以我将它们全部从 "mondrian" 开头更改为 "AppIcon" 开头。仍然收到 "AppIcon.iconset:error: Failed to generate ICNS." 如果 iconutil 打印出更多有用的错误消息当然会很好。
我还刚刚在 GraphicConverter 中打开了所有图像文件,添加了一个 alpha 通道,然后将它们保存回来,认为可能需要一个 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 文件。谜团比比皆是。无论如何,也许这个记录对处于类似情况的其他人有所帮助。
我遇到了同样的问题。 "Clean Build"、"Clean Build Folder" (⎇⇧⌘K) 和其他建议并没有改善问题,但它们确实为我指明了正确的方向。
我按照这个 guide 创建了图标集,但它可能已经过时了 and/or 我犯了一个错误,把事情搞砸了。
在开始以下似乎已解决问题的步骤之前,我能够在我的应用程序包中查看所有正确的图标。
查看包 > Contents/Resources/*.icns
要重置所有内容,我执行了以下操作:
从项目中删除所有相关图标:
- 使用项目导航器从项目中删除 assetcatalog 和 iconset 文件夹。我相信 icns 文件夹是由命令行图标实用程序创建的,不需要。
- 从项目文件夹中手动删除关联的文件夹。
- 重新启动 Xcode 以取得良好效果。
再次添加图标:
由于文件系统上的 iconset 文件夹中仍然有所有正确的图标,我执行了以下操作以将图标添加到项目中:
在项目导航器中右键单击项目文件夹,然后 select "New File..."
Select OS X > Resource > Asset Catalog 在项目文件夹中新建一个asset catalog文件夹。试图将其指向现有的 iconset 文件夹似乎会使事情复杂化。
在Project Navigator中点击新建的assets文件夹,然后右键点击Xcode界面中央的新图标占位符。 Select "New Mac OS Icon" 从弹出菜单中。您现在应该看到不同图标大小的所有空井。
再次右键单击并从您现有的 iconset 文件夹中 "Import..."(这一步显示我有一些额外的 .png Xcode 不知道如何处理)。从一个容器拖放到另一个容器,直到所有容器都被填满,然后移除空的图标支架。右键单击还会在菜单底部显示一个有用的 "Get Asset Catalog" link,通过普通帮助选项不容易找到它(它也不在屏幕顶部的主编辑器菜单下)。
清理构建、清理文件夹并构建。
我发现如果我使用 Preview.app 重新保存图像,确保每张图像的 canvas 大小和 ppi 正确,我就能得到所有 10 个表示生成的 icns 文件。
我的猜测是 Photoshop 或 Photoshop Elements 向文件中注入了 iconutil/xcode 不喜欢的额外垃圾。事实上 post-save,每个文件都小得多(16x16 1x 从 374kb 到 1kb)。
除了上述解决方案外,使用 "sRgb" 颜色配置文件保存图像也解决了我的问题。可以通过预览或 photoshop 或其他首选编辑器来完成。
我正在努力为我的 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 图像会占用整个 window。)
当我在 Xcode 中检查这些图像时,通过单击每个孔,它会在检查器区域中显示看起来不错的信息——正确的名称、大小、比例等。同样,. json .xcassets 中的文件看起来不错:
{
"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 中 select 应用程序本身时,会显示一个模糊的图标,该图标明显是从小图标放大的。当我在面板的 NSImageView 中使用 NSApplicationIcon 时,显示的图标很小。较大的尺寸显然没有被复制过来。
我整个上午都在网上阅读有关 .xcassets 的信息,观看有关如何 assemble 它们的 YouTube 视频,以及(当然)查看 Apple 相当无用的文档。我一辈子都弄不明白我做错了什么。有什么想法吗?
更新:
我现在正在尝试让 iconutil 制作 ICNS,希望能理解为什么 Xcode 不能正确完成。我将 AppIcon.appiconset 复制到我的桌面并尝试 "iconutil -c icns AppIcon.appiconset"。它说 "AppIcon.appiconset:error: Invalid Iconset."。我将名称更改为 "AppIcon.iconset" 以防出现问题,并将其错误更改为 "AppIcon.iconset:error: Failed to generate ICNS." 我突然想到,也许图像需要与 .iconset 的名称具有相同的名称,所以我将它们全部从 "mondrian" 开头更改为 "AppIcon" 开头。仍然收到 "AppIcon.iconset:error: Failed to generate ICNS." 如果 iconutil 打印出更多有用的错误消息当然会很好。
我还刚刚在 GraphicConverter 中打开了所有图像文件,添加了一个 alpha 通道,然后将它们保存回来,认为可能需要一个 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 文件。谜团比比皆是。无论如何,也许这个记录对处于类似情况的其他人有所帮助。
我遇到了同样的问题。 "Clean Build"、"Clean Build Folder" (⎇⇧⌘K) 和其他建议并没有改善问题,但它们确实为我指明了正确的方向。
我按照这个 guide 创建了图标集,但它可能已经过时了 and/or 我犯了一个错误,把事情搞砸了。
在开始以下似乎已解决问题的步骤之前,我能够在我的应用程序包中查看所有正确的图标。 查看包 > Contents/Resources/*.icns
要重置所有内容,我执行了以下操作:
从项目中删除所有相关图标:
- 使用项目导航器从项目中删除 assetcatalog 和 iconset 文件夹。我相信 icns 文件夹是由命令行图标实用程序创建的,不需要。
- 从项目文件夹中手动删除关联的文件夹。
- 重新启动 Xcode 以取得良好效果。
再次添加图标:
由于文件系统上的 iconset 文件夹中仍然有所有正确的图标,我执行了以下操作以将图标添加到项目中:
在项目导航器中右键单击项目文件夹,然后 select "New File..."
Select OS X > Resource > Asset Catalog 在项目文件夹中新建一个asset catalog文件夹。试图将其指向现有的 iconset 文件夹似乎会使事情复杂化。
在Project Navigator中点击新建的assets文件夹,然后右键点击Xcode界面中央的新图标占位符。 Select "New Mac OS Icon" 从弹出菜单中。您现在应该看到不同图标大小的所有空井。
再次右键单击并从您现有的 iconset 文件夹中 "Import..."(这一步显示我有一些额外的 .png Xcode 不知道如何处理)。从一个容器拖放到另一个容器,直到所有容器都被填满,然后移除空的图标支架。右键单击还会在菜单底部显示一个有用的 "Get Asset Catalog" link,通过普通帮助选项不容易找到它(它也不在屏幕顶部的主编辑器菜单下)。
清理构建、清理文件夹并构建。
我发现如果我使用 Preview.app 重新保存图像,确保每张图像的 canvas 大小和 ppi 正确,我就能得到所有 10 个表示生成的 icns 文件。
我的猜测是 Photoshop 或 Photoshop Elements 向文件中注入了 iconutil/xcode 不喜欢的额外垃圾。事实上 post-save,每个文件都小得多(16x16 1x 从 374kb 到 1kb)。
除了上述解决方案外,使用 "sRgb" 颜色配置文件保存图像也解决了我的问题。可以通过预览或 photoshop 或其他首选编辑器来完成。