Wie erstelle ich manuell icns-Dateien mit iconutil?


106

Wenn ich meine App validiere, wird folgende Fehlermeldung angezeigt:

Das Anwendungspaket enthält kein Symbol im ICNS-Format, das sowohl ein 512x512als auch ein 512x512@2xBild enthält.

Ich verwende, um die icns-Symbole mit der Img2icns- App zu erstellen, und bis heute hat es immer richtig funktioniert. Aber jetzt bekomme ich diesen Fehler und es gibt keine Möglichkeit, ihn zum Laufen zu bringen. Ich habe versucht, zwei PNG-Dateien in Img2icns zusammenzufügen ( 512x512und 1024x1024), aber ich erhalte immer diesen Fehler. Ich habe auch versucht, die Anweisungen in Apples OS X Human Interface Guideline zu befolgen, aber wenn ich versuche, die Symbolsätze zu erstellen, wird der folgende Terminalfehler angezeigt:

-bash: Syntaxfehler in der Nähe des unerwarteten Tokens 'newline'

Ich bin nicht sehr gut mit Terminalbefehlen, also mache ich vielleicht etwas falsch. Ich hab geschrieben:

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

Wenn jemand helfen könnte, wäre es sehr dankbar. Danke, Massy.


Ich baute eine App , die iconutil diese leicht zu machen Wraps: hobbyistsoftware.com/icontool
Verwirrt Vorlone

Antworten:


63

Überprüfen Sie die folgenden Anweisungen ( Link ):

Verwenden Sie iconutil, um eine icns-Datei manuell zu erstellen

Das iconutilBefehlszeilentool konvertiert iconsetOrdner in bereitstellungsfähige, hochauflösende icns-Dateien. (Eine vollständige Dokumentation zu diesem Tool finden Sie man iconutilin Terminal.) Mit diesem Tool wird auch die resultierende icnsDatei komprimiert , sodass Sie keine zusätzliche Komprimierung durchführen müssen.

So konvertieren Sie eine Reihe von Symbolen in eine icns-Datei

Geben Sie diesen Befehl in das Terminalfenster ein:

iconutil -c icns <iconset filename>

wo <iconset filename>ist der Pfad zu dem Ordner , den Satz von Symbolen enthält , die Sie konvertieren möchten icns. Die Ausgabe wird an denselben Speicherort wie die geschrieben iconset file, es sei denn, Sie geben eine Ausgabedatei wie folgt an :

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

Mit anderen Worten, Sie müssen <iconset filename>durch den Pfad ersetzen :

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

Da der Pfad Leerzeichen enthält, müssen Sie doppelte Anführungszeichen verwenden, zum Beispiel:

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

Dieser Befehl sollte ordnungsgemäß funktionieren.


2
Sie müssen es jedoch wahrscheinlich nicht verwenden iconutil. Sie können das Iconset einfach zu Ihrem Projekt hinzufügen und Xcode es als Teil des Builds für Sie konvertieren lassen.
Dies wird

@Anne: außer der Befehl iconutil ist nur in den Betriebssystemversionen enthalten, die keine ICNS-Dateien verwenden ... Keine Liebe für uns, die OS10.6.8 V1.1 verwenden ... es ist ein noch schlimmeres "unser Weg oder die Autobahn" für die Entwickler als die Benutzer.
Henrik Erlandsson

@ Anne: Das hat funktioniert ... vielen Dank! (auch danke, dass du meine Frage richtig gestellt hast). Frieden, Massy
Blau

@HenrikErlandsson: Alle Versionen von Mac OS X verwenden ICNS-Dateien bis zurück zu 10.0.
Peter Hosey

10
Die folgenden Dateien sollten vorhanden sein: icon_16x16.png, icon_16x16@2x.png, icon_32x32.png, icon_32x32@2x.png, icon_128x128.png, icon_128x128@2x.png, icon_256x256.png, icon_256x256@2x.png. Die @ 2x-Dateien sollten mit 144 Pixel pro Zoll gespeichert werden, während die anderen mit 72 Pixel pro Zoll gespeichert werden sollten.
Carmin

284

