xcode - examples - ¿Cómo crear manualmente archivos icns usando iconutil?
applescript examples (17)
Cuando estoy validando mi aplicación obtengo este error:
el paquete de la aplicación no contiene un ícono en formato ICNS, que contiene imágenes de 512x512 y 512x512 @ 2x.
⋮
No soy muy bueno con el comando del terminal, así que tal vez estoy haciendo algo mal. Escribí:
iconutil -c icns </Users/myname/SDK Mac Apps/MyApp/grafica/icon.iconset>
Por un lado, como mencioné en un comentario sobre la respuesta de Anne, probablemente no necesite usar iconutil. Debería poder agregar el conjunto de iconos a su proyecto y dejar que Xcode lo convierta como parte de la compilación.
De cualquier manera, este puede ser su problema:
Intenté poner dos archivos PNG juntos (512x512 y 1024x1024) ... pero siempre obtengo el error.
No hay un tamaño de 1024 por 1024 puntos. El elemento de 1024 por 1024 píxeles (que era 1024 puntos antes de Mountain Lion) ahora se usa para 512 por 512 puntos a 2x.
Su archivo PNG debe ser nombrado apropiadamente: [email protected]
Cuando estoy validando mi aplicación obtengo este error:
el paquete de la aplicación no contiene un ícono en formato ICNS, que contiene
512x512
y512x512@2x
.
Utilizo para hacer los íconos icns con la aplicación Img2icns y hasta hoy siempre funcionó correctamente. Pero ahora estoy obteniendo ese error y no hay forma de hacerlo funcionar. Traté de juntar dos archivos PNG ( 512x512
y 1024x1024
) en Img2icns pero siempre recibo ese error. También traté de seguir las instrucciones en la Guía de Interfaz Humana OS X de Apple, pero cuando intento hacer los conjuntos de iconos obtengo este error terminal:
-bash: error de sintaxis cerca del token inesperado ''nueva línea''
No soy muy bueno con los comandos de terminal, así que tal vez estoy haciendo algo mal. Escribí:
iconutil -c icns </Users/myname/SDK Mac Apps/MyApp/grafica/icon.iconset>
Si alguien pudiera ayudar, sería muy apreciado. Gracias, Massy.
Dead simple .png 👉 .icns
- Descargue IconMaker.app Es solo un .applescript no morderá
- Arrastra y suelta tu .png en IconMaker.app que acabas de crear.
Más información : http://eon.codes/blog/2016/12/06/Creating-an-app-icon/
iconutil
Update iconutil
ahora es más estricto sobre el tamaño de la fuente .png. Más sobre esto en la publicación del blog después del salto. ✌️
Aquí hay un script para convertir un png de 1024x1024 (llamado "Icon1024.png") al archivo icns requerido. Guárdelo en un archivo llamado "CreateICNS.src" en la carpeta donde está su archivo png en el terminal "cd" a la misma carpeta y escriba "source CreateICNS.src" para llamarlo:
mkdir MyIcon.iconset
sips -z 16 16 Icon1024.png --out MyIcon.iconset/icon_16x16.png
sips -z 32 32 Icon1024.png --out MyIcon.iconset/[email protected]
sips -z 32 32 Icon1024.png --out MyIcon.iconset/icon_32x32.png
sips -z 64 64 Icon1024.png --out MyIcon.iconset/[email protected]
sips -z 128 128 Icon1024.png --out MyIcon.iconset/icon_128x128.png
sips -z 256 256 Icon1024.png --out MyIcon.iconset/[email protected]
sips -z 256 256 Icon1024.png --out MyIcon.iconset/icon_256x256.png
sips -z 512 512 Icon1024.png --out MyIcon.iconset/[email protected]
sips -z 512 512 Icon1024.png --out MyIcon.iconset/icon_512x512.png
cp Icon1024.png MyIcon.iconset/[email protected]
iconutil -c icns MyIcon.iconset
rm -R MyIcon.iconset
Aquí hay una función basada principalmente en el ejemplo de Henry (podría ser útil en ~/.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/[email protected]
iconutil -c icns "$filename".iconset
rm -r "$filename".iconset
fi
}
Uso :
$ mkicns "filename.png" # double-quote if spaces exist in filename
Crea 10 tamaños de
16x16
a512x512@2x
; acepta imágenes de entrada en formato.png
solamente.
Comentario adicional, cuando crea el archivo .icns, necesita cambiar el nombre de todos los archivos de imagen con el prefijo "icon_ ", de lo contrario, iconutil fallará con el mensaje de error: ".iconset: error: Error al generar ICNS". que no es informativo en absoluto.
El código de shell de @dardo82 es bueno y funcionó. Aquí hay uno más simple en sh (para todos * nix) y más rápido (como realmente importa):
#!/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
Estos comandos (ingresados en Terminal) me funcionaron para convertir un archivo icns viejo al nuevo formato:
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
Actualizar
El parámetro -c
para iconutil ya no es compatible. Use --convert
en --convert
lugar:
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
Hay 2 tareas:
- crea 10 archivos de icns correctos
- haz que tu proyecto Xcode los use correctamente
Como tenía problemas de una hora de duración con estas dos tareas, y tampoco me gusta cuando no ''veo'' lo que está pasando, aquí hay un camino para los más cautelosos:
Crea 10 archivos correctos de icns:
Utilicé el guión anterior de Henry: todavía funciona para HighSierra y Xcode 9.2, incluido el comando ''c''.
El archivo icns que obtuve apareció como un solo tamaño de icono en Finder / Quicklook y en Vista previa solo mostró 8 de 10 tamaños.
Así que utilicé terminal, fui con un CD a mi carpeta y usé el comando: iconutil -c iconset (icns filename) en el archivo icns recién creado para revertir el archivo icns a una carpeta de conjunto de iconos, y - hey he aquí - pude ver mis nuevos 10 archivos de iconos creados. Usando Quick Look en la carpeta del conjunto de iconos (y usando el modo de pantalla completa para poder acercarlos con el control deslizante), pude comprobar que todos los tamaños se ven realmente bien.
Por otro lado: parecían mejores que mis intentos de cambio de tamaño con PSE, muy probablemente porque no me tomé el tiempo para jugar con todas las opciones de cambio de tamaño en PSE. Si usa PSE, asegúrese de que sus archivos png se guarden sin perfil de color. Además, confesando mi ignorancia, para mí, un archivo de 256x256 @ 2 es lo mismo que un archivo de 512x512, ambos en 72 ppp. Tratar de seguir los comentarios de 144 ppp anteriores no funcionó para mí.
Haz que tu proyecto de Xcode los use correctamente:
Primero borré todos mis intentos infructuosos dentro de Xcode y comprometí una versión limpia del repositorio de git (lo que hubiera sido inteligente, hubiera sido enviar primero una versión limpia, antes de comenzar frenéticamente la odisea de adición de íconos).
También me aseguré de que en el archivo info.plist no haya un puntero vinculado a la entrada ''archivo de icono'' y que en la configuración general de mi proyecto haya elegido AppIcon para los iconos de la aplicación.
Luego agregué un catálogo de assets.asset y dentro del catálogo de activos una nueva carpeta AppIcon ''AppIcons e inicie imágenes'' AppIcon para OS.
Luego copié (arrastra y suelta con la opción presionada) desde la carpeta del conjunto de iconos cada archivo de imagen png en el respectivo Portal de espacio de AppIcon. Entonces, de nuevo, pude ver lo que está sucediendo. Xcode convirtió eso en archivos icns, o tal vez, como mi carpeta iconset deriva de una carpeta icns, se aceptaron los formatos de archivo.
Luego archiva y valida y no habrá errores al cargar o validar.
Hay un módulo de nodo de línea de comandos que hace todo el trabajo de convertir un archivo PNG en un directorio de conjunto de iconos:
npm install -g node-icns
nicns --in adventure-cat.png --out adventure-cat.icns
He escrito un script bash para hacer icns desde un archivo svg:
#!/usr/bin/env bash
sizes=(16 32 64 128 256 512)
largfile=''[email protected]''
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'' ''[email protected]''
mv ''icon_64x64.png'' ''[email protected]''
cp ''icon_256x256.png'' ''[email protected]''
cp ''icon_512x512.png'' ''[email protected]''
mkdir icon.iconset
mv icon_*x*.png icon.iconset
iconutil -c icns icon.iconset
Asegúrese de tener imagemagick instalado con soporte librsvg, en mac:
brew install imagemagick --with-librsvg
Este script me ha servido bastante bien.
Actualizar
Para un tratamiento más completo, he creado una herramienta de línea de comandos (escrita en Swift) para generar AppIcon.appiconset
con el diseño y el formato correctos:
Igual que @Henry (comentario anterior) pero toma como argumento el nombre de archivo PNG y emite el ICNS con el mismo nombre.
NOTA: El nombre del archivo PNG solo se espera que tenga 1 punto para separar la extensión, es decir, xpto.png.
Por lo tanto, guarde el código siguiente en un archivo llamado "CreateICNS.src" en la carpeta donde está su archivo png.
CÓDIGO:
IFS=''.'' read -ra ADDR <<< "$1"
ICONSET=${ADDR[0]}.iconset
mkdir $ICONSET
sips -z 16 16 $1 --out $ICONSET/icon_16x16.png
sips -z 32 32 $1 --out $ICONSET/[email protected]
sips -z 32 32 $1 --out $ICONSET/icon_32x32.png
sips -z 64 64 $1 --out $ICONSET/[email protected]
sips -z 128 128 $1 --out $ICONSET/icon_128x128.png
sips -z 256 256 $1 --out $ICONSET/[email protected]
sips -z 256 256 $1 --out $ICONSET/icon_256x256.png
sips -z 512 512 $1 --out $ICONSET/[email protected]
sips -z 512 512 $1 --out $ICONSET/icon_512x512.png
cp $1 $ICONSET/[email protected]
iconutil -c icns $ICONSET
rm -R $ICONSET
CÓMO UTILIZAR :
Luego, en la terminal, "cd" a la misma carpeta y escriba:
source CreateICNS.src {PNG filename}
donde {nombre de archivo PNG} es el nombre de su archivo PNG, es decir, xpto.png.
Si su archivo se llamara abc.png, usted usaría:
source CreateICNS.src abc.png
La anterior versión 2.2 de Icon Composer de Apple funciona bien, simplemente abra el .ICNS, presione el botón 1024x1024 y agregue su imagen.
Refactoreé el guión de @Henry para que se vea mejor:
#!/bin/zsh
NAME=$(basename $1 .png); DIR="$NAME.iconset"
mkdir -pv $DIR
for m r 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
Actualizar
El parámetro -c
para iconutil ya no es compatible. Use -—convert
en -—convert
lugar:
#!/bin/zsh
NAME=$(basename $1 .png); DIR="$NAME.iconset"
mkdir -pv $DIR
for m r 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
Si bien utilizar todo tipo de secuencias de comandos para convertir imágenes PNG
alta resolución a una gran cantidad de copias de baja resolución puede parecer práctico (y realmente lo es), no debe olvidarse que este tipo de cambio de tamaño automático generará imágenes perceptiblemente imperfectas.
¡Mientras menor sea la resolución, más borroso será el ícono!
En su lugar, siempre debe solicitar un logotipo en formato vectorial, por ejemplo en SVG
, de su diseñador. Con esto en mano, puede preparar manualmente archivos PNG perfectos en todas las resoluciones requeridas y luego crear un archivo .icns
único, que hará que el icono de su aplicación se vea hermoso en cada pantalla, desde el teléfono móvil hasta una pantalla Retina de gama alta. el último iMac.
Desde la última guía de Apple a partir de 2016, debe preparar los siguientes archivos PNG:
+---------------------+--------------------+--------------+
| filename | resolution, pixels | density, PPI |
+---------------------+--------------------+--------------+
| icon_16x16.png | 16x16 | 72 |
| [email protected] | 32x32 | 144 |
| icon_32x32.png | 32x32 | 72 |
| [email protected] | 64x64 | 144 |
| icon_128x128.png | 128x128 | 72 |
| [email protected] | 256x256 | 144 |
| icon_256x256.png | 256x256 | 72 |
| [email protected] | 512x512 | 144 |
| icon_512x512.png | 512x512 | 72 |
| [email protected] | 1024x1024 | 144 |
+---------------------+--------------------+--------------+
Después de que todos los archivos PNG estén preparados, colóquelos en algún directorio con extensión Logos.iconset
( Logos.iconset
por ejemplo) y ejecútelos desde la Terminal:
iconutil --convert icns Logos.iconset
Si no hubo errores después de ejecutar este comando, todos los archivos se prepararon correctamente, y usted obtuvo el archivo Logos.icns
en el mismo directorio, que contiene todos los hermosos logotipos nítidos para su aplicación que se adaptarán a cualquier pantalla moderna a partir de 2017.
Verifique las siguientes instrucciones ( link ):
Use iconutil para crear un archivo icns manualmente
La
iconutil
de la línea de comandos convierte las carpetas del conjunto deiconset
archivos icns de alta resolución listos para la implementación. (Puede encontrar la documentación completa para esta herramienta ingresandoman iconutil
en Terminal.) El uso de esta herramienta también comprime el archivoicns
resultante, por lo que no es necesario que realice una compresión adicional.Para convertir un conjunto de iconos en un archivo icns
Ingrese este comando en la ventana de la Terminal:
iconutil -c icns <iconset filename>
donde
<iconset filename>
es la ruta a la carpeta que contiene el conjunto de iconos que desea convertir aicns
. El resultado se escribe en la misma ubicación que eliconset file
del conjunto deiconset file
, a menos que especifique un archivo de salida como se muestra:
iconutil -c icns -o <icon filename> <iconset filename>
En otras palabras, debe reemplazar <iconset filename>
por la ruta:
/Users/myname/SDK Mac Apps/MyApp/grafica/icon.iconset
Como la ruta contiene espacios, debe usar comillas dobles, por ejemplo:
iconutil -c icns "/Users/myname/SDK Mac Apps/MyApp/grafica/icon.iconset"
Este comando debería funcionar correctamente.
Hola, para mis necesidades hice una gota que funciona solo con arrastrar y soltar iconos o íconos para buscar en una carpeta (limitado a carpetas, ya que las búsquedas en Volúmenes de todos los íconos pueden llevar mucho tiempo). Por lo tanto, al arrastrar y soltar puede colocar carpetas o aplicaciones, cualquier cosa que pueda contener un ícono. El conjunto de iconos creado lleva el nombre del icono original, se coloca en un directorio "/ aaaicones" y la ruta del icono. Ejemplo en la carpeta "/ aaaicones si envía xcode.app encontrará" /aaaicones/Applications/xcode.app/access.iconset "y /aaaicones/Applications/xcode.app/access.icns (el ícono recreado) lo hará ser un archivo de texto donde se rastrea la ruta completa de los íconos, y la ruta al juego de iconos correspondiente ejemplo "/Aplicaciones/xcode.app/Contents/Applications/Instruments.app/Contents/Frameworks/InstrumentsPlugIn.framework/Versions/A /Resources/access.icns "" /aaaicones/Applications/xcode.app/access.iconset "en el ejemplo tomado (xcode) esto puede crear una carpeta al final (con todos los iconos y conjunto de iconos) de 214 MB de tamaño. trata solo un icono, se colocará en el directorio "/ aaaicones / aIconeseule /" y su ruta original, ejemplo / aaaicones / aIconeseule / Mac Elcapitan / .VolumeIcon.icns y / aaaicones / aIconeseule / Mac Elcapitan /.VolumeIcon. conjunto de iconos con / aaaicones / aIconeseule / Mac Elcapitan / aalisticones.txt El droplet está debajo
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