Файлы с расширением *.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.
Если из всего бандла, например MainMenu.nib, вытянуть файл keyedobjects.nib, а затем переименовать его в имя всего бандла – MainMenu.nib, то этот переименованный keyedobjects.nib как раз и будет компилированным ресурсом. Иными словами: откомпилированный .nib – это keyedobjects.nib из неоткомпилированного .nib-бандла. Вот так и происходит на самом деле компиляция ресурсов: простое вытягивание и переименование keyedobjects.nib в название ресурса.
Так как же сделать из откомпилированного .nib-ресурса бандл, который затем можно будет редактировать? Всё очень просто: нужно вернуть всё на свои места. Для этого нам нужен любой .nib-бандл (неоткомпилированный *.nib). Его можно взять внизу поста (будет ссылка). Переименовываем .nib-бандл в имя компилированного ресурса, а сам компилированный .nib-ресурс переименовываем в keyedobjects.nib, открываем бандл и заменяем в нём существующий keyedobjects.nib нашим.
Теперь у нас получился .nib-бандл который можно изменять при помощи Interface Builder – приложения, входящего в пакет разработчика. Всё.
Спасибо за метод.
я не селен в программировани но хочу перевести приложение прошу совета
Папка English.lproj содержит очень много .nib файлов xkode просто так их не открывает. как их отредактировать не прибегая к приведенному методу для каждого файла?
Никак. Если NIB компилированный, то нужно с каждым проделывать такие манипуляции. Правда, на самом деле за инерфейс могут отвечать не все NIB-файлы.
Делаю в точности, как тут написано, но при попытке открыть получившийся nib файл постоянно выскакивают ошибки… в чем может быть дело?
Некоторые приложения используют нестандартные библиотеки, отсутствующие в стандартном Xcode. Так как необходимые элементы для построения интерфейса отсутствуют и возникают ошибки. Это как один из возможных вариантов.
Для чистоты экспермента создал пустой проект (т.е нестандартные библиотеки не использовал). В последующем при попытке окрытия исправленного nib файла выдается ошибка открытия.
Ну не знаю. Я таким способом редактировал и локализировал достаточно различных приложений: Fraise, TextMate, множество стандартных панелей настроек в бета-версиях Lion и Mountain Lion (когда тестировал их) и ещё кучу других, о которых уж и не вспомню. Не все ресурсы можно отредактировать именно таким способом (об этом я уже сказал), но большинство NIB’ов редактируется именно так.
что-то к ios-ным nib эта фишечка не подходит. как декомпилировать их?
Спасибо! Все круто получилось!! Очень вам благодарен!
Не за что 😉
Доброго времени суток! Тема еще актуальна? Пытаюсь отредактировать MainMenu.nib в плеере Audirvana Plus 1.5.12 Проблема следующая – превратить MainMenu.nib в редактируемый проект получается, видно интерфейс и настройки, после сохранения проекта и обратном переименовании – при запуске программа не грузит интерфейс и вылетает (запуская при этом плейлист – дочерний элемент, если он конечно был включен). Подскажите как быть, если конечно здесь еще кто бывает…
Доброго!
Возможно приложение имеет цифровую подпись. После редактирование контрольные суммы не совпадают и от этого траблы. Как удалить цифровую подпись я писал здесь, пробуйте.
Пожалуйста, обновите ссылку на неоткомпилированный *.nib.
Готово!
Актуально, спасибо!