Comment créer manuellement des fichiers icns en utilisant iconutil?

Lorsque je valide mon application, j’obtiens cette erreur:

le bundle d’application ne contient pas d’icône au format ICNS, contenant à la fois une image 512x512 et une image 512x512@2x .

J’ai utilisé pour faire les icons icns avec l’application Img2icns et jusqu’à aujourd’hui, cela fonctionnait toujours correctement. Mais maintenant je reçois cette erreur et il n’y a aucun moyen de la faire fonctionner. J’ai essayé de mettre deux fichiers PNG ensemble ( 512x512 et 1024x1024 ) dans Img2icns mais j’ai toujours cette erreur. J’ai également essayé de suivre les instructions du manuel d’utilisation de l’interface humaine OS X d’Apple, mais lorsque j’essaie de créer les jeux d’icons, j’obtiens cette erreur de terminal:

-bash: erreur de syntaxe à proximité d’un jeton inattendu ‘newline’

Je ne suis pas très bon avec les commandes du terminal, alors peut-être que je fais quelque chose de mal. J’ai écrit:

 iconutil -c icns  

Si quelqu’un pouvait aider, ce serait très apprécié. Merci, Massy.

Consultez les instructions suivantes ( lien ):

Utiliser iconutil pour créer un fichier icns manuellement

L’outil de ligne de commande iconutil convertit les dossiers d’ iconset fichiers icns haute résolution prêts pour le déploiement. (Vous pouvez trouver une documentation complète pour cet outil en entrant man iconutil dans Terminal.) L’utilisation de cet outil compresse également le fichier icns résultant, vous icns donc pas besoin d’effectuer de compression supplémentaire.

Pour convertir un ensemble d’icons en un fichier icns

Entrez cette commande dans la fenêtre du terminal:

iconutil -c icns

est le chemin d’access au dossier contenant l’ensemble des icons à convertir en icns . La sortie est écrite au même emplacement que le iconset file , sauf si vous spécifiez un fichier de sortie comme indiqué ci-dessous:

iconutil -c icns -o

En d’autres termes, vous devez remplacer par le chemin:

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

Comme le chemin contient des espaces, vous devez utiliser des guillemets, par exemple:

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

Cette commande devrait fonctionner correctement.

Voici un script pour convertir un png 1024×1024 (nommé “Icon1024.png”) en fichier icns requirejs. Enregistrez-le dans un fichier appelé “CreateICNS.src” dans le dossier où votre fichier png se trouve alors dans le terminal “cd” du même dossier et tapez “source CreateICNS.src” pour l’appeler:

 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 

Il y a un module de noeud de ligne de commande qui fait tout le travail de conversion d’un fichier PNG dans un répertoire iconset:

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

Ces commandes (entrées dans Terminal) ont fonctionné pour moi pour convertir un ancien fichier icns au nouveau format:

 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 

Mettre à jour

Le paramètre -c à iconutil n’est plus pris en charge. Utilisez plutôt --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 

Bien que l’utilisation de tous les scripts pour convertir une image PNG haute résolution en une pléiade de différentes copies basse résolution puisse sembler pratique (et c’est vraiment le cas), il ne faut pas oublier que ce redimensionnement automatique rendra des images sensiblement imparfaites.

Plus la résolution est faible, plus l’icône est floue!

Au lieu de cela, vous devriez toujours demander un logo dans un format vectoriel, par exemple en SVG , à votre concepteur. Grâce à cela, vous pouvez préparer manuellement des fichiers PNG parfaits dans toutes les résolutions requirejses, puis créer un seul fichier .icns , ce qui rendra votre icône d’application belle sur tous les écrans, du téléphone portable à un écran Retina haut de gamme. le dernier iMac.

À partir de la dernière directive Apple à partir de 2016, vous devez préparer les fichiers PNG suivants:

 +---------------------+--------------------+--------------+ | 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 | +---------------------+--------------------+--------------+ 

Une fois tous les fichiers PNG préparés, placez-les dans un répertoire avec l’extension Logos.iconset ( Logos.iconset par exemple) et exécutez-les à partir du terminal:

 iconutil --convert icns Logos.iconset 

S’il n’y a pas eu d’erreurs après l’exécution de cette commande, tous les fichiers ont été préparés correctement et vous avez obtenu le fichier Logos.icns dans le même répertoire, contenant tous les superbes logos de votre application qui conviennent à tous les écrans modernes à partir de 2017.

Commentaire supplémentaire, lorsque vous créez un fichier .icns, vous devez renommer tous les fichiers pic avec le préfixe “icon_ “, sinon, iconutil échouera avec un message d’erreur: “.iconset: error: Impossible de générer ICNS.” ce qui n’est pas informatif du tout.

