Как изменить иконку псевдонима, созданного с помощью appleScriptcript?
У меня есть appleScript, который создает ярлык на рабочем столе для исполняемого файла в файловой системе. Excutable имеет стандартную иконку exec. Можно ли изменить значок, чтобы он указывал на файл icns?
Я читал, что вы можете сделать это с помощью сторонней программы, как указано в разделе Изменить значок папки с помощью AppleScript?
но возможно ли это сделать без использования внешней программы?
Это мой сценарий
set source_file to (POSIX file "path to my exectuable")
tell application "Finder"
make new alias file at desktop to source_file
set name result to "My Shortcut"
end tell
Примечание: я также могу создать тот же ярлык с помощью команды ln -s, но в этом я не получаю значок, это просто ярлык с символом пустой страницы
2 ответа
Работать с такими файлами псевдонимов немного затруднительно, поскольку Finder, похоже, теряет отслеживание файла псевдонимов псевдонима после его переименования (даже если это псевдоним). Одним из решений будет использование AppleScriptObj-C для установки значка перед переименованием файла псевдонима, например (Mojave):
use framework "Foundation"
use scripting additions
set sourceFile to (choose file)
tell application "Finder"
set newAlias to (make new alias file at desktop to sourceFile) as alias
my setIcon(newAlias)
set name of newAlias to "My Shortcut"
end tell
to setIcon(fileRef)
set iconImage to current application's NSImage's alloc's initWithContentsOfFile:"/System/Library/CoreServices/CoreTypes.bundle/Contents/Resources/AlertCautionIcon.icns" -- example image file
current application's NSWorkspace's sharedWorkspace's setIcon:iconImage forFile:(POSIX path of fileRef) options:0
end setIcon
Предыдущее решение работало на старых ОС, но в новых ОС значок файла псевдонима Finder получает собственный значок только после изменения значка исходного файла . Кажется, это новое поведение Finder.app. Вот обходной путь:
-- script: Create Finder alias file with custom icon
-- written: by me, right now
use framework "Foundation"
use scripting additions
-- get source file (that is, original item)
set sourceFile to (choose file)
-- indicate custom icon's Posix payh
set iconFile to "/System/Library/CoreServices/CoreTypes.bundle/Contents/Resources/AlertCautionIcon.icns"
-- change icon of the original (source) file
set theImage to current application's NSImage's alloc()'s initWithContentsOfFile:iconFile
set ws to current application's NSWorkspace's sharedWorkspace()
ws's setIcon:theImage forFile:(POSIX path of sourceFile) options:0
-- make Finder alias file on desktop
tell application "Finder" to set aliasRef to (make new alias file at desktop to sourceFile) as text
delay 2 -- required (test other delay values)
-- remove original file's custom icon (that is, restore to defaults icon)
ws's setIcon:(missing value) forFile:(POSIX path of sourceFile) options:0