Как вручную создать icns файлы с помощью iconutil?
когда я проверяю свое приложение, я получаю эту ошибку:
пакет приложений не содержит значок в формате ICNS, содержащий оба
512x512
и512x512@2x
изображения.
я использую, чтобы сделать icns иконки с Img2icns приложения и до сегодняшнего дня он всегда работал правильно. Но теперь я получаю эту ошибку и нет никакого способа, чтобы заставить его работать. Я попытался собрать два файла PNG вместе (512x512
и 1024x1024
) в Img2icns но я всегда получаю эту ошибку. Я также попытался следовать инструкциям в руководстве по человеческому интерфейсу OS X от Apple, но когда я пытаюсь сделать наборы значков, Я получаю эту терминальную ошибку:
- bash: синтаксическая ошибка рядом с неожиданным токеном 'newline'
Я не очень хорошо с терминальными командами, так что, возможно, я делаю что-то неправильно. Я написал:
iconutil -c icns </Users/myname/SDK Mac Apps/MyApp/grafica/icon.iconset>
если бы кто-нибудь мог помочь, это было бы очень ценно. Спасибо, Масси.
17 ответов:
проверьте следующие инструкции (ссылке):
используйте iconutil для создания файла icns вручную
The
iconutil
инструмент командной строки преобразуетiconset
папки для развертывания-готовые файлы icns с высоким разрешением. (Вы можете найти полную документацию для этого инструмента, введяman iconutil
в терминале.) С помощью этого инструмента также сжимает полученныйicns
file, поэтому вам не нужно выполнять дополнительные действия компрессия.чтобы преобразовать набор иконок в файл icns
введите эту команду в окно терминала:
iconutil -c icns <iconset filename>
здесь
<iconset filename>
- путь к папке, содержащей набор иконок, который вы хотите преобразовать вicns
. Выходные данные записываются в то же место, что иiconset file
, если вы не укажете выходной файл, как показано на рисунке:
iconutil -c icns -o <icon filename> <iconset filename>
в других слова, которые нужно заменить
<iconset filename>
путь:/Users/myname/SDK Mac Apps/MyApp/grafica/icon.iconset
поскольку путь содержит пробелы, необходимо использовать двойные кавычки, например:
iconutil -c icns "/Users/myname/SDK Mac Apps/MyApp/grafica/icon.iconset"
эта команда должна работать должным образом.
вот скрипт для преобразования 1024x1024 png (с именем " Icon1024.png") в требуемый файл icns. Сохраните его в файл под названием " CreateICNS.src "в папке, где ваш png-файл находится в терминале" cd "в ту же папку и введите" source CreateICNS.src", чтобы назвать его:
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
есть модуль узла командной строки, который выполняет всю работу по преобразованию файла PNG в каталог iconset:
npm install -g node-icns nicns --in adventure-cat.png --out adventure-cat.icns
эти команды (введенные в терминал) работали для меня, чтобы преобразовать старый файл icns в новый формат:
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
обновление
The
-c
параметр iconutil больше не поддерживается. Используйте--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
при использовании всех видов скриптов для преобразования hi-res
PNG
изображение для плеяды различных копий с низким разрешением может показаться удобным (и это действительно так), не следует забывать, что этот вид автоматического изменения размера будет отображать заметно несовершенные изображения.чем меньше разрешение, тем размыт значок!
вместо этого вы всегда должны запрашивать логотип в некотором векторном формате, например в
SVG
, от вашего дизайнера. С этим на руке, вы можете вручную подготовьте идеальные файлы PNG во всех необходимых разрешениях, а затем сделайте один.icns
файл, который сделает ваш значок приложения выглядеть красиво на каждом экране, от мобильного телефона до некоторых высокого класса Retina дисплей последней версии iMac.из последних руководство Apple начиная с 2016 года, вы должны подготовить следующие файлы PNG:
+---------------------+--------------------+--------------+ | 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 | +---------------------+--------------------+--------------+
после того, как все файлы PNG подготовлены, поместите их в какой-нибудь каталог с
дополнительный комментарий, Когда вы создаете .icns файл, вам нужно переименовать все файлы pic с префиксом " icon_", в противном случае, iconutil завершится с сообщением об ошибке: ".iconset: ошибка: не удалось создать ICNS.- что совсем не информативно.
я переработал сценарий @Henry, чтобы он выглядел лучше:
#!/bin/zsh NAME=$(basename .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 --out $OUT done done iconutil -c icns $DIR rm -frv $DIR
обновление
The
-c
параметр iconutil больше не поддерживается. Используйте-—convert
вместо:#!/bin/zsh NAME=$(basename .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 --out $OUT done done iconutil -—convert icns $DIR rm -frv $DIR
Я написал сценарий bash для создания icns из файла 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 "" "$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
убедитесь, что у вас установлен imagemagick с поддержкой librsvg, на mac:
brew install imagemagick --with-librsvg
этот скрипт сослужил мне неплохую службу.
обновление
для более тщательного лечения я создал инструмент командной строки (написанный на Swift) для генерации
AppIcon.appiconset
с правильной планировкой и формат:
когда я проверяю свое приложение, я получаю эту ошибку:
пакет приложений не содержит значок в формате ICNS, содержащий как 512x512, так и 512x512@2x изображение.
⋮
Я не очень хорошо с командой терминал и поэтому, возможно, я делаю что-то неправильно. Я написал:
iconutil -c icns </Users/myname/SDK Mac Apps/MyApp/grafica/icon.iconset>
во-первых, как я уже упоминал в комментарии к ответу Анны, вам, вероятно, не нужно использовать iconutil. Вы должны иметь возможность просто добавить набор значков в свой проект и позволить Xcode конвертировать его для вас как часть сборки.
в любом случае, это может быть ваша проблема:
Я попытался поместить два PNG-файла вместе (512x512 и 1024x1024) ... но я всегда получаю ошибку.
нет 1024 на 1024, размер точки. элемент 1024 на 1024 пикселя (который был 1024 точки до Mountain Lion) теперь используется для 512 на 512 точек @2x.
ваш PNG файл должен быть назван соответствующим образом: icon_512x512@2x.png
более старая версия Apple Icon Composer 2.2 работает просто отлично, вы просто открываете .ICNS в нем, нажмите кнопку 1024x1024 и добавьте свое изображение.
мертвый простой .формат PNG. icns
- скачать IconMaker.приложение это просто .applescript не укусит
- перетащить .png на IconMaker.приложение, которое вы только что создали.
Подробнее: http://eon.коды/блог/2016/12/06/создание -- приложение-значок/
High sierra update
iconutil
теперь более строго относится к источнику .размер ПНГ. Подробнее об этом в блоге после прыжок. ✌️
код оболочки@dardo82 хорош и работает. Вот более простой в sh (для всех *nix) и быстрее (как это действительно важно):
#!/bin/sh # This runs silent, be as verbose as you wish NAME=$(basename .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 --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
Привет, для моих нужд я сделал капельку, которая работает только в значках перетаскивания или значках для поиска в папке (я ограничился папками, поскольку поиск на томах всех значков может занять много времени ). Таким образом, в перетаскивании вы можете удалить папки или приложения, все, что может содержать значок. Созданный набор иконок носит имя исходного значка, он помещается в каталог "/ aaaicones" и путь к значку. Пример в папке " / aaaicones, если вы отправляете xcode.приложение будет найти "/aaaicones / Applications / xcode.приложение / доступ.iconset " и /aaaicones / Applications / xcode.приложение / доступ.icns (воссозданный значок) там будет текстовый файл, где прослеживается полный путь значков , и путь к соответствующему примеру набора значков "/Приложения / xcode.приложение / содержание / приложения / инструменты.приложение/содержание/фреймворки / InstrumentsPlugIn.framework / Versions/A/Resources / access.icns" "/aaaicones / Applications / xcode.приложение / доступ.iconset " в приведенном примере (xcode) это может создать папка в конце (со всеми значками и набором значков) размером 214 МБ. Если вы обрабатываете только значок, он будет помещен в каталог "/ aaaicones / aIconeseule / " и его исходный путь, например /aaaicones/aIconeseule/Mac Elcapitan/.Томик.icns и /aaaicones/aIconeseule /Mac Elcapitan/.Томик.набор иконок с /aaaicones/aIconeseule/Mac Elcapitan / aalisticones.формат txt Капля находится ниже
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
вот функция, в основном основанная наГенри (может быть полезно в
~/.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 "" --out "$filename".iconset/icon_${i}x${i}.png sips -z $n $n "" --out "$filename".iconset/icon_${i}x${i}@2x.png [[ $n -eq 512 ]] && \ sips -z $n $n "" --out "$filename".iconset/icon_${n}x${n}.png (( i++ )) done cp "" "$filename".iconset/icon_512x512@2x.png iconutil -c icns "$filename".iconset rm -r "$filename".iconset fi }
использование:
$ mkicns "filename.png" # double-quote if spaces exist in filename
создает 10 размеров с
16x16
до512x512@2x
; для ввода изображений в .
то же самое, что и @Henry (комментарий выше), но принимает в качестве аргумента имя файла PNG и выводит ICNS с тем же именем.
Примечание : ожидается, что имя файла PNG будет иметь только 1 точку для отдельного расширения, т. е. xpto.формат PNG.
Итак, сохраните приведенный ниже код в файл под названием " CreateICNS.src " в папке, где находится ваш png-файл.
код :
IFS='.' read -ra ADDR <<< "" ICONSET=${ADDR[0]}.iconset mkdir $ICONSET sips -z 16 16 --out $ICONSET/icon_16x16.png sips -z 32 32 --out $ICONSET/icon_16x16@2x.png sips -z 32 32 --out $ICONSET/icon_32x32.png sips -z 64 64 --out $ICONSET/icon_32x32@2x.png sips -z 128 128 --out $ICONSET/icon_128x128.png sips -z 256 256 --out $ICONSET/icon_128x128@2x.png sips -z 256 256 --out $ICONSET/icon_256x256.png sips -z 512 512 --out $ICONSET/icon_256x256@2x.png sips -z 512 512 --out $ICONSET/icon_512x512.png cp $ICONSET/icon_512x512@2x.png iconutil -c icns $ICONSET rm -R $ICONSET
КАК ИСПОЛЬЗОВАТЬ :
затем в терминал, " cd " в ту же папку и введите:
source CreateICNS.src {PNG filename}
где {PNG filename} - это имя вашего PNG файла, т. е. xpto.формат PNG.
Если ваш файл будет называться abc.ПНГ можно использовать :
source CreateICNS.src abc.png
есть 2 задачи:
- создайте 10 правильных файлов icns
- сделать ваш проект Xcode, чтобы использовать их правильнопоскольку у меня были часовые проблемы с обеими этими задачами, а также не нравится, когда я не "вижу", что происходит, здесь путь для осторожных:
создайте 10 правильных файлов icns:
Я использовал сценарий выше от Генри: он по-прежнему работает для HighSierra и Xcode 9.2, включая команду "c".
Файл icns I получил, появился как только один размер значка в Finder / Quicklook и в предварительном просмотре показал только 8 из 10 размеров.
Поэтому я использовал терминал, пошел с компакт-диска на папку команду: iconutil -с набор иконок (icns по именем) на только что созданный файл icns, чтобы восстановить файл icns на набор иконок папки, и - се & се, - я мог видеть мой вновь созданный 10 значок файлов. Используя быстрый взгляд на папку iconset (и используя полноэкранный режим, чтобы иметь возможность масштабировать их с помощью ползунка), я мог бы проверить, что все размеры на самом деле выглядят очень хорошо.в сторону: они выглядели лучше, чем мои попытки изменения размера с PSE, скорее всего, потому что я не нашел времени, чтобы играть со всеми вариантами изменения размера в PSE. Если вы используете PSE, убедитесь, что ваши png файлы сохраняются без цветового профиля. Кроме того, признаюсь в своем невежестве, для меня файл 256x256@2 - это то же самое, что и файл 512x512-оба в 72dpi. Попытка следовать комментариям 144 dpi выше не сработала для меня.
получите ваш Проект Xcode, чтобы использовать их правильно:
Сначала я удалил все свои бесплодные попытки в Xcode и совершил чистую версию в репозиторий git (что было бы умно, было бы сначала совершить чистую версию - прежде чем я отчаянно начал добавление значка odyssee).
Я также убедился, что в информации.plist file нет указателя, связанного с записью "icon file", и что в моих общих настройках проекта я выбрал AppIcon для значков приложений.
Затем я добавил имущество.каталог активов и в каталоге активов новая папка Appicons и Launch Images для ОС.
Затем я скопировал (перетаскивание с нажатой опцией) из папки iconset каждый файл изображения png в соответствующий пробел AppIcon. Так что я снова мог видеть, что происходит. Xcode преобразовал это в файлы icns, или, может быть, как моя папка iconset, полученная из папки icns, форматы файлов были приняты.затем архивируйте и проверяйте, и не будет ошибки при загрузке или проверки.