制作 macOS 图标集(.icns)
背景知识
在 macOS 开发中,应用程序的图标需要以 .icns(Apple Icon Image Format)格式提供。与普通的 .png 或 .jpg 不同,.icns 文件实际上是一个图标容器,内部包含了多种尺寸和分辨率的图标,以便系统在不同场景下自动选择最合适的版本:
- Finder 列表视图:使用 16×16 或 32×32 像素图标
- Finder 图标视图:使用 128×128 或 256×256 像素图标
- Dock 栏:使用 128×128 或 256×256 像素图标
- Retina 屏幕:使用
@2x高分辨率图标(实际像素是显示尺寸的两倍)
一个完整的 .icns 文件通常包含 10 个图像资源,覆盖从 16×16 到 512×512@2x(1024×1024)的所有常见尺寸。
前置要求
- macOS 系统(依赖
sips和iconutil命令) - 一张高清的源图标图片(建议至少 1024×1024 像素,格式为 PNG)
- 源图标最好是正方形,且背景为透明(macOS 图标通常为圆角矩形)
手动制作步骤
1. 准备目录和素材
将源图标文件(如 icon.png)放在工作目录下,然后创建 .iconset 文件夹:
shell
mkdir icons.iconset
.iconset是一种特殊的文件夹扩展名,macOS 会将其识别为图标集。
2. 生成各尺寸图标
使用 sips(Scriptable Image Processing System)命令将源图标缩放为不同尺寸:
shell
# 16×16 像素(标准分辨率)
sips -z 16 16 icon.png -o icons.iconset/icon_16x16.png
# 16×16@2x = 32×32 像素(Retina 分辨率)
sips -z 32 32 icon.png -o icons.iconset/icon_16x16@2x.png
# 32×32 像素(标准分辨率)
sips -z 32 32 icon.png -o icons.iconset/icon_32x32.png
# 32×32@2x = 64×64 像素(Retina 分辨率)
sips -z 64 64 icon.png -o icons.iconset/icon_32x32@2x.png
# 128×128 像素(标准分辨率)
sips -z 128 128 icon.png -o icons.iconset/icon_128x128.png
# 128×128@2x = 256×256 像素(Retina 分辨率)
sips -z 256 256 icon.png -o icons.iconset/icon_128x128@2x.png
# 256×256 像素(标准分辨率)
sips -z 256 256 icon.png -o icons.iconset/icon_256x256.png
# 256×256@2x = 512×512 像素(Retina 分辨率)
sips -z 512 512 icon.png -o icons.iconset/icon_256x256@2x.png
# 512×512 像素(标准分辨率)
sips -z 512 512 icon.png -o icons.iconset/icon_512x512.png
# 512×512@2x = 1024×1024 像素(Retina 分辨率)
sips -z 1024 1024 icon.png -o icons.iconset/icon_512x512@2x.pngsips 参数说明:
-z height width:指定输出图像的高度和宽度(保持缩放)-o output:指定输出文件路径
3. 打包为 .icns 文件
使用 iconutil 命令将 .iconset 文件夹编译为 .icns 文件:
shell
iconutil -c icns icons.iconset -o icon.icns参数说明:
-c icns:指定输出格式为 icns-o output:指定输出文件名
执行成功后,会在当前目录下生成 icon.icns 文件。
一键脚本
如果经常需要制作图标,可以将上述命令保存为脚本:
shell
#!/bin/bash
# 用法:./make_icns.sh <源图片路径> [输出名称]
# 示例:./make_icns.sh logo.png MyApp
SOURCE="${1:-icon.png}"
OUTPUT="${2:-icon}"
if [ ! -f "$SOURCE" ]; then
echo "错误:找不到源图片 $SOURCE"
echo "用法:$0 <源图片路径> [输出名称]"
exit 1
fi
# 清理并创建目录
rm -rf "${OUTPUT}.iconset"
mkdir "${OUTPUT}.iconset"
echo "正在生成各尺寸图标..."
sips -z 16 16 "$SOURCE" -o "${OUTPUT}.iconset/icon_16x16.png"
sips -z 32 32 "$SOURCE" -o "${OUTPUT}.iconset/icon_16x16@2x.png"
sips -z 32 32 "$SOURCE" -o "${OUTPUT}.iconset/icon_32x32.png"
sips -z 64 64 "$SOURCE" -o "${OUTPUT}.iconset/icon_32x32@2x.png"
sips -z 128 128 "$SOURCE" -o "${OUTPUT}.iconset/icon_128x128.png"
sips -z 256 256 "$SOURCE" -o "${OUTPUT}.iconset/icon_128x128@2x.png"
sips -z 256 256 "$SOURCE" -o "${OUTPUT}.iconset/icon_256x256.png"
sips -z 512 512 "$SOURCE" -o "${OUTPUT}.iconset/icon_256x256@2x.png"
sips -z 512 512 "$SOURCE" -o "${OUTPUT}.iconset/icon_512x512.png"
sips -z 1024 1024 "$SOURCE" -o "${OUTPUT}.iconset/icon_512x512@2x.png"
echo "正在打包为 .icns..."
iconutil -c icns "${OUTPUT}.iconset" -o "${OUTPUT}.icns"
# 可选:清理临时目录
rm -rf "${OUTPUT}.iconset"
echo "完成!已生成 ${OUTPUT}.icns"保存为 make_icns.sh 后执行:
shell
chmod +x make_icns.sh
./make_icns.sh my_logo.png MyAppIcon图标设计建议
尺寸规范
| 用途 | 尺寸 | 备注 |
|---|---|---|
| 列表视图 | 16×16, 32×32 | Finder 列表模式 |
| 图标视图 | 128×128, 256×256 | Finder 图标模式 |
| Dock | 128×128, 256×256, 512×512 | Dock 栏显示 |
| Retina 支持 | 所有尺寸的 @2x 版本 | 高分辨率屏幕必需 |
设计要点
- 圆角矩形:macOS 图标通常为圆角矩形,圆角半径约为图标宽度的 22.5%
- 避免透明边框:图标内容应填满画布,不要留过多的透明边距
- 简洁明了:小尺寸(16×16, 32×32)下仍需清晰可辨
- 一致性:遵循 macOS Human Interface Guidelines 的设计风格
在 Xcode 项目中使用
生成 .icns 文件后,在 Xcode 中使用:
- 将
icon.icns拖入项目的Assets.xcassets或资源目录 - 或者在
Info.plist中配置CFBundleIconFile键值为icon - 对于 macOS 10.14+,建议使用
Assets.xcassets中的AppIcon资源集,直接拖入各尺寸图片即可
常见问题
1. iconutil 报错 "Invalid iconset"
通常是因为 .iconset 文件夹中的文件命名不符合规范。必须严格使用以下命名格式:
icon_<width>x<height>.png
icon_<width>x<height>@2x.png2. 生成的图标模糊
确保源图片分辨率足够高(至少 1024×1024),且为透明背景的 PNG 格式。
3. sips 命令找不到
sips 是 macOS 系统自带的工具,如果找不到,请检查是否在 macOS 环境下运行。