О модулях SIMBL

SIMBL (Smart InputManager Bundle Loader) — популярное средство расширения функционала Cocoa-приложений. Сам пакет SIMBL помещается в /Library/InputManagers (допустимо и в ~/Library/InputManagers), а модули, внедряемые с его помощью в программы,— в /Library/Application Support/SIMBL/Plugins (или ~/Library/Application Support/SIMBL/Plugins)

Поскольку модули встраиваются в приложения, авторы которых никак на это не рассчитывали, существует опасность, что после обновления программа будет работать нестабильно… или вообще никак. Чтобы подстраховаться от такой неприятности, в файл Info.plist (в пакете модуля *.bundle) вносятся данные о минимальном и максимальном номере версии сборки, для которых разработчик гарантирует работоспособность этого модуля. К сожалению, это не всегда срабатывает. И наоборот, не исключено, что модуль перестанет подгружаться после обновления программы, хотя «связка» вполне могла бы продолжать работать.

Вот об этом и поговорим.

Особенно часто SIMBL используют для расширения возможностей стандартного для Mac OS X браузера Safari. У меня, например, с его помощью добавлена проверка корректности html-разметки просматриваемых страниц safaritidi, использовались и некоторые другие дополнения. И сталкиваться приходилось с обеими «возможными неприятностями».

Первая неприятность. Вы установили обновление Safari (или Mac OS X), зашли на свой любимый сайт и — «программа Safari неожиданно завершила свою работу» (встречал упоминания, что «падать» из-за модулей, подключаемых к Safari, может еще и Mail!). Перезапускаем — результат тот же самый. С высокой вероятностью мы столкнулись с конфликтом сторонних расширений. Идем в папку с модулями SIMBL и «методом поочередного вытаскивания» определяем, от чего придется отказаться (по крайней мере, пока разработчик модуля его не обновит). Надо заметить, что есть расширения, обходящиеся и без SIMBL. Они точно так же могут стать причиной неработоспособности новой версии программы. А искать их нужно, в первую очередь, в /Library/InputManagers (или ~/Library/InputManagers).

Вторая неприятность. Вы установили обновление Safari и при его запуске видите сообщение, что мол модуль такой-то не был проверен на совместимость с этой версией Safari и, по этой причине, загружаться не будет. Отправляетесь на сайт разработчика модуля в надежде загрузить обновление… Не тут-то было. А модуль был полезный, обходиться без него неудобно. Можно ли что-то сделать? Да. Но, естественно, на свой страх и риск.

Находим пакет этого модуля. Щелчок правой кнопкой — Показать содержимое пакета. Находим файл Info.plist и открываем его любым текстовым редактором. Находим примерно такой фрагмент:

<array>
<dict>
<key>BundleIdentifier</key>
<string>com.apple.Safari</string>
<key>MaxBundleVersion</key>
<string>5530</string>
<key>MinBundleVersion</key>
<string>528</string>
</dict>
</array>

Обратите внимание на выделенные строки. Максимальный номер версии мы и должны попробовать заменить. Находим версию программы (из самой программы — через пункт меню «О программе…») и вписываем ее вместо старого значения.

Сохраняем файл. Перезапускаем программу. Если всё заработало: и функции модуля действуют, и Safari работает стабильно,— отмечаем очередную победу человеческого разума над компьютером ;). Если же «фокус не удался»— удаляем модуль и ждем новостей от его разработчика.

Add a Comment