J’ai refait le script @ Henry pour le rendre plus beau:

 #!/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 

Mettre à jour

Le paramètre -c à iconutil n’est plus pris en charge. Utilisez -—convert place:

 #!/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 

J’ai écrit un script bash pour créer des icns à partir d’un fichier svg:

 #!/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 

Assurez-vous d’avoir imagemagick installé avec le support librsvg, sur mac:

 brew install imagemagick --with-librsvg 

Ce script m’a bien servi.


Mettre à jour

Pour un traitement plus approfondi, j’ai créé un outil de ligne de commande (écrit en Swift) pour générer AppIcon.appiconset avec la mise en page et le format corrects:

https://github.com/kindlychung/genicon

Lorsque je valide mon application, j’obtiens cette erreur:

le bundle d’application ne contient pas d’icône au format ICNS, contenant à la fois une image 512×512 et une image 512×512 @ 2x.

Je ne suis pas très bon avec le commandement terminal et peut-être que je fais quelque chose de mal. J’ai écrit:

 iconutil -c icns  

D’une part, comme je l’ai mentionné dans un commentaire sur la réponse d’Anne, vous n’avez probablement pas besoin d’utiliser iconutil. Vous devriez pouvoir append le jeu d’icons à votre projet et laisser Xcode le convertir pour vous dans le cadre de la construction.

De toute façon, cela peut être votre problème:

J’ai essayé de mettre deux fichiers PNG en tête (512×512 et 1024×1024)… mais je reçois toujours l’erreur.

Il n’y a pas de taille de 1024 par 1024 points. L’élément de 1024 par 1024 pixels (soit 1024 points avant Mountain Lion) est maintenant utilisé pour 512 par 512 points @ 2x.

Votre fichier PNG doit être nommé de manière appropriée: icon_512x512@2x.png

L’ancien Icon Composer version 2.2 d’Apple fonctionne parfaitement, il vous suffit d’ouvrir le fichier .ICNS, d’appuyer sur le bouton 1024×1024 et d’append votre image.

Dead simple .png 👉 .icns

  1. Télécharger IconMaker.app C’est juste qu’un .applescript ne mordra pas
  2. Glissez et déposez votre fichier .png sur IconMaker.app que vous venez de créer.

Plus d’infos : http://eon.codes/blog/2016/12/06/Creating-an-app-icon/

Une mise à jour élevée de sierra iconutil est maintenant plus ssortingcte sur la taille du iconutil source .png. Plus d’informations à ce sujet dans le post du blog après le saut. ✌️

Le code shell de @ dardo82 est bon et a fonctionné. Voici un plus simple en sh (pour tous les * nix) et plus rapide (comme cela compte vraiment):

 #!/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 

Exécuter iconutil -c icns Icon.iconset

Remarque

  • Icon.iconset est un dossier
  • Le nom commence par l’ icon_ minuscule_
  • Lorsque vous voyez Icon.icns avec une image correcte, vous savez que cela fonctionne

entrer la description de l'image ici

Bonjour, pour mes besoins, j’ai créé un droplet qui fonctionne par glisser-déposer des icons seul ou des icons pour rechercher dans un dossier (je me suis limité aux dossiers car les recherches sur les volumes de toutes les icons peuvent prendre beaucoup de temps). Ainsi, en glisser-déposer, vous pouvez déposer des dossiers ou des applications, tout ce qui peut contenir une icône. Le jeu d’icons créé porte le nom de l’icône d’origine, il est placé dans un répertoire “/ aaaicones” et le chemin de l’icône. Exemple dans le dossier “/ aaaicones si vous soumettez xcode.app, vous trouverez” /aaaicones/Applications/xcode.app/access.iconset “et /aaaicones/Applications/xcode.app/access.icns (l’icône recréée). être un fichier texte où il est tracé le chemin complet des icons, et le chemin d’access à l’exemple d’icons correspondant »/Applications/xcode.app/Contents/Applications/Instruments.app/Contents/Frameworks/InstrumentsPlugIn.framework/Versions/A /Resources/access.icns “/aaaicones/Applications/xcode.app/access.iconset” dans l’exemple pris (xcode), cela peut créer un dossier à la fin (avec toutes les icons et tous les icons) de 214 Mo. Si vous traitez une icône seule, elle sera placée dans le répertoire “/ aaaicones / aIconeseule /” et son chemin d’origine, exemple / aaaicones / aIconeseule / Mac Elcapitan / .VolumeIcon.icns et / aaaicones / aIconeseule / Mac Elcapitan /.VolumeIcon. iconset avec / aaaicones / aIconeseule / Mac Elcapitan / aalisticones.txt Le droplet est en dessous

 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 

