Правильный читатель еще
в августе
впечатлился статьей в ][
и сегодня уже вовсю толкает свои программы в Apple Store. Нет? Впечатлился, но
не настолько? Или впечатлился, но не толкаешь? Ах да, мы же про официальный SDK
почти ничего не рассказали. Простите, исправляемся!

Почему никто не сомневается в том факте, что писать «официальные» программы
под айфон означает «получать бабло»? Ознакомимся с примером. Жил да был на свете
перец с именем Стив Деметр (никогда, кстати, не замечал, что прогеры с именем
«Стив» становятся суперуспешными?). Жил он себе, кодил понемногу, ну и накодил в
результате очередной клон на тему тетриса, оценил его в скромные $5 и отправил в
AppStore. Сидит он, стало быть, у разобранного системника, чай пьет, а ему тем
временем приходит чек на $250 000 – мол, получите: вашу программу за два месяца
скачала туева хуча людей, вот ваше бабло.

Мило? Вот именно! А как тебе нравятся заголовки в американских таблоидах (Wired,
к примеру) – вроде «Кризис? Только не для iPhone-программеров!». И там, за
океаном, и тут, ближе к Москве и Киеву, айфон-девелоперы в почете. Всем охота
создать крутую программу и получить с нее огромное бабло. Ну что, теперь
впечатлился? То-то же! Давай быстренько разнесем по полочкам все основные
понятия и примемся за кодинг.

 

Основные понятия

Для тех, кто далек от истерии вокруг iPhone и не страдает фанатизмом по
отношению к яблочной продукции, напомним, что сначала iPhone по фичам не
дотягивал даже до статуса нормального телефона. После старта продаж летом 2007
года он представлял собой недоделанный телефон-плеер с качественным браузером,
продавался только в США и только с привязкой к оператору. Со временем умные люди
отучили его жаловаться оператору на чужую SIM-карту, научились писать и
устанавливать программы и вообще, настраивать телефон под свои нужды.

Мучиться пришлось до мая 2008 года, пока сама Apple не предоставила
собственный вариант SDK. Это было хорошо, да не очень. Фирменный набор для
разработчика оказался жутко ограничен по фичам, кодерам запрещали делать все,
что не документировано в официальных бумажках, создавать многопоточные
приложения и даже реализовывать нормальный мультитаскинг. Самое важное
яблококомпания оставила строго себе и даже запретила продвинутым проггерам
выпускать толковые книжки про официальный SDK (круто, да?) Правда, в октябре
передумала и пропустила на рынок первую книгу, о которой читай ниже. А еще она
просматривает весь софт, который пишется с Apple SDK. То есть, допустим, ты
сидел-писал, что-то прикольное вышло, отправляешь в AppStore, а тебе приходит
оттуда ответ в духе: «поменьше читай журналы вроде ][, за такие проги вообще
сажать за решетку пора, не пропустим». И ты начинаешь дорабатывать напильником
свое творение, чтобы его приняли. Неприятно, но никто не обещал легкой жизни.
Создавай что-то простое, чтобы американцам захотелось отдать за твой кусок софта
свой кровный бакс или даже парочку. В основном, в магазине прог для ифона все и
стоит по $2-5, софтинки покруче — $10, а что-то совсем стоящее – уже по $30-50.
На наш взгляд, $5 – предел для средней программки. Больше редко кто платит. Хотя
нашлись индивиды (сложно их иначе назвать), которые догадались купить программу
за один миллион долларов США. Программа почти ничего не делает, но называется «я
богат». Ну, статусная вещь, вроде как. Правда, дальше не так весело. Дело в том,
что фирменная студия разработки (Xcode) и сам iPhone SDK работают только на
Mac’е. Если у тебя под столом имеется лишь коробка с логотипом Win, то придется
ставить Хакинтош — адаптированную для PC версию Mac OS, или мучаться с VMWare.
Оба этих варианта не гарантируют успеха.

Ах да, если у тебя нет Apple iPhone или iPod Touch, то придется одалживать
его у соседа каждый раз, когда решишь выпустить новый билд своей программы.
Фишка в том, что эмулятор не гарантирует работоспособность программы на реальном
девайсе и даже не показывает ее реальную скорость работы – вычислительные
способности твоего компа явно помощнее iPhone будут.

Иначе говоря, по-хорошему надо тестить под iPhone, iPhone 3G и iPod touch, но
если подходить к делу с умом, и все обращения к железу аккуратно упаковывать с
эксэпшнами, то можно обойтись и одним устройством. Дело в том, что в новом ифоне
появился GPS, в старом его не было. В иподе старом нет ни сотовой связи, ни
динамика, ни камеры, и если твоя великолепная программка обратится к
несуществующей аппаратуре, у гаджета Apple случится паника. В лучшем случае
подвиснет только твоя программа, в худшем – зависнет весь девайс. Даже на
требование ребута он реагировать не станет, придется ресет делать. За такую
шалость обиженный юзер около твоей программы нарисует гневный каммент с
вытянутым средним пальцем и объяснит прохожим, что программу покупать не стоит.

В Сети бродят слухи, что для получения дозволения кодить под iPhone всем надо
заплатить мзду в размере $99. Это не совсем так, кодить можно бесплатно, но вот
за доступ к Apple Store придется забашлять. Ничего не поделаешь.

Итак, ты понял, что неофициальный SDK не позволит тебе получать за свои проги
какие-то деньги и вообще размещать их в официальном магазине программ. На самом
деле, так называемый iPhone toolchain — это просто туча нагенереных хедеров и
руками прикрученный ARM-компилятор, а официальный SDK – это полноценный
инструментарий, хоть и с ограниченным функционалом. Тулчейн не ограничивает тебя
в твоих действиях, правда, не для всех действий он предлагает инструменты.
Короче говоря, нет в жизни счастья, есть компромиссы. Так что, сделаем три
глубоких вдоха-выдоха и приступим к осмотру Apple iPhone SDK.

 

Откуда берутся SDK и мануалы

Все доки, мануалы, Xcode и сам SDK качаются с

developer.apple.com/iphone
. Там выложена и пара видеоматериалов, где
понятным английским рассказано, чем, где и куда надо кликать. Если по инглишу в
школе было два балла, то просто посмотри двигающиеся картинки — они на самом
деле помогают. Кроме того, на сайте есть примеры кода, на которых можно увидеть,
что собой представляет язык Objective-C. Комментарии в коде достаточно слабые,
они созданы не для того, чтобы помочь новичку, а чтобы человек просто мог
понять, про что этот код. Значит, придется повозиться.

Что же касается мануалов и гайдов, то кроме россыпи специализированных
форумов и чатов, тебе поможет фирменная яблочная документация с того же
developer.apple.com/iphone. Она чем-то напоминает MSDN от Microsoft. Если этого
покажется мало, глянь на бестселлер от Стивена Кочана – «Programming in
Objective-C 2.0». Про интерфейс Cocoa лучшей считается книга Аарон Хиллегэз с
названием «Cocoa Programming for Mac OS X».

По поводу специализированных книг по разработке именно для iPhone, можно
глянуть на «The iPhone Developer’s Cookbook: Building Applications with the
iPhone SDK» от Эрики Сэдун, но она подойдет только достаточно опытным кодерам.
Новички запутаются в слабо прокаменченых примерах, кусках кода и не разберутся в
поучениях автора. Кстати, популярная «iPhone Open Application Development: Write
Native Objective-C Applications for the iPhone» от Джонатана Здзярского
рассказывает только про тулчейн, с официальным SDK она особо не поможет, поэтому
не ошибись случайно. Из всей этой книги разве что пара моментов про Objective-C
будет полезна.

В общем, когда разберешься в организации классов, ключевых словах и структуре
программы, идея программы для iPhone перестанет казаться идиотской, а Xcode
прекратит бесить. Apple позаботилась об огромном количестве функциональных
библиотек и удобных обертках над функциями ядра. В самом начале этого тебе точно
хватит. Когда потребуется нечто эдакое, на помощь придет любимый C++, который
умеет обращаться напрямую к функциям ядра. Правда, связывать код на Objective-C
и на C++ не так просто, придется немного поизвращаться.

 

Плюсы и минусы

Экран айфона – его главное преимущество и главный же недостаток. Преимущества
– пользователю, недостатки – как водится, нам. Круто и интересно в визуальном
редакторе создавать многооконный интерфейс, красивые переходы, кнопочки и прочее
счастье. Но когда счастья становится слишком много, визуальный редактор форм
начинает бесить своей услужливостью и автоматизацией, во множестве элементов
начинаешь путаться, – да и вся эта анимация и настройки переходов тоже добавляют
работы.

Кроме экрана, хлопот может доставить только очень капризный GPS и
необходимость крайне аккуратного обращения к частным аппаратным возможностям.
Дабы программа корректно работала на всех версиях iPod и iPhone, надо, чтобы она
была в курсе, что можно трогать, а что нет. Это все придется прописать. А еще в
мобильной Mac OS нет сборщика мусора, – следи за памятью сам, удаляй объекты,
ищи лики, думай, где твоя прилага нагадила. Не кривись, в Symbian все еще
сложнее и глупее реализовано.

 

Покодим!

Настало время реализации практической части. Итак, открываем Xcode, создаем
проект, основанный на флип-окне. Где ресурсы, где код, а где хедеры –
разобрался? Молодец! Конечно же, главный файл проекта имеет расширение .xcodeproj,
файлы с кодом – расширение .m, заголовки с расширением .h ты точно узнал, а .xib
– что-то вроде скомпиленого класса, в нем могут быть строки, формы да и сам код
класса. Часть кода ты делаешь ручками, а часть – автоматом через Interface
Builder. Так вот, автоматическая часть сюда и упаковывается.

Как добавлять картинку и перетянуть ее на форму – тебя учить не нужно.
Редактируется все интуитивным мышиным кликом. Что ж, компилируем.

Для запуска приложения выбираем целевое устройство и рабочую версию SDK.
Создавать приложения лучше для iPhone 2.0, так как в 2.1 есть некоторые фишки,
лишенные обратной совместимости с 2.0, отягощенным более старыми версиями
прошивки.

Полюбовался, работает? Теперь можно покопаться в коде. У любой программы
точка входа находится в файле main.m (функция main). В ней выделяется память для
объектов с дефолтным деструктором (надо же их за тобой как-то убирать) и
создается шаблон приложения высшего уровня вместе с ключевыми объектами (функция
UIApplicationMain). Приложения для iPhone однопоточные, поэтому выход из этой
функции означает завершение программы:

int main(int argc, char *argv[])
{
NSAutoreleasePool * pool =
[[NSAutoreleasePool alloc] init];
int retVal = UIApplicationMain
(argc, argv, nil, nil);
[pool release];
return retVal;
}

Далее разберем такое понятие, как Application Delegate. Это нечто вроде
базового класса для твоей программы (в примерах он уже создан). Интерфейс
главного делегата описан в HelloWorldAppDelegate.h, а тело — положено в
HelloWorldAppDelegate.m.

Такого понятия, как вызов метода другого класса в Objective-C нет, все
делается через делегаты и сообщения. То есть, ты посылаешь объекту сообщение, и
если целевой класс его сумеет обработать – считай, что своего ты добился. К
примеру, Application Delegate связан с UIApplication, именно он создает окно,
интерфейс пользователя, отвечает за прерывания, сообщения акселерометра и
прочее.

(void)applicationDidFinishLaunching:(UIApplication *)
application {
// создаем контроллер видов
MyViewController *aViewController =
[[MyViewController alloc] initWithNibName:@
"HelloWorld" bundle:[NSBundle mainBundle]];
self.myViewController = aViewController;
// Квадратные скобки – это и есть отправление сообщения
// В данном случае объекту aViewController
// отправляется сообщение release
[aViewController release];
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleBlackOpaque];
// Каждый вид контроллера является подвидом окна
UIView *controllersView = [myViewController view];
[window addSubview:controllersView];
[window makeKeyAndVisible]; }