Hier ist ein Skript zum Konvertieren eines 1024x1024-PNG (mit dem Namen "Icon1024.png") in die erforderliche icns-Datei. Speichern Sie es in einer Datei mit dem Namen "CreateICNS.src" in dem Ordner, in dem sich Ihre PNG-Datei im Terminal "cd" befindet, in demselben Ordner und geben Sie "source CreateICNS.src" ein, um es aufzurufen:

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

3
Hervorragend. Ich habe Icon1024.png auf den Desktop gestellt und einfach Ihren Code ausgeführt und alles erledigt
Logic

2
Ist es möglich, dass dieses perfekte kleine Drehbuch in El Capitan gebrochen wurde? Mein Mac wurde auf 10.11.3 aktualisiert und dieses Skript gibt jetzt "Fehler: Nicht unterstütztes Bildformat" und dann "/Users/IconScript/MyIcon-osx.iconset:error: Die Variante mit dem Namen" icon "enthält keine Bildressourcen" zurück. dann "MyIcon-osx.iconset: Fehler: ICNS konnte nicht generiert werden." Versuchte das gleiche Skript und die gleiche .png-Datei auf einem Mac, der nicht auf El Capitan aktualisiert wurde, und es funktionierte dort wie immer ... = (
RanLearns

1
Ja @Henry, ich habe gerade die Ordnernamen entfernt, um den Kommentar sauberer zu machen. Ich führe ihn im Terminal aus dem Ordner aus, der das src-Skript und die Symbole enthält. Das einzige, was anders ist als zuvor, ist El Capitan gegen Yosemite ... Ich habe das Skript buchstäblich verwendet, bevor ich das Betriebssystem erfolgreich aktualisiert habe und dann direkt nach der Aktualisierung (im selben Ordner, dieselben Terminalbefehle), und es gibt jetzt diesen Fehler zurück. Haben Sie auf El Capitan damit Erfolg gehabt?
RanLearns

3
Wichtige Hinweise: Die Dateinamen Ihrer Symbolbilder müssen mit "icon_" beginnen. Die Bilder müssen einen Alphakanal haben. Bei Bedarf können Sie mit ImageMagick einen Alphakanal hinzufügen convert abc.png -define png:color-type=6 abc_with_alpha.png.
David Grayson

1
Oh mein Gott. Das Erstellen einer Elektronen-App und der Umgang mit Symbolen war ein großer Schmerz. Alle Blog-Tutorials verweisen auf veraltete Online-Dienstprogramme. Ihr einfaches Skript hier draußen auf Stackerflow hat mir gerade den Tag gemacht. Danke!
Nelsonenzo

26

Während die Verwendung aller Arten von Skripten zum Konvertieren PNGvon hochauflösenden Bildern in eine Plejade verschiedener Kopien mit niedriger Auflösung praktisch erscheint (und es ist wirklich so), sollte man nicht vergessen, dass diese Art der automatischen Größenänderung wahrnehmbar unvollständige Bilder wiedergibt .

Geringere Auflösung - verschwommenes Symbol!

Ich meine, ich liebe imagemagickauch, aber es ist nicht das richtige Werkzeug für diese Aufgabe!

Stattdessen sollten Sie bei Ihrem Designer immer ein Logo in einem Vektorformat anfordern, z. B. in SVG. Mit dieser Funktion können Sie perfekte PNGDateien in allen erforderlichen Auflösungen manuell vorbereiten und dann eine einzelne .icnsDatei erstellen, mit der Ihr App-Symbol auf jedem einzelnen Bildschirm schön aussieht, von einem billigen iPhone SE bis hin zu einem High-End-Retina-Display der neuesten Version iMac. Sie können Photoshop, GIMP oder ein anderes Tool Ihrer Wahl verwenden, um diese Symbole zu generieren.

Ausgehend von den neuesten Richtlinien für die Benutzeroberfläche von Apple ab 2020 sollten Sie die folgenden PNGDateien vorbereiten :

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

Nachdem alle PNG-Dateien vorbereitet wurden, platzieren Sie sie in einem Verzeichnis mit der .iconsetErweiterung ( Logos.iconsetzum Beispiel) und führen Sie Folgendes aus Terminal:

iconutil --convert icns Logos.iconset

Wenn nach der Ausführung dieses Befehls keine Fehler aufgetreten sind, wurden alle Dateien ordnungsgemäß verarbeitet, und Sie haben die Logos.icnsDatei im selben Verzeichnis gespeichert, das alle schönen, gestochen scharfen Logos für Ihre App enthält, die für jeden modernen Bildschirm geeignet sind.


16

Es gibt ein Befehlszeilen-Knotenmodul, das die gesamte Arbeit zum Konvertieren einer PNG-Datei in ein Iconset-Verzeichnis erledigt:

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

9
Nicht länger unterstützt. :(
Jamescampbell

13

Diese Befehle (in Terminal eingegeben) haben bei mir funktioniert, um eine alte icns-Datei in das neue Format zu konvertieren:

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

Aktualisieren

Der -cParameter zu iconutil wird nicht mehr unterstützt. Verwenden Sie --convertstattdessen:

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

1
Danke, dass du das gezeigt hast, dank dessen konnte ich von icns umkehren, um die pngs zu bekommen! :)
Noitidart

9

Zusätzlicher Kommentar: Wenn Sie eine ICNS-Datei erstellen , müssen Sie alle Bilddateien mit dem Präfix "icon_" umbenennen . Andernfalls schlägt iconutil mit der Fehlermeldung ".iconset: error: ICNS konnte nicht generiert werden" fehl. das ist überhaupt nicht informativ.


7

Wie @Henry (Kommentar oben), verwendet jedoch den PNG-Dateinamen als Argument und gibt den ICNS mit demselben Namen aus.

HINWEIS: Es wird erwartet, dass der Name der PNG-Datei nur 1 Punkt für die separate Erweiterung enthält, dh xpto.png.

Speichern Sie den folgenden Code in einer Datei mit dem Namen "CreateICNS.src" in dem Ordner, in dem sich Ihre PNG-Datei befindet.

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

WIE BENUTZT MAN :

Geben Sie dann im Terminal "cd" in denselben Ordner ein und geben Sie Folgendes ein:

source CreateICNS.src {PNG filename}

Dabei ist {PNG-Dateiname} der Name Ihrer PNG-Datei, dh xpto.png.

Wenn Ihre Datei abc.png heißen würde, würden Sie verwenden:

source CreateICNS.src abc.png

Genial! Ganz einfach :) Vielleicht machen Sie es zu einem .sh / Skript, um es noch mehr zu machen :) Danke!
Gutemberg Ribeiro