Voici une fonction principalement basée sur l’exemple d’Henry (pourrait être utile dans ~/.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 } 

Utilisation :

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

Crée 10 tailles de 16x16 à 512x512@2x ; accepte les images d’entrée au format .png uniquement.

Identique à @Henry (commentaire ci-dessus), mais prend en argument le nom de fichier PNG et affiche l’ICNS avec le même nom.

REMARQUE: Le nom du fichier PNG ne doit avoir qu’un seul point pour séparer l’extension, c.-à-d. Xpto.png.

Enregistrez donc le code ci-dessous dans un fichier appelé “CreateICNS.src” dans le dossier où se trouve votre fichier png.

CODE:

 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/icon_16x16@2x.png sips -z 32 32 $1 --out $ICONSET/icon_32x32.png sips -z 64 64 $1 --out $ICONSET/icon_32x32@2x.png sips -z 128 128 $1 --out $ICONSET/icon_128x128.png sips -z 256 256 $1 --out $ICONSET/icon_128x128@2x.png sips -z 256 256 $1 --out $ICONSET/icon_256x256.png sips -z 512 512 $1 --out $ICONSET/icon_256x256@2x.png sips -z 512 512 $1 --out $ICONSET/icon_512x512.png cp $1 $ICONSET/icon_512x512@2x.png iconutil -c icns $ICONSET rm -R $ICONSET 

COMMENT UTILISER :

Ensuite, dans le terminal, "cd" dans le même dossier et tapez:

 source CreateICNS.src {PNG filename} 

où {nom de fichier PNG} est le nom de votre fichier PNG, à savoir xpto.png.

Si votre fichier s'appellerait abc.png, vous utiliseriez:

 source CreateICNS.src abc.png 

Il y a 2 tâches:
– créer 10 fichiers icns corrects
– Obtenez votre projet Xcode pour les utiliser correctement

Comme j’ai eu des problèmes d’une heure avec ces deux tâches et que je n’aime pas non plus quand je ne «vois» pas ce qui se passe, voici un chemin pour les plus prudents:

Créez 10 fichiers icns corrects:
J’ai utilisé le script ci-dessus de Henry: Cela fonctionne toujours pour HighSierra et Xcode 9.2, y compris la commande ‘c’.
Le fichier icns que j’ai obtenu est apparu sous la forme d’une seule icône dans Finder / Quicklook et dans Preview, il ne contenait que 8 des 10 tailles.
J’ai donc utilisé le terminal avec cd dans mon dossier et utilisé la commande: iconutil -c iconset (nom de fichier icns) sur le fichier icns que vous venez de créer pour rétablir le fichier icns dans un dossier iconset et – lo & behold – je pouvais voir mes 10 fichiers d’icons nouvellement créés. En utilisant Quick look sur le dossier iconset (et en utilisant le mode plein écran pour pouvoir les parcourir avec le curseur), je peux vérifier que toutes les tailles sont vraiment très bien.

En aparté: ils semblaient meilleurs que mes tentatives de redimensionnement avec PSE, probablement parce que je n’ai pas pris le temps de jouer avec toutes les options de redimensionnement dans PSE. Si vous utilisez PSE, assurez-vous que vos fichiers png sont enregistrés sans profil de couleur. Aussi, confessant mon ignorance, pour moi un fichier 256×256 @ 2 est identique à un fichier 512×512 – tous deux en 72dpi. Essayer de suivre les commentaires de 144 dpi ci-dessus n’a pas fonctionné pour moi.

Obtenez votre projet Xcode pour les utiliser correctement:
D’abord, j’ai supprimé toutes mes tentatives infructueuses dans Xcode et j’ai envoyé une version propre dans le repository git (ce qui aurait été intelligent, aurait été de commettre une version propre avant de lancer l’odyssée des icons).
Je me suis également assuré que dans le fichier info.plist, il n’y avait pas de pointeur lié à l’entrée «fichier d’icons» et que dans les parameters de mon projet général, j’avais choisi AppIcon pour les icons d’application.
Ensuite, j’ai ajouté un catalogue assets.asset et, dans le catalogue des ressources, un nouveau dossier AppIcon AppIcons et Launch Images pour OS.
Ensuite, j’ai copié (glisser-déposer avec l’option enfoncée) depuis le dossier iconset, chaque fichier image png, vers le Spaceholder AppIcon respectif. Donc, encore une fois, je pouvais voir ce qui se passait. Xcode l’a converti en fichiers icns, ou peut-être – en tant que dossier d’icons dérivé d’un dossier icns – les formats de fichiers ont été acceptés.

Ensuite, archivez et validez et il n’y aura aucune erreur lors du téléchargement ou de la validation.