Не ищите Interface Builder в Xcode 4, попивая сок у себя в квартале

C 1988 года, начиная с NeXTSTEP 0.8, в фирменной среде разработки присутствовало это приложение. Компоновщик интерфейсов. Довольно оригинальный (не уникальный, но все же необычный). Он был одной из причин почему Тим Бернерс-Ли выбрал для написания первого в мире браузера WorldWideWeb NeXT. В комплекте Xcode 4 этого приложения не было… В свое время, когда Интернет был еще совсем юным, а найти в нем все что душе угодно было совершенно невозможно, я опубликовал где-то статью про это чудо. Сам я еще не имел возможности попробовать NeXTSTEP, но зато скачал полный комплект документации с сайта NeXT (уже то ли купленной Apple, то ли купившей её), и внимательно его изучил.

Издание было не самым дружелюбным образом настроено по отношению к Apple (в 1997 это было обычным явлением), и сопроводило статью убийственным комментарием. Этот самый InterfaceBuilder был создан вовсе не Apple! Его написал какой-то француз, для Lisp.
Вообще-то, если я и упомянул в той статье Apple, то только в связи с её слиянием с NeXT, но ответить не было никакой возможности. Через несколько лет, узнав подробности, я мечтал поквитаться с обидчиком (но издания уже не было): “какого-то француза” звали Жан-Мари Юйó, он и в самом деле в 1986 году придумал и написал Interface Builder (с пробелом, это о чем-то говорит?) для ExpertLisp. Это одна из реализаций Lisp для Mac’а. Интегрированная с его операционной системой и API.
Этот Lisp был относительно популярен на Mac’ах, но из-за его редкости и огромной цены я до него так и не добрался. Здесь ворованных копий этого Lisp’а не было. А потом пропал и мой интерес к Lisp.
Зато в конце 1987 года Interface Builder и её автора привели в NeXT и показали их Джобсу. Как и предполагали совратители, Стив был потрясен, увлечен и захотел использовать “все это” в ProjectBuilder. Стив приобрел и самого Жана-Мари.
Меньше чем через год программа под названием InterfaceBuilder вошла в состав среды разработки NeXT. И пережила в её составе все драматические трансформации, выпавшие на её долю. В Mac OS X её снова переименовали в Interface Builder (с пробелом, это Mac), под тем же именем она вошла в состав Xcode, и вдруг, в 2011 году, её не стало…
Что такое Interface Builder?
Это компоновщик пользовательских интерфейсов не генерирующий программного кода. Он имеет дело с реальными объектами. С “высушенными”, но настоящими, которые при её применении не создаются заново, а восстанавливаются.
Из-за их природы их можно связывать с объектами в программном коде, как если бы они были его частью – и в то же время, большинство объектов визуально отображаются на “холсте” в Interface Builder. Их можно перетаскивать в нужное положение на экране, если класс объекта не запрещает изменять размер объекта – меняет его размеры.
Кроме объектов с визуальным представлением (кнопок, полос прокрутки, текстовых полей и прочего интерфейсного инвентаря) в Interface Builder существовали невидимые объекты, которые точно также восстанавливались в программном коде – и организовывали связь между программой и интерфейсом. Конструкция получилась очень гибкой и управляемой.
Восстановленный объект (видимый или невидимый), если он был объявлен в программном коде, можно было дополнительно настроить – и вообще, делать с ним все что угодно.
С 1986 года, за 33 года существования, Interface Builder оброс многочисленными новыми способностями, некоторые из доисторических новаций канули в лету – но и сегодня это один из самых эффективных инструментов написания программ для операционных систем Apple. Если научиться им пользоваться (инструменты разработчиков пишутся для умных людей, их необходимо изучать и осваивать).
А в заголовке же “не ищите”? Это ложь для привлечения большего числа просмотров рекламы? В заголовке чистая правда.
Interface Builder и Xcode 4

