С выходом Xcode 5 среди прочих нововведений выделяется новый формат nib, или, как их сейчас называют, xib-файлов. В связи с этим я решил перевести занятную заметку Нильса Хаята об изменении структуры xib-файлов в Xcode 5.

На прошлой неделе я вливал код в свою рабочую ветку и обнаружил нечто, чего раньше никогда не видел:

Gib автоматически “влил” xib-файл! Я предположил, что это может быть связано с Xcode 5 и его улучшенными xib-файлами, и начал изучать вопрос.

Оказалось, что xib-файлы, которые генерирует Xcode 5, имеют совершенно новый формат. Выглядит все это так, как будто в Apple решили начать с чистого листа и наконец сделать xib-файлы удобными для работы команд любого размера.

Формат xib-файлов Xcode 4

Для демонстрации разницы между двумя форматами файлов я создал новый xib-файл в Xcode 4 и разместил на нем несколько элементов управления: UIScrollView с несколькими UIButton’ами, несколько UILabel’ов, UITextView и т.д.

После этого я выбрал этот файл в project navigator’е и нажал Open As > Source Code. Вот как он выглядит:

.xib-файл, созданный в Xcode 4 (вам нужно нажать “File suppressed. Click to show.”, github немного тупит).

1108 строк для такого простого view! Немало.

Попробуйте разобраться с этим файлом, он плохо читается, имеет сложную структуру. Именно поэтому некоторые люди вообще не любят xib-файлы и не пользуются Interface Builder’ом.

Что еще хуже: формат файла не является однозначным. В том смысле, если вы и я создадим абсолютно одинаковый интерфейс в Interface Builder’е, мы можем (наверняка) получить разные по содержанию файлы. Это делает xib-файлы очень трудными и даже не всегда возможными для слияния (merge). Это еще одна причина, по который люди не любят пользоваться xib-файлами.

Формат xib-файлов Xcode 5

После этого, я открыл тот же самый проект в Xcode 5. Когда вы открываете в Xcode 5 xib-файл, созданный в Xcode 4, вам предлагается преобразовать этот файл в новый формат. Это оправдано только в том случае, если все люди, работающие с этим проектом, используют Xcode 5, поскольку файлы нового формата невозможно открыть в более старых версиях Xcode.

Я выбрал Upgrade и затем открыл xib-файл в текстовом режиме для того, чтобы поглядеть, что же в нем изменилось. Вот как он теперь выглядел:

.xib-файл, созданный в Xcode 5 (опять кликните “File suppressed. Click to show.”)

103 строки! Старый файл больше в 10 раз! Вот это сокращение!

И обратите внимание, файл понятен. Файл отражает иерархию представлений (views), которая видна в левой части Interface Builder’а. Немного практики, и вы сможете сами писать xml-код. Ок, ок, я немного преувеличиваю.

Более того, новый генерируемый код выглядит однозначным. Это значит, что создание одного и того же интерфейса будет приводить к генерации одного и того же кода. Это делает ручное слияние (merge) гораздо проще.

Заключение

Самое хорошее в новом формате xib-файлов не столько то, что он понятен для людей, а скорее то, что git тоже может разобраться с внесенными изменениями и будет в большей части случаев автоматически сливать (merge) ваши xib-файлы для вас!

Теперь если кто-то скажет вам, что не хочет пользоваться xib-файлами, дайте ему почитать эту заметку. Не думаю, что у них останутся причины по-прежнему не использовать эти файлы.

Это не единственное улучшение, которое Xcode 5 привнес в работу с Interface Builder. Например, установка auto-layout constraints теперь гораздо удобнее там, где раньше она была адски трудной. Если вы когда-либо пробовали настроить constraints в коде, вы знаете, что это совсем не просто.