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 image512x512@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’
- Utiliser une constante NSSsortingng comme clé pour NSUserDefaults
- Comment convertir un NSInteger en int?
- Est-il possible d’empêcher un NSURLRequest de mettre en cache des données ou de supprimer des données mises en cache suite à une requête?
- Qu’est-ce qu’un “cluster de classes” dans Objective-C?
- Comment vérifier si un NSDate se produit entre deux autres NSDates
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 entrantman iconutil
dans Terminal.) L’utilisation de cet outil compresse également le fichiericns
résultant, vousicns
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
où
est le chemin d’access au dossier contenant l’ensemble des icons à convertir en
icns
. La sortie est écrite au même emplacement que leiconset 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/[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
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
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 | | [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 | +---------------------+--------------------+--------------+
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='[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
Assurez-vous d’avoir imagemagick installé avec le support librsvg, sur mac:
brew install imagemagick --with-librsvg
Ce script m’a bien servi.
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:
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: [email protected]
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.
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_
minuscule_ Icon.icns
avec une image correcte, vous savez que cela fonctionne
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/[email protected] 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/[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
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.