Как вручную создать файлы icns с помощью iconutil?
Когда я проверяю свое приложение, я получаю эту ошибку:
пакет приложений не содержит значок в формате ICNS, содержащий как
512x512
и512x512@2x
образ.
Я использую для создания иконок icns с приложением Img2icns, и до сегодняшнего дня он всегда работал правильно. Но сейчас я получаю эту ошибку, и нет способа заставить ее работать. Я пытался собрать два файла PNG вместе (512x512
а также 1024x1024
) в Img2icns, но я всегда получаю эту ошибку. Я также пытался следовать инструкциям Apple OS X Human Interface Guideline, но когда я пытаюсь создать наборы значков, я получаю следующую ошибку терминала:
-bash: синтаксическая ошибка рядом с неожиданным токеном 'newline'
Я не очень хорош с терминальными командами, так что, возможно, я делаю что-то не так. Я написал:
iconutil -c icns </Users/myname/SDK Mac Apps/MyApp/grafica/icon.iconset>
Если кто-то может помочь, это будет очень цениться. Спасибо, Масси.
17 ответов
Оформить заказ следующие инструкции ( ссылка):
Используйте iconutil для создания файла icns вручную
iconutil
инструмент командной строки преобразуетiconset
папки в готовые к развертыванию файлы высокого разрешения icns. (Вы можете найти полную документацию для этого инструмента, введяman iconutil
в терминале.) Использование этого инструмента также сжимает результирующийicns
файл, поэтому вам не нужно выполнять дополнительное сжатие.Чтобы преобразовать набор иконок в файл 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
Изображение для множества различных копий с низким разрешением может показаться удобным (и это действительно так), не следует забывать, что этот вид автоматического изменения размера будет визуально представлять несовершенные изображения.
Чем меньше разрешение, тем размытее иконка!
Вместо этого вы всегда должны запрашивать логотип в каком-либо векторном формате, например, в 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 подготовлены, поместите их в какой-нибудь каталог с .iconset
расширение (Logos.iconset
например) и выполнить из Терминала:
iconutil --convert icns Logos.iconset
Если после выполнения этой команды не было ошибок, все файлы были подготовлены правильно, и вы получили Logos.icns
файл в том же каталоге, содержащий все красивые четкие логотипы для вашего приложения, которые подойдут для любого современного экрана с 2017 года.
Есть модуль узла командной строки, который выполняет всю работу по преобразованию файла PNG в каталог iconset:
npm install -g node-icns
nicns --in adventure-cat.png --out adventure-cat.icns
Дополнительный комментарий: когда вы создаете файл.icns, вам необходимо переименовать все файлы pic с префиксом "icon_", в противном случае iconutil завершится ошибкой с сообщением об ошибке: ".iconset:error: не удалось создать 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
Обновить
-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
То же, что @Henry (комментарий выше), но принимает в качестве аргумента имя файла PNG и выводит ICNS с тем же именем.
ПРИМЕЧАНИЕ. Предполагается, что имя файла PNG будет иметь только 1 точку для отдельного расширения, т.е. xpto.png .
Итак, сохраните приведенный ниже код в поле с именем "CreateICNS.src" в папке, где находится ваш файл png.
КОД:
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
КАК ПОЛЬЗОВАТЬСЯ:
Затем в терминале "cd" в ту же папку и введите:
source CreateICNS.src {PNG filename}
где {PNG filename} - это имя вашего PNG-файла, то есть xpto.png .
Если ваш файл будет называться abc.png, вы будете использовать:
source CreateICNS.src abc.png
Я переработал скрипт @ Генри, чтобы он выглядел лучше:
#!/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
Обновить
-c
Параметр iconutil больше не поддерживается. использование -—convert
вместо:
#!/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
Я написал 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 "$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
Убедитесь, что на Mac установлена программа imagemagick с поддержкой librsvg:
brew install imagemagick --with-librsvg
Этот сценарий послужил мне довольно хорошо.
Обновить
Для более тщательной обработки я создал инструмент командной строки (написанный на Swift) для генерации AppIcon.appiconset
с правильной версткой и форматом:
Dead simple .png .icns
- Скачать IconMaker.app Это просто.applescript не будет кусаться
- Перетащите ваш.png на IconMaker.app, который вы только что создали.
Больше информации: http://eon.codes/blog/2016/12/06/Creating-an-app-icon/
Высокая Сьерра-обновление iconutil
теперь более строг в отношении размера источника.png. Подробнее об этом в блоге после прыжка. ✌️
Код оболочки @dardo82 хорош и работал. Вот более простой в sh (для всех *nix) и более быстрый (как будто это действительно важно):
#!/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
Когда я проверяю свое приложение, я получаю эту ошибку:
комплект приложений не содержит значок в формате 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 и добавляете свое изображение.
Вот функция, в основном основанная на примере Генри (может быть полезным в ~/.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
}
Использование:
$ mkicns "filename.png" # double-quote if spaces exist in filename
Создает 10 размеров от
16x16
в512x512@2x
; принимает входные изображения в.png
только формат.
Бежать iconutil -c icns Icon.iconset
Заметка
- Icon.iconset - это папка
- Имя начинается со строчной буквы
icon_
- Когда ты видишь
Icon.icns
с правильным изображением, вы знаете, это работает
Есть 2 задачи:
- создать 10 правильных файлов icns
- получите ваш проект XCode, чтобы использовать их правильно
Поскольку у меня были часовые проблемы с обеими этими задачами, а также мне не нравится, когда я не "вижу", что происходит, вот путь для осторожных:
Создайте 10 правильных файлов icns:
Я использовал приведенный выше сценарий от Генри: он все еще работает для HighSierra и Xcode 9.2, включая команду 'c'.
Файл icns, который я получил, в Finder/Quicklook отображался только как один значок размера, а в режиме предварительного просмотра - только 8 из 10 размеров.
Поэтому я использовал терминал, пошел с cd в свою папку и использовал команду: iconutil -c iconset (имя файла icns) в только что созданном файле icns, чтобы вернуть файл icns обратно в папку iconset, и - вот, я мог видеть мои недавно созданные 10 файлов значков. Используя Быстрый просмотр папки с иконками (и используя полноэкранный режим, чтобы иметь возможность масштабировать их с помощью ползунка), я мог проверить, что все размеры на самом деле выглядят очень хорошо.
В качестве отступления: они выглядели лучше, чем мои попытки изменить размер в PSE, скорее всего потому, что я не нашел времени, чтобы поиграть со всеми вариантами изменения размера в PSE. Если вы используете PSE, убедитесь, что ваши файлы png сохранены без цветового профиля. Кроме того, по признанию моего невежества, для меня файл 256x256@2 такой же, как файл 512x512 - оба с разрешением 72dpi. Попытка следовать комментариям с разрешением 144 т / д у меня не сработала.
Получите ваш проект XCode, чтобы использовать их правильно:
Сначала я удалил все свои бесплодные попытки в XCode и отправил чистую версию в репозиторий git (что было бы разумно, было бы сначала зафиксировать чистую версию - до того, как я неистово запустил одиссею добавления значков).
Я также убедился, что в файле info.plist нет указателя, связанного с записью "файл значков", и что в общих настройках проекта я выбрал AppIcon для значков приложений.
Затем я добавил каталог assets.asset и в каталог ресурсов новую папку AppIcon для ОС "AppIcons and Launch Images".
Затем я скопировал (перетаскивал с нажатой опцией) из папки наборов иконок каждый файл изображения png в соответствующий AppIcon Spaceholder. Итак, еще раз, я мог видеть, что происходит. Xcode действительно преобразовал это в файлы icns, или, возможно, - поскольку моя папка с набором иконок, полученная из папки icns - форматы файлов были приняты.
Затем заархивируйте и подтвердите, и при загрузке или проверке не будет ошибок.
Мне это нужно, но для CMake. Я также хотел вариант дать ему SVG.
Вот суть: https://gist.github.com/Qix-/f4090181e55ea365633da8c3d0ab5249
И код CMake:
# 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 ()
Здравствуйте, для своих нужд я создал каплю, которая работает только в виде значков перетаскивания или значков для поиска в папке (я ограничился папками, поскольку поиск по томам всех значков может занять много времени). Таким образом, вы можете перетаскивать папки или приложения, все, что может содержать значок. Созданный набор значков носит имя исходного значка, он помещается в каталог "/ aaaicones" и путь к значку. Например, в папке "/ aaaicones", если вы отправите xcode.app, вы найдете "/aaaicones/Applications/xcode.app/access.iconset" и /aaaicones/Applications/xcode.app/access.icns (воссозданный значок). быть текстовым файлом, в котором отслеживается полный путь значков и путь к соответствующему примеру набора значков "/Applications/xcode.app/Contents/Applications/Instruments.app/Contents/Frameworks/InstrumentsPlugIn.framework/Versions/A/Resources/access.icns" "/aaaicones/Applications/xcode.app/access.iconset"в приведенном примере (xcode) это может создать папку в конце (со всеми значками и набором иконок) размером 214 МБ. Если Вы рассматриваете только значок, он будет помещен в каталог "/ aaaicones / aIconeseule /" и его первоначальный путь, например /aaaicones/aIconeseule/Mac Elcapitan/.VolumeIcon.icns и /aaaicones/aIconeseule/Mac Elcapitan /.VolumeIcon.iconset с /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