如何使用iconutil手动创buildicns文件?

当我validation我的应用程序时,我得到这个错误:

应用程序包不包含ICNS格式的图标,包含512x512512x512@2x图像。

我使用Img2icns应用程序制作icns图标,直到今天它一直正常工作。 但现在我得到了这个错误,没有办法让它工作。 我试图把两个PNG文件( 512x512和1024×1024 )放在Img2icns中,但我总是得到这个错误。 我也试图按照苹果的OS X人机界面指南中的说明,但是当我尝试使图标集,我得到这个terminal错误:

-bash:意外标记附近的语法错误'newline'

我用terminal命令不太好,所以也许我做错了什么。 我写了:

 iconutil -c icns </Users/myname/SDK Mac Apps/MyApp/grafica/icon.iconset> 

如果有人能帮助,将非常感激。 谢谢,马西

检出以下说明( 链接 ):

使用iconutil手动创build一个icns文件

iconutil命令行工具将iconset文件夹转换为部署就绪,高分辨率的iconutil文件。 (通过在terminal中inputman iconutil ,您可以find该工具的完整文档。)使用此工具还会压缩生成的man iconutil文件,因此不需要执行其他压缩。

将一组图标转换为icns文件

在terminal窗口中input此命令:

iconutil -c icns <iconset filename>

其中<iconset filename>是包含要转换为<iconset filename>夹的path。 输出写入到iconset file的相同位置,除非您指定一个输出文件,如下所示:

iconutil -c icns -o <icon filename> <iconset filename>

换句话说,你需要用pathreplace<iconset filename>

 /Users/myname/SDK Mac Apps/MyApp/grafica/icon.iconset 

由于path中包含空格,因此需要使用双引号,例如:

 iconutil -c icns "/Users/myname/SDK Mac Apps/MyApp/grafica/icon.iconset" 

这个命令应该正常工作。

这是一个脚本来转换一个1024×1024的PNG(名为“Icon1024.png”)到所需的ICNS文件。 将它保存到一个名为“CreateICNS.src”的文件夹中,然后在你的png文件的terminal“cd”中find相同的文件夹并input“source CreateICNS.src”来调用它:

 mkdir MyIcon.iconset sips -z 16 16 Icon1024.png --out MyIcon.iconset/icon_16x16.png sips -z 32 32 Icon1024.png --out MyIcon.iconset/icon_16x16@2x.png sips -z 32 32 Icon1024.png --out MyIcon.iconset/icon_32x32.png sips -z 64 64 Icon1024.png --out MyIcon.iconset/icon_32x32@2x.png sips -z 128 128 Icon1024.png --out MyIcon.iconset/icon_128x128.png sips -z 256 256 Icon1024.png --out MyIcon.iconset/icon_128x128@2x.png sips -z 256 256 Icon1024.png --out MyIcon.iconset/icon_256x256.png sips -z 512 512 Icon1024.png --out MyIcon.iconset/icon_256x256@2x.png sips -z 512 512 Icon1024.png --out MyIcon.iconset/icon_512x512.png cp Icon1024.png MyIcon.iconset/icon_512x512@2x.png iconutil -c icns MyIcon.iconset rm -R MyIcon.iconset 

有一个命令行节点模块完成将PNG文件转换为iconset目录的所有工作:

 npm install -g node-icns nicns --in adventure-cat.png --out adventure-cat.icns 

这些命令(inputterminal)为我工作,以旧的icns文件转换为新的格式:

 cd Folder_With_Icns_File iconutil -c iconset Your_Icon_Name.icns rm Your_Icon_Name.icns iconutil -c icns Your_Icon_Name.iconset rm -R Your_Icon_Name.iconset 

更新

不再支持iconutil的-c参数。 使用--convert代替:

 cd Folder_With_Icns_File iconutil --convert iconset Your_Icon_Name.icns rm Your_Icon_Name.icns iconutil --convert icns Your_Icon_Name.iconset rm -R Your_Icon_Name.iconset 

