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

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

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

Издание было не самым дружелюбным образом настроено по отношению к 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

Не ищите Interface Builder в Xcode 4, попивая сок у себя в квартале. 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 становился все более медлительным и тормозным я относил на счет его невысокого качества. Разделять этот клубок после прозрения было очень непросто.

С той же ошибкой у новичков я встречался неоднократно.

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

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

Продолжение следует

Обсудить историю Apple вы можете в нашем Telegram-чате.

История AppleРазработка приложений для iOSСтив Джобс