MyViewController.m – файл с кодом, собственно, контроллера нашего главного
элемента формы. В нем содержится функционал этого приложения. Файл подробно
прокомментирован и выложен на нашем DVD,
поэтому не забудь глянуть.

Мы добавили новый контрол для переворота экрана, а исходники для него и
смежных классов сгенерились автоматически. Главный вид – FlipsideView, сюда
вложены RootViewController (он управляет переворотами окошек, анимацией) и два
вида – обратный, FlipsideView, и прямой — MainView. RootViewController
определяет, какой из видов надо отобразить. Именно ему отправляются сообщения о
смене вида.

В результате, мы получили (и разобрались в устройстве) пример крайне простой,
но работающей программки всего лишь с помощью нескольких щелчков мышью в среде
разработки. Ниже ты можешь увидеть интервью с настоящим гуру айфон-кодинга, а
мне же позволь откланяться. Будем надеяться, мы продолжим знакомство с гламурным
кодингом под яблочный телефон в следующих номерах ][акера. Не стесняйся, пиши
свои просьбы и отзывы – от твоих писем зависят те темы, которые мы будем
раскрывать в следующих статьях.

 

Интервью: Владимир Кузнецов, ведущий iPhone developer компании CactusSoft

Чтобы тебе было легче представить свое вероятное будущее, мы расспросили
ведущего iPhone developer’а компании CactusSoft про особенности и трудности
программирования для девайса Apple. Владимир Кузнецов, в миру более известный
как Real (с некоторых пор – iReal), около пяти лет зарабатывал на бутерброд с
икрой скилами С++ и C# (из них 3 года – С++ на уровне девелопера), а недавно
решил все бросить и повернулся в сторону йаМобилки, очаровал менеджера и с ходу
попал на должность лидирующего разработчика. Он уже успел пообщаться с реальными
заказчиками, провести пару собеседований при приеме на работу, поучаствовать в
крупных проектах для iPhone. В общем, камрад правильный, дурного не посоветует.

 

Рил, расскажи, в каких проектах ты участвовал, что писал сам?

Начал с простого приложения для работы с микроблоггингом. Дальше началось
интересное – программа для управления термостатом. У заказчика в США есть такая
штука, которая управляет множеством систем контроля температуры. В ней есть свой
http-сервер. Моя программа к нему присоединяется и управляет всей этой махиной,
снимает текущие данные, позволяет настраивать новые. Сейчас они захотели более
навороченную версию, но это уже не мой проект. Я в данный момент занимаюсь
разработкой игрового движка. В целях переносимости кода на другие платформы в
качестве основного языка был выбран C++. В местах, более привязанных к
конкретной платформе, для iPhone-версии будет использован Objective-C. Кроме
этого, есть еще несколько параллельных небольших проектов под iPhone.

Внушительно. Ладно, верим, ты достаточно крут. А до этого ты не возился с
Маками и прочей продукцией Apple, верно?

Да, с Маками особо проиграться не довелось, зато сейчас мне директор подарил
iPod touch и MacBook. Для работы, конечно же, хотя я и забираю обе игрушки с
собой домой.

 

Как ты с ходу перешел на новый язык, с чего начинал?

Начинал с освоения 147 старниц мануала Objective-C 2.0 Programming Language,
далее просмотрел 212 страниц iPhone OS Programming Guide. Всего-то :). В
принципе, для работы этого уже достаточно, остальное будет изучаться в процессе
практики. А для начала вообще хватит просто ознакомиться с примерами, посмотреть
видеоуроки на сайте Apple и – можно начинать. Я имею в виду не зеленых кодеров,
а ребят с мозгом.