虽然使用各种脚本将高分辨率的PNG图像转换为不同的低分辨率副本,但似乎很方便(实际上是这样),但不应该忘记,这种自动resize会使可察觉的不完美图像变得明显。

分辨率越差,图标越模糊!

相反,您应该始终从devise人员处请求某种vector格式的徽标,例如SVG的徽标。 现在,您可以手动准备所有需要的分辨率的完美的PNG文件,然后制作一个单一的文件,这将使您的应用程序图标看起来很漂亮,从手机到一些高端Retina显示屏最新的iMac。

从截至2016年的最新苹果指南 ,您应该准备以下PNG文件:

 +---------------------+--------------------+--------------+ | filename | resolution, pixels | density, PPI | +---------------------+--------------------+--------------+ | icon_16x16.png | 16x16 | 72 | | icon_16x16@2x.png | 32x32 | 144 | | icon_32x32.png | 32x32 | 72 | | icon_32x32@2x.png | 64x64 | 144 | | icon_128x128.png | 128x128 | 72 | | icon_128x128@2x.png | 256x256 | 144 | | icon_256x256.png | 256x256 | 72 | | icon_256x256@2x.png | 512x512 | 144 | | icon_512x512.png | 512x512 | 72 | | icon_512x512@2x.png | 1024x1024 | 144 | +---------------------+--------------------+--------------+ 

在所有的PNG文件准备好之后,将它们放到某个扩展名为Logos.iconset目录中(例如Logos.iconset ),并从terminal执行:

 iconutil --convert icns Logos.iconset 

如果在执行这个命令后没有错误,那么所有的文件都已经准备好了,并且你在同一个目录下得到了Logos.icns文件,包含了你的应用程序的所有漂亮的标志,它们将适用于2017年的任何现代屏幕。

额外的评论,当你创build的图标文件,你需要重命名所有的图片文件前缀“icon_ ”,否则,iconutil将失败,错误信息:“.iconset:错误:无法生成ICNS。 根本没有提供信息。

我重构了@亨利的脚本,使其看起来更好:

 #!/bin/zsh NAME=$(basename $1 .png); DIR="$NAME.iconset" mkdir -pv $DIR for mr in 'n' '' '((n+1))' '@2x'; do for n in $(seq 4 9 | grep -v 6); do p=$((2**$m)); q=$((2**$n)) OUT="$DIR/icon_${q}x${q}${r}.png" sips -z $p $p $1 --out $OUT done done iconutil -c icns $DIR rm -frv $DIR 

更新

不再支持iconutil的-c参数。 使用-—convert代替:

 #!/bin/zsh NAME=$(basename $1 .png); DIR="$NAME.iconset" mkdir -pv $DIR for mr in 'n' '' '((n+1))' '@2x'; do for n in $(seq 4 9 | grep -v 6); do p=$((2**$m)); q=$((2**$n)) OUT="$DIR/icon_${q}x${q}${r}.png" sips -z $p $p $1 --out $OUT done done iconutil -—convert icns $DIR rm -frv $DIR 

当我validation我的应用程序时,我得到这个错误:

应用程序包不包含ICNS格式的图标,包含512×512和512×512 @ 2x图像。

我对terminal命令不太好,所以也许我做错了什么。 我写了:

 iconutil -c icns </Users/myname/SDK Mac Apps/MyApp/grafica/icon.iconset> 

首先,正如我在评论安妮的回答时所提到的,你可能不需要使用iconutil。 您应该能够将iconset添加到您的项目中,并让Xcode将其转换为构build的一部分。

无论哪种方式,这可能是你的问题:

我试着把两个PNG文件放大(512×512和1024×1024)…但我总是得到错误。

没有1024乘1024点的大小。 1024 x 1024像素元素(在Mountain Lion之前为1024点)现在被用于512乘512点@ 2x。

您的PNG文件必须正确命名:icon_512x512@2x.png

苹果的老版本的图标编辑器2.2版本工作得很好,只需打开其中的.ICNS,按下1024x1024button并添加图像。