В Xcode 4 Interface Builder перестал существовать как отдельная программа. С этого момента он – неотделимая часть и всего-лишь режим основного приложения среды разработки.
При открытии в среде разработки nib-файлов (их тоже не ищите в исходных кодах), среда разработки включает для них этот режим – в котором их можно редактировать, создавать или просто просматривать. Начиная с Xcode 3 у nib-файлов в исходном коде расширение “.xib”, формат на основе XML. В процессе сборки они “компилируются” в nib-файлы.
В Xcode 4 встроенный Interface Builder снова улучшили, приведя в замешательство даже самых опытных пользователей – но ненадолго. Зато он научился новым фокусам, говорить что он совсем не генерирует исходный код стало неправильно. Но подробнее не буду. Эти небольшие нарушения концепции были уместны, приятны и очень упростили жизнь.
Кроме того, в Xcode 4.2 произошла еще одна революция, но прежде чем рассказать о ней, надо рассказать еще кое о чем.
Interface Builder и iOS
Вскрытие и расшифровка исходных кодов iPhone приложений выявили несколько деталей, очень интересных для Mac’овских разработчиков. В приложениях не использовались nib-файлы, и в подавляющем большинстве случаев координаты объектов на экране задавали напрямую, их точными значениями.
В первых бета-версиях iPhone SDK о Interface Builder с iPhone OS не работал вообще. Я не помню в которой из них по счету их наконец подружили, но даже в окончательном релизе это Interface Builder работающий с iPhone OS был непролазным сборищем багов и глюков.
Он был, кроме всего прочего, еще и не дописан (местами). Видимо, Стив вовремя вспомнил что “The real artists ship”, и принял волевое решение.
Даже у тех кто прожил в Interface Builder долгие годы, с ним возникали проблемы, одна за одной. Новички предпочитали обходиться без него, потому что в примерах которые можно было найти в сети и в появившихся книгах по программированию в системе iPhone IB почти не применялся.
В компании где все были новичками в iPhone OS, ребят удалось приучить к пользованию Interface Builder, они почувствовали его полезность (даже несмотря на проблемы).
В следующей компании разработчики были опытными и съевшими на iOS (её хвали уже так) не одну собаку – они наотрез отказывались ей пользоваться, предпочитая строить интерфейсы “ручками”. Как первые iPhone-программисты на Земле.
Следующее поколение программистов очень удивлялось этому.
Storyboard
Еще одной революцией, случившейся с Interface Builder в Xcode 4 (кроме его избавления от багов и глюков и превращения его в надежный удобный инструмент для разработки в iOS), был новый формат архивов “обезвоженных” объектов, названный storyboard.
Файлы в этом формате имели расширение “.storyboard”, и теперь в одном таком файле можно было определить весь интерфейс приложения полностью, с переходами между экранами и визуальными эффектами.
Слово storyboard можно перевести как “раскадровка” – таблица эпизодов с разбивкой по актерам. И в русском, и в английском это жаргон киношников. Я подозревал что без Стива, самого крупного акционера Walt Disney, посвятившего компьютерной анимации несколько лет жизни, здесь не обошлось – но оказалось что он к этому совершенно не при чем. Его в тот момент интересовали более важные и значительно менее приятные вещи.
Раскадровки были замечательны, хоть и не лишены недостатков.
Со времен NeXTSTEP (и возможно, с еще более седых времен Жана-Мари Юйó), во всех разновидностях учебников и документации по использованию Interface Builder указывалось что в nib-файле крайне не рекомендуется объединять слишком много интерфейсов. Он для этого не оптимизирован, он будет долго грузиться и работать кое-как.
Когда-то на эти грабли наступил я сам: в 2001 году, в своей первой Cocoa-программе я все графические ресурсы собрал в одном файле. Чтобы были в одном месте, так спокойнее. А то что Interface Builder становился все более медлительным и тормозным я относил на счет его невысокого качества. Разделять этот клубок после прозрения было очень непросто.
С той же ошибкой у новичков я встречался неоднократно.

Теперь эта дурная (но понятная) привычка перестала быть дурной, теперь код можно было нанизывать на интерфейс – используя storyboard еще и как живой чертеж замысла.
Продолжение следует
Обсудить историю Apple вы можете в нашем Telegram-чате.
__

[ оригинал ]