понедельник, 9 июля 2012 г.

Создание ярлыков с параметрами запуска в Mac OS

После покупки ssd диска возникла тяга к оптимизации системы. 
Начитавшись разных постов, я понял, что мне нужно отключить создание кешей браузером. Мой дефолтный браузер - Chrome, немного погуглив, обнаружил, что люди под макосью не очень волнует вопрос отключения кешей хрома, потому решил запустить используя способ из windows, а именно с определенными ключами командной строки и способ на удивления сразу заработал, но возникла проблема в том, что я не знаю как в макоси создавать ярлыки с ключами.
Немного погуглив нашел примеры, которые работали, но на половину. Нужно было создать applescript 

do shell script "/Applications/Google\\ Chrome.app/Contents/MacOS/Google\\ Chrome %U --disk-cache-size=1 --media-cache-size=1"
и сохранить все это дело как приложение, но иконка скрипта начинает висеть в доке, а процесс считается зависшим. 

Поэтому погуглив еще, нашел пример как можно сразу созданный родительский(зависший) процесс убить (свой ярлык-приложение я назвал chrome_nocache)

do shell script "/Applications/Google\\ Chrome.app/Contents/MacOS/Google\\ Chrome %U --disk-cache-size=1 --media-cache-size=1 & killall chrome_nocache"

но данный способ ни как не хотел работать, так как процесса с таким имененм не находилось. Тут я на какое то время застрял....но с утра вернувшись к проблеме решил подойти не состороны поиска нужного мне процесса, а посмотреть, что же создает редактор applescript. И увидел что нужно было искать не chrome_nocache, а applet, именно такое название было у приложения в пакете. Итак, я переписал свой скрипт на 
do shell script "/Applications/Google\\ Chrome.app/Contents/MacOS/Google\\ Chrome %U --disk-cache-size=1 --media-cache-size=1 & killall applet
и все вроде бы заработало. Появляется иконка скрипта в доке, затем вызывается браузер, а иконка исчезает, но убивать процесс с именем applet мне показалось как то грубо, мало ли что с таким именем нужно у меня будет висеть. Я решил посмотреть, как бы все это дело довести до ума что бы убивался именно мой процесс с уникальным и просто отличным именем :). Для этого я переименовал приложение внутри пакета, поменял свой скрипт на собственное название процесса и попробовал запустить, но все перестало работать. Все оказалось чуть сложнее, попробовав открыть файлы находящиеся внутри пакета в текстовом редакторе Sublime я нашел интересный файл Info.plist в котором два раза упоминалось applet
<key>CFBundleExecutable</key>
<string>applet</string>
<key>CFBundleIconFile</key>
<string>applet</string>
второй ключ указывал на иконку приложения, а вот первый я поменял на chrome_nocache. Сохранив результат я попробовал опять вызывать иконку-приложение и о чудо, все заработало, но возникло опять огромное НО.... система начала выдавать вопрос, точно я хочу что бы был выполнен скрипт или нет. Найдя мало результатов по этой проблеме, я нашел целый скрипт на bash, который пересоздавал некий файл ресурсов(или что то типа). fixAppleScriptApp который исправил мое приложение. Выполнив 
sh fixAppleScriptApp.sh /Applications/chrome_nocache.app
получил хорошо работающий ярлык-приложение. Единственное что я еще допилил, так это утащил ярлык из пакета с хромом в свое приложение дабы было красиво. 

Комментариев нет:

Отправить комментарий