我写了一个bash脚本,用于从svg文件制作icns:

 #!/usr/bin/env bash sizes=(16 32 64 128 256 512) largfile='icon_512x512@2x.png' if [ ! -f "$largfile" ]; then convert -background none -resize 1024x1024 "$1" "$largfile" fi for s in "${sizes[@]}"; do echo $s convert -background none -resize ${s}x${s} "$largfile" "icon_${s}x$s.png" done cp 'icon_32x32.png' 'icon_16x16@2x.png' mv 'icon_64x64.png' 'icon_32x32@2x.png' cp 'icon_256x256.png' 'icon_128x128@2x.png' cp 'icon_512x512.png' 'icon_256x256@2x.png' mkdir icon.iconset mv icon_*x*.png icon.iconset iconutil -c icns icon.iconset 

确保在mac上安装有librsvg支持的imagemagick:

 brew install imagemagick --with-librsvg 

这个脚本给了我很好的帮助。


更新

为了更彻底的处理,我创build了一个命令行工具(用Swift编写),用于生成具有正确布局和格式的AppIcon.appiconset

https://github.com/kindlychung/genicon

你好,为了我的需要,我做了一个液滴工作在拖放图标单独或图标search文件夹(我限于文件夹作为所有图标的卷search可能需要很多时间)。 因此,在拖放中,您可以放置​​文件夹或应用程序,任何可以包含图标的应用程序。 创build的图标集带有原始图标的名称,它被放置在“/ aaaicones”目录和图标的path中。 例如在文件夹“/ aaaicones,如果你提交xcode.app你会发现”/aaaicones/Applications/xcode.app/access.iconset“和/aaaicones/Applications/xcode.app/access.icns(重新创build的图标)是一个文本文件,它被追踪到图标的完整path,以及相应iconset示例的path“/Applications/xcode.app/Contents/Applications/Instruments.app/Contents/Frameworks/InstrumentsPlugIn.framework/Versions/A (xcode)中的/Resources/access.icns“/aaaicones/Applications/xcode.app/access.iconset”,这可以在最后创build一个文件夹(所有图标和图标集),大小为214 MB。如果您单独处理一个图标,它将被放置在目录“/ aaaicones / aIconeseule /”和它的原始path,例如/ aaaicones / aIconeseule / Mac Elcapitan / .VolumeIcon.icns和/ aaaicones / aIconeseule / Mac Elcapitan /.VolumeIcon。 iconset with / aaaicones / aIconeseule / Mac Elcapitan / aalisticones.txt液滴在下面

 on open draggedItems set input to draggedItems set fich to draggedItems set media to {} set theInfo to {} set n to "0" repeat with currentItem in draggedItems set dirchoisi to POSIX path of fich if ".icns" is not in dirchoisi then if "Volumes" is not in dirchoisi then set origi to do shell script "echo /aaaicones" & dirchoisi set fich to do shell script "echo " & fich & " | xxd -p -c 100000 | sed 's#3a#2f#g' | xxd -r -p | sed 's#" & dirchoisi & "#" & "/aaaicones" & dirchoisi & "#g' | xxd -p -c 100000 | sed 's#2f#3a#g' | xxd -r -p" tell application "Finder" if exists (folder fich) then set nn to "0" repeat with nn from 1 to 5 set origi to do shell script "echo " & origi & "/" & " | sed 's#//#" & nn & "/" & "#'" set fich to do shell script "echo " & fich & " | sed 's#:aaaicones*.*#" & origi & "#'" & " | xxd -p -c 100000 | sed 's#2f#3a#g' | xxd -r -p" if not (exists folder (fich as Unicode text)) then try set origi to do shell script "echo " & origi exit repeat end try end if end repeat end if end tell tell application "Finder" if not (exists folder (fich as Unicode text)) then do shell script "mkdir -p -m 0777 " & quoted form of origi end if end tell try set theInfo to do shell script "find " & (quoted form of dirchoisi) & " -name *.icns " end try set AppleScript's text item delimiters to return set theList to text items of theInfo set AppleScript's text item delimiters to "" set n to count theList repeat with i from 1 to n if "Volumes" is not in item i of theList then set end of media to item i of theList end if end repeat set n to count media set cheminicns to do shell script " > " & quoted form of (origi & "aalisticones.txt") & " | chmod 777 " & quoted form of (origi & "aalisticones.txt") set cheminicns to do shell script "ls " & quoted form of (origi & "aalisticones.txt") tell application "Finder" set letext to (POSIX file cheminicns as alias) set label index of letext to 2 end tell repeat with i from 1 to n set hdd to item i of media try set input to do shell script "echo " & hdd & " | sed 's#//#/#g; s#(#\\(#g;s#)#\\)#g' " do shell script "echo " & quoted form of input & " >>" & quoted form of cheminicns set png to do shell script "echo " & quoted form of input & " | sed 's#.*/##' " do shell script "cp -f " & quoted form of input & " " & quoted form of origi set input to do shell script "iconutil -c iconset " & quoted form of (origi & png) do shell script "echo " & quoted form of (origi & png) & " | sed 's#.icns#.iconset#' >>" & quoted form of cheminicns end try end repeat tell application "Finder" if exists (folder fich) then open fich end if end tell end if else set input to do shell script "echo " & dirchoisi & " | sed 's#//#/#g; s#(#\\(#g;s#)#\\)#g' " set png to do shell script "echo " & quoted form of input & " | sed 's#.*/##' " set origi to do shell script "echo " & quoted form of ("/aaaicones/aIconeseule/" & input) & " | sed 's#/Volumes/##; s#" & quoted form of png & "##'" do shell script "mkdir -p -m 0777 " & quoted form of origi do shell script "echo " & quoted form of input & " >>" & quoted form of origi & "aalisticones.txt" do shell script "cp -f " & quoted form of input & " " & quoted form of origi set input to do shell script "iconutil -c iconset " & quoted form of (origi & png) do shell script "echo " & quoted form of (origi & png) & " >>" & quoted form of origi & "aalisticones.txt" end if end repeat end open 