6

Ich habe ein Bash-Skript zum Erstellen von Icns aus einer SVG-Datei geschrieben:

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

Stellen Sie sicher, dass imagemagick mit librsvg-Unterstützung auf dem Mac installiert ist:

brew install imagemagick --with-librsvg

Dieses Skript hat mir sehr gut gedient.


Aktualisieren

Für eine gründlichere Behandlung habe ich ein Befehlszeilenprogramm (in Swift geschrieben) zum Generieren AppIcon.appiconsetmit dem richtigen Layout und Format erstellt:

https://github.com/kindlychung/genicon


5

Ich habe @ Henrys Skript überarbeitet, damit es besser aussieht:

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

Aktualisieren

Der -cParameter zu iconutil wird nicht mehr unterstützt. Verwenden Sie -—convertstattdessen:

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

4
Die Originalversion ist einfach und man kann den Prozess manuell in jeder Shell reproduzieren.
Denis Barmenkov

1
Wenn Sie es vorziehen, Dinge manuell zu erledigen, benötigen Sie überhaupt keinen Computer.
Dardo82

5

Ganz einfach .png 👉 .icns

  1. Download IconMaker.app - Es ist nur ein .applescript, das nicht beißt
  2. Ziehen Sie Ihre .png-Datei auf die gerade erstellte IconMaker.app und legen Sie sie dort ab.

Weitere Informationen : http://eon.codes/blog/2016/12/06/Creating-an-app-icon/

Das High Sierra Update iconutil ist jetzt strenger in Bezug auf die Quell-PNG-Größe. Mehr dazu im Blogbeitrag nach dem Klick. ✌️


3