Ну да, наши читатели именно такие. Что вообще нужно знать, какая минимальная
база знаний должна быть, чтобы заняться кодингом для гаджета Apple?

Objective-C — это расширение C++ в сторону объектно-ориентированного подхода.
При программировании под iPhone довольно часто встречаешься с паттернами
(делегаты, MVC, синглетон). Соответственно, нужны познания в C++, хорошее
понимание принципов ООП, надо быть хотя бы знакомым с паттернами. Ну а в идеале
— иметь опыт программирования для компьютеров Apple; язык, фактически, тот же,
только некоторые классы отличаются.

 

Опыт какого языка тебе пригодился? На что похожи яблочные Си?

На C, C++, C#. На что же еще им быть похожими? В большей степени понадобился
опыт C++, он фактически является прототипом Objective-C. Более того, возможно
комбинирование кода C++ и Objective-C в рамках одного проекта и даже класса.

 

Легко ли было переходить на ифоновские Си?

Поначалу трудно, ибо слишком много нового: другая операционная система,
другая раскладка клавиатуры, другие горячие клавиши, другой синтаксис, много
новых ключевых слов, терминология, которая противоположно пересекается с C#
(например, то, что в C# называется интерфейсом, в Objective-C зовется
протоколом, интерфейс же там применяется несколько в другом роде). Другая и
логика внутренней архитектуры приложений (например, все классы обмениваются
информацией через посылку сообщений). Но при наличии желания и усилий к этому
всему быстро привыкаешь.

 

