NIB

Файлы с расширением *.nib — это файлы ресурсов графического интерфейса приложений в Mac OS X. Маководы, которые сталкивались с локализацией (переводом) графического интерфейса приложений, наверняка знают, что есть .nib-файлы ресурсов, которые можно легко редактировать, а есть такие, которые Interface Builder не может открыть, выдавая сообщение, что файл ресурсов  компилирован и не может быть изменён. Это случилось не так давно, примерно с выходом Mac OS X Leopard, а глобально компилированные ресурсы появились в Mac OS X Snow Leopard. Почему? Помните, когда появился на свет Snow Leopard? P.R.щики Apple не раз упомянали, что разработчикам удалось уменьшить объём ОС на 5 ГБ, которые теперь можно использовать для фото, видео и аудио… Вот-вот. Дело в том, что до выхода Mac OS X 10.5 Leopard, в том же Tiger, было полно неоткомпилированных *.nib-ресурсов и Apple признала, что это на самом деле не совсем правильно так как бандлы ресурсов занимают больше места по сравнению с компилированными .nib’ами, и что в дальнейшем исправит эту оплошность. Вот и исправила. Причём, как я понимаю, встроила эту «исправлялку» в Interface Builder по-умолчанию, поэтому мы всё чаще встречаем откомпилированные ресурсы в приложениях. Отчасти за счёт ресурсов в Snow Leopard и удалось сэкономить часть дискового пространства. Что же из себя представляют эти откомпилированные ресурсы? На самом деле тут нет ничего магического. Некомпилированные ресурсы представляют из себя бандл с расширением *.nib внутри которого находятся три файла: info.nib, classes.nib и keyedobjects.nib.

 
Бандл ресурсов .nib
 

Если из всего бандла, например MainMenu.nib, вытянуть файл keyedobjects.nib, а затем переименовать его в имя всего бандла - MainMenu.nib, то этот переименованный keyedobjects.nib как раз и будет компилированным ресурсом. Иными словами: откомпилированный .nib — это keyedobjects.nib из неоткомпилированного .nib-бандла. Вот так и происходит на самом деле компиляция ресурсов: простое вытягивание и переименование keyedobjects.nib в название ресурса.

 
Компилированный .nib-файл
 

Так как же сделать из откомпилированного .nib-ресурса бандл, который затем можно будет редактировать? Всё очень просто: нужно вернуть всё на свои места. Для этого нам нужен любой .nib-бандл (неоткомпилированный *.nib). Его можно взять внизу поста (будет ссылка). Переименовываем .nib-бандл в имя компилированного ресурса, а сам компилированный .nib-ресурс переименовываем в keyedobjects.nib, открываем бандл и заменяем в нём существующий keyedobjects.nib нашим.

 
Наглядная схема .nib-файла
 

Теперь у нас получился .nib-бандл который можно изменять при помощи Interface Builder — приложения, входящего в пакет разработчика. Всё.
 


 
Скачать NIB-bundle


Понравилось? Поделись с друзьями!
  • Спасибо за метод.
    я не селен в программировани но хочу перевести приложение прошу совета
    Папка English.lproj содержит очень много .nib файлов xkode просто так их не открывает. как их отредактировать не прибегая к приведенному методу для каждого файла?

    • Никак. Если NIB компилированный, то нужно с каждым проделывать такие манипуляции. Правда, на самом деле за инерфейс могут отвечать не все NIB-файлы.
      Casing    zsm

  • Делаю в точности, как тут написано, но при попытке открыть получившийся nib файл постоянно выскакивают ошибки… в чем может быть дело?

    • Некоторые приложения используют нестандартные библиотеки, отсутствующие в стандартном Xcode. Так как необходимые элементы для построения интерфейса отсутствуют и возникают ошибки. Это как один из возможных вариантов.
      Casing    Александр

  • Для чистоты экспермента создал пустой проект (т.е нестандартные библиотеки не использовал). В последующем при попытке окрытия исправленного nib файла выдается ошибка открытия.

    • Ну не знаю. Я таким способом редактировал и локализировал достаточно различных приложений: Fraise, TextMate, множество стандартных панелей настроек в бета-версиях Lion и Mountain Lion (когда тестировал их) и ещё кучу других, о которых уж и не вспомню. Не все ресурсы можно отредактировать именно таким способом (об этом я уже сказал), но большинство NIB’ов редактируется именно так.
      Casing    Andy

  • что-то к ios-ным nib эта фишечка не подходит. как декомпилировать их?

  • Спасибо! Все круто получилось!! Очень вам благодарен!

  • Доброго времени суток! Тема еще актуальна? Пытаюсь отредактировать MainMenu.nib в плеере Audirvana Plus 1.5.12 Проблема следующая — превратить MainMenu.nib в редактируемый проект получается, видно интерфейс и настройки, после сохранения проекта и обратном переименовании — при запуске программа не грузит интерфейс и вылетает (запуская при этом плейлист — дочерний элемент, если он конечно был включен). Подскажите как быть, если конечно здесь еще кто бывает…

    • Доброго!
      Возможно приложение имеет цифровую подпись. После редактирование контрольные суммы не совпадают и от этого траблы. Как удалить цифровую подпись я писал здесь, пробуйте.
      Casing    Алексей

  • Пожалуйста, обновите ссылку на неоткомпилированный *.nib.