Wenn ich meine App validiere, wird folgende Fehlermeldung angezeigt:

Das Anwendungspaket enthält kein Symbol im ICNS-Format, das sowohl ein 512x512- als auch ein 512x512 @ 2x-Bild enthält.

Ich bin nicht sehr gut mit Terminalbefehlen und mache vielleicht etwas falsch. Ich hab geschrieben:

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

Zum einen müssen Sie, wie ich in einem Kommentar zu Annes Antwort erwähnt habe, wahrscheinlich kein iconutil verwenden. Sie sollten in der Lage sein, das Iconset einfach zu Ihrem Projekt hinzuzufügen und Xcode es als Teil des Builds für Sie konvertieren zu lassen.

In jedem Fall kann dies Ihr Problem sein:

Ich habe versucht, zwei PNG-Dateien zusammen zu legen (512x512 und 1024x1024)… aber ich bekomme immer den Fehler.

Es gibt keine Punktgröße von 1024 x 1024. Das 1024 x 1024 Pixel große Element (das vor Mountain Lion 1024 Punkte betrug) wird jetzt für 512 x 512 Punkte bei 2x verwendet.

Ihre PNG-Datei muss entsprechend benannt sein: icon_512x512@2x.png


3

Apples älterer Icon Composer Version 2.2 funktioniert einwandfrei. Öffnen Sie einfach die darin enthaltenen .ICNS, drücken Sie die Taste 1024 x 1024 und fügen Sie Ihr Bild hinzu.


Ich kann nicht für den ursprünglichen Fragesteller sprechen, aber diese Antwort ist genau das, was ich brauchte. Vielen Dank!
Pestophagous

3
In Apple-Dokumenten heißt es: "Hinweis: Verwenden Sie Icon Composer nicht - es können keine hochauflösenden icns-Dateien erstellt werden." Das heißt, die @ 2x-Symbole können nicht auf diese Weise erstellt werden.
Clay Bridges

Icon Composer scheint einwandfrei zu funktionieren. Es wird separat von der Apple-Entwicklerseite als Teil des Graphics Tools for Xcode-Pakets geliefert. Siehe auch hier .
Michiel Kauw-A-Tjoe

2

@ dardo82 Shell-Code ist gut und funktioniert. Hier ist eine einfachere in sh (für alle * nix) und schneller (wie es wirklich wichtig ist):

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

Vielen Dank für die Variation meines Skripts, jetzt bin ich mir nicht einmal sicher, warum ich zsh
dardo82

1

Hier ist eine Funktion, die hauptsächlich auf Henrys Beispiel basiert (könnte nützlich sein in ~/.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
}

Verwendung :

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

Erstellt 10 Größen von 16x16bis 512x512@2x; Akzeptiert Eingabebilder .pngnur im Format.


1

Lauf iconutil -c icns Icon.iconset

Hinweis

  • Icon.iconset ist ein Ordner
  • Name beginnt mit Kleinbuchstaben icon_
  • Wenn Sie Icon.icnsmit dem richtigen Bild sehen, wissen Sie, dass es funktioniert

Geben Sie hier die Bildbeschreibung ein


Warum 3x? Apple benötigt es nicht.
Neurotransmitter

1

Es gibt 2 Aufgaben:
- 10 richtige icns-Dateien erstellen
- Ihr Xcode-Projekt veranlassen, sie korrekt zu verwenden

Da ich stundenlange Probleme mit diesen beiden Aufgaben hatte und es auch nicht mag, wenn ich nicht "sehe", was los ist, hier ein Weg für die vorsichtigen:

Erstellen Sie 10 korrekte icns-Dateien:
Ich habe das obige Skript von Henry verwendet: Es funktioniert immer noch für HighSierra und Xcode 9.2, einschließlich des Befehls 'c'.
Die icns-Datei, die ich erhalten habe, wurde im Finder / Quicklook als nur eine Symbolgröße angezeigt und in der Vorschau wurden nur 8 von 10 Größen angezeigt.
Also benutzte ich Terminal, ging mit CD in meinen Ordner und benutzte den Befehl: iconutil -c iconset (icns-Dateiname) für die gerade erstellte icns-Datei, um die icns-Datei wieder in einen iconset-Ordner zurückzusetzen, und - siehe da - ich konnte sehen meine neu erstellten 10 Symboldateien. Mit dem Schnellblick auf den Iconset-Ordner (und dem Vollbildmodus, um mit dem Schieberegler durch die Ordner zu zoomen) konnte ich überprüfen, ob alle Größen tatsächlich sehr gut aussehen.