Что нравится в языке, в особенностях программинга для ифона?

Нравится новый опыт. Люблю копаться в чем-то новом. Язык новый нравится,
Objective-C «заставляет» мыслить более объектно. Простые iPhone-приложения на
пару экранов делаются довольно просто, да еще и обладают всеми графическими
красивостями, свойственными телефону Apple. Красиво и удобно. Наверное, только
общаясь с творениями Apple, понимаешь, насколько непродуман интерфейс у
Microsoft и начинаешь сам создавать более грамотные интерфейсы, стараться
улучшать юзабилити своих программ.

Ты пробовал неофициальный SDK? Где программить удобнее, в официальном или в
неофициальном?

Неофициальный SDK – хлам, с помощью которого кое-как можно работать. C их
помощью нельзя писать полноценные легальные приложения под iPhone. Самому, к
счастью, с этим столкнуться не пришлось. Я работаю с Apple iPhone SDK.



Полную версию статьи
читай в декабрьском номере
Хакера! На компакт-диске лежат полные исходные коды, файл проекта и скриншоты. Для их
компиляции тебе понадобится SDK и студия разработки Xcode.

Оставить мнение

Check Also

Цифровой паноптикон. Настоящее и будущее тотальной слежки за пользователями

Даже если ты тщательно заботишься о защите своих данных, это не даст тебе желаемой приватн…