这里的一个函数主要基于亨利的例子 (可能在~/.bash_profile有用):

 mkicns() { if [[ -z "$*" ]] || [[ "${*##*.}" != "png" ]]; then echo "Input file invalid" else filename="${1%.*}" mkdir "$filename".iconset for i in 16 32 128 256 ; do n=$(( i * 2 )) sips -z $i $i "$1" --out "$filename".iconset/icon_${i}x${i}.png sips -z $n $n "$1" --out "$filename".iconset/icon_${i}x${i}@2x.png [[ $n -eq 512 ]] && \ sips -z $n $n "$1" --out "$filename".iconset/icon_${n}x${n}.png (( i++ )) done cp "$1" "$filename".iconset/icon_512x512@2x.png iconutil -c icns "$filename".iconset rm -r "$filename".iconset fi } 

用法

 $ mkicns "filename.png" # double-quote if spaces exist in filename 

16x16512x512@2x创build10个尺寸; 仅接受.png格式的input图像。

@ dardo82的shell代码是很好的工作。 这里是一个更简单的(在所有* nix的)和更快(如真的很重要):

 #!/bin/sh # This runs silent, be as verbose as you wish NAME=$(basename ${1} .png) DIR="${NAME}.iconset" mkdir -p ${DIR} for i in 16 32 128 256 512 ; do x="" for p in $i $(($i+$i)) ; do sips -z $p $p ${1} --out "${NAME}.iconset/icon_${i}x${i}${x}.png" x="@2x" done done >/dev/null # /dev/null in lieu of a "-s" silent option iconutil -—convert icns $DIR rm -r $DIR 

运行iconutil -c icns Icon.iconset

注意

  • Icon.iconset是一个文件夹
  • 名称以小写字母icon_
  • 当你看到正确的图像Icon.icns ,你知道它的作品

在这里输入图像说明

死简单.png👉图标

  1. 下载IconMaker.app它只是一个.applescript不会咬人
  2. 将你的.png拖放到刚创build的IconMaker.app上。

更多信息 : http : //eon.codes/blog/2016/12/06/Creating-an-app-icon/

高山脉更新 iconutil现在更严格的源.png大小。 更多关于这个在跳转后的博客文章。 ✌️