Nebenbei bemerkt: Sie sahen besser aus als meine Größenänderungsversuche mit PSE, höchstwahrscheinlich, weil ich mir nicht die Zeit genommen habe, mit allen Größenänderungsoptionen in PSE zu spielen. Wenn Sie PSE verwenden, stellen Sie sicher, dass Ihre PNG-Dateien ohne Farbprofil gespeichert werden. Wenn ich meine Unwissenheit gestehe, ist eine 256x256 @ 2-Datei für mich dieselbe wie eine 512x512-Datei - beide in 72 dpi. Der Versuch, den obigen 144-dpi-Kommentaren zu folgen, hat bei mir nicht funktioniert.

Lassen Sie Ihr Xcode-Projekt sie richtig verwenden:
Zuerst habe ich alle meine erfolglosen Versuche in Xcode gelöscht und eine saubere Version in das Git-Repository übernommen (was klug gewesen wäre, wäre gewesen, zuerst eine saubere Version festzuschreiben - bevor ich das Symbol verzweifelt gestartet habe zusätzlich odyssee).
Ich habe auch sichergestellt, dass in der Datei info.plist kein Zeiger mit dem Eintrag 'Symboldatei' verknüpft ist und dass ich in meinen allgemeinen Projekteinstellungen AppIcon für App-Symbole ausgewählt habe.
Dann habe ich einen Assets.asset-Katalog hinzugefügt und im Assets-Katalog einen neuen AppIcon-Ordner "AppIcons and Launch Images" für OS.
Dann habe ich jede PNG-Bilddatei aus dem Iconset-Ordner in den entsprechenden AppIcon Spaceholder kopiert (Drag & Drop mit gedrückter Option). Also konnte ich wieder sehen, was passiert. Xcode hat das in icns-Dateien konvertiert, oder vielleicht - als mein iconset-Ordner von einem icns-Ordner abgeleitet wurde - wurden die Dateiformate akzeptiert.

Dann archivieren und validieren und es werden keine Fehler beim Hochladen oder Validieren auftreten.


Formatierung! Ihre Antwort mag gut sein, ist aber nicht lesbar. Verwenden Sie Absätze und Zeilenumbrüche.
Nic3500

0

Ich brauchte das, aber für CMake. Ich wollte auch die Möglichkeit, ihm eine SVG zu geben.

Hier ist das Wesentliche: https://gist.github.com/Qix-/f4090181e55ea365633da8c3d0ab5249

Und der CMake-Code:

# LICENSE: CC0 - go nuts.

# Hi :) This is what I used to generate the ICNS for my game, Tide.
# Both input formats (SVG vs PNG) work just fine, but in my experience
# the SVG came out with noticeably better results (although PNG wasn't
# a catastrophe either). The logo for the game was simple enough that
# SVG was indeed an option.

# To use:
#
#    make_icns( INPUT "path/to/img.{svg,png}"
#               OUTPUT ICNS_PATH )
#
# Then add it as a custom target or use it as a
# dependency somewhere - I give you that option.
#
# For example:
#
#    add_custom_target( my-icns ALL DEPENDS "${ICNS_PATH}" )
#
# For the associated utilities:
#
# - PNG: brew install imagemagick
# - SVG: brew cask install inkscape
#
# Enjoy!

function (make_icns_from_png)
    cmake_parse_arguments (
        ARG
        ""             # Boolean args
        "INPUT;OUTPUT" # List of single-value args
        ""             # Multi-valued args
        ${ARGN})

    find_program (
        convert_exe
        NAMES "convert" "convert.exe"
        DOC "Path to ImageMagick convert")
    if (NOT convert_exe)
        message (FATAL_ERROR "Could not find ImageMagick's 'convert' - is ImageMagick installed?")
    endif ()

    get_filename_component (ARG_INPUT_ABS "${ARG_INPUT}" ABSOLUTE BASE_DIR "${CMAKE_CURRENT_SOURCE_DIR}")
    get_filename_component (ARG_INPUT_ABS_BIN "${ARG_INPUT}" ABSOLUTE BASE_DIR "${CMAKE_CURRENT_BINARY_DIR}")
    get_filename_component (ARG_INPUT_FN "${ARG_INPUT_ABS_BIN}" NAME_WE)
    get_filename_component (ARG_INPUT_DIR "${ARG_INPUT_ABS_BIN}" DIRECTORY)

    set (sourceimg "${ARG_INPUT_ABS}")

    set (basepath "${ARG_INPUT_DIR}/${ARG_INPUT_FN}")
    set (output_icns "${basepath}.icns")
    set (iconset "${basepath}.iconset")

    set (deplist "")

    foreach (size IN ITEMS 16 32 128 256 512)
        math (EXPR size2x "2 * ${size}")

        set (ipath "${iconset}/icon_${size}x${size}.png")
        set (ipath2x "${iconset}/icon_${size}x${size}@2x.png")

        list (APPEND deplist "${ipath}" "${ipath2x}")

        add_custom_command (
            OUTPUT "${ipath}"
            COMMAND "${convert_exe}" ARGS "${sourceimg}" -resize "${size}x${size}" "${ipath}"
            MAIN_DEPENDENCY "${sourceimg}"
            COMMENT "ICNS resize: ${ipath}"
            VERBATIM)

        add_custom_command (
            OUTPUT "${ipath2x}"
            COMMAND "${convert_exe}" ARGS "${sourceimg}" -resize "${size2x}x${size2x}" "${ipath2x}"
            MAIN_DEPENDENCY "${sourceimg}"
            COMMENT "ICNS resize: ${ipath2x}"
            VERBATIM)
    endforeach ()

    add_custom_command (
        OUTPUT "${output_icns}"
        COMMAND iconutil ARGS --convert icns --output "${output_icns}" "${iconset}"
        MAIN_DEPENDENCY "${sourceimg}"
        DEPENDS ${deplist}
        COMMENT "ICNS: ${output_icns}"
        VERBATIM)

    if (ARG_OUTPUT)
        set ("${ARG_OUTPUT}" "${output_icns}" PARENT_SCOPE)
    endif ()
endfunction ()

function (make_icns_from_svg)
    cmake_parse_arguments (
        ARG
        ""             # Boolean args
        "INPUT;OUTPUT" # List of single-value args
        ""             # Multi-valued args
        ${ARGN})

    set (CMAKE_FIND_APPBUNDLE NEVER) # otherwise, it'll pick up the app bundle and open a shit ton of windows
    find_program (
        inkscape_exe
        NAMES "inkscape" "inkscape.exe"
        DOC "Path to Inkscape"
        PATHS "/usr/local/bin" "/usr/bin")

    message (STATUS "Inkscape path: ${inkscape_exe}")

    if (NOT inkscape_exe)
        message (FATAL_ERROR "Could not find Inkscape - is it installed?")
    endif ()

    get_filename_component (ARG_INPUT_ABS "${ARG_INPUT}" ABSOLUTE BASE_DIR "${CMAKE_CURRENT_SOURCE_DIR}")
    get_filename_component (ARG_INPUT_ABS_BIN "${ARG_INPUT}" ABSOLUTE BASE_DIR "${CMAKE_CURRENT_BINARY_DIR}")
    get_filename_component (ARG_INPUT_FN "${ARG_INPUT_ABS_BIN}" NAME_WE)
    get_filename_component (ARG_INPUT_DIR "${ARG_INPUT_ABS_BIN}" DIRECTORY)

    set (sourceimg "${ARG_INPUT_ABS}")

    set (basepath "${ARG_INPUT_DIR}/${ARG_INPUT_FN}")
    set (output_icns "${basepath}.icns")
    set (iconset "${basepath}.iconset")

    set (deplist "")

    foreach (size IN ITEMS 16 32 128 256 512)
        math (EXPR size2x "2 * ${size}")

        set (ipath "${iconset}/icon_${size}x${size}.png")
        set (ipath2x "${iconset}/icon_${size}x${size}@2x.png")

        list (APPEND deplist "${ipath}" "${ipath2x}")

        add_custom_command (
            OUTPUT "${ipath}"
            COMMAND "${inkscape_exe}" ARGS -z -e "${ipath}" -w ${size} -h ${size} "${sourceimg}"
            MAIN_DEPENDENCY "${sourceimg}"
            COMMENT "ICNS resize: ${ipath}"
            VERBATIM)

        add_custom_command (
            OUTPUT "${ipath2x}"
            COMMAND "${inkscape_exe}" ARGS -z -e "${ipath2x}" -w ${size2x} -h ${size2x} "${sourceimg}"
            MAIN_DEPENDENCY "${sourceimg}"
            COMMENT "ICNS resize: ${ipath2x}"
            VERBATIM)
    endforeach ()

    add_custom_command (
        OUTPUT "${output_icns}"
        COMMAND iconutil ARGS --convert icns --output "${output_icns}" "${iconset}"
        MAIN_DEPENDENCY "${sourceimg}"
        DEPENDS ${deplist}
        COMMENT "ICNS: ${output_icns}"
        VERBATIM)

    if (ARG_OUTPUT)
        set ("${ARG_OUTPUT}" "${output_icns}" PARENT_SCOPE)
    endif ()
endfunction ()

function (make_icns)
    cmake_parse_arguments (
        ARG
        ""             # Boolean args
        "INPUT;OUTPUT" # List of single-value args
        ""             # Multi-valued args
        ${ARGN})

    if (NOT ARG_INPUT)
        message (FATAL_ERROR "INPUT is required")
    endif ()

    if (NOT IS_ABSOLUTE "${ARG_INPUT}")
        get_filename_component (ARG_INPUT "${ARG_INPUT}" ABSOLUTE BASE_DIR "${CMAKE_CURRENT_SOURCE_DIR}")
    endif ()

    if (NOT EXISTS "${ARG_INPUT}")
        message (FATAL_ERROR "INPUT does not exist: ${ARG_INPUT}")
    endif ()

    file (RELATIVE_PATH ARG_INPUT "${CMAKE_CURRENT_SOURCE_DIR}" "${ARG_INPUT}")

    get_filename_component (ARG_INPUT_EXT "${ARG_INPUT}" EXT)
    if ("${ARG_INPUT_EXT}" STREQUAL ".png")
        make_icns_from_png (INPUT "${ARG_INPUT}" OUTPUT child_output)
    elseif ("${ARG_INPUT_EXT}" STREQUAL ".svg")
        make_icns_from_svg (INPUT "${ARG_INPUT}" OUTPUT child_output)
    else ()
        message (FATAL_ERROR "INPUT must refer to a .png or .svg, but a ${ARG_INPUT_EXT} was provided")
    endif ()

    if (ARG_OUTPUT)
        set ("${ARG_OUTPUT}" "${child_output}" PARENT_SCOPE)
    endif ()
endfunction ()

-1

Hallo, für meine Bedürfnisse habe ich ein Droplet erstellt, das nur in Drag & Drop-Symbolen oder in Symbolen zum Suchen in einem Ordner funktioniert (ich habe mich auf Ordner beschränkt, da die Suche nach Volumes aller Symbole viel Zeit in Anspruch nehmen kann). In Drag & Drop können Sie also Ordner oder Anwendungen ablegen, alles, was ein Symbol enthalten kann. Das erstellte Iconset trägt den Namen des ursprünglichen Icons, es befindet sich in einem Verzeichnis "/ aaaicones" und den Pfad des Icons. Beispiel im Ordner "/ aaaicones, wenn Sie xcode.app senden, finden Sie dort" /aaaicones/Applications/xcode.app/access.iconset "und /aaaicones/Applications/xcode.app/access.icns (das neu erstellte Symbol) Seien Sie eine Textdatei, in der der vollständige Pfad der Symbole und der Pfad zum entsprechenden Symbolsatz-Beispiel "/Applications/xcode.app/Contents/Applications/Instruments" nachverfolgt werden.

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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.