tutorial examples español xcode macos cocoa icons iconutil

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 y 512x512@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

  1. Descargue IconMaker.app Es solo un .applescript no morderá
  2. 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 a 512x512@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.


Ejecute iconutil -c icns Icon.iconset

Nota

  • Icon.iconset es una carpeta
  • Nombre comienza con minúsculas icon_
  • Cuando ve Icon.icns con la imagen correcta, sabe que funciona


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:

https://github.com/kindlychung/genicon


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 de iconset archivos icns de alta resolución listos para la implementación. (Puede encontrar la documentación completa para esta herramienta ingresando man iconutil en Terminal.) El uso de esta herramienta también comprime el archivo icns 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 a icns . El resultado se escribe en la misma ubicación que el iconset file del conjunto